From 81dd094aacce9df1723737d4e1debce372049ebf Mon Sep 17 00:00:00 2001
From: srosse <stephane.rosse@frentix.com>
Date: Mon, 4 Mar 2019 18:27:44 +0100
Subject: [PATCH] OO-3920: save in memory the current workiong size of tiny

---
 .../richText/RichTextElementComponent.java       | 15 +++++++++++----
 .../elements/richText/RichTextElementImpl.java   | 16 ++++++++++++++++
 .../richText/RichTextElementRenderer.java        | 15 +++++++++++++--
 3 files changed, 40 insertions(+), 6 deletions(-)

diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementComponent.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementComponent.java
index e76a7fcb60e..f99713e078f 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementComponent.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementComponent.java
@@ -57,7 +57,9 @@ class RichTextElementComponent extends FormBaseComponentImpl {
 	private static final ComponentRenderer RENDERER = new RichTextElementRenderer();
 
 	private final RichTextElementImpl element;
-	private int cols, rows;
+	private int cols;
+	private int rows;
+	private Integer currentHeight;
 	private TextMode currentTextMode;
 
 	/**
@@ -82,9 +84,6 @@ class RichTextElementComponent extends FormBaseComponentImpl {
 		return element;
 	}
 
-	/**
-	 * @see org.olat.core.gui.components.Component#getHTMLRendererSingleton()
-	 */
 	@Override
 	public ComponentRenderer getHTMLRendererSingleton() {
 		return RENDERER;
@@ -105,6 +104,14 @@ class RichTextElementComponent extends FormBaseComponentImpl {
 	public void setRows(int rows) {
 		this.rows = rows;
 	}
+	
+	protected Integer getCurrentHeight() {
+		return currentHeight;
+	}
+
+	protected void setCurrentHeight(Integer currentHeight) {
+		this.currentHeight = currentHeight;
+	}
 
 	protected TextMode getCurrentTextMode() {
 		return currentTextMode;
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementImpl.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementImpl.java
index 8e7640d3ec0..efe2b38947a 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementImpl.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementImpl.java
@@ -195,6 +195,9 @@ public class RichTextElementImpl extends AbstractTextElement implements
 		String paramId = component.getFormDispatchId();
 		String cmd = getRootForm().getRequestParameter("cmd");
 		String submitValue = getRootForm().getRequestParameter(paramId);
+		String sizeParamId = "rtinye_".concat(paramId);
+		String size = getRootForm().getRequestParameter(sizeParamId);
+		
 		if(StringHelper.containsNonWhitespace(submitValue)) {
 			if(renderingMode == TextMode.oneLine) {
 				submitValue = TextMode.fromOneLine(submitValue); 
@@ -203,6 +206,10 @@ public class RichTextElementImpl extends AbstractTextElement implements
 			}
 		}
 		
+		if(StringHelper.containsNonWhitespace(size)) {
+			setCurrentHeight(size);
+		}
+		
 		String dispatchUri = getRootForm().getRequestParameter("dispatchuri");
 		if("saveinlinedtiny".equals(cmd)) {
 			if(submitValue != null) {
@@ -256,6 +263,15 @@ public class RichTextElementImpl extends AbstractTextElement implements
 			configuration = null;
 		}
 	}
+	
+	private void setCurrentHeight(String size) {
+		try {
+			int height = Double.valueOf(size).intValue();
+			component.setCurrentHeight(height);
+		} catch (NumberFormatException e) {
+			//can happen, don't make a drama of it
+		}
+	}
 
 	@Override
 	public void setNewOriginalValue(String value) {
diff --git a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementRenderer.java b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementRenderer.java
index 763279dade4..9e4c59258ca 100644
--- a/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementRenderer.java
+++ b/src/main/java/org/olat/core/gui/components/form/flexible/impl/elements/richText/RichTextElementRenderer.java
@@ -213,6 +213,9 @@ class RichTextElementRenderer extends DefaultComponentRenderer {
 			configurations.append("maxSize:").append(te.getMaxLength()).append("\n");
 		}
 		
+		Integer currentHeight = teC.getCurrentHeight();
+		
+		sb.append("<input type='hidden' id='rtinye_").append(teC.getFormDispatchId()).append("' name='rtinye_").append(teC.getFormDispatchId()).append("' value='' />");
 		sb.append("<script type='text/javascript'>/* <![CDATA[ */\n");
 		//file browser url
 		sb.append("  BTinyHelper.editorMediaUris.put('").append(domID).append("','");
@@ -220,13 +223,21 @@ class RichTextElementRenderer extends DefaultComponentRenderer {
 		sb.append("');\n");
 		sb.append(" setTimeout(function() { jQuery('#").append(domID).append("').tinymce({\n")//delay for firefox + tinymce 4.5 + jQuery 3.3.1
 		  .append("    selector: '#").append(domID).append("',\n")
-		  .append("    script_url: '").append(baseUrl.toString()).append("',\n")
-		  .append("    setup: function(ed){\n")
+		  .append("    script_url: '").append(baseUrl.toString()).append("',\n");
+		if(currentHeight != null && currentHeight.intValue() > 20) {
+			sb.append("    height: ").append(currentHeight).append(",\n");
+		}
+		sb.append("    setup: function(ed){\n")
 		  .append("      ed.on('init', function(e) {\n")
 		  .append("        ").append(onInit.get(0).replace(".curry(", "(")).append(";\n")
 		  .append("      });\n")
 		  .append("      ed.on('change', function(e) {\n")
 		  .append("        BTinyHelper.triggerOnChange('").append(domID).append("');\n")
+		  .append("      });\n")
+		  .append("      ed.on('ResizeEditor', function(e) {\n")
+		  .append("        try {\n")
+		  .append("          jQuery('#rtinye_").append(teC.getFormDispatchId()).append("').val(ed.contentAreaContainer.clientHeight);\n")
+		  .append("        } catch(e) { }\n")
 		  .append("      });\n");
 		if(config.isSendOnBlur()) {
 			sb.append("      ed.on('blur', function(e) {\n")
-- 
GitLab