From 7b6c7ce5ebacd035c66320ab9a04471e37cbb3cc Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Thu, 4 Jun 2015 19:53:10 +0200 Subject: [PATCH] no-jira: working version with MathAssess --- .../fullWebApp/_content/fullwebapplayout.html | 2 + .../ims/qti21/manager/QTI21ServiceImpl.java | 1 - .../ims/qti21/restapi/MathWebService.java | 38 +++++++++++++++++++ .../AbstractAssessmentComponent.java | 3 ++ .../AssessmentItemComponentRenderer.java | 12 ++++++ .../AssessmentTestComponentRenderer.java | 12 ++++++ .../ui/rendering/AssessmentRenderer.java | 1 + .../olat/restapi/_spring/restApiContext.xml | 1 + .../interactions/mathEntryInteraction.xsl | 3 ++ .../resources/rendering-xslt/qti-common.xsl | 1 + .../resources/rendering-xslt/test-item.xsl | 2 +- 11 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 src/main/java/org/olat/ims/qti21/restapi/MathWebService.java diff --git a/src/main/java/org/olat/core/commons/fullWebApp/_content/fullwebapplayout.html b/src/main/java/org/olat/core/commons/fullWebApp/_content/fullwebapplayout.html index 3abf9afe4e0..97a8b114770 100644 --- a/src/main/java/org/olat/core/commons/fullWebApp/_content/fullwebapplayout.html +++ b/src/main/java/org/olat/core/commons/fullWebApp/_content/fullwebapplayout.html @@ -49,6 +49,8 @@ function o_start(){ } /* ]]> */ </script> +## <script src='http://localhost/cdnjax/MathJax.js?config=MML_HTMLorMML'></script> +<script src='//cdn.mathjax.org/mathjax/2.1-latest/MathJax.js?config=MML_HTMLorMML'></script> <script type="text/javascript" src='$r.staticLink("js/jsMath/easy/load.js")'></script> ## jQuery libraries <!--[if lt IE 9]> diff --git a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java index 49a2c08a89b..e79ec405ebd 100644 --- a/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java +++ b/src/main/java/org/olat/ims/qti21/manager/QTI21ServiceImpl.java @@ -314,7 +314,6 @@ public class QTI21ServiceImpl implements QTI21Service { Document stateDocument = TestSessionStateXmlMarshaller.marshal(testSessionState); File sessionFile = getTestSessionStateFile(candidateEvent); storeStateDocument(stateDocument, sessionFile); - System.out.println("Store state: " + sessionFile); } private File getTestSessionStateFile(CandidateEvent candidateEvent) { diff --git a/src/main/java/org/olat/ims/qti21/restapi/MathWebService.java b/src/main/java/org/olat/ims/qti21/restapi/MathWebService.java new file mode 100644 index 00000000000..667ec820393 --- /dev/null +++ b/src/main/java/org/olat/ims/qti21/restapi/MathWebService.java @@ -0,0 +1,38 @@ +package org.olat.ims.qti21.restapi; + +import java.util.Date; +import java.util.Map; + +import javax.ws.rs.FormParam; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.CacheControl; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; + +import uk.ac.ed.ph.jqtiplus.xmlutils.xslt.SimpleXsltStylesheetCache; +import uk.ac.ed.ph.jqtiplus.xmlutils.xslt.XsltStylesheetCache; +import uk.ac.ed.ph.qtiworks.mathassess.XsltStylesheetCacheAdapter; +import uk.ac.ed.ph.qtiworks.mathassess.glue.AsciiMathHelper; + +@Path("math") +public class MathWebService { + + private static final CacheControl cc = new CacheControl(); + static { + cc.setMaxAge(-1); + } + + @POST + @Path("verifyAsciiMath") + @Produces({MediaType.APPLICATION_JSON}) + public Response verifyAsciiMath(@FormParam("input") String asciiMathInput) { + + XsltStylesheetCache stylesheetCache = new SimpleXsltStylesheetCache(); + AsciiMathHelper asciiMathHelper = new AsciiMathHelper(new XsltStylesheetCacheAdapter(stylesheetCache)); + Map<String, String> upConvertedAsciiMathInput = asciiMathHelper.upConvertAsciiMathInput(asciiMathInput); + return Response.ok(upConvertedAsciiMathInput).lastModified(new Date()).cacheControl(cc).build(); + } + +} diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AbstractAssessmentComponent.java b/src/main/java/org/olat/ims/qti21/ui/components/AbstractAssessmentComponent.java index d0ea7c293be..0c61fbc53ef 100644 --- a/src/main/java/org/olat/ims/qti21/ui/components/AbstractAssessmentComponent.java +++ b/src/main/java/org/olat/ims/qti21/ui/components/AbstractAssessmentComponent.java @@ -80,6 +80,9 @@ public abstract class AbstractAssessmentComponent extends AbstractComponent { JSAndCSSAdder jsa = vr.getJsAndCSSAdder(); jsa.addRequiredStaticJsFile("assessment/rendering/javascript/QtiWorksRendering.js"); + jsa.addRequiredStaticJsFile("assessment/rendering/javascript/AsciiMathInputController.js"); + jsa.addRequiredStaticJsFile("assessment/rendering/javascript/UpConversionAjaxController.js"); + jsa.addRequiredStaticJsFile("js/jquery/maphilight/jquery.maphilight.js"); jsa.addRequiredStaticJsFile("js/jquery/ui/jquery-ui-1.11.4.custom.dnd.min.js"); } diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java index 7aa2c08635c..1b18d4cb7fe 100644 --- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java +++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentItemComponentRenderer.java @@ -35,6 +35,7 @@ import org.olat.core.gui.render.StringOutput; import org.olat.core.gui.render.URLBuilder; import org.olat.core.gui.translator.Translator; import org.olat.core.logging.OLATRuntimeException; +import org.olat.core.util.WebappHelper; import org.olat.ims.qti21.UserTestSession; import org.olat.ims.qti21.model.CandidateItemEventType; import org.olat.ims.qti21.model.jpa.CandidateEvent; @@ -71,6 +72,17 @@ public class AssessmentItemComponentRenderer extends DefaultComponentRenderer { ItemSessionController itemSessionController = cmp.getItemSessionController(); AssessmentItemFormItem item = cmp.getQtiItem(); + String restapi = WebappHelper.getServletContextPath() + "/restapi/math/verifyAsciiMath"; + + sb.append("<script>/n") + .append("jQuery(function() {\n") + .append(" console.log('Load','").append(restapi).append("');") + .append(" UpConversionAjaxController.setUpConversionServiceUrl('/").append(restapi).append("');\n") + .append(" UpConversionAjaxController.setDelay(300);\n") + .append("});") + .append("</script>/n"); + + //if(itemSessionController.getItemSessionState().isEnded()) { // sb.append("<h1>The End <small>say the renderer</small></h1>"); //} else { diff --git a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java index 0ede59aa9c4..032c5eef872 100644 --- a/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java +++ b/src/main/java/org/olat/ims/qti21/ui/components/AssessmentTestComponentRenderer.java @@ -34,7 +34,9 @@ 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.translator.Translator; +import org.olat.core.helpers.Settings; import org.olat.core.logging.OLATRuntimeException; +import org.olat.core.util.WebappHelper; import org.olat.ims.qti21.UserTestSession; import org.olat.ims.qti21.model.CandidateTestEventType; import org.olat.ims.qti21.model.jpa.CandidateEvent; @@ -73,6 +75,16 @@ public class AssessmentTestComponentRenderer extends DefaultComponentRenderer { TestSessionController testSessionController = cmp.getTestSessionController(); AssessmentTestFormItem item = cmp.getQtiItem(); + /* + String restapi = "/olat/restapi/math/verifyAsciiMath"; + sb.append("<script>/n") + //.append("jQuery(function() {\n") + .append(" UpConversionAjaxController.setUpConversionServiceUrl('").append(restapi).append("');\n") + .append(" UpConversionAjaxController.setDelay(300);\n") + //.append("});") + .append("</script>/n"); + */ + if(testSessionController.getTestSessionState().isEnded()) { sb.append("<h1>The End <small>say the renderer</small></h1>"); } else { diff --git a/src/main/java/org/olat/ims/qti21/ui/rendering/AssessmentRenderer.java b/src/main/java/org/olat/ims/qti21/ui/rendering/AssessmentRenderer.java index 971dad59d3b..178d22d8ff0 100644 --- a/src/main/java/org/olat/ims/qti21/ui/rendering/AssessmentRenderer.java +++ b/src/main/java/org/olat/ims/qti21/ui/rendering/AssessmentRenderer.java @@ -470,6 +470,7 @@ public class AssessmentRenderer { xsltParameters.put("qtiWorksVersion", "1.0-SNAPSH0T-OO"); xsltParameters.put("webappContextPath", ""); xsltParameters.put("fullWebappContextPath", Settings.createServerURI()); + xsltParameters.put("olatWebappContextPath", Settings.getServerContextPathURI()); StringOutput target = new StringOutput(); StaticMediaDispatcher.renderStaticURI(target, "", true); xsltParameters.put("staticContextPath", target.toString()); diff --git a/src/main/java/org/olat/restapi/_spring/restApiContext.xml b/src/main/java/org/olat/restapi/_spring/restApiContext.xml index fa592e8c355..8682e7d9118 100644 --- a/src/main/java/org/olat/restapi/_spring/restApiContext.xml +++ b/src/main/java/org/olat/restapi/_spring/restApiContext.xml @@ -46,6 +46,7 @@ <value>org.olat.course.nodes.bc.BCWebService</value> <value>org.olat.course.assessment.restapi.EfficiencyStatementWebService</value> <value>org.olat.course.certificate.restapi.CertificationWebService</value> + <value>org.olat.ims.qti21.restapi.MathWebService</value> <value>org.olat.modules.wiki.restapi.WikisWebService</value> <value>org.olat.modules.fo.restapi.ForumImportWebService</value> <value>org.olat.modules.fo.restapi.ForumCourseNodeWebService</value> diff --git a/src/main/resources/rendering-xslt/interactions/mathEntryInteraction.xsl b/src/main/resources/rendering-xslt/interactions/mathEntryInteraction.xsl index 7a0cba93eae..42d95c864c0 100644 --- a/src/main/resources/rendering-xslt/interactions/mathEntryInteraction.xsl +++ b/src/main/resources/rendering-xslt/interactions/mathEntryInteraction.xsl @@ -38,6 +38,9 @@ </div> </div> <script type="text/javascript"> + UpConversionAjaxController.setUpConversionServiceUrl('<xsl:value-of select="$olatWebappContextPath"/>/restapi/math/verifyAsciiMath'); + UpConversionAjaxController.setDelay(300); + QtiWorksRendering.registerReadyCallback(function() { var inputControlId = 'qtiworks_id_mathEntryInput_<xsl:value-of select="@responseIdentifier"/>'; var messageContainerId = 'qtiworks_id_mathEntryMessages_<xsl:value-of select="@responseIdentifier"/>'; diff --git a/src/main/resources/rendering-xslt/qti-common.xsl b/src/main/resources/rendering-xslt/qti-common.xsl index 852cb11956d..499df081fb7 100644 --- a/src/main/resources/rendering-xslt/qti-common.xsl +++ b/src/main/resources/rendering-xslt/qti-common.xsl @@ -22,6 +22,7 @@ rendering. <xsl:param name="webappContextPath" as="xs:string" required="yes"/> <xsl:param name="staticContextPath" as="xs:string" required="yes"/> <xsl:param name="fullWebappContextPath" as="xs:string" required="yes"/> + <xsl:param name="olatWebappContextPath" as="xs:string" required="yes"/> <!-- QTIWorks version number --> <xsl:param name="qtiWorksVersion" as="xs:string" required="yes"/> diff --git a/src/main/resources/rendering-xslt/test-item.xsl b/src/main/resources/rendering-xslt/test-item.xsl index 2b4d12a71e7..f49df12d29f 100644 --- a/src/main/resources/rendering-xslt/test-item.xsl +++ b/src/main/resources/rendering-xslt/test-item.xsl @@ -96,7 +96,7 @@ NB: This is used both while being presented, and during review. <script src="{$webappContextPath}/rendering/javascript/UpConversionAjaxController.js?v={$qtiWorksVersion}"/> <script src="{$webappContextPath}/rendering/javascript/AsciiMathInputController.js?v={$qtiWorksVersion}"/> <script> - UpConversionAjaxController.setUpConversionServiceUrl('<xsl:value-of select="$webappContextPath"/>/candidate/verifyAsciiMath'); + UpConversionAjaxController.setUpConversionServiceUrl('<xsl:value-of select="$webappContextPath"/>restapi/math/verifyAsciiMath'); UpConversionAjaxController.setDelay(300); </script> </xsl:if> -- GitLab