From 49be9303023c01693ba32d1c98f47d4101fe1ece Mon Sep 17 00:00:00 2001
From: srosse <none@none>
Date: Tue, 27 Jun 2017 13:58:52 +0200
Subject: [PATCH] OO-2842: add MathJax to the offline results reports

---
 .../velocity/VelocityRenderDecorator.java     | 10 +++++
 .../resultexport/_content/qti21results.html   | 11 -----
 .../QTI21ResultsExportMediaResource.java      |  6 ++-
 .../resultexport/_content/qti21results.html   | 40 +++++++++++++++++++
 4 files changed, 54 insertions(+), 13 deletions(-)
 delete mode 100644 src/main/java/org/olat/ims/qti/resultexport/_content/qti21results.html

diff --git a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
index b4310e42c3a..4040d196834 100644
--- a/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
+++ b/src/main/java/org/olat/core/gui/render/velocity/VelocityRenderDecorator.java
@@ -344,6 +344,16 @@ public class VelocityRenderDecorator implements Closeable {
 		return sb;
 	}
 	
+	public StringOutput mathJaxCdnFullUrl() {
+		StringOutput sb = new StringOutput(100);
+		if(WebappHelper.getMathJaxCdn().startsWith("http")) {
+			sb.append(WebappHelper.getMathJaxCdn());
+		} else {
+			sb.append("https:").append(WebappHelper.getMathJaxCdn());
+		}
+		return sb;
+	}
+	
 	public StringOutput contextPath() {
 		StringOutput sb = new StringOutput(100);
 		sb.append(Settings.getServerContextPath());
diff --git a/src/main/java/org/olat/ims/qti/resultexport/_content/qti21results.html b/src/main/java/org/olat/ims/qti/resultexport/_content/qti21results.html
deleted file mode 100644
index f5e4a281298..00000000000
--- a/src/main/java/org/olat/ims/qti/resultexport/_content/qti21results.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<!DOCTYPE HTML>
-<html>
-<head>
-	<title>$rootTitle</title>	
-	<link rel='stylesheet' href='../../../css/offline/qti/theme.css' />
-	<meta http-equiv="Content-type" content="text/html; charset=utf-8">
-</head>
-<body class="o_page_margins">
-	<div id="o_main">$r.render("results")</div>
-</body>
-</html>
\ No newline at end of file
diff --git a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
index 2f4f9574546..f8de7f6bcea 100644
--- a/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
+++ b/src/main/java/org/olat/ims/qti21/resultexport/QTI21ResultsExportMediaResource.java
@@ -53,6 +53,7 @@ import org.olat.core.gui.render.Renderer;
 import org.olat.core.gui.render.StringOutput;
 import org.olat.core.gui.render.URLBuilder;
 import org.olat.core.gui.render.velocity.VelocityHelper;
+import org.olat.core.gui.render.velocity.VelocityRenderDecorator;
 import org.olat.core.gui.translator.Translator;
 import org.olat.core.gui.util.WindowControlMocker;
 import org.olat.core.id.Identity;
@@ -306,9 +307,10 @@ public class QTI21ResultsExportMediaResource implements MediaResource {
 		mainVC.contextPut("rootTitle", translator.translate("table.grading"));
 		mainVC.put("results", results);
 		
-		
 		//render VelocityContainer to StringOutPut
-		Renderer renderer = Renderer.getInstance(mainVC, translator, ubu, new RenderResult(), new EmptyGlobalSettings()); 
+		Renderer renderer = Renderer.getInstance(mainVC, translator, ubu, new RenderResult(), new EmptyGlobalSettings());
+		VelocityRenderDecorator vrdec = new VelocityRenderDecorator(renderer, mainVC, sb);
+		mainVC.contextPut("r", vrdec);
 		renderer.render(sb, mainVC, null);
 		return sb.toString();
 	}
diff --git a/src/main/java/org/olat/ims/qti21/resultexport/_content/qti21results.html b/src/main/java/org/olat/ims/qti21/resultexport/_content/qti21results.html
index 90fa8303e96..072e0bfd56f 100644
--- a/src/main/java/org/olat/ims/qti21/resultexport/_content/qti21results.html
+++ b/src/main/java/org/olat/ims/qti21/resultexport/_content/qti21results.html
@@ -1,3 +1,4 @@
+
 <!DOCTYPE HTML>
 <html>
 <head>
@@ -23,6 +24,45 @@
 function setFlexiFormDirtyByListener(e){
 	//
 }
+function o_mathjax() {
+	jQuery.ajax("${r.mathJaxCdnFullUrl()}MathJax.js?config=TeX-AMS-MML_HTMLorMML", {
+		cache: true,
+		dataType: "script",
+		success: function() {
+	    	MathJax.Hub.Config({
+				extensions: ["jsMath2jax.js"],
+				messageStyle: 'none',
+				showProcessingMessages: false,
+				showMathMenu: false,
+				menuSettings: { },
+				jsMath2jax: {
+					preview: "none"
+				},
+				tex2jax: {
+					ignoreClass: "math"
+				},
+				"HTML-CSS": {
+				    EqnChunk: 5, EqnChunkFactor: 1, EqnChunkDelay: 100
+				},
+				"fast-preview": {
+					disabled: true
+				}
+			});
+		}
+	});
+}
+var BFormatter = {
+	// format on load
+	formatLatexFormulas : function(domId) {}
+};
+jQuery(function() {
+	if ((window.unsafeWindow == null ? window : unsafeWindow).MathJax == null) {
+		var count = jQuery('div.math,span.math,math,div.mathEntryInteraction').length;
+		if (count > 0) {
+		    o_mathjax();
+		}
+	}
+});
 /* ]]> */
 	</script>
 </head>
-- 
GitLab