From e6ea84fbd86d5a2e88c7fad7640c3d7c0b11967e Mon Sep 17 00:00:00 2001 From: srosse <none@none> Date: Mon, 1 Jun 2015 21:55:41 +0200 Subject: [PATCH] no-jira: select point interaction without applet --- .../interactions/selectPointInteraction.xsl | 90 ++++++++++++++++++- 1 file changed, 89 insertions(+), 1 deletion(-) diff --git a/src/main/resources/rendering-xslt/interactions/selectPointInteraction.xsl b/src/main/resources/rendering-xslt/interactions/selectPointInteraction.xsl index 76e8d935bce..52edc1a8b08 100644 --- a/src/main/resources/rendering-xslt/interactions/selectPointInteraction.xsl +++ b/src/main/resources/rendering-xslt/interactions/selectPointInteraction.xsl @@ -22,7 +22,94 @@ <xsl:variable name="object" select="qti:object" as="element(qti:object)"/> <xsl:variable name="appletContainerId" select="concat('qtiworks_id_appletContainer_', @responseIdentifier)" as="xs:string"/> - <div id="{$appletContainerId}" class="appletContainer"> + <xsl:variable name="responseValue" select="qw:get-response-value(/, @responseIdentifier)" as="element(qw:responseVariable)?"/> + <div id="{$appletContainerId}" class="appletContainer" data-openolat=""> + <canvas id="{$appletContainerId}_canvas" width="{$object/@width}" height="{$object/@height}" style="background-image:url('{qw:convert-link($object/@data)}');"></canvas> + + <script type="text/javascript"> + <xsl:choose> + <xsl:when test="qw:is-not-null-value($responseValue)"> + jQuery(function() { + var r = 8; + var points = '<xsl:value-of select="$responseValue/qw:value" separator=":"/>'.split(':'); + var canvas = document.getElementById('<xsl:value-of select="$appletContainerId"/>_canvas'); + var c = canvas.getContext('2d'); + c.clearRect(0, 0, jQuery(canvas).width(), jQuery(canvas).height()); + for(i=points.length; i-->0; ) { + var p = points[i].split(' '); + c.beginPath(); + c.arc(p[0], p[1], r, 0, Math.PI * 2, false); + c.stroke(); + c.closePath(); + } + }); + </xsl:when> + <xsl:otherwise> + + jQuery(function() { + jQuery('#<xsl:value-of select="$appletContainerId"/>_canvas').on("click", function(e, t) { + var r = 8; + var maxChoices = <xsl:value-of select="@maxChoices"/>; + + var offset_t = jQuery(this).offset().top - jQuery(window).scrollTop(); + var offset_l = jQuery(this).offset().left - jQuery(window).scrollLeft(); + + var cx = Math.round( (e.clientX - offset_l) ); + var cy = Math.round( (e.clientY - offset_t) ); + + var data = jQuery("#<xsl:value-of select="$appletContainerId"/>").data("openolat") || {}; + if(data.listOfPoints == undefined) { + data.listOfPoints = []; + jQuery("#<xsl:value-of select="$appletContainerId"/>").data('openolat', data); + } + + var remove = false; + var newListOfPoints = []; + for(i=data.listOfPoints.length; i-->0;) { + var p = data.listOfPoints[i]; + var rc = ((p.x - cx)*(p.x - cx)) + ((p.y - cy)*(p.y - cy)); + if(Math.pow(r,2) > rc) { + remove = true; + } else { + newListOfPoints.push(p); + } + } + + if(remove) { + data.listOfPoints = newListOfPoints; + } else if(data.listOfPoints.length >= maxChoices) { + return false; + } else { + data.listOfPoints.push({'x': cx, 'y': cy}); + } + + var canvas = document.getElementById('<xsl:value-of select="$appletContainerId"/>_canvas'); + var c = canvas.getContext('2d'); + c.clearRect(0, 0, jQuery(canvas).width(), jQuery(canvas).height()); + + var divContainer = jQuery('#<xsl:value-of select="$appletContainerId"/>'); + divContainer.find("input[type='hidden']").remove(); + + for(i=data.listOfPoints.length; i-->0;) { + var p = data.listOfPoints[i]; + c.beginPath(); + c.arc(p.x, p.y, r, 0, Math.PI * 2, false); + c.stroke(); + c.closePath(); + + var inputElement = jQuery('<input type="hidden"/>') + .attr('name', 'qtiworks_response_<xsl:value-of select="@responseIdentifier"/>') + .attr('value', p.x + " " + p.y); + divContainer.append(inputElement); + } + }); + }); + + </xsl:otherwise> + </xsl:choose> + </script> + + <!-- <object type="application/x-java-applet" height="{$object/@height + 40}" width="{$object/@width}"> <param name="code" value="rhotspotV2"/> <param name="codebase" value="{$appletCodebase}"/> @@ -57,6 +144,7 @@ select="$appletContainerId"/>', ['<xsl:value-of select="@responseIdentifier"/>']); }); </script> + --> </div> </div> </xsl:template> -- GitLab