{"version":3,"file":"276.js","mappings":"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","sources":["webpack://WebComponents/./runestone/parsons/js/hammer.min.js","webpack://WebComponents/./runestone/parsons/js/parsons-i18n.en.js","webpack://WebComponents/./runestone/parsons/js/parsons-i18n.pt-br.js","webpack://WebComponents/./runestone/parsons/js/prettify.js","webpack://WebComponents/./runestone/parsons/js/lineGrader.js","webpack://WebComponents/./runestone/parsons/js/dagHelpers.js","webpack://WebComponents/./runestone/parsons/js/dagGrader.js","webpack://WebComponents/./runestone/parsons/js/parsonsLine.js","webpack://WebComponents/./runestone/parsons/js/parsonsBlock.js","webpack://WebComponents/./runestone/parsons/js/parsons.js","webpack://WebComponents/./runestone/parsons/js/timedparsons.js"],"sourcesContent":["/*! Hammer.JS - v2.0.8 - 2016-04-23\n * http://hammerjs.github.io/\n *\n * Copyright (c) 2016 Jorik Tangelder;\n * Licensed under the MIT license */\n!function(a,b,c,d){\"use strict\";function e(a,b,c){return setTimeout(j(a,c),b)}function f(a,b,c){return Array.isArray(a)?(g(a,c[b],c),!0):!1}function g(a,b,c){var e;if(a)if(a.forEach)a.forEach(b,c);else if(a.length!==d)for(e=0;e<a.length;)b.call(c,a[e],e,a),e++;else for(e in a)a.hasOwnProperty(e)&&b.call(c,a[e],e,a)}function h(b,c,d){var e=\"DEPRECATED METHOD: \"+c+\"\\n\"+d+\" AT \\n\";return function(){var c=new Error(\"get-stack-trace\"),d=c&&c.stack?c.stack.replace(/^[^\\(]+?[\\n$]/gm,\"\").replace(/^\\s+at\\s+/gm,\"\").replace(/^Object.<anonymous>\\s*\\(/gm,\"{anonymous}()@\"):\"Unknown Stack Trace\",f=a.console&&(a.console.warn||a.console.log);return f&&f.call(a.console,e,d),b.apply(this,arguments)}}function i(a,b,c){var d,e=b.prototype;d=a.prototype=Object.create(e),d.constructor=a,d._super=e,c&&la(d,c)}function j(a,b){return function(){return a.apply(b,arguments)}}function k(a,b){return typeof a==oa?a.apply(b?b[0]||d:d,b):a}function l(a,b){return a===d?b:a}function m(a,b,c){g(q(b),function(b){a.addEventListener(b,c,!1)})}function n(a,b,c){g(q(b),function(b){a.removeEventListener(b,c,!1)})}function o(a,b){for(;a;){if(a==b)return!0;a=a.parentNode}return!1}function p(a,b){return a.indexOf(b)>-1}function q(a){return a.trim().split(/\\s+/g)}function r(a,b,c){if(a.indexOf&&!c)return a.indexOf(b);for(var d=0;d<a.length;){if(c&&a[d][c]==b||!c&&a[d]===b)return d;d++}return-1}function s(a){return Array.prototype.slice.call(a,0)}function t(a,b,c){for(var d=[],e=[],f=0;f<a.length;){var g=b?a[f][b]:a[f];r(e,g)<0&&d.push(a[f]),e[f]=g,f++}return c&&(d=b?d.sort(function(a,c){return a[b]>c[b]}):d.sort()),d}function u(a,b){for(var c,e,f=b[0].toUpperCase()+b.slice(1),g=0;g<ma.length;){if(c=ma[g],e=c?c+f:b,e in a)return e;g++}return d}function v(){return ua++}function w(b){var c=b.ownerDocument||b;return c.defaultView||c.parentWindow||a}function x(a,b){var c=this;this.manager=a,this.callback=b,this.element=a.element,this.target=a.options.inputTarget,this.domHandler=function(b){k(a.options.enable,[a])&&c.handler(b)},this.init()}function y(a){var b,c=a.options.inputClass;return new(b=c?c:xa?M:ya?P:wa?R:L)(a,z)}function z(a,b,c){var d=c.pointers.length,e=c.changedPointers.length,f=b&Ea&&d-e===0,g=b&(Ga|Ha)&&d-e===0;c.isFirst=!!f,c.isFinal=!!g,f&&(a.session={}),c.eventType=b,A(a,c),a.emit(\"hammer.input\",c),a.recognize(c),a.session.prevInput=c}function A(a,b){var c=a.session,d=b.pointers,e=d.length;c.firstInput||(c.firstInput=D(b)),e>1&&!c.firstMultiple?c.firstMultiple=D(b):1===e&&(c.firstMultiple=!1);var f=c.firstInput,g=c.firstMultiple,h=g?g.center:f.center,i=b.center=E(d);b.timeStamp=ra(),b.deltaTime=b.timeStamp-f.timeStamp,b.angle=I(h,i),b.distance=H(h,i),B(c,b),b.offsetDirection=G(b.deltaX,b.deltaY);var j=F(b.deltaTime,b.deltaX,b.deltaY);b.overallVelocityX=j.x,b.overallVelocityY=j.y,b.overallVelocity=qa(j.x)>qa(j.y)?j.x:j.y,b.scale=g?K(g.pointers,d):1,b.rotation=g?J(g.pointers,d):0,b.maxPointers=c.prevInput?b.pointers.length>c.prevInput.maxPointers?b.pointers.length:c.prevInput.maxPointers:b.pointers.length,C(c,b);var k=a.element;o(b.srcEvent.target,k)&&(k=b.srcEvent.target),b.target=k}function B(a,b){var c=b.center,d=a.offsetDelta||{},e=a.prevDelta||{},f=a.prevInput||{};b.eventType!==Ea&&f.eventType!==Ga||(e=a.prevDelta={x:f.deltaX||0,y:f.deltaY||0},d=a.offsetDelta={x:c.x,y:c.y}),b.deltaX=e.x+(c.x-d.x),b.deltaY=e.y+(c.y-d.y)}function C(a,b){var c,e,f,g,h=a.lastInterval||b,i=b.timeStamp-h.timeStamp;if(b.eventType!=Ha&&(i>Da||h.velocity===d)){var j=b.deltaX-h.deltaX,k=b.deltaY-h.deltaY,l=F(i,j,k);e=l.x,f=l.y,c=qa(l.x)>qa(l.y)?l.x:l.y,g=G(j,k),a.lastInterval=b}else c=h.velocity,e=h.velocityX,f=h.velocityY,g=h.direction;b.velocity=c,b.velocityX=e,b.velocityY=f,b.direction=g}function D(a){for(var b=[],c=0;c<a.pointers.length;)b[c]={clientX:pa(a.pointers[c].clientX),clientY:pa(a.pointers[c].clientY)},c++;return{timeStamp:ra(),pointers:b,center:E(b),deltaX:a.deltaX,deltaY:a.deltaY}}function E(a){var b=a.length;if(1===b)return{x:pa(a[0].clientX),y:pa(a[0].clientY)};for(var c=0,d=0,e=0;b>e;)c+=a[e].clientX,d+=a[e].clientY,e++;return{x:pa(c/b),y:pa(d/b)}}function F(a,b,c){return{x:b/a||0,y:c/a||0}}function G(a,b){return a===b?Ia:qa(a)>=qa(b)?0>a?Ja:Ka:0>b?La:Ma}function H(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return Math.sqrt(d*d+e*e)}function I(a,b,c){c||(c=Qa);var d=b[c[0]]-a[c[0]],e=b[c[1]]-a[c[1]];return 180*Math.atan2(e,d)/Math.PI}function J(a,b){return I(b[1],b[0],Ra)+I(a[1],a[0],Ra)}function K(a,b){return H(b[0],b[1],Ra)/H(a[0],a[1],Ra)}function L(){this.evEl=Ta,this.evWin=Ua,this.pressed=!1,x.apply(this,arguments)}function M(){this.evEl=Xa,this.evWin=Ya,x.apply(this,arguments),this.store=this.manager.session.pointerEvents=[]}function N(){this.evTarget=$a,this.evWin=_a,this.started=!1,x.apply(this,arguments)}function O(a,b){var c=s(a.touches),d=s(a.changedTouches);return b&(Ga|Ha)&&(c=t(c.concat(d),\"identifier\",!0)),[c,d]}function P(){this.evTarget=bb,this.targetIds={},x.apply(this,arguments)}function Q(a,b){var c=s(a.touches),d=this.targetIds;if(b&(Ea|Fa)&&1===c.length)return d[c[0].identifier]=!0,[c,c];var e,f,g=s(a.changedTouches),h=[],i=this.target;if(f=c.filter(function(a){return o(a.target,i)}),b===Ea)for(e=0;e<f.length;)d[f[e].identifier]=!0,e++;for(e=0;e<g.length;)d[g[e].identifier]&&h.push(g[e]),b&(Ga|Ha)&&delete d[g[e].identifier],e++;return h.length?[t(f.concat(h),\"identifier\",!0),h]:void 0}function R(){x.apply(this,arguments);var a=j(this.handler,this);this.touch=new P(this.manager,a),this.mouse=new L(this.manager,a),this.primaryTouch=null,this.lastTouches=[]}function S(a,b){a&Ea?(this.primaryTouch=b.changedPointers[0].identifier,T.call(this,b)):a&(Ga|Ha)&&T.call(this,b)}function T(a){var b=a.changedPointers[0];if(b.identifier===this.primaryTouch){var c={x:b.clientX,y:b.clientY};this.lastTouches.push(c);var d=this.lastTouches,e=function(){var a=d.indexOf(c);a>-1&&d.splice(a,1)};setTimeout(e,cb)}}function U(a){for(var b=a.srcEvent.clientX,c=a.srcEvent.clientY,d=0;d<this.lastTouches.length;d++){var e=this.lastTouches[d],f=Math.abs(b-e.x),g=Math.abs(c-e.y);if(db>=f&&db>=g)return!0}return!1}function V(a,b){this.manager=a,this.set(b)}function W(a){if(p(a,jb))return jb;var b=p(a,kb),c=p(a,lb);return b&&c?jb:b||c?b?kb:lb:p(a,ib)?ib:hb}function X(){if(!fb)return!1;var b={},c=a.CSS&&a.CSS.supports;return[\"auto\",\"manipulation\",\"pan-y\",\"pan-x\",\"pan-x pan-y\",\"none\"].forEach(function(d){b[d]=c?a.CSS.supports(\"touch-action\",d):!0}),b}function Y(a){this.options=la({},this.defaults,a||{}),this.id=v(),this.manager=null,this.options.enable=l(this.options.enable,!0),this.state=nb,this.simultaneous={},this.requireFail=[]}function Z(a){return a&sb?\"cancel\":a&qb?\"end\":a&pb?\"move\":a&ob?\"start\":\"\"}function $(a){return a==Ma?\"down\":a==La?\"up\":a==Ja?\"left\":a==Ka?\"right\":\"\"}function _(a,b){var c=b.manager;return c?c.get(a):a}function aa(){Y.apply(this,arguments)}function ba(){aa.apply(this,arguments),this.pX=null,this.pY=null}function ca(){aa.apply(this,arguments)}function da(){Y.apply(this,arguments),this._timer=null,this._input=null}function ea(){aa.apply(this,arguments)}function fa(){aa.apply(this,arguments)}function ga(){Y.apply(this,arguments),this.pTime=!1,this.pCenter=!1,this._timer=null,this._input=null,this.count=0}function ha(a,b){return b=b||{},b.recognizers=l(b.recognizers,ha.defaults.preset),new ia(a,b)}function ia(a,b){this.options=la({},ha.defaults,b||{}),this.options.inputTarget=this.options.inputTarget||a,this.handlers={},this.session={},this.recognizers=[],this.oldCssProps={},this.element=a,this.input=y(this),this.touchAction=new V(this,this.options.touchAction),ja(this,!0),g(this.options.recognizers,function(a){var b=this.add(new a[0](a[1]));a[2]&&b.recognizeWith(a[2]),a[3]&&b.requireFailure(a[3])},this)}function ja(a,b){var c=a.element;if(c.style){var d;g(a.options.cssProps,function(e,f){d=u(c.style,f),b?(a.oldCssProps[d]=c.style[d],c.style[d]=e):c.style[d]=a.oldCssProps[d]||\"\"}),b||(a.oldCssProps={})}}function ka(a,c){var d=b.createEvent(\"Event\");d.initEvent(a,!0,!0),d.gesture=c,c.target.dispatchEvent(d)}var la,ma=[\"\",\"webkit\",\"Moz\",\"MS\",\"ms\",\"o\"],na=b.createElement(\"div\"),oa=\"function\",pa=Math.round,qa=Math.abs,ra=Date.now;la=\"function\"!=typeof Object.assign?function(a){if(a===d||null===a)throw new TypeError(\"Cannot convert undefined or null to object\");for(var b=Object(a),c=1;c<arguments.length;c++){var e=arguments[c];if(e!==d&&null!==e)for(var f in e)e.hasOwnProperty(f)&&(b[f]=e[f])}return b}:Object.assign;var sa=h(function(a,b,c){for(var e=Object.keys(b),f=0;f<e.length;)(!c||c&&a[e[f]]===d)&&(a[e[f]]=b[e[f]]),f++;return a},\"extend\",\"Use `assign`.\"),ta=h(function(a,b){return sa(a,b,!0)},\"merge\",\"Use `assign`.\"),ua=1,va=/mobile|tablet|ip(ad|hone|od)|android/i,wa=\"ontouchstart\"in a,xa=u(a,\"PointerEvent\")!==d,ya=wa&&va.test(navigator.userAgent),za=\"touch\",Aa=\"pen\",Ba=\"mouse\",Ca=\"kinect\",Da=25,Ea=1,Fa=2,Ga=4,Ha=8,Ia=1,Ja=2,Ka=4,La=8,Ma=16,Na=Ja|Ka,Oa=La|Ma,Pa=Na|Oa,Qa=[\"x\",\"y\"],Ra=[\"clientX\",\"clientY\"];x.prototype={handler:function(){},init:function(){this.evEl&&m(this.element,this.evEl,this.domHandler),this.evTarget&&m(this.target,this.evTarget,this.domHandler),this.evWin&&m(w(this.element),this.evWin,this.domHandler)},destroy:function(){this.evEl&&n(this.element,this.evEl,this.domHandler),this.evTarget&&n(this.target,this.evTarget,this.domHandler),this.evWin&&n(w(this.element),this.evWin,this.domHandler)}};var Sa={mousedown:Ea,mousemove:Fa,mouseup:Ga},Ta=\"mousedown\",Ua=\"mousemove mouseup\";i(L,x,{handler:function(a){var b=Sa[a.type];b&Ea&&0===a.button&&(this.pressed=!0),b&Fa&&1!==a.which&&(b=Ga),this.pressed&&(b&Ga&&(this.pressed=!1),this.callback(this.manager,b,{pointers:[a],changedPointers:[a],pointerType:Ba,srcEvent:a}))}});var Va={pointerdown:Ea,pointermove:Fa,pointerup:Ga,pointercancel:Ha,pointerout:Ha},Wa={2:za,3:Aa,4:Ba,5:Ca},Xa=\"pointerdown\",Ya=\"pointermove pointerup pointercancel\";a.MSPointerEvent&&!a.PointerEvent&&(Xa=\"MSPointerDown\",Ya=\"MSPointerMove MSPointerUp MSPointerCancel\"),i(M,x,{handler:function(a){var b=this.store,c=!1,d=a.type.toLowerCase().replace(\"ms\",\"\"),e=Va[d],f=Wa[a.pointerType]||a.pointerType,g=f==za,h=r(b,a.pointerId,\"pointerId\");e&Ea&&(0===a.button||g)?0>h&&(b.push(a),h=b.length-1):e&(Ga|Ha)&&(c=!0),0>h||(b[h]=a,this.callback(this.manager,e,{pointers:b,changedPointers:[a],pointerType:f,srcEvent:a}),c&&b.splice(h,1))}});var Za={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},$a=\"touchstart\",_a=\"touchstart touchmove touchend touchcancel\";i(N,x,{handler:function(a){var b=Za[a.type];if(b===Ea&&(this.started=!0),this.started){var c=O.call(this,a,b);b&(Ga|Ha)&&c[0].length-c[1].length===0&&(this.started=!1),this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}}});var ab={touchstart:Ea,touchmove:Fa,touchend:Ga,touchcancel:Ha},bb=\"touchstart touchmove touchend touchcancel\";i(P,x,{handler:function(a){var b=ab[a.type],c=Q.call(this,a,b);c&&this.callback(this.manager,b,{pointers:c[0],changedPointers:c[1],pointerType:za,srcEvent:a})}});var cb=2500,db=25;i(R,x,{handler:function(a,b,c){var d=c.pointerType==za,e=c.pointerType==Ba;if(!(e&&c.sourceCapabilities&&c.sourceCapabilities.firesTouchEvents)){if(d)S.call(this,b,c);else if(e&&U.call(this,c))return;this.callback(a,b,c)}},destroy:function(){this.touch.destroy(),this.mouse.destroy()}});var eb=u(na.style,\"touchAction\"),fb=eb!==d,gb=\"compute\",hb=\"auto\",ib=\"manipulation\",jb=\"none\",kb=\"pan-x\",lb=\"pan-y\",mb=X();V.prototype={set:function(a){a==gb&&(a=this.compute()),fb&&this.manager.element.style&&mb[a]&&(this.manager.element.style[eb]=a),this.actions=a.toLowerCase().trim()},update:function(){this.set(this.manager.options.touchAction)},compute:function(){var a=[];return g(this.manager.recognizers,function(b){k(b.options.enable,[b])&&(a=a.concat(b.getTouchAction()))}),W(a.join(\" \"))},preventDefaults:function(a){var b=a.srcEvent,c=a.offsetDirection;if(this.manager.session.prevented)return void b.preventDefault();var d=this.actions,e=p(d,jb)&&!mb[jb],f=p(d,lb)&&!mb[lb],g=p(d,kb)&&!mb[kb];if(e){var h=1===a.pointers.length,i=a.distance<2,j=a.deltaTime<250;if(h&&i&&j)return}return g&&f?void 0:e||f&&c&Na||g&&c&Oa?this.preventSrc(b):void 0},preventSrc:function(a){this.manager.session.prevented=!0,a.preventDefault()}};var nb=1,ob=2,pb=4,qb=8,rb=qb,sb=16,tb=32;Y.prototype={defaults:{},set:function(a){return la(this.options,a),this.manager&&this.manager.touchAction.update(),this},recognizeWith:function(a){if(f(a,\"recognizeWith\",this))return this;var b=this.simultaneous;return a=_(a,this),b[a.id]||(b[a.id]=a,a.recognizeWith(this)),this},dropRecognizeWith:function(a){return f(a,\"dropRecognizeWith\",this)?this:(a=_(a,this),delete this.simultaneous[a.id],this)},requireFailure:function(a){if(f(a,\"requireFailure\",this))return this;var b=this.requireFail;return a=_(a,this),-1===r(b,a)&&(b.push(a),a.requireFailure(this)),this},dropRequireFailure:function(a){if(f(a,\"dropRequireFailure\",this))return this;a=_(a,this);var b=r(this.requireFail,a);return b>-1&&this.requireFail.splice(b,1),this},hasRequireFailures:function(){return this.requireFail.length>0},canRecognizeWith:function(a){return!!this.simultaneous[a.id]},emit:function(a){function b(b){c.manager.emit(b,a)}var c=this,d=this.state;qb>d&&b(c.options.event+Z(d)),b(c.options.event),a.additionalEvent&&b(a.additionalEvent),d>=qb&&b(c.options.event+Z(d))},tryEmit:function(a){return this.canEmit()?this.emit(a):void(this.state=tb)},canEmit:function(){for(var a=0;a<this.requireFail.length;){if(!(this.requireFail[a].state&(tb|nb)))return!1;a++}return!0},recognize:function(a){var b=la({},a);return k(this.options.enable,[this,b])?(this.state&(rb|sb|tb)&&(this.state=nb),this.state=this.process(b),void(this.state&(ob|pb|qb|sb)&&this.tryEmit(b))):(this.reset(),void(this.state=tb))},process:function(a){},getTouchAction:function(){},reset:function(){}},i(aa,Y,{defaults:{pointers:1},attrTest:function(a){var b=this.options.pointers;return 0===b||a.pointers.length===b},process:function(a){var b=this.state,c=a.eventType,d=b&(ob|pb),e=this.attrTest(a);return d&&(c&Ha||!e)?b|sb:d||e?c&Ga?b|qb:b&ob?b|pb:ob:tb}}),i(ba,aa,{defaults:{event:\"pan\",threshold:10,pointers:1,direction:Pa},getTouchAction:function(){var a=this.options.direction,b=[];return a&Na&&b.push(lb),a&Oa&&b.push(kb),b},directionTest:function(a){var b=this.options,c=!0,d=a.distance,e=a.direction,f=a.deltaX,g=a.deltaY;return e&b.direction||(b.direction&Na?(e=0===f?Ia:0>f?Ja:Ka,c=f!=this.pX,d=Math.abs(a.deltaX)):(e=0===g?Ia:0>g?La:Ma,c=g!=this.pY,d=Math.abs(a.deltaY))),a.direction=e,c&&d>b.threshold&&e&b.direction},attrTest:function(a){return aa.prototype.attrTest.call(this,a)&&(this.state&ob||!(this.state&ob)&&this.directionTest(a))},emit:function(a){this.pX=a.deltaX,this.pY=a.deltaY;var b=$(a.direction);b&&(a.additionalEvent=this.options.event+b),this._super.emit.call(this,a)}}),i(ca,aa,{defaults:{event:\"pinch\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.scale-1)>this.options.threshold||this.state&ob)},emit:function(a){if(1!==a.scale){var b=a.scale<1?\"in\":\"out\";a.additionalEvent=this.options.event+b}this._super.emit.call(this,a)}}),i(da,Y,{defaults:{event:\"press\",pointers:1,time:251,threshold:9},getTouchAction:function(){return[hb]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime>b.time;if(this._input=a,!d||!c||a.eventType&(Ga|Ha)&&!f)this.reset();else if(a.eventType&Ea)this.reset(),this._timer=e(function(){this.state=rb,this.tryEmit()},b.time,this);else if(a.eventType&Ga)return rb;return tb},reset:function(){clearTimeout(this._timer)},emit:function(a){this.state===rb&&(a&&a.eventType&Ga?this.manager.emit(this.options.event+\"up\",a):(this._input.timeStamp=ra(),this.manager.emit(this.options.event,this._input)))}}),i(ea,aa,{defaults:{event:\"rotate\",threshold:0,pointers:2},getTouchAction:function(){return[jb]},attrTest:function(a){return this._super.attrTest.call(this,a)&&(Math.abs(a.rotation)>this.options.threshold||this.state&ob)}}),i(fa,aa,{defaults:{event:\"swipe\",threshold:10,velocity:.3,direction:Na|Oa,pointers:1},getTouchAction:function(){return ba.prototype.getTouchAction.call(this)},attrTest:function(a){var b,c=this.options.direction;return c&(Na|Oa)?b=a.overallVelocity:c&Na?b=a.overallVelocityX:c&Oa&&(b=a.overallVelocityY),this._super.attrTest.call(this,a)&&c&a.offsetDirection&&a.distance>this.options.threshold&&a.maxPointers==this.options.pointers&&qa(b)>this.options.velocity&&a.eventType&Ga},emit:function(a){var b=$(a.offsetDirection);b&&this.manager.emit(this.options.event+b,a),this.manager.emit(this.options.event,a)}}),i(ga,Y,{defaults:{event:\"tap\",pointers:1,taps:1,interval:300,time:250,threshold:9,posThreshold:10},getTouchAction:function(){return[ib]},process:function(a){var b=this.options,c=a.pointers.length===b.pointers,d=a.distance<b.threshold,f=a.deltaTime<b.time;if(this.reset(),a.eventType&Ea&&0===this.count)return this.failTimeout();if(d&&f&&c){if(a.eventType!=Ga)return this.failTimeout();var g=this.pTime?a.timeStamp-this.pTime<b.interval:!0,h=!this.pCenter||H(this.pCenter,a.center)<b.posThreshold;this.pTime=a.timeStamp,this.pCenter=a.center,h&&g?this.count+=1:this.count=1,this._input=a;var i=this.count%b.taps;if(0===i)return this.hasRequireFailures()?(this._timer=e(function(){this.state=rb,this.tryEmit()},b.interval,this),ob):rb}return tb},failTimeout:function(){return this._timer=e(function(){this.state=tb},this.options.interval,this),tb},reset:function(){clearTimeout(this._timer)},emit:function(){this.state==rb&&(this._input.tapCount=this.count,this.manager.emit(this.options.event,this._input))}}),ha.VERSION=\"2.0.8\",ha.defaults={domEvents:!1,touchAction:gb,enable:!0,inputTarget:null,inputClass:null,preset:[[ea,{enable:!1}],[ca,{enable:!1},[\"rotate\"]],[fa,{direction:Na}],[ba,{direction:Na},[\"swipe\"]],[ga],[ga,{event:\"doubletap\",taps:2},[\"tap\"]],[da]],cssProps:{userSelect:\"none\",touchSelect:\"none\",touchCallout:\"none\",contentZooming:\"none\",userDrag:\"none\",tapHighlightColor:\"rgba(0,0,0,0)\"}};var ub=1,vb=2;ia.prototype={set:function(a){return la(this.options,a),a.touchAction&&this.touchAction.update(),a.inputTarget&&(this.input.destroy(),this.input.target=a.inputTarget,this.input.init()),this},stop:function(a){this.session.stopped=a?vb:ub},recognize:function(a){var b=this.session;if(!b.stopped){this.touchAction.preventDefaults(a);var c,d=this.recognizers,e=b.curRecognizer;(!e||e&&e.state&rb)&&(e=b.curRecognizer=null);for(var f=0;f<d.length;)c=d[f],b.stopped===vb||e&&c!=e&&!c.canRecognizeWith(e)?c.reset():c.recognize(a),!e&&c.state&(ob|pb|qb)&&(e=b.curRecognizer=c),f++}},get:function(a){if(a instanceof Y)return a;for(var b=this.recognizers,c=0;c<b.length;c++)if(b[c].options.event==a)return b[c];return null},add:function(a){if(f(a,\"add\",this))return this;var b=this.get(a.options.event);return b&&this.remove(b),this.recognizers.push(a),a.manager=this,this.touchAction.update(),a},remove:function(a){if(f(a,\"remove\",this))return this;if(a=this.get(a)){var b=this.recognizers,c=r(b,a);-1!==c&&(b.splice(c,1),this.touchAction.update())}return this},on:function(a,b){if(a!==d&&b!==d){var c=this.handlers;return g(q(a),function(a){c[a]=c[a]||[],c[a].push(b)}),this}},off:function(a,b){if(a!==d){var c=this.handlers;return g(q(a),function(a){b?c[a]&&c[a].splice(r(c[a],b),1):delete c[a]}),this}},emit:function(a,b){this.options.domEvents&&ka(a,b);var c=this.handlers[a]&&this.handlers[a].slice();if(c&&c.length){b.type=a,b.preventDefault=function(){b.srcEvent.preventDefault()};for(var d=0;d<c.length;)c[d](b),d++}},destroy:function(){this.element&&ja(this,!1),this.handlers={},this.session={},this.input.destroy(),this.element=null}},la(ha,{INPUT_START:Ea,INPUT_MOVE:Fa,INPUT_END:Ga,INPUT_CANCEL:Ha,STATE_POSSIBLE:nb,STATE_BEGAN:ob,STATE_CHANGED:pb,STATE_ENDED:qb,STATE_RECOGNIZED:rb,STATE_CANCELLED:sb,STATE_FAILED:tb,DIRECTION_NONE:Ia,DIRECTION_LEFT:Ja,DIRECTION_RIGHT:Ka,DIRECTION_UP:La,DIRECTION_DOWN:Ma,DIRECTION_HORIZONTAL:Na,DIRECTION_VERTICAL:Oa,DIRECTION_ALL:Pa,Manager:ia,Input:x,TouchAction:V,TouchInput:P,MouseInput:L,PointerEventInput:M,TouchMouseInput:R,SingleTouchInput:N,Recognizer:Y,AttrRecognizer:aa,Tap:ga,Pan:ba,Swipe:fa,Pinch:ca,Rotate:ea,Press:da,on:m,off:n,each:g,merge:ta,extend:sa,assign:la,inherit:i,bindFn:j,prefixed:u});var wb=\"undefined\"!=typeof a?a:\"undefined\"!=typeof self?self:{};wb.Hammer=ha,\"function\"==typeof define&&define.amd?define(function(){return ha}):\"undefined\"!=typeof module&&module.exports?module.exports=ha:a[c]=ha}(window,document,\"Hammer\");\n//# sourceMappingURL=hammer.min.js.map","$.i18n().load({\n en: {\n msg_parson_check_me: \"Check\",\n msg_parson_reset: \"Reset\",\n msg_parson_help: \"Help me\",\n msg_parson_too_short: \"Your answer is too short. Add more blocks.\",\n msg_parson_drag_from_here: \"Drag from here\",\n msg_parson_drag_to_here: \"Drop blocks here\",\n msg_parson_correct_first_try:\n \"Perfect! It took you only one try to solve this. Great job!\",\n msg_parson_correct:\n \"Perfect! It took you $1 tries to solve this. Click Reset to try to solve it in one attempt.\",\n msg_parson_correct_runnable:\n \"Click Run below to test out your solution.\",\n msg_parson_wrong_indent:\n \"This block is not indented correctly. Either indent it more by dragging it right or reduce the indention by dragging it left.\",\n msg_parson_wrong_indents:\n \"These blocks are not indented correctly. To indent a block more, drag it to the right. To reduce the indention, drag it to the left.\",\n msg_parson_wrong_order:\n \"Highlighted blocks in your answer are wrong or are in the wrong order. This can be fixed by moving, removing, or replacing highlighted blocks.\",\n msg_parson_arrow_navigate:\n \"Arrow keys to navigate. Space to select / deselect block to move.\",\n msg_parson_help_info:\n \"Click on the Help Me button if you want to make the problem easier\",\n msg_parson_not_solution:\n \"Disabled an unneeded code block (one that is not part of the solution).\",\n msg_parson_provided_indent: \"Provided the indentation.\",\n msg_parson_combined_blocks: \"Combined two code blocks into one.\",\n msg_parson_remove_incorrect:\n \"Will remove an incorrect code block from answer area\",\n msg_parson_will_combine: \"Will combine two blocks\",\n msg_parson_atleast_three_attempts:\n \"You must make at least three distinct full attempts at a solution before you can get help\",\n msg_parson_three_blocks_left:\n \"There are only 3 correct blocks left. You should be able to put them in order\",\n msg_parson_will_provide_indent: \"Will provide indentation\",\n },\n});\n","$.i18n().load({\n \"pt-br\": {\n msg_parson_check_me: \"Verificar\",\n msg_parson_reset: \"Resetar\",\n msg_parson_help:\"Ajuda\",\n msg_parson_too_short: \"Seu programa é muito curto. Adicione mais blocos.\",\n msg_parson_drag_from_here: \"Arraste daqui\",\n msg_parson_drag_to_here: \"Largue os blocos aqui\",\n msg_parson_correct_first_try:\n \"Perfeito! Você levou apenas uma tentativa para resolver. Bom trabalho!\",\n msg_parson_correct:\n \"Perfeito! Você levou $1 tentativas para resolver. Clique em Resetar para tentar resolver em uma tentativa.\" ,\n msg_parson_wrong_indent:\n \"Este bloco não está indentado corretamente. Indente mais arrastando-o para a direita ou reduza a indentação arrastando para a esquerda.\",\n msg_parson_wrong_indents:\n \"Estes blocos não estão indentados corretamente. Para indentar mais, arraste o bloco para a direita. Para reduzir a indentação, arraste para a esquerda.\",\n msg_parson_wrong_order:\n \"Blocos destacados no seu programa estão errados ou estão na ordem errada. Isso pode ser resolvido movendo, excluindo ou substituindo os blocos destacados.\",\n msg_parson_arrow_navigate:\n \"Use as teclas de setas para navegar. Espaço para selecionar/ desmarcar blocos para mover.\",\n msg_parson_help_info:\n \"Clique no botão Ajuda se você quiser facilitar o problema\",\n msg_parson_not_solution:\n \"Foi desabilitado um bloco de código desnecessário (que não faz parte da solução).\",\n msg_parson_provided_indent:\"Foi fornecida a indentação.\",\n msg_parson_combined_blocks:\"Dois blocos de códigos foram combinados em um.\",\n msg_parson_remove_incorrect:\n \"Será removido um bloco de código incorreto da área de resposta\",\n msg_parson_will_combine:\"Serão combinados dois blocos\",\n msg_parson_atleast_three_attempts:\n \"Você deve tentar pelo menos três vezes antes de pedir ajuda\",\n msg_parson_three_blocks_left:\n \"Restam apenas 3 blocos corretos. Você deve colocá-los em ordem\",\n msg_parson_will_provide_indent: \"Será fornecida a indentação\"\n },\n});\n","// TODO - How much of this is needed? Lots of overlap with what syntax highlighting\n// via pretext theme does...\n\nfunction H() {\n var x =\n navigator &&\n navigator.userAgent &&\n /\\bMSIE 6\\./.test(navigator.userAgent);\n H = function() {\n return x;\n };\n return x;\n}\n(function() {\n function x(b) {\n b = b.split(/ /g);\n var a = {};\n for (var c = b.length; --c >= 0; ) {\n var d = b[c];\n if (d) a[d] = null;\n }\n return a;\n }\n var y = \"break continue do else for if return while \",\n U =\n y +\n \"auto case char const default double enum extern float goto int long register short signed sizeof static struct switch typedef union unsigned void volatile \",\n D =\n U +\n \"catch class delete false import new operator private protected public this throw true try \",\n I =\n D +\n \"alignof align_union asm axiom bool concept concept_map const_cast constexpr decltype dynamic_cast explicit export friend inline late_check mutable namespace nullptr reinterpret_cast static_assert static_cast template typeid typename typeof using virtual wchar_t where \",\n J =\n D +\n \"boolean byte extends final finally implements import instanceof null native package strictfp super synchronized throws transient \",\n V =\n J +\n \"as base by checked decimal delegate descending event fixed foreach from group implicit in interface internal into is lock object out override orderby params readonly ref sbyte sealed stackalloc string select uint ulong unchecked unsafe ushort var \",\n K =\n D +\n \"debugger eval export function get null set undefined var with Infinity NaN \",\n L =\n \"caller delete die do dump elsif eval exit foreach for goto if import last local my next no our print package redo require sub undef unless until use wantarray while BEGIN END \",\n M =\n y +\n \"and as assert class def del elif except exec finally from global import in is lambda nonlocal not or pass print raise try with yield False True None \",\n N =\n y +\n \"alias and begin case class def defined elsif end ensure false in module next nil not or redo rescue retry self super then true undef unless until when yield BEGIN END \",\n O = y + \"case done elif esac eval fi function in local set then until \",\n W = I + V + K + L + M + N + O;\n function X(b) {\n return (b >= \"a\" && b <= \"z\") || (b >= \"A\" && b <= \"Z\");\n }\n function u(b, a, c, d) {\n b.unshift(c, d || 0);\n try {\n a.splice.apply(a, b);\n } finally {\n b.splice(0, 2);\n }\n }\n var Y = (function() {\n var b = [\n \"!\",\n \"!=\",\n \"!==\",\n \"#\",\n \"%\",\n \"%=\",\n \"&\",\n \"&&\",\n \"&&=\",\n \"&=\",\n \"(\",\n \"*\",\n \"*=\",\n \"+=\",\n \",\",\n \"-=\",\n \"->\",\n \"/\",\n \"/=\",\n \":\",\n \"::\",\n \";\",\n \"<\",\n \"<<\",\n \"<<=\",\n \"<=\",\n \"=\",\n \"==\",\n \"===\",\n \">\",\n \">=\",\n \">>\",\n \">>=\",\n \">>>\",\n \">>>=\",\n \"?\",\n \"@\",\n \"[\",\n \"^\",\n \"^=\",\n \"^^\",\n \"^^=\",\n \"{\",\n \"|\",\n \"|=\",\n \"||\",\n \"||=\",\n \"~\",\n \"break\",\n \"case\",\n \"continue\",\n \"delete\",\n \"do\",\n \"else\",\n \"finally\",\n \"instanceof\",\n \"return\",\n \"throw\",\n \"try\",\n \"typeof\"\n ],\n a =\n \"(?:(?:(?:^|[^0-9.])\\\\.{1,3})|(?:(?:^|[^\\\\+])\\\\+)|(?:(?:^|[^\\\\-])-)\";\n for (var c = 0; c < b.length; ++c) {\n var d = b[c];\n a += X(d.charAt(0))\n ? \"|\\\\b\" + d\n : \"|\" + d.replace(/([^=<>:&])/g, \"\\\\$1\");\n }\n a += \"|^)\\\\s*$\";\n return new RegExp(a);\n })(),\n P = /&/g,\n Q = /</g,\n R = />/g,\n Z = /\\\"/g;\n function $(b) {\n return b\n .replace(P, \"&\")\n .replace(Q, \"<\")\n .replace(R, \">\")\n .replace(Z, \""\");\n }\n function E(b) {\n return b\n .replace(P, \"&\")\n .replace(Q, \"<\")\n .replace(R, \">\");\n }\n var aa = /</g,\n ba = />/g,\n ca = /'/g,\n da = /"/g,\n ea = /&/g,\n fa = / /g;\n function ga(b) {\n var a = b.indexOf(\"&\");\n if (a < 0) return b;\n for (--a; (a = b.indexOf(\"&#\", a + 1)) >= 0; ) {\n var c = b.indexOf(\";\", a);\n if (c >= 0) {\n var d = b.substring(a + 3, c),\n g = 10;\n if (d && d.charAt(0) === \"x\") {\n d = d.substring(1);\n g = 16;\n }\n var e = parseInt(d, g);\n if (!isNaN(e))\n b =\n b.substring(0, a) +\n String.fromCharCode(e) +\n b.substring(c + 1);\n }\n }\n return b\n .replace(aa, \"<\")\n .replace(ba, \">\")\n .replace(ca, \"'\")\n .replace(da, '\"')\n .replace(ea, \"&\")\n .replace(fa, \" \");\n }\n function S(b) {\n return \"XMP\" === b.tagName;\n }\n function z(b, a) {\n switch (b.nodeType) {\n case 1:\n var c = b.tagName.toLowerCase();\n a.push(\"<\", c);\n for (var d = 0; d < b.attributes.length; ++d) {\n var g = b.attributes[d];\n if (!g.specified) continue;\n a.push(\" \");\n z(g, a);\n }\n a.push(\">\");\n for (var e = b.firstChild; e; e = e.nextSibling) z(e, a);\n if (b.firstChild || !/^(?:br|link|img)$/.test(c))\n a.push(\"</\", c, \">\");\n break;\n case 2:\n a.push(b.name.toLowerCase(), '=\"', $(b.value), '\"');\n break;\n case 3:\n case 4:\n a.push(E(b.nodeValue));\n break;\n }\n }\n var F = null;\n function ha(b) {\n if (null === F) {\n var a = document.createElement(\"PRE\");\n a.appendChild(\n document.createTextNode(\n '<!DOCTYPE foo PUBLIC \"foo bar\">\\n<foo />'\n )\n );\n F = !/</.test(a.innerHTML);\n }\n if (F) {\n var c = b.innerHTML;\n if (S(b)) c = E(c);\n return c;\n }\n var d = [];\n for (var g = b.firstChild; g; g = g.nextSibling) z(g, d);\n return d.join(\"\");\n }\n function ia(b) {\n var a = 0;\n return function(c) {\n var d = null,\n g = 0;\n for (var e = 0, h = c.length; e < h; ++e) {\n var f = c.charAt(e);\n switch (f) {\n case \"\\t\":\n if (!d) d = [];\n d.push(c.substring(g, e));\n var i = b - (a % b);\n a += i;\n for (; i >= 0; i -= \" \".length)\n d.push(\" \".substring(0, i));\n g = e + 1;\n break;\n case \"\\n\":\n a = 0;\n break;\n default:\n ++a;\n }\n }\n if (!d) return c;\n d.push(c.substring(g));\n return d.join(\"\");\n };\n }\n var ja = /(?:[^<]+|<!--[\\s\\S]*?--\\>|<!\\[CDATA\\[([\\s\\S]*?)\\]\\]>|<\\/?[a-zA-Z][^>]*>|<)/g,\n ka = /^<!--/,\n la = /^<\\[CDATA\\[/,\n ma = /^<br\\b/i;\n function na(b) {\n var a = b.match(ja),\n c = [],\n d = 0,\n g = [];\n if (a)\n for (var e = 0, h = a.length; e < h; ++e) {\n var f = a[e];\n if (f.length > 1 && f.charAt(0) === \"<\") {\n if (ka.test(f)) continue;\n if (la.test(f)) {\n c.push(f.substring(9, f.length - 3));\n d += f.length - 12;\n } else if (ma.test(f)) {\n c.push(\"\\n\");\n ++d;\n } else g.push(d, f);\n } else {\n var i = ga(f);\n c.push(i);\n d += i.length;\n }\n }\n return {\n source: c.join(\"\"),\n tags: g\n };\n }\n function v(b, a) {\n var c = {};\n (function() {\n var g = b.concat(a);\n for (var e = g.length; --e >= 0; ) {\n var h = g[e],\n f = h[3];\n if (f) for (var i = f.length; --i >= 0; ) c[f.charAt(i)] = h;\n }\n })();\n var d = a.length;\n return function(g, e) {\n e = e || 0;\n var h = [e, \"pln\"],\n f = \"\",\n i = 0,\n j = g;\n while (j.length) {\n var o,\n m = null,\n k,\n l = c[j.charAt(0)];\n if (l) {\n k = j.match(l[1]);\n m = k[0];\n o = l[0];\n } else {\n for (var n = 0; n < d; ++n) {\n l = a[n];\n var p = l[2];\n if (p && !p.test(f)) continue;\n k = j.match(l[1]);\n if (k) {\n m = k[0];\n o = l[0];\n break;\n }\n }\n if (!m) {\n o = \"pln\";\n m = j.substring(0, 1);\n }\n }\n h.push(e + i, o);\n i += m.length;\n j = j.substring(m.length);\n if (o !== \"com\" && /\\S/.test(m)) f = m;\n }\n return h;\n };\n }\n var oa = v(\n [],\n [\n [\"pln\", /^[^<]+/, null],\n [\"dec\", /^<!\\w[^>]*(?:>|$)/, null],\n [\"com\", /^<!--[\\s\\S]*?(?:--\\>|$)/, null],\n [\"src\", /^<\\?[\\s\\S]*?(?:\\?>|$)/, null],\n [\"src\", /^<%[\\s\\S]*?(?:%>|$)/, null],\n [\"src\", /^<(script|style|xmp)\\b[^>]*>[\\s\\S]*?<\\/\\1\\b[^>]*>/i, null],\n [\"tag\", /^<\\/?\\w[^<>]*>/, null]\n ]\n );\n function pa(b) {\n var a = oa(b);\n for (var c = 0; c < a.length; c += 2)\n if (a[c + 1] === \"src\") {\n var d, g;\n d = a[c];\n g = c + 2 < a.length ? a[c + 2] : b.length;\n var e = b.substring(d, g),\n h = e.match(/^(<[^>]*>)([\\s\\S]*)(<\\/[^>]*>)$/);\n if (h)\n a.splice(\n c,\n 2,\n d,\n \"tag\",\n d + h[1].length,\n \"src\",\n d + h[1].length + (h[2] || \"\").length,\n \"tag\"\n );\n }\n return a;\n }\n var qa = v(\n [\n [\"atv\", /^\\'[^\\']*(?:\\'|$)/, null, \"'\"],\n [\"atv\", /^\\\"[^\\\"]*(?:\\\"|$)/, null, '\"'],\n [\"pun\", /^[<>\\/=]+/, null, \"<>/=\"]\n ],\n [\n [\"tag\", /^[\\w:\\-]+/, /^</],\n [\"atv\", /^[\\w\\-]+/, /^=/],\n [\"atn\", /^[\\w:\\-]+/, null],\n [\"pln\", /^\\s+/, null, \" \\t\\r\\n\"]\n ]\n );\n function ra(b, a) {\n for (var c = 0; c < a.length; c += 2) {\n var d = a[c + 1];\n if (d === \"tag\") {\n var g, e;\n g = a[c];\n e = c + 2 < a.length ? a[c + 2] : b.length;\n var h = b.substring(g, e),\n f = qa(h, g);\n u(f, a, c, 2);\n c += f.length - 2;\n }\n }\n return a;\n }\n function r(b) {\n var a = [],\n c = [];\n if (b.tripleQuotedStrings)\n a.push([\n \"str\",\n /^(?:\\'\\'\\'(?:[^\\'\\\\]|\\\\[\\s\\S]|\\'{1,2}(?=[^\\']))*(?:\\'\\'\\'|$)|\\\"\\\"\\\"(?:[^\\\"\\\\]|\\\\[\\s\\S]|\\\"{1,2}(?=[^\\\"]))*(?:\\\"\\\"\\\"|$)|\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$))/,\n null,\n \"'\\\"\"\n ]);\n else if (b.multiLineStrings)\n a.push([\n \"str\",\n /^(?:\\'(?:[^\\\\\\']|\\\\[\\s\\S])*(?:\\'|$)|\\\"(?:[^\\\\\\\"]|\\\\[\\s\\S])*(?:\\\"|$)|\\`(?:[^\\\\\\`]|\\\\[\\s\\S])*(?:\\`|$))/,\n null,\n \"'\\\"`\"\n ]);\n else\n a.push([\n \"str\",\n /^(?:\\'(?:[^\\\\\\'\\r\\n]|\\\\.)*(?:\\'|$)|\\\"(?:[^\\\\\\\"\\r\\n]|\\\\.)*(?:\\\"|$))/,\n null,\n \"\\\"'\"\n ]);\n c.push([\"pln\", /^(?:[^\\'\\\"\\`\\/\\#]+)/, null, \" \\r\\n\"]);\n if (b.hashComments) a.push([\"com\", /^#[^\\r\\n]*/, null, \"#\"]);\n if (b.cStyleComments) c.push([\"com\", /^\\/\\/[^\\r\\n]*/, null]);\n if (b.regexLiterals)\n c.push([\n \"str\",\n /^\\/(?:[^\\\\\\*\\/\\[]|\\\\[\\s\\S]|\\[(?:[^\\]\\\\]|\\\\.)*(?:\\]|$))+(?:\\/|$)/,\n Y\n ]);\n if (b.cStyleComments) c.push([\"com\", /^\\/\\*[\\s\\S]*?(?:\\*\\/|$)/, null]);\n var d = x(b.keywords);\n b = null;\n var g = v(a, c),\n e = v(\n [],\n [\n [\"pln\", /^\\s+/, null, \" \\r\\n\"],\n [\"pln\", /^[a-z_$@][a-z_$@0-9]*/i, null],\n [\"lit\", /^0x[a-f0-9]+[a-z]/i, null],\n [\n \"lit\",\n /^(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d+)(?:e[+\\-]?\\d+)?[a-z]*/i,\n null,\n \"123456789\"\n ],\n [\"pun\", /^[^\\s\\w\\.$@]+/, null]\n ]\n );\n function h(f, i) {\n for (var j = 0; j < i.length; j += 2) {\n var o = i[j + 1];\n if (o === \"pln\") {\n var m, k, l, n;\n m = i[j];\n k = j + 2 < i.length ? i[j + 2] : f.length;\n l = f.substring(m, k);\n n = e(l, m);\n for (var p = 0, t = n.length; p < t; p += 2) {\n var w = n[p + 1];\n if (w === \"pln\") {\n var A = n[p],\n B = p + 2 < t ? n[p + 2] : l.length,\n s = f.substring(A, B);\n if (s === \".\") n[p + 1] = \"pun\";\n else if (s in d) n[p + 1] = \"kwd\";\n else if (/^@?[A-Z][A-Z$]*[a-z][A-Za-z$]*$/.test(s))\n n[p + 1] = s.charAt(0) === \"@\" ? \"lit\" : \"typ\";\n }\n }\n u(n, i, j, 2);\n j += n.length - 2;\n }\n }\n return i;\n }\n return function(f) {\n var i = g(f);\n i = h(f, i);\n return i;\n };\n }\n var G = r({\n keywords: W,\n hashComments: true,\n cStyleComments: true,\n multiLineStrings: true,\n regexLiterals: true\n });\n function sa(b, a) {\n for (var c = 0; c < a.length; c += 2) {\n var d = a[c + 1];\n if (d === \"src\") {\n var g, e;\n g = a[c];\n e = c + 2 < a.length ? a[c + 2] : b.length;\n var h = G(b.substring(g, e));\n for (var f = 0, i = h.length; f < i; f += 2) h[f] += g;\n u(h, a, c, 2);\n c += h.length - 2;\n }\n }\n return a;\n }\n function ta(b, a) {\n var c = false;\n for (var d = 0; d < a.length; d += 2) {\n var g = a[d + 1],\n e,\n h;\n if (g === \"atn\") {\n e = a[d];\n h = d + 2 < a.length ? a[d + 2] : b.length;\n c = /^on|^style$/i.test(b.substring(e, h));\n } else if (g === \"atv\") {\n if (c) {\n e = a[d];\n h = d + 2 < a.length ? a[d + 2] : b.length;\n var f = b.substring(e, h),\n i = f.length,\n j =\n i >= 2 &&\n /^[\\\"\\']/.test(f) &&\n f.charAt(0) === f.charAt(i - 1),\n o,\n m,\n k;\n if (j) {\n m = e + 1;\n k = h - 1;\n o = f;\n } else {\n m = e + 1;\n k = h - 1;\n o = f.substring(1, f.length - 1);\n }\n var l = G(o);\n for (var n = 0, p = l.length; n < p; n += 2) l[n] += m;\n if (j) {\n l.push(k, \"atv\");\n u(l, a, d + 2, 0);\n } else u(l, a, d, 2);\n }\n c = false;\n }\n }\n return a;\n }\n function ua(b) {\n var a = pa(b);\n a = ra(b, a);\n a = sa(b, a);\n a = ta(b, a);\n return a;\n }\n function va(b, a, c) {\n var d = [],\n g = 0,\n e = null,\n h = null,\n f = 0,\n i = 0,\n j = ia(8);\n function o(k) {\n if (k > g) {\n if (e && e !== h) {\n d.push(\"</span>\");\n e = null;\n }\n if (!e && h) {\n e = h;\n d.push('<span class=\"', e, '\">');\n }\n var l = E(j(b.substring(g, k)))\n .replace(/(\\r\\n?|\\n| ) /g, \"$1 \")\n .replace(/\\r\\n?|\\n/g, \"<br />\");\n d.push(l);\n g = k;\n }\n }\n while (true) {\n var m;\n m = f < a.length ? (i < c.length ? a[f] <= c[i] : true) : false;\n if (m) {\n o(a[f]);\n if (e) {\n d.push(\"</span>\");\n e = null;\n }\n d.push(a[f + 1]);\n f += 2;\n } else if (i < c.length) {\n o(c[i]);\n h = c[i + 1];\n i += 2;\n } else break;\n }\n o(b.length);\n if (e) d.push(\"</span>\");\n return d.join(\"\");\n }\n var C = {};\n function q(b, a) {\n for (var c = a.length; --c >= 0; ) {\n var d = a[c];\n if (!C.hasOwnProperty(d)) C[d] = b;\n else if (\"console\" in window)\n console.log(\"cannot override language handler %s\", d);\n }\n }\n q(G, [\"default-code\"]);\n q(ua, [\"default-markup\", \"html\", \"htm\", \"xhtml\", \"xml\", \"xsl\"]);\n q(\n r({\n keywords: I,\n hashComments: true,\n cStyleComments: true\n }),\n [\"c\", \"cc\", \"cpp\", \"cs\", \"cxx\", \"cyc\"]\n );\n q(\n r({\n keywords: J,\n cStyleComments: true\n }),\n [\"java\"]\n );\n q(\n r({\n keywords: O,\n hashComments: true,\n multiLineStrings: true\n }),\n [\"bsh\", \"csh\", \"sh\"]\n );\n q(\n r({\n keywords: M,\n hashComments: true,\n multiLineStrings: true,\n tripleQuotedStrings: true\n }),\n [\"cv\", \"py\"]\n );\n q(\n r({\n keywords: L,\n hashComments: true,\n multiLineStrings: true,\n regexLiterals: true\n }),\n [\"perl\", \"pl\", \"pm\"]\n );\n q(\n r({\n keywords: N,\n hashComments: true,\n multiLineStrings: true,\n regexLiterals: true\n }),\n [\"rb\"]\n );\n q(\n r({\n keywords: K,\n cStyleComments: true,\n regexLiterals: true\n }),\n [\"js\"]\n );\n function T(b, a) {\n try {\n var c = na(b),\n d = c.source,\n g = c.tags;\n if (!C.hasOwnProperty(a))\n a = /^\\s*</.test(d) ? \"default-markup\" : \"default-code\";\n var e = C[a].call({}, d);\n return va(d, g, e);\n } catch (h) {\n if (\"console\" in window) {\n console.log(h);\n console.trace();\n }\n return b;\n }\n }\n function wa(b) {\n var a = H(),\n c = [\n document.getElementsByTagName(\"pre\"),\n document.getElementsByTagName(\"code\"),\n document.getElementsByTagName(\"li\"),\n document.getElementsByTagName(\"xmp\")\n ],\n d = [];\n for (var g = 0; g < c.length; ++g)\n for (var e = 0; e < c[g].length; ++e) d.push(c[g][e]);\n c = null;\n var h = 0;\n function f() {\n var i = new Date().getTime() + 250;\n for (; h < d.length && new Date().getTime() < i; h++) {\n var j = d[h];\n if (j.className && j.className.indexOf(\"prettyprint\") >= 0) {\n var o = j.className.match(/\\blang-(\\w+)\\b/);\n if (o) o = o[1];\n var m = false;\n for (var k = j.parentNode; k; k = k.parentNode)\n if (\n (k.tagName === \"pre\" ||\n k.tagName === \"code\" ||\n k.tagName === \"xmp\") &&\n k.className &&\n k.className.indexOf(\"prettyprint\") >= 0\n ) {\n m = true;\n break;\n }\n if (!m) {\n var l = ha(j);\n l = l.replace(/(?:\\r\\n?|\\n)$/, \"\");\n var n = T(l, o);\n if (!S(j)) j.innerHTML = n;\n else {\n var p = document.createElement(\"PRE\");\n for (var t = 0; t < j.attributes.length; ++t) {\n var w = j.attributes[t];\n if (w.specified)\n p.setAttribute(w.name, w.value);\n }\n p.innerHTML = n;\n j.parentNode.replaceChild(p, j);\n p = j;\n }\n if (a && j.tagName === \"PRE\") {\n var A = j.getElementsByTagName(\"br\");\n for (var B = A.length; --B >= 0; ) {\n var s = A[B];\n s.parentNode.replaceChild(\n document.createTextNode(\"\\r\\n\"),\n s\n );\n }\n }\n }\n }\n }\n if (h < d.length) setTimeout(f, 250);\n else if (b) b();\n }\n f();\n }\n window.PR_normalizedHtml = z;\n window.prettyPrintOne = T;\n window.prettyPrint = wa;\n window.PR = {\n createSimpleLexer: v,\n registerLangHandler: q,\n sourceDecorator: r,\n PR_ATTRIB_NAME: \"atn\",\n PR_ATTRIB_VALUE: \"atv\",\n PR_COMMENT: \"com\",\n PR_DECLARATION: \"dec\",\n PR_KEYWORD: \"kwd\",\n PR_LITERAL: \"lit\",\n PR_PLAIN: \"pln\",\n PR_PUNCTUATION: \"pun\",\n PR_SOURCE: \"src\",\n PR_STRING: \"str\",\n PR_TAG: \"tag\",\n PR_TYPE: \"typ\"\n };\n})();\n","export default class LineBasedGrader {\n constructor(problem) {\n this.problem = problem;\n }\n // Use a LIS (Longest Increasing Subsequence) algorithm to return the indexes\n // that are not part of that subsequence.\n inverseLISIndices(arr) {\n // Get all subsequences\n var allSubsequences = [];\n for (var i = 0; i < arr.length; i++) {\n var subsequenceForCurrent = [arr[i]],\n current = arr[i],\n lastElementAdded = -1;\n for (var j = i; j < arr.length; j++) {\n var subsequent = arr[j];\n if (subsequent > current && lastElementAdded < subsequent) {\n subsequenceForCurrent.push(subsequent);\n lastElementAdded = subsequent;\n }\n }\n allSubsequences.push(subsequenceForCurrent);\n }\n // Figure out the longest one\n var longestSubsequenceLength = -1;\n var longestSubsequence;\n for (let i in allSubsequences) {\n var subs = allSubsequences[i];\n if (subs.length > longestSubsequenceLength) {\n longestSubsequenceLength = subs.length;\n longestSubsequence = subs;\n }\n }\n // Create the inverse indexes\n var indexes = [];\n var lIndex = 0;\n for (let i = 0; i < arr.length; i++) {\n if (lIndex > longestSubsequence.length) {\n indexes.push(i);\n } else {\n if (arr[i] == longestSubsequence[lIndex]) {\n lIndex += 1;\n } else {\n indexes.push(i);\n }\n }\n }\n return indexes;\n }\n // grade that element, returning the state\n grade() {\n var problem = this.problem;\n problem.clearFeedback();\n this.correctLines = 0;\n this.percentLines = 0;\n this.incorrectIndents = 0;\n var solutionLines = problem.solution;\n var answerLines = problem.answerLines();\n var i;\n var state;\n this.percentLines =\n Math.min(answerLines.length, solutionLines.length) /\n Math.max(answerLines.length, solutionLines.length);\n if (answerLines.length < solutionLines.length) {\n state = \"incorrectTooShort\";\n this.correctLength = false;\n } else if (answerLines.length == solutionLines.length) {\n this.correctLength = true;\n } else {\n state = \"incorrectMoveBlocks\";\n this.correctLength = false;\n }\n\n // Determine whether the code **that is there** is in the correct order\n // If there is too much or too little code this only matters for\n // calculating a percentage score.\n let isCorrectOrder = this.checkCorrectOrdering(solutionLines, answerLines)\n\n // Determine whether blocks are indented correctly\n let isCorrectIndents = this.checkCorrectIndentation(solutionLines, answerLines);\n\n if (\n isCorrectIndents &&\n isCorrectOrder &&\n this.correctLength\n ) {\n // Perfect\n state = \"correct\";\n } else if (this.correctLength && isCorrectOrder) {\n state = \"incorrectIndent\";\n } else if (!isCorrectOrder && state != \"incorrectTooShort\") {\n state = \"incorrectMoveBlocks\";\n }\n this.calculatePercent();\n this.graderState = state;\n\n return state;\n }\n\n checkCorrectIndentation(solutionLines, answerLines) {\n if(!this.problem.usesIndentation())\n return true;\n\n this.indentLeft = [];\n this.indentRight = [];\n let loopLimit = Math.min(solutionLines.length, answerLines.length);\n for (let i = 0; i < loopLimit; i++) {\n if (answerLines[i].viewIndent() < solutionLines[i].indent) {\n this.indentRight.push(answerLines[i]);\n } else if (answerLines[i].viewIndent() > solutionLines[i].indent) {\n this.indentLeft.push(answerLines[i]);\n }\n }\n this.incorrectIndents =\n this.indentLeft.length + this.indentRight.length;\n\n return this.incorrectIndents == 0;\n }\n\n checkCorrectOrdering(solutionLines, answerLines) {\n let isCorrectOrder = true;\n this.correctLines = 0;\n this.solutionLength = solutionLines.length;\n let loopLimit = Math.min(solutionLines.length, answerLines.length);\n for (let i = 0; i < loopLimit; i++) {\n if (answerLines[i].text !== solutionLines[i].text) {\n isCorrectOrder = false;\n } else {\n this.correctLines += 1;\n }\n }\n return isCorrectOrder\n }\n\n calculatePercent() {\n let numLines = this.percentLines * 0.2;\n let lines = this.problem.answerLines().length;\n let numCorrectBlocks = (this.correctLines / lines) * 0.4;\n let numCorrectIndents =\n ((this.correctLines - this.incorrectIndents) / lines) * 0.4;\n\n let score = numLines + numCorrectBlocks + numCorrectIndents;\n score = Math.max(score, 0);\n this.problem.percent = score;\n }\n}\n","\"use strict\";\n/**\n * This file adapted from JSNetworkX: https://github.com/fkling/JSNetworkX\n * Copyright (C) 2012 Felix Kling <felix.kling@gmx.net>\n * JSNetworkX is distributed with the BSD license\n */\n\nexport function hasPath(G, { source, target }) {\n try {\n bidirectionalShortestPath(G, source, target);\n } catch (error) {\n if (error instanceof JSNetworkXNoPath) {\n return false;\n }\n throw error;\n }\n return true;\n}\n\nfunction nodesAreEqual(a, b) {\n return a === b || (typeof a === \"object\" && a.toString() === b.toString());\n}\n\nfunction bidirectionalShortestPath(G, source, target) {\n // call helper to do the real work\n var [pred, succ, w] = bidirectionalPredSucc(G, source, target);\n\n // build path from pred+w+succ\n var path = [];\n // from source to w\n while (w != null) {\n path.push(w);\n w = pred.get(w);\n }\n w = succ.get(path[0]);\n path.reverse();\n // from w to target\n while (w != null) {\n path.push(w);\n w = succ.get(w);\n }\n return path;\n}\n\nfunction bidirectionalPredSucc(G, source, target) {\n // does BFS from both source and target and meets in the middle\n if (nodesAreEqual(source, target)) {\n return [new Map([[source, null]]), new Map([[target, null]]), source];\n }\n\n // handle either directed or undirected\n var gpred, gsucc;\n gpred = G.predecessorsIter.bind(G);\n gsucc = G.successorsIter.bind(G);\n\n // predecesssor and successors in search\n var pred = new Map([[source, null]]);\n var succ = new Map([[target, null]]);\n //\n // initialize fringes, start with forward\n var forwardFringe = [source];\n var reverseFringe = [target];\n var thisLevel;\n\n /*jshint newcap:false*/\n while (forwardFringe.length > 0 && reverseFringe.length > 0) {\n if (forwardFringe.length <= reverseFringe.length) {\n thisLevel = forwardFringe;\n forwardFringe = [];\n for (let v of thisLevel) {\n for (let w of gsucc(v)) {\n if (!pred.has(w)) {\n forwardFringe.push(w);\n pred.set(w, v);\n }\n if (succ.has(w)) {\n return [pred, succ, w]; // found path\n }\n }\n }\n } else {\n thisLevel = reverseFringe;\n reverseFringe = [];\n for (let v of thisLevel) {\n for (let w of gpred(v)) {\n if (!succ.has(w)) {\n reverseFringe.push(w);\n succ.set(w, v);\n }\n if (pred.has(w)) {\n return [pred, succ, w]; // found path\n }\n }\n }\n }\n }\n throw new JSNetworkXNoPath(\n \"No path between \" + source.toString() + \" and \" + target.toString() + \".\"\n );\n}\n\nfunction topologicalSort(G, optNbunch) {\n // nonrecursive version\n var seen = new Set();\n var orderExplored = []; // provide order and\n // fast search without more general priorityDictionary\n var explored = new Set();\n\n if (optNbunch == null) {\n optNbunch = G.nodesIter();\n }\n\n for (let v of optNbunch) {\n // process all vertices in G\n if (explored.has(v)) {\n return; // continue\n }\n\n var fringe = [v]; // nodes yet to look at\n while (fringe.length > 0) {\n var w = fringe[fringe.length - 1]; // depth first search\n if (explored.has(w)) {\n // already looked down this branch\n fringe.pop();\n continue;\n }\n seen.add(w); // mark as seen\n // Check successors for cycles for new nodes\n var newNodes = [];\n /*eslint-disable no-loop-func*/\n G.get(w).forEach(function (_, n) {\n if (!explored.has(n)) {\n if (seen.has(n)) {\n // CYCLE !!\n throw new JSNetworkXUnfeasible(\"Graph contains a cycle.\");\n }\n newNodes.push(n);\n }\n });\n /*eslint-enable no-loop-func*/\n if (newNodes.length > 0) {\n // add new nodes to fringe\n fringe.push.apply(fringe, newNodes);\n } else {\n explored.add(w);\n orderExplored.unshift(w);\n }\n }\n }\n\n return orderExplored;\n}\n\nexport function isDirectedAcyclicGraph(G) {\n try {\n topologicalSort(G);\n return true;\n } catch (ex) {\n if (ex instanceof JSNetworkXUnfeasible) {\n return false;\n }\n throw ex;\n }\n}\n\nexport class DiGraph {\n constructor() {\n this.graph = {}; // dictionary for graph attributes\n this.node = new Map(); // dictionary for node attributes\n // We store two adjacency lists:\n // the predecessors of node n are stored in the dict self.pred\n // the successors of node n are stored in the dict self.succ=self.adj\n this.adj = new Map(); // empty adjacency dictionary\n this.pred = new Map(); // predecessor\n this.succ = this.adj; // successor\n\n this.edge = this.adj;\n }\n\n addNode(n) {\n if (!this.succ.has(n)) {\n this.succ.set(n, new Map());\n this.pred.set(n, new Map());\n this.node.set(n);\n }\n }\n\n addEdge(u, v) {\n // add nodes\n if (!this.succ.has(u)) {\n this.succ.set(u, new Map());\n this.pred.set(u, new Map());\n this.node.set(u, {});\n }\n\n if (!this.succ.has(v)) {\n this.succ.set(v, new Map());\n this.pred.set(v, new Map());\n this.node.set(v, {});\n }\n\n // add the edge\n var datadict = this.adj.get(u).get(v) || {};\n this.succ.get(u).set(v, datadict);\n this.pred.get(v).set(u, datadict);\n }\n\n nodes(optData = false) {\n return Array.from(optData ? this.node.entries() : this.node.keys());\n }\n\n edges(optNbunch, optData = false) {\n return Array.from(this.edgesIter(optNbunch, optData));\n }\n\n nodesIter(optData = false) {\n if (optData) {\n return toIterator(this.node);\n }\n return this.node.keys();\n }\n\n get(n) {\n var value = this.adj.get(n);\n if (typeof value === \"undefined\") {\n throw new KeyError(\"Graph does not contain node \" + n + \".\");\n }\n return value;\n }\n\n numberOfNodes() {\n return this.node.size;\n }\n\n *nbunchIter(optNbunch) {\n if (optNbunch == null) {\n // include all nodes\n /*jshint expr:true*/\n yield* this.adj.keys();\n } else if (this.hasNode(optNbunch)) {\n // if nbunch is a single node\n yield optNbunch;\n } else {\n // if nbunch is a sequence of nodes\n var adj = this.adj;\n\n try {\n for (var n of toIterator(optNbunch)) {\n if (adj.has(n)) {\n yield n;\n }\n }\n } catch (ex) {\n if (ex instanceof TypeError) {\n throw new JSNetworkXError(\n \"nbunch is not a node or a sequence of nodes\"\n );\n }\n }\n }\n }\n\n *edgesIter(optNbunch, optData = false) {\n // handle calls with opt_data being the only argument\n if (isBoolean(optNbunch)) {\n optData = optNbunch;\n optNbunch = undefined;\n }\n\n var nodesNbrs;\n\n if (optNbunch === undefined) {\n nodesNbrs = this.adj;\n } else {\n nodesNbrs = mapIterator(this.nbunchIter(optNbunch), (n) =>\n tuple2(n, this.adj.get(n))\n );\n }\n\n for (var nodeNbrs of nodesNbrs) {\n for (var nbrData of nodeNbrs[1]) {\n var result = [nodeNbrs[0], nbrData[0]];\n if (optData) {\n result[2] = nbrData[1];\n }\n yield result;\n }\n }\n }\n\n reverse(optCopy = true) {\n var H;\n if (optCopy) {\n H = new this.constructor(null, {\n name: \"Reverse of (\" + this.name + \")\",\n });\n H.addNodesFrom(this);\n H.addEdgesFrom(\n mapIterator(this.edgesIter(null, true), (edge) =>\n tuple3c(edge[1], edge[0], deepcopy(edge[2]), edge)\n )\n );\n H.graph = deepcopy(this.graph);\n H.node = deepcopy(this.node);\n } else {\n var thisPred = this.pred;\n var thisSucc = this.succ;\n\n this.succ = thisPred;\n this.pred = thisSucc;\n this.adj = this.succ;\n H = this;\n }\n return H;\n }\n\n successorsIter(n) {\n var nbrs = this.succ.get(n);\n if (nbrs !== undefined) {\n return nbrs.keys();\n }\n throw new JSNetworkXError(\n sprintf('The node \"%j\" is not in the digraph.', n)\n );\n }\n\n predecessorsIter(n) {\n var nbrs = this.pred.get(n);\n if (nbrs !== undefined) {\n return nbrs.keys();\n }\n throw new JSNetworkXError(\n sprintf('The node \"%j\" is not in the digraph.', n)\n );\n }\n\n successors(n) {\n return Array.from(this.successorsIter(n));\n }\n\n predecessors(n) {\n return Array.from(this.predecessorsIter(n));\n }\n}\n\nclass JSNetworkXException {\n constructor(message) {\n this.name = \"JSNetworkXException\";\n this.message = message;\n }\n}\n\nclass JSNetworkXAlgorithmError extends JSNetworkXException {\n constructor(message) {\n super(message);\n this.name = \"JSNetworkXAlgorithmError\";\n }\n}\n\nclass JSNetworkXError extends JSNetworkXException {\n constructor(message) {\n super(message);\n this.name = \"JSNetworkXError\";\n }\n}\n\nclass JSNetworkXUnfeasible extends JSNetworkXAlgorithmError {\n constructor(message) {\n super(message);\n this.name = \"JSNetworkXUnfeasible\";\n }\n}\n\nclass JSNetworkXNoPath extends JSNetworkXUnfeasible {\n constructor(message) {\n super(message);\n this.name = \"JSNetworkXNoPath\";\n }\n}\n\n// function from LoDash, needed by functions from JSNetworkX\nfunction isObjectLike(value) {\n return !!value && typeof value == \"object\";\n}\n\n// function from LoDash, needed by functions from JSNetworkX\nfunction isBoolean(value) {\n var boolTag = \"[object Boolean]\";\n return (\n value === true ||\n value === false ||\n (isObjectLike(value) && Object.prototype.toString.call(value) == boolTag)\n );\n}\n","import LineBasedGrader from \"./lineGrader\";\nimport { DiGraph, hasPath, isDirectedAcyclicGraph } from \"./dagHelpers\";\n\nfunction graphToNX(answerLines) {\n var graph = new DiGraph();\n for (let line1 of answerLines) {\n graph.addNode(line1.tag);\n for (let line2tag of line1.depends) {\n // the depends graph lists the *incoming* edges of a node\n graph.addEdge(line2tag, line1.tag);\n }\n }\n return graph;\n}\n\nfunction isVertexCover(graph, vertexCover) {\n for (let edge of graph.edges()) {\n if (!(vertexCover.has(edge[0]) || vertexCover.has(edge[1]))) {\n return false;\n }\n }\n return true;\n}\n\n// Find all subsets of the set using the correspondence of subsets of\n// a set to binary string whose length are the size of the set\nfunction allSubsets(arr) {\n let subsets = {};\n for (let i = 0; i <= arr.length; i++) {\n subsets[i] = [];\n }\n for (let i = 0; i < Math.pow(2, arr.length); i++) {\n let bin = i.toString(2);\n while (bin.length < arr.length) {\n bin = \"0\" + bin;\n }\n let subset = new Set();\n for (let j = 0; j < bin.length; j++) {\n if (bin[j] == \"1\") {\n subset.add(arr[j]);\n }\n }\n subsets[subset.size].push(subset);\n }\n return subsets;\n}\n\nexport default class DAGGrader extends LineBasedGrader {\n inverseLISIndices(arr, inSolution) {\n // For more details and a proof of the correctness of the algorithm, see the paper: https://arxiv.org/abs/2204.04196\n\n var solution = this.problem.solution;\n var answerLines = inSolution.map((block) => block.lines[0]); // assume NOT adaptive for DAG grading (for now)\n\n let graph = graphToNX(solution);\n\n let seen = new Set();\n let problematicSubgraph = new DiGraph();\n for (let line1 of answerLines) {\n for (let line2 of seen) {\n let problematic = hasPath(graph, {\n source: line1.tag,\n target: line2.tag,\n });\n if (problematic) {\n problematicSubgraph.addEdge(line1.tag, line2.tag);\n }\n }\n\n seen.add(line1);\n }\n\n let mvc = null;\n let subsets = allSubsets(problematicSubgraph.nodes());\n for (let i = 0; i <= problematicSubgraph.numberOfNodes(); i++) {\n for (let subset of subsets[i]) {\n if (isVertexCover(problematicSubgraph, subset)) {\n mvc = subset;\n break;\n }\n }\n if (mvc != null) {\n break;\n }\n }\n\n let indices = [...mvc].map((tag) => {\n for (let i = 0; i < answerLines.length; i++) {\n if (answerLines[i].tag === tag) return i;\n }\n });\n return indices;\n }\n\n checkCorrectIndentation() {\n if(!this.problem.usesIndentation())\n return true;\n\n this.indentLeft = [];\n this.indentRight = [];\n // For dag problems, only check the indentation of each block in the problem\n for (const block of this.problem.blocks) {\n // Skip distractor blocks\n if (block.isDistractor())\n continue;\n\n const curIndent = block.indent;\n const expectedIndent = block.solutionIndent();\n // If missmatch, add first line of block to the correct indent list for\n // UI updating\n if (curIndent < expectedIndent)\n this.indentRight.push(block.lines[0]);\n else if (curIndent > expectedIndent)\n this.indentLeft.push(block.lines[0]);\n }\n \n this.incorrectIndents =\n this.indentLeft.length + this.indentRight.length;\n\n return this.incorrectIndents == 0;\n }\n\n checkCorrectOrdering(solutionLines, answerLines) {\n if (!isDirectedAcyclicGraph(graphToNX(solutionLines))) {\n throw \"Dependency between blocks does not form a Directed Acyclic Graph; Problem unsolvable.\";\n }\n\n let seen = new Set();\n let isCorrectOrder = true;\n this.correctLines = 0;\n this.solutionLength = solutionLines.length;\n let loopLimit = Math.min(solutionLines.length, answerLines.length);\n for (let i = 0; i < loopLimit; i++) {\n let line = answerLines[i];\n if (line.distractor) {\n isCorrectOrder = false;\n } else {\n for (let j = 0; j < line.depends.length; j++) {\n if (!seen.has(line.depends[j])) {\n isCorrectOrder = false;\n }\n }\n }\n if (isCorrectOrder) {\n this.correctLines += 1;\n }\n seen.add(line.tag);\n }\n return isCorrectOrder;\n }\n}\n","/* =====================================================================\n==== ParsonsLine Object ================================================\n======== The model and view of a line of code.\n======== Based on what is specified in the problem.\n======== ParsonBlock objects have one or more of these.\n==== PROPERTIES ========================================================\n======== problem: the Parsons problem\n======== index: the index of the line in the problem\n======== text: the text of the code line\n======== indent: the indent level\n======== view: an element for viewing this object\n======== distractor: whether it is a distractor\n======== paired: whether it is a paired distractor\n======== groupWithNext: whether it is grouped with the following line\n======== width: the pixel width when rendered\n============ in the initial grouping\n===================================================================== */\n// Initialize from codestring\n\nexport default class ParsonsLine {\n constructor(problem, codestring, displaymath) {\n this.problem = problem;\n this.index = problem.lines.length;\n var trimmed = codestring.replace(/\\s*$/, \"\");\n this.text = trimmed.replace(/^\\s*/, \"\");\n this.indent = trimmed.length - this.text.length;\n // Create the View\n var view;\n // TODO: this does not work with display math... Perhaps with pretext we should have html as a language and do nothing?\n \n if (problem.options.language == \"natural\" || problem.options.language == \"math\") {\n if (! displaymath) {\n view = document.createElement(\"p\");\n } else {\n view = document.createElement(\"div\");\n }\n } else {\n view = document.createElement(\"code\");\n $(view).addClass(problem.options.prettifyLanguage);\n }\n view.id = problem.counterId + \"-line-\" + this.index;\n view.innerHTML += this.text;\n this.view = view;\n problem.lines.push(this);\n }\n // Initialize what width the line would naturally have (without indent)\n initializeWidth() {\n // this.width does not appear to be used anywhere later\n // since changing the value of this.width appears to have no effect. - Vincent Qiu (September 2020)\n this.width =\n $(this.view).outerWidth(true) -\n this.problem.options.pixelsPerIndent * this.indent;\n\n // Pass this information on to be used in class Parsons function initializeAreas\n // to manually determine appropriate widths - Vincent Qiu (September 2020)\n this.view.fontSize = window\n .getComputedStyle(this.view, null)\n .getPropertyValue(\"font-size\");\n this.view.pixelsPerIndent = this.problem.options.pixelsPerIndent;\n this.view.indent = this.indent;\n\n // Figure out which typeface will be rendered by comparing text widths to browser default - Vincent Qiu (September 2020)\n var tempCanvas = document.createElement(\"canvas\");\n var tempCanvasCtx = tempCanvas.getContext(\"2d\");\n var possibleFonts = window\n .getComputedStyle(this.view, null)\n .getPropertyValue(\"font-family\")\n .split(\", \");\n var fillerText = \"abcdefghijklmnopqrstuvwxyz0123456789,./!@#$%^&*-+\";\n tempCanvasCtx.font = this.view.fontSize + \" serif\";\n var serifWidth = tempCanvasCtx.measureText(fillerText).width;\n for (let i = 0; i < possibleFonts.length; i++) {\n if (possibleFonts[i].includes('\"')) {\n possibleFonts[i] = possibleFonts[i].replaceAll('\"', \"\");\n }\n if (possibleFonts[i].includes(\"'\")) {\n possibleFonts[i] = possibleFonts[i].replaceAll(\"'\", \"\");\n }\n tempCanvasCtx.font = this.view.fontSize + \" \" + possibleFonts[i];\n if (tempCanvasCtx.measureText(fillerText).width !== serifWidth) {\n this.view.fontFamily = possibleFonts[i];\n break;\n }\n }\n }\n // Answer the block that this line is currently in\n block() {\n for (let i = 0; i < this.problem.blocks.length; i++) {\n var block = this.problem.blocks[i];\n for (var j = 0; j < block.lines.length; j++) {\n if (block.lines[j] === this) {\n return block;\n }\n }\n }\n return undefined;\n }\n // Answer the indent based on the view\n viewIndent() {\n if (this.problem.noindent) {\n return this.indent;\n } else {\n var block = this.block();\n return this.indent - block.solutionIndent() + block.indent;\n }\n }\n}\n","/* =====================================================================\n==== ParsonsBlock Object ===============================================\n======== The model and view of a code block.\n==== PROPERTIES ========================================================\n======== problem: the Parsons problem\n======== lines: an array of ParsonsLine in this block\n======== indent: indent based on movement\n======== view: an element for viewing this object\n======== labels: [label, line] the labels numbering the block and the lines they go on\n======== hammer: the controller based on hammer.js\n===================================================================== */\n\nimport Hammer from \"./hammer.min.js\";\n\n// Initialize based on the problem and the lines\nexport default class ParsonsBlock {\n constructor(problem, lines) {\n this.problem = problem;\n this.lines = lines;\n this.indent = 0;\n this.labels = [];\n // Create view, adding view of lines and updating indent\n var view = document.createElement(\"div\");\n view.id = problem.counterId + \"-block-\" + problem.blockIndex;\n problem.blockIndex += 1;\n $(view).addClass(\"block\");\n var sharedIndent = lines[0].indent;\n for (let i = 1; i < lines.length; i++) {\n sharedIndent = Math.min(sharedIndent, lines[i].indent);\n }\n var lineDiv = document.createElement(\"div\");\n $(lineDiv).addClass(\"lines\");\n $(view).append(lineDiv);\n for (let i = 0; i < lines.length; i++) {\n var line = lines[i];\n var lineIndent;\n if (problem.noindent) {\n lineIndent = line.indent;\n } else {\n lineIndent = line.indent - sharedIndent;\n }\n $(line.view).removeClass(\"indent1 indent2 indent3 indent4\");\n if (\n this.problem.options.language != \"natural\" &&\n this.problem.options.language != \"math\"\n ) {\n if (lineIndent > 0) {\n $(line.view).addClass(\"indent\" + lineIndent);\n }\n }\n lineDiv.appendChild(line.view);\n }\n var labelDiv = document.createElement(\"div\");\n $(labelDiv).addClass(\"labels\");\n if (this.problem.options.numbered == \"left\") {\n $(lineDiv).addClass(\"border_left\");\n $(view).prepend(labelDiv);\n $(view).css({\n \"justify-content\": \"flex-start\",\n });\n } else if (this.problem.options.numbered == \"right\") {\n $(labelDiv).addClass(\"border_left\");\n $(labelDiv).css({\n float: \"right\",\n });\n $(view).css({\n \"justify-content\": \"space-between\",\n });\n $(view).append(labelDiv);\n }\n this.view = view;\n }\n // Add a line (from another block) to this block\n addLine(line) {\n $(line.view).removeClass(\"indent1 indent2 indent3 indent4\");\n if (this.problem.noindent) {\n if (line.indent > 0) {\n $(line.view).addClass(\"indent\" + line.indent);\n }\n } else {\n var lines = this.lines;\n var sharedIndent = lines[0].indent;\n for (let i = 1; i < lines.length; i++) {\n sharedIndent = Math.min(sharedIndent, lines[i].indent);\n }\n if (sharedIndent < line.indent) {\n $(line.view).addClass(\"indent\" + (line.indent - sharedIndent));\n } else if (sharedIndent > line.indent) {\n for (let i = 0; i < lines.length; i++) {\n $(lines[i].view).removeClass(\n \"indent1 indent2 indent3 indent4\"\n );\n // todo: if language is natural or math then don't do this\n if (\n this.options.language !== \"natural\" &&\n this.options.language !== \"math\"\n ) {\n $(lines[i].view).addClass(\n \"indent\" + (lines[i].indent - line.indent)\n );\n }\n }\n }\n }\n this.lines.push(line);\n $(this.view).children(\".lines\")[0].appendChild(line.view);\n }\n // Add the contents of that block to myself and then delete that block\n consumeBlock(block) {\n for (let i = 0; i < block.lines.length; i++) {\n this.addLine(block.lines[i]);\n }\n if ($(block.view).attr(\"tabindex\") == \"0\") {\n this.makeTabIndex();\n }\n $(block.view).detach();\n var newBlocks = [];\n for (let i = 0; i < this.problem.blocks.length; i++) {\n if (this.problem.blocks[i] !== block) {\n newBlocks.push(this.problem.blocks[i]);\n }\n }\n for (let i = 0; i < block.labels.length; i++) {\n this.addLabel(\n block.labels[i][0],\n this.lines.length - block.lines.length + block.labels[i][1]\n );\n }\n this.problem.blocks = newBlocks;\n this.problem.state = undefined;\n this.problem.updateView();\n }\n // Update the model and view when block is converted to contain indent\n addIndent() {\n // Update the lines model / view\n for (let i = 0; i < this.lines.length; i++) {\n var line = this.lines[i];\n if (line.indent > 0) {\n $(line.view).removeClass(\"indent1 indent2 indent3 indent4\");\n $(line.view).addClass(\"indent\" + line.indent);\n }\n }\n // Update the block model / view\n this.indent = 0;\n $(this.view).css({\n \"padding-left\": \"\",\n width: this.problem.areaWidth - 22,\n });\n }\n // Add a label to block and update its view\n addLabel(label, line) {\n var div = document.createElement(\"div\");\n $(div).addClass(\"block-label\");\n if (this.problem.options.numbered == \"right\") {\n $(div).addClass(\"right-label\");\n }\n if (this.problem.options.numbered == \"left\") {\n $(div).addClass(\"left-label\");\n }\n $(div).append(document.createTextNode(label));\n $(this.view).children(\".labels\")[0].append(div);\n if (this.labels.length != 0) {\n $(div).css(\n \"margin-top\",\n (line - this.labels[this.labels.length - 1][1] - 1) *\n this.lines[line].view.offsetHeight\n );\n }\n this.labels.push([label, line]);\n }\n // Initialize Interactivity\n initializeInteractivity() {\n if ($(this.view).hasClass(\"disabled\")) {\n return this;\n }\n $(this.view).attr(\"tabindex\", \"-1\");\n this.hammer = new Hammer.Manager(this.view, {\n recognizers: [\n [\n Hammer.Pan,\n {\n direction: Hammer.DIRECTION_ALL,\n threshold: 0,\n pointers: 1,\n },\n ],\n ],\n });\n var that = this;\n this.hammer.on(\"panstart\", function (event) {\n that.panStart(event);\n });\n this.hammer.on(\"panend\", function (event) {\n that.panEnd(event);\n });\n this.hammer.on(\"panmove\", function (event) {\n that.panMove(event);\n });\n }\n // Return a boolean as to whether this block is able to be selected\n enabled() {\n return $(this.view).attr(\"tabindex\") !== undefined;\n }\n // Return a boolean as to whether this block is a distractor\n isDistractor() {\n return this.lines[0].distractor;\n }\n // Return a boolean as to whether this block is in the source area\n inSourceArea() {\n var children = this.problem.sourceArea.childNodes;\n for (let i = 0; i < children.length; i++) {\n var item = children[i];\n if (item.id == this.view.id) {\n return true;\n }\n }\n return false;\n }\n // Return the page X position of the center of the view\n pageXCenter() {\n var boundingRect = this.view.getBoundingClientRect();\n var pageXCenter =\n window.pageXOffset + boundingRect.left + boundingRect.width / 2;\n return pageXCenter;\n }\n // Return the page Y position of the center of the view\n pageYCenter() {\n var boundingRect = this.view.getBoundingClientRect();\n var pageYCenter =\n window.pageYOffset + boundingRect.top + boundingRect.height / 2;\n return pageYCenter;\n }\n // Of all the line indents, return the minimum value\n minimumLineIndent() {\n var minimumLineIndent = this.lines[0].indent;\n for (let i = 1; i < this.lines.length; i++) {\n minimumLineIndent = Math.min(\n this.lines[i].indent,\n minimumLineIndent\n );\n }\n return minimumLineIndent;\n }\n // Return the last block in the source area that matches the paired bin it is in\n slideUnderBlock() {\n var sourceBlocks = this.problem.sourceBlocks();\n if (sourceBlocks.length == 0) {\n return undefined;\n }\n var pairedBin = this.pairedBin();\n if (pairedBin == -1) {\n return sourceBlocks[sourceBlocks.length - 1];\n }\n for (let i = sourceBlocks.length - 1; i >= 0; i--) {\n var block = sourceBlocks[i];\n if (block.pairedBin() == pairedBin) {\n return block;\n }\n }\n return sourceBlocks[sourceBlocks.length - 1];\n }\n // Return which paired bin it is in (-1) if not\n pairedBin() {\n var pairedBins = this.problem.pairedBins;\n for (var i = 0; i < pairedBins.length; i++) {\n if (this.matchesBin(pairedBins[i])) {\n return i;\n }\n }\n return -1;\n }\n // Return true if all lines are in that bin\n matchesBin(bin) {\n for (var i = 0; i < this.lines.length; i++) {\n var test = this.lines[i].index;\n if (bin.indexOf(test) == -1) {\n return false;\n }\n }\n return true;\n }\n // Return a list of indexes where this block could be inserted before\n validSourceIndexes() {\n var blocks = this.problem.sourceBlocks();\n var indexes = [];\n var pairedBin = this.pairedBin();\n var i, lastBin;\n if (pairedBin >= 0) {\n for (i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n if (block.view.id !== this.view.id) {\n var blockBin = block.pairedBin();\n if (blockBin == pairedBin) {\n indexes.push(i);\n } else if (lastBin == pairedBin) {\n indexes.push(i);\n }\n lastBin = blockBin;\n }\n }\n if (lastBin == pairedBin) {\n indexes.push(blocks.length);\n }\n if (indexes.length > 0) {\n return indexes;\n }\n }\n for (i = 0; i < blocks.length; i++) {\n let block = blocks[i];\n if (block.view.id !== this.view.id) {\n let blockBin = block.pairedBin();\n if (blockBin !== lastBin) {\n indexes.push(i);\n } else if (blockBin == -1) {\n indexes.push(i);\n }\n lastBin = blockBin;\n }\n }\n indexes.push(blocks.length);\n return indexes;\n }\n // A measure of how far the middle of this block is vertically positioned\n verticalOffset() {\n var verticalOffset;\n if (this.inSourceArea()) {\n verticalOffset =\n this.problem.sourceArea.getBoundingClientRect().top;\n } else {\n verticalOffset =\n this.problem.answerArea.getBoundingClientRect().top;\n }\n verticalOffset =\n this.view.getBoundingClientRect().top +\n this.view.getBoundingClientRect().bottom -\n verticalOffset * 2;\n return verticalOffset;\n }\n // This block just gained textual focus\n newFocus() {\n if (this.problem.textFocus == undefined) {\n this.problem.enterKeyboardMode();\n this.problem.textFocus = this;\n this.problem.textMove = false;\n $(this.view).addClass(\"down\");\n } else if (this.problem.textFocus == this) {\n if (this.problem.textMove) {\n $(this.view).addClass(\"up\");\n } else {\n $(this.view).addClass(\"down\");\n }\n } else {\n // already in keyboard mode\n this.problem.textFocus = this;\n this.problem.textMove = false;\n $(this.view).addClass(\"down\");\n }\n this.problem.textMoving = false;\n }\n // This block just lost textual focus\n releaseFocus() {\n $(this.view).removeClass(\"down up\");\n if (this.problem.textFocus == this) {\n if (!this.problem.textMoving) {\n // exit out of problem but stay way into problem\n this.problem.textFocus = undefined;\n if (this.problem.textMove) {\n this.problem.logMove(\"kmove\");\n this.problem.textMove = false;\n }\n this.problem.exitKeyboardMode();\n }\n } else {\n // become selectable, but not active\n $(this.view).attr(\"tabindex\", \"-1\");\n $(this.view).unbind(\"focus\");\n $(this.view).unbind(\"blur\");\n $(this.view).unbind(\"keydown\");\n }\n }\n // Make this block into the keyboard entry point\n makeTabIndex() {\n $(this.view).attr(\"tabindex\", \"0\");\n var that = this;\n $(this.view).focus(function () {\n that.newFocus();\n });\n $(this.view).blur(function () {\n that.releaseFocus();\n });\n $(this.view).keydown(function (event) {\n that.keyDown(event);\n });\n }\n // Called to disable interaction for the future\n disable() {\n if (this.hammer !== undefined) {\n this.hammer.set({ enable: false });\n }\n if ($(this.view).attr(\"tabindex\") == \"0\") {\n this.releaseFocus();\n $(this.view).removeAttr(\"tabindex\");\n this.problem.initializeTabIndex();\n } else {\n $(this.view).removeAttr(\"tabindex\");\n }\n }\n // Enable functionality after reset button has been pressed\n resetView() {\n if (this.hammer !== undefined) {\n this.hammer.set({ enable: true });\n }\n if (!$(this.view)[0].hasAttribute(\"tabindex\")) {\n $(this.view).attr(\"tabindex\", \"-1\");\n }\n $(this.view).css({ opacity: \"\" });\n }\n // Called to destroy interaction for the future\n destroy() {\n if (this.hammer !== undefined) {\n this.hammer.destroy();\n delete this.hammer;\n }\n if ($(this.view).attr(\"tabindex\") == \"0\") {\n this.releaseFocus();\n }\n $(this.view).removeAttr(\"tabindex\");\n }\n // Called when a block is picked up\n panStart(event) {\n this.problem.clearFeedback();\n if (this.problem.started == undefined) {\n // log the first time that something gets moved\n this.problem.started = true;\n this.problem.logMove(\"start\");\n }\n if (this.problem.textFocus !== undefined) {\n // stop text focus when dragging\n this.problem.textFocus.releaseFocus();\n }\n this.problem.moving = this;\n // Update the view\n this.problem.movingX = event.srcEvent.pageX;\n this.problem.movingY = event.srcEvent.pageY;\n this.problem.updateView();\n }\n // Called when a block is dropped\n panEnd(event) {\n this.problem.isAnswered = true;\n delete this.problem.moving;\n delete this.problem.movingX;\n delete this.problem.movingY;\n this.problem.updateView();\n this.problem.logMove(\"move\");\n }\n // Called when a block is moved\n panMove(event) {\n // Update the view\n this.problem.movingX = event.srcEvent.pageX;\n this.problem.movingY = event.srcEvent.pageY;\n this.problem.updateView();\n }\n // Handle a keypress event when in focus\n keyDown(event) {\n if (this.problem.started == undefined) {\n // log the first time that something gets moved\n this.problem.started = true;\n this.problem.logMove(\"kstart\");\n }\n switch (event.keyCode) {\n case 37: // left\n if (this.problem.textMove) {\n this.moveLeft();\n } else {\n this.selectLeft();\n }\n break;\n case 38: // up\n if (this.problem.textMove) {\n this.moveUp();\n } else {\n this.selectUp();\n }\n event.preventDefault();\n break;\n case 39: // right\n if (this.problem.textMove) {\n this.moveRight();\n } else {\n this.selectRight();\n }\n event.preventDefault();\n break;\n case 40: // down\n if (this.problem.textMove) {\n this.moveDown();\n } else {\n this.selectDown();\n }\n event.preventDefault();\n break;\n case 32: // space\n this.toggleMove();\n event.preventDefault();\n break;\n case 13: // enter\n this.toggleMove();\n event.preventDefault();\n break;\n }\n }\n // Move block left\n moveLeft() {\n var index, block;\n if (!this.inSourceArea()) {\n if (this.indent == 0) {\n // move to source area\n var blocks = this.problem.sourceBlocks();\n var offset = this.verticalOffset();\n var validSourceIndexes = this.validSourceIndexes();\n for (var i = 0; i < validSourceIndexes.length; i++) {\n index = validSourceIndexes[i];\n if (index == blocks.length) {\n this.problem.textMoving = true;\n this.problem.sourceArea.appendChild(this.view);\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n return this;\n } else {\n block = blocks[index];\n if (block.verticalOffset() >= offset) {\n break;\n }\n }\n }\n this.problem.textMoving = true;\n this.problem.sourceArea.insertBefore(this.view, block.view);\n $(this.view).focus();\n } else {\n // reduce indent\n this.indent = this.indent - 1;\n }\n this.problem.state = undefined;\n this.problem.updateView();\n }\n }\n // Move block up\n moveUp() {\n if (this.inSourceArea()) {\n let blocks = this.problem.sourceBlocks();\n var offset = this.verticalOffset();\n var validSourceIndexes = this.validSourceIndexes();\n for (let i = 0; i < validSourceIndexes.length; i++) {\n var index =\n validSourceIndexes[validSourceIndexes.length - 1 - i];\n if (index < blocks.length) {\n var block = blocks[index];\n if (block.verticalOffset() < offset) {\n this.problem.textMoving = true;\n this.problem.sourceArea.insertBefore(\n this.view,\n block.view\n );\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n return this;\n }\n }\n }\n } else {\n let blocks = this.problem.answerBlocks();\n for (let i = 0; i < blocks.length; i++) {\n if (blocks[i].view.id == this.view.id) {\n if (i == 0) {\n return this;\n }\n this.problem.textMoving = true;\n this.problem.answerArea.insertBefore(\n this.view,\n blocks[i - 1].view\n );\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n }\n }\n }\n }\n // Move block right\n moveRight() {\n if (this.inSourceArea()) {\n // move to answer area\n this.indent = 0;\n var offset = this.verticalOffset();\n var answerBlocks = this.problem.answerBlocks();\n for (var i = 0; i < answerBlocks.length; i++) {\n var item = answerBlocks[i];\n var itemOffset = item.verticalOffset();\n if (itemOffset >= offset) {\n this.problem.textMoving = true;\n this.problem.answerArea.insertBefore(this.view, item.view);\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n return this;\n }\n }\n this.problem.textMoving = true;\n this.problem.answerArea.appendChild(this.view);\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n } else {\n // in answer area: increase the indent\n if (this.indent !== this.problem.indent) {\n this.indent = this.indent + 1;\n this.problem.state = undefined;\n this.problem.updateView();\n }\n }\n }\n // Move block down\n moveDown() {\n if (this.inSourceArea()) {\n let blocks = this.problem.sourceBlocks();\n var validSourceIndexes = this.validSourceIndexes();\n for (let i = 0; i < blocks.length; i++) {\n if (blocks[i].view.id == this.view.id) {\n var myIndex = i;\n }\n }\n for (let i = 0; i < validSourceIndexes.length; i++) {\n var index = validSourceIndexes[i];\n if (index == blocks.length) {\n this.problem.textMoving = true;\n this.problem.sourceArea.appendChild(this.view);\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n return this;\n } else if (index - myIndex > 1) {\n this.problem.textMoving = true;\n this.problem.sourceArea.insertBefore(\n this.view,\n blocks[index].view\n );\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n return this;\n }\n }\n } else {\n let blocks = this.problem.answerBlocks();\n for (var i = 0; i < blocks.length; i++) {\n if (blocks[i].view.id == this.view.id) {\n if (i == blocks.length - 1) {\n return this;\n } else if (i == blocks.length - 2) {\n this.problem.textMoving = true;\n this.problem.answerArea.appendChild(this.view);\n } else {\n this.problem.textMoving = true;\n this.problem.answerArea.insertBefore(\n this.view,\n blocks[i + 2].view\n );\n }\n $(this.view).focus();\n this.problem.state = undefined;\n this.problem.updateView();\n }\n }\n }\n }\n // Move selection left\n selectLeft() {\n if (!this.inSourceArea()) {\n var offset = this.verticalOffset();\n var sourceBlocks = this.problem.enabledSourceBlocks();\n if (sourceBlocks.length == 0) {\n return this;\n }\n var chooseNext = sourceBlocks[0];\n var chooseOffset = chooseNext.verticalOffset() - offset;\n for (var i = 1; i < sourceBlocks.length; i++) {\n var item = sourceBlocks[i];\n var itemOffset = item.verticalOffset() - offset;\n if (Math.abs(itemOffset) < Math.abs(chooseOffset)) {\n chooseNext = item;\n chooseOffset = itemOffset;\n }\n }\n this.problem.textFocus = chooseNext;\n chooseNext.makeTabIndex();\n $(chooseNext.view).focus();\n }\n }\n // Move selection up\n selectUp() {\n var chooseNext = false;\n var blocks;\n if (this.inSourceArea()) {\n blocks = this.problem.enabledSourceBlocks();\n } else {\n blocks = this.problem.enabledAnswerBlocks();\n }\n for (var i = blocks.length - 1; i >= 0; i--) {\n var item = blocks[i];\n if (chooseNext) {\n this.problem.textFocus = item;\n item.makeTabIndex();\n $(item.view).focus();\n return this;\n } else {\n if (item.view.id == this.view.id) {\n chooseNext = true;\n }\n }\n }\n }\n // Move selection right\n selectRight() {\n if (this.inSourceArea()) {\n var offset = this.verticalOffset();\n var blocks = this.problem.enabledAnswerBlocks();\n if (blocks.length == 0) {\n return this;\n }\n var chooseNext = blocks[0];\n var chooseOffset = chooseNext.verticalOffset() - offset;\n for (var i = 1; i < blocks.length; i++) {\n var item = blocks[i];\n var itemOffset = item.verticalOffset() - offset;\n if (Math.abs(itemOffset) < Math.abs(chooseOffset)) {\n chooseNext = item;\n chooseOffset = itemOffset;\n }\n }\n this.problem.textFocus = chooseNext;\n chooseNext.makeTabIndex();\n $(chooseNext.view).focus();\n }\n }\n // Move selection down\n selectDown() {\n var chooseNext = false;\n var blocks;\n if (this.inSourceArea()) {\n blocks = this.problem.enabledSourceBlocks();\n } else {\n blocks = this.problem.enabledAnswerBlocks();\n }\n for (var i = 0; i < blocks.length; i++) {\n var item = blocks[i];\n if (chooseNext) {\n this.problem.textFocus = item;\n item.makeTabIndex();\n $(item.view).focus();\n return this;\n } else {\n if (item.view.id == this.view.id) {\n chooseNext = true;\n }\n }\n }\n }\n // Toggle whether to move this block\n toggleMove() {\n if (this.problem.textMove) {\n $(this.view).removeClass(\"up\");\n $(this.view).addClass(\"down\");\n this.problem.textMove = false;\n this.problem.logMove(\"kmove\");\n } else {\n $(this.view).removeClass(\"down\");\n $(this.view).addClass(\"up\");\n this.problem.textMove = true;\n }\n }\n // Answer a string that represents this codeblock for saving\n hash() {\n var hash = \"\";\n for (var i = 0; i < this.lines.length; i++) {\n hash += this.lines[i].index + \"_\";\n }\n hash += this.indent;\n return hash;\n }\n // Answer what the indent should be for the solution\n solutionIndent() {\n var sharedIndent = this.lines[0].indent;\n for (var i = 1; i < this.lines.length; i++) {\n sharedIndent = Math.min(sharedIndent, this.lines[i].indent);\n }\n return sharedIndent;\n }\n}\n","/* =====================================================================\n==== Parsons Runestone Directive Javascript ============================\n======== Renders a Parsons problem based on the HTML created by the\n======== parsons.py script and the RST file.\n==== CONTRIBUTORS ======================================================\n======== Isaiah Mayerchak\n======== Jeff Rick\n======== Barbara Ericson\n======== Cole Bowers\n==== Adapted form the original JS Parsons by ===========================\n======== Ville Karavirta\n======== Petri Ihantola\n======== Juha Helminen\n======== Mike Hewner\n===================================================================== */\n/* =====================================================================\n==== LineBasedGrader Object ============================================\n======== Used for grading a Parsons problem.\n==== PROPERTIES ========================================================\n======== problem: the Parsons problem\n===================================================================== */\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"./parsons-i18n.en.js\";\nimport \"./parsons-i18n.pt-br.js\";\nimport \"./prettify.js\";\nimport \"../css/parsons.less\";\nimport \"../css/prettify.css\";\nimport LineBasedGrader from \"./lineGrader\";\nimport DAGGrader from \"./dagGrader\";\nimport ParsonsLine from \"./parsonsLine\";\nimport ParsonsBlock from \"./parsonsBlock\";\n\n/* =====================================================================\n==== Parsons Object ====================================================\n======== The model and view of a Parsons problem based on what is\n======== specified in the HTML, which is based on what is specified\n======== in the RST file\n==== PROPERTIES ========================================================\n======== options: options largely specified from the HTML\n======== grader: a LineGrader for grading the problem\n======== lines: an array of all ParsonsLine as specified in the problem\n======== solution: an array of ParsonsLine in the solution\n======== blocks: the current blocks\n======== sourceArea: the element that contains the source blocks\n======== answerArea: the element that contains the answer blocks\n===================================================================== */\n\n/* =====================================================================\n==== INITIALIZATION ====================================================\n===================================================================== */\n\nexport default class Parsons extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; // entire <pre> element that will be replaced by new HTML\n this.containerDiv = orig;\n this.origElem = $(orig).find(\"pre.parsonsblocks\")[0];\n // Find the question text and store it in .question\n this.question = $(orig).find(`.parsons_question`)[0];\n this.useRunestoneServices = opts.useRunestoneServices;\n this.divid = opts.orig.id;\n // Set the storageId (key for storing data)\n var storageId = super.localStorageKey();\n this.storageId = storageId;\n this.children = this.origElem.childNodes; // this contains all of the child elements of the entire tag...\n this.contentArray = [];\n Parsons.counter++; // Unique identifier\n this.counterId = \"parsons-\" + Parsons.counter;\n\n // for (var i = 0; i < this.children.length; i++) {\n // if ($(this.children[i]).is(\"[data-question]\")) {\n // this.question = this.children[i];\n // break;\n // }\n // }\n this.initializeOptions();\n this.grader =\n this.options.grader === \"dag\"\n ? new DAGGrader(this)\n : new LineBasedGrader(this);\n this.grader.showfeedback = this.showfeedback;\n var fulltext = $(this.origElem).html();\n this.blockIndex = 0;\n this.checkCount = 0;\n this.numDistinct = 0;\n this.hasSolved = false;\n this.initializeLines(fulltext.trim());\n this.initializeView();\n this.caption = \"Parsons\";\n this.addCaption(\"runestone\");\n // Check the server for an answer to complete things\n this.checkServer(\"parsons\", true);\n this.runnableDiv = null;\n }\n // Based on the data-fields in the original HTML, initialize options\n initializeOptions() {\n var options = {\n pixelsPerIndent: 30,\n };\n // add maxdist and order if present\n var maxdist = $(this.origElem).data(\"maxdist\");\n var order = $(this.origElem).data(\"order\");\n var noindent = $(this.origElem).data(\"noindent\");\n var adaptive = $(this.origElem).data(\"adaptive\");\n var numbered = $(this.origElem).data(\"numbered\");\n var grader = $(this.origElem).data(\"grader\");\n options[\"numbered\"] = numbered;\n options[\"grader\"] = grader;\n if (maxdist !== undefined) {\n options[\"maxdist\"] = maxdist;\n }\n if (order !== undefined) {\n // convert order string to array of numbers\n order = order.match(/\\d+/g);\n for (var i = 0; i < order.length; i++) {\n order[i] = parseInt(order[i]);\n }\n options[\"order\"] = order;\n }\n if (noindent == undefined) {\n noindent = false;\n }\n options[\"noindent\"] = noindent;\n this.noindent = noindent;\n if (adaptive == undefined) {\n adaptive = false;\n } else if (adaptive) {\n this.initializeAdaptive();\n }\n options[\"adaptive\"] = adaptive;\n // add locale and language\n var locale = eBookConfig.locale;\n if (locale == undefined) {\n locale = \"en\";\n }\n options[\"locale\"] = locale;\n var language = $(this.origElem).data(\"language\");\n if (language == undefined) {\n language = eBookConfig.language;\n if (language == undefined) {\n language = \"python\";\n }\n }\n options[\"language\"] = language;\n var prettifyLanguage = {\n python: \"prettyprint lang-py\",\n java: \"prettyprint lang-java\",\n javascript: \"prettyprint lang-js\",\n html: \"prettyprint lang-html\",\n c: \"prettyprint lang-c\",\n \"c++\": \"prettyprint lang-cpp\",\n cpp: \"prettyprint lang-cpp\",\n ruby: \"prettyprint lang-rb\",\n }[language];\n if (prettifyLanguage == undefined) {\n prettifyLanguage = \"\";\n }\n options[\"prettifyLanguage\"] = prettifyLanguage;\n //runnable if the parent has a parsons-runnable attr\n options[\"runnable\"] = $(this.origElem).data(\"runnable\");\n this.options = options;\n }\n // Based on what is specified in the original HTML, create the HTML view\n initializeView() {\n this.outerDiv = document.createElement(\"div\");\n $(this.outerDiv).addClass(\"parsons\");\n this.outerDiv.id = this.counterId;\n this.parsTextDiv = document.createElement(\"div\");\n $(this.parsTextDiv).addClass(\"parsons-text\");\n this.keyboardTip = document.createElement(\"div\");\n $(this.keyboardTip).attr(\"role\", \"tooltip\");\n this.keyboardTip.id = this.counterId + \"-tip\";\n this.keyboardTip.innerHTML = $.i18n(\"msg_parson_arrow_navigate\");\n this.outerDiv.appendChild(this.keyboardTip);\n $(this.keyboardTip).hide();\n this.sortContainerDiv = document.createElement(\"div\");\n $(this.sortContainerDiv).addClass(\"sortable-code-container\");\n $(this.sortContainerDiv).attr(\n \"aria-describedby\",\n this.counterId + \"-tip\"\n );\n this.outerDiv.appendChild(this.sortContainerDiv);\n this.sourceRegionDiv = document.createElement(\"div\");\n this.sourceRegionDiv.id = this.counterId + \"-sourceRegion\";\n $(this.sourceRegionDiv).addClass(\"sortable-code\");\n this.sourceLabel = document.createElement(\"div\");\n $(this.sourceLabel).attr(\"role\", \"tooltip\");\n this.sourceLabel.id = this.counterId + \"-sourceTip\";\n this.sourceLabel.innerHTML = $.i18n(\"msg_parson_drag_from_here\");\n this.sourceRegionDiv.appendChild(this.sourceLabel);\n this.sortContainerDiv.appendChild(this.sourceRegionDiv);\n this.sourceArea = document.createElement(\"div\");\n this.sourceArea.id = this.counterId + \"-source\";\n $(this.sourceArea).addClass(\"source\");\n $(this.sourceArea).attr(\n \"aria-describedby\",\n this.counterId + \"-sourceTip\"\n );\n this.sourceRegionDiv.appendChild(this.sourceArea);\n this.answerRegionDiv = document.createElement(\"div\");\n this.answerRegionDiv.id = this.counterId + \"-answerRegion\";\n $(this.answerRegionDiv).addClass(\"sortable-code\");\n this.answerLabel = document.createElement(\"div\");\n $(this.answerLabel).attr(\"role\", \"tooltip\");\n this.answerLabel.id = this.counterId + \"-answerTip\";\n this.answerLabel.innerHTML = $.i18n(\"msg_parson_drag_to_here\");\n this.answerRegionDiv.appendChild(this.answerLabel);\n this.sortContainerDiv.appendChild(this.answerRegionDiv);\n this.answerArea = document.createElement(\"div\");\n this.answerArea.id = this.counterId + \"-answer\";\n $(this.answerArea).attr(\n \"aria-describedby\",\n this.counterId + \"-answerTip\"\n );\n this.answerRegionDiv.appendChild(this.answerArea);\n this.parsonsControlDiv = document.createElement(\"div\");\n $(this.parsonsControlDiv).addClass(\"parsons-controls\");\n this.outerDiv.appendChild(this.parsonsControlDiv);\n var that = this;\n this.checkButton = document.createElement(\"button\");\n $(this.checkButton).attr(\"class\", \"btn btn-success\");\n this.checkButton.textContent = $.i18n(\"msg_parson_check_me\");\n this.checkButton.id = this.counterId + \"-check\";\n this.parsonsControlDiv.appendChild(this.checkButton);\n this.checkButton.type = \"button\";\n this.checkButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n that.checkCurrentAnswer();\n that.logCurrentAnswer();\n that.renderFeedback();\n });\n this.resetButton = document.createElement(\"button\");\n $(this.resetButton).attr(\"class\", \"btn btn-default\");\n this.resetButton.textContent = $.i18n(\"msg_parson_reset\");\n this.resetButton.id = this.counterId + \"-reset\";\n this.resetButton.type = \"button\";\n this.parsonsControlDiv.appendChild(this.resetButton);\n this.resetButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n that.clearFeedback();\n $(that.checkButton).prop(\"disabled\", false);\n that.resetView();\n that.checkCount = 0;\n that.logMove(\"reset\");\n that.setLocalStorage();\n });\n if (this.options.adaptive) {\n this.helpButton = document.createElement(\"button\");\n $(this.helpButton).attr(\"class\", \"btn btn-primary\");\n this.helpButton.textContent = $.i18n(\"msg_parson_help\");\n this.helpButton.id = this.counterId + \"-help\";\n this.helpButton.disabled = false; // bje\n this.parsonsControlDiv.appendChild(this.helpButton);\n this.helpButton.addEventListener(\"click\", function (event) {\n event.preventDefault();\n that.helpMe();\n });\n }\n this.messageDiv = document.createElement(\"div\");\n this.messageDiv.id = this.counterId + \"-message\";\n this.messageDiv.setAttribute(\"aria-live\", \"polite\");\n this.messageDiv.setAttribute(\"role\", \"status\");\n this.parsonsControlDiv.appendChild(this.messageDiv);\n this.messageDiv.style.visibility = \"hidden\";\n $(this.origElem).replaceWith(this.outerDiv);\n $(this.outerDiv).closest(\".sqcontainer\").css(\"max-width\", \"none\");\n if (this.outerDiv) {\n if ($(this.question).html().match(/^\\s+$/)) {\n $(this.question).remove();\n } else {\n $(this.outerDiv).prepend(this.question);\n }\n }\n }\n // Initialize lines and solution properties\n initializeLines(text) {\n this.lines = [];\n // Create the initial blocks\n var textBlocks = text.split(\"---\");\n if (textBlocks.length === 1) {\n // If there are no ---, then every line is its own block\n textBlocks = text.split(\"\\n\");\n }\n var solution = [];\n var indents = [];\n for (var i = 0; i < textBlocks.length; i++) {\n var textBlock = textBlocks[i];\n // Figure out options based on the #option\n // Remove the options from the code\n // only options are #paired or #distractor\n var options = {};\n var distractIndex;\n var distractHelptext = \"\";\n var tagIndex;\n var tag;\n var dependsIndex;\n var depends = [];\n if (textBlock.includes(\"#paired:\")) {\n distractIndex = textBlock.indexOf(\"#paired:\");\n distractHelptext = textBlock\n .substring(distractIndex + 8, textBlock.length)\n .trim();\n textBlock = textBlock.substring(0, distractIndex + 7);\n } else if (textBlock.includes(\"#distractor:\")) {\n distractIndex = textBlock.indexOf(\"#distractor:\");\n distractHelptext = textBlock\n .substring(distractIndex + 12, textBlock.length)\n .trim();\n textBlock = textBlock.substring(0, distractIndex + 11);\n } else if (textBlock.includes(\"#tag:\")) {\n textBlock = textBlock.replace(/#tag:.*;.*;/, (s) =>\n s.replace(/\\s+/g, \"\")\n ); // remove whitespace in tag and depends list\n tagIndex = textBlock.indexOf(\"#tag:\");\n tag = textBlock.substring(\n tagIndex + 5,\n textBlock.indexOf(\";\", tagIndex + 5)\n );\n if (tag == \"\") tag = \"block-\" + i;\n dependsIndex = textBlock.indexOf(\";depends:\");\n let dependsString = textBlock.substring(\n dependsIndex + 9,\n textBlock.indexOf(\";\", dependsIndex + 9)\n );\n depends =\n dependsString.length > 0 ? dependsString.split(\",\") : [];\n }\n if (textBlock.includes('class=\"displaymath')) {\n options[\"displaymath\"] = true;\n } else {\n options[\"displaymath\"] = false;\n }\n textBlock = textBlock.replace(\n /\\s*#(paired|distractor|tag:.*;.*;)\\s*/g,\n function (mystring, arg1) {\n options[arg1] = true;\n return \"\";\n }\n );\n // Create lines\n var lines = [];\n if (!options[\"displaymath\"]) {\n var split = textBlock.split(\"\\n\");\n } else {\n var split = [textBlock];\n }\n\n for (var j = 0; j < split.length; j++) {\n var code = split[j];\n let isBlank = /^\\s*$/.test(code);\n // discard up to one blank leading or trailing line\n if (isBlank && (j == 0 || j == split.length - 1)) {\n continue;\n }\n var line = new ParsonsLine(\n this,\n code,\n options[\"displaymath\"]\n );\n lines.push(line);\n if (options[\"paired\"]) {\n line.distractor = true;\n line.paired = true;\n line.distractHelptext = distractHelptext;\n } else if (options[\"distractor\"]) {\n line.distractor = true;\n line.paired = false;\n line.distractHelptext = distractHelptext;\n } else {\n line.distractor = false;\n line.paired = false;\n if (this.options.grader === \"dag\") {\n line.tag = tag;\n line.depends = depends;\n }\n solution.push(line);\n }\n if ($.inArray(line.indent, indents) == -1) {\n indents.push(line.indent);\n }\n }\n if (lines.length > 0) {\n // Add groupWithNext\n for (j = 0; j < lines.length - 1; j++) {\n lines[j].groupWithNext = true;\n }\n lines[lines.length - 1].groupWithNext = false;\n }\n }\n // Normalize the indents\n indents = indents.sort(function (a, b) {\n return a - b;\n });\n for (i = 0; i < this.lines.length; i++) {\n line = this.lines[i];\n line.indent = indents.indexOf(line.indent);\n }\n this.solution = solution;\n }\n // Based on the blocks, create the source and answer areas\n async initializeAreas(sourceBlocks, answerBlocks, options) {\n // Create blocks property as the sum of the two\n var blocks = [];\n var i, block;\n for (i = 0; i < sourceBlocks.length; i++) {\n block = sourceBlocks[i];\n blocks.push(block);\n this.sourceArea.appendChild(block.view);\n }\n for (i = 0; i < answerBlocks.length; i++) {\n block = answerBlocks[i];\n blocks.push(block);\n this.answerArea.appendChild(block.view);\n }\n this.blocks = blocks;\n // If present, disable some blocks\n var disabled = options.disabled;\n if (disabled !== undefined) {\n for (i = 0; i < blocks.length; i++) {\n block = blocks[i];\n if (disabled.includes(block.lines[0].index)) {\n $(block.view).addClass(\"disabled\");\n }\n }\n }\n // Determine how much indent should be possible in the answer area\n var indent = 0;\n if (!this.noindent) {\n if (this.options.language == \"natural\") {\n indent = this.solutionIndent();\n } else {\n indent = Math.max(0, this.solutionIndent());\n }\n }\n this.indent = indent;\n // For rendering, place in an onscreen position\n var isHidden = this.outerDiv.offsetParent == null;\n var replaceElement;\n if (isHidden) {\n replaceElement = document.createElement(\"div\");\n replaceElement.classList.add(\"runestone-sphinx\");\n $(this.outerDiv).replaceWith(replaceElement);\n // add runestone-sphinx class so the css rules for parsons will apply\n $(this.outerDiv).addClass(\"runestone-sphinx\");\n document.body.appendChild(this.outerDiv);\n }\n\n // only do prettify if prism is not loaded\n if (this.options.prettifyLanguage !== \"\" && typeof Prism === \"undefined\") {\n prettyPrint();\n }\n\n const lang = this.options[\"language\"];\n if (lang && typeof Prism !== \"undefined\") {\n const codeEls = this.containerDiv.querySelectorAll(\"code\");\n for (const el of codeEls) {\n el.classList.add(`language-${lang}`);\n }\n Prism.highlightAllUnder(this.containerDiv);\n }\n\n for (let i = 0; i < this.lines.length; i++) {\n this.lines[i].initializeWidth();\n }\n\n // Set the source width to its max value. This allows the blocks to be created\n // at their \"natural\" size. As long as that is smaller than the max.\n // This allows us to use sensible functions to determine the correct heights\n // and widths for the drag and drop areas.\n // Like most of the sizing, this is a bit of a hack.\n const availableWidth = this.outerDiv.offsetWidth;\n const answerIndentSpace = this.options.pixelsPerIndent * this.indent;\n const marginFudge = 80; // margins, padding, etc...\n let maxSourceAreaWidth = (availableWidth - answerIndentSpace - marginFudge) / 2;\n if (this.options.numbered != undefined) {\n maxSourceAreaWidth -= 25;\n }\n this.sourceArea.style.width = maxSourceAreaWidth + \"px\"; // likely reduced later\n\n // Layout the areas\n var areaWidth, areaHeight;\n // Establish the width and height of the droppable areas\n var item, maxFunction;\n areaHeight = 20;\n var height_add = 0;\n if (this.options.numbered != undefined) {\n height_add = 1;\n }\n // Warning -- all of this is just a bit of pixie dust discovered by trial\n // and error to try to get the height of the drag and drop boxes.\n // item is a jQuery object\n // outerHeight can be unreliable if elements are not yet visible\n // outerHeight will return bad results if MathJax has not rendered the math\n areaWidth = 0;\n let self = this;\n maxFunction = async function (item) {\n if (\n this.options.language == \"natural\" ||\n this.options.language == \"math\"\n ) {\n if (typeof runestoneMathReady !== \"undefined\") {\n await runestoneMathReady.then(\n async () => await self.queueMathJax(item[0])\n );\n } else {\n // this is for older rst builds not ptx\n if (typeof MathJax.startup !== \"undefined\") {\n await self.queueMathJax(item[0]);\n }\n }\n }\n areaWidth = Math.max(areaWidth, item.outerWidth(true));\n item.width(areaWidth - 22);\n var addition = 3.8;\n let outerH = item.outerHeight(true);\n if (outerH != 38) {\n addition = (3.1 * (outerH - 38)) / 21;\n }\n areaHeight += outerH + height_add * addition;\n }.bind(this);\n for (i = 0; i < blocks.length; i++) {\n await maxFunction($(blocks[i].view));\n }\n // sometimes we have a problem with hidden elements not getting the right height\n // just make sure that we have a reasonable height. There must be a better way to\n // do this.\n if (this.isTimed && areaHeight < blocks.length * 38) {\n areaHeight = blocks.length * 50;\n }\n this.areaWidth = areaWidth;\n if (this.options.numbered != undefined) {\n this.areaWidth += 25;\n //areaHeight += (blocks.length);\n }\n // + 40 to areaHeight to provide some additional buffer in case any text overflow still happens - Vincent Qiu (September 2020)\n if (indent > 0 && indent <= 4) {\n $(this.answerArea).addClass(\"answer\" + indent);\n } else {\n $(this.answerArea).addClass(\"answer\");\n }\n // Initialize paired distractor decoration\n var bins = [];\n var bin = [];\n for (i = 0; i < this.lines.length; i++) {\n var line = this.lines[i];\n if (line.block() == undefined) {\n if (bin.length > 0) {\n bins.push(bin);\n bin = [];\n }\n } else {\n bin.push(line);\n if (!line.groupWithNext) {\n bins.push(bin);\n bin = [];\n }\n }\n }\n var pairedBins = [];\n var lineNumbers = [];\n var pairedDivs = [];\n var j;\n if (this.pairDistractors || !this.options.adaptive) {\n for (i = bins.length - 1; i > -1; i--) {\n bin = bins[i];\n if (bin[0].paired) {\n // Add all in bin to line numbers\n for (j = bin.length - 1; j > -1; j--) {\n lineNumbers.unshift(bin[j].index);\n }\n } else {\n if (lineNumbers.length > 0) {\n // Add all in bin to line numbers\n for (j = bin.length - 1; j > -1; j--) {\n lineNumbers.unshift(bin[j].index);\n }\n pairedBins.unshift(lineNumbers);\n lineNumbers = [];\n }\n }\n }\n for (i = 0; i < pairedBins.length; i++) {\n var pairedDiv = document.createElement(\"div\");\n $(pairedDiv).addClass(\"paired\");\n $(pairedDiv).html(\n \"<span id= 'st' style = 'vertical-align: middle; font-weight: bold'>or{</span>\"\n );\n pairedDivs.push(pairedDiv);\n this.sourceArea.appendChild(pairedDiv);\n }\n } else {\n pairedBins = [];\n }\n areaHeight += pairedBins.length * 10; // the paired bins take up extra space which can\n // cause the blocks to spill out. This\n // corrects that by adding a little extra\n this.areaHeight = areaHeight + 40;\n $(this.sourceArea).css({\n width: this.areaWidth + 2,\n height: areaHeight,\n });\n $(this.answerArea).css({\n width: this.options.pixelsPerIndent * indent + this.areaWidth + 2,\n height: areaHeight,\n });\n\n this.pairedBins = pairedBins;\n this.pairedDivs = pairedDivs;\n if (this.options.numbered != undefined) {\n this.addBlockLabels(sourceBlocks.concat(answerBlocks));\n }\n // Update the view\n this.state = undefined; // needs to be here for loading from storage\n this.updateView();\n // Put back into the offscreen position\n if (isHidden) {\n $(replaceElement).replaceWith(this.outerDiv);\n }\n }\n // Make blocks interactive (both drag-and-drop and keyboard)\n initializeInteractivity() {\n for (var i = 0; i < this.blocks.length; i++) {\n this.blocks[i].initializeInteractivity();\n }\n this.initializeTabIndex();\n let self = this;\n if (\n this.options.language == \"natural\" ||\n this.options.language == \"math\"\n ) {\n if (typeof MathJax.startup !== \"undefined\") {\n self.queueMathJax(self.outerDiv);\n }\n }\n }\n // Make one block be keyboard accessible\n initializeTabIndex() {\n for (var i = 0; i < this.blocks.length; i++) {\n var block = this.blocks[i];\n if (block.enabled()) {\n block.makeTabIndex();\n return this;\n }\n }\n }\n /* =====================================================================\n ==== SERVER COMMUNICATION ==============================================\n ===================================================================== */\n // Return the argument that is newer based on the timestamp\n newerData(dataA, dataB) {\n var dateA = dataA.timestamp;\n var dateB = dataB.timestamp;\n if (dateA == undefined) {\n return dataB;\n }\n if (dateB == undefined) {\n return dataA;\n }\n dateA = this.dateFromTimestamp(dateA);\n dateB = this.dateFromTimestamp(dateB);\n if (dateA > dateB) {\n return dataA;\n } else {\n return dataB;\n }\n }\n // Based on the data, load\n async loadData(data) {\n var sourceHash = data.source;\n if (sourceHash == undefined) {\n // maintain backwards compatibility\n sourceHash = data.trash;\n }\n var answerHash = data.answer;\n var adaptiveHash = data.adaptive;\n var options;\n if (adaptiveHash == undefined) {\n options = {};\n } else {\n options = this.optionsFromHash(adaptiveHash);\n }\n if (options.noindent !== undefined) {\n this.noindent = true;\n }\n if (options.checkCount !== undefined) {\n this.checkCount = options.checkCount;\n }\n if (options.hasSolved !== undefined) {\n this.hasSolved = options.hasSolved;\n }\n if (\n sourceHash == undefined ||\n answerHash == undefined ||\n answerHash.length == 1\n ) {\n await this.initializeAreas(this.blocksFromSource(), [], options);\n } else {\n this.initializeAreas(\n this.blocksFromHash(sourceHash),\n this.blocksFromHash(answerHash),\n options\n );\n this.grade = this.grader.grade();\n if (this.grade == \"correct\") {\n this.correct = true;\n } else if (this.answerLines().length == 0) {\n this.correct = null;\n } else {\n this.correct = false;\n }\n }\n // Start the interface\n if (this.needsReinitialization !== true) {\n this.initializeInteractivity();\n // This is a bit of a hack to get the blocks to be in the right place\n // when the page loads. It is needed because the blocks are not\n // visible when the page loads, so the size is off. This forces\n // a realignment.\n if (this.isTimed && !this.assessmentTaken) {\n this.resetView();\n }\n }\n }\n // Return what is stored in local storage\n localData() {\n var data = localStorage.getItem(this.storageId);\n if (data !== null) {\n if (data.charAt(0) == \"{\") {\n data = JSON.parse(data);\n } else {\n data = {};\n }\n } else {\n data = {};\n }\n return data;\n }\n // RunestoneBase: Sent when the server has data\n restoreAnswers(serverData) {\n this.loadData(serverData);\n }\n // RunestoneBase: Load what is in local storage\n checkLocalStorage() {\n if (this.graderactive) {\n return;\n }\n this.loadData(this.localData());\n }\n // RunestoneBase: Set the state of the problem in local storage\n setLocalStorage(data) {\n var toStore;\n if (data == undefined) {\n toStore = {\n source: this.sourceHash(),\n answer: this.answerHash(),\n timestamp: new Date(),\n };\n var adaptiveHash = this.adaptiveHash();\n if (adaptiveHash.length > 0) {\n toStore.adaptive = adaptiveHash;\n }\n } else {\n toStore = data;\n }\n localStorage.setItem(this.storageId, JSON.stringify(toStore));\n }\n /* =====================================================================\n ==== LOGGING ===========================================================\n ===================================================================== */\n // Log the interaction with the problem to the server:\n // start: the user started interacting with this problem\n // move: the user moved a block to a new position\n // reset: the reset button was pressed\n // removeDistractor: \"Help Me\" removed a distractor\n // removeIndentation: \"Help Me\" removed indentation\n // combineBlocks: \"Help Me\" combined blocks\n logMove(activity) {\n var event = {\n event: \"parsonsMove\",\n div_id: this.divid,\n storageid: super.localStorageKey(),\n };\n var act = activity + \"|\" + this.sourceHash() + \"|\" + this.answerHash();\n var adaptiveHash = this.adaptiveHash();\n if (adaptiveHash !== \"\") {\n act = act + \"|\" + adaptiveHash;\n }\n event.act = act;\n this.logBookEvent(event);\n }\n // Log the answer to the problem\n // correct: The answer given matches the solution\n // incorrect*: The answer is wrong for various reasons\n async logCurrentAnswer(sid) {\n var event = {\n event: \"parsons\",\n div_id: this.divid,\n };\n var answerHash = this.answerHash();\n event.answer = answerHash;\n var sourceHash = this.sourceHash();\n event.source = sourceHash;\n var act = sourceHash + \"|\" + answerHash;\n var adaptiveHash = this.adaptiveHash();\n if (adaptiveHash !== \"\") {\n event.adaptive = adaptiveHash;\n act = act + \"|\" + adaptiveHash;\n }\n if (this.grade == \"correct\") {\n act = \"correct|\" + act;\n event.correct = \"T\";\n } else {\n act = \"incorrect|\" + act;\n event.correct = \"F\";\n }\n event.act = act;\n\n if (typeof sid !== \"undefined\") {\n event.sid = sid;\n }\n\n await this.logBookEvent(event);\n }\n /* =====================================================================\n ==== ACCESSING =========================================================\n ===================================================================== */\n // Answer the hash of the adaptive state\n adaptiveHash() {\n if (!this.options.adaptive) {\n return \"\";\n }\n var hash = [];\n for (var i = 0; i < this.blocks.length; i++) {\n var block = this.blocks[i];\n if (!block.enabled()) {\n hash.push(\"d\" + block.lines[0].index);\n }\n }\n if (this.noindent !== this.options.noindent) {\n hash.push(\"i\");\n }\n hash.push(\"c\" + this.checkCount);\n if (this.hasSolved) {\n hash.push(\"s\");\n }\n return hash.join(\"-\");\n }\n // Create options for creating blocks based on a hash\n optionsFromHash(hash) {\n var split;\n if (hash === \"-\" || hash === \"\" || hash === null) {\n split = [];\n } else {\n split = hash.split(\"-\");\n }\n var options = {};\n var disabled = [];\n for (var i = 0; i < split.length; i++) {\n var key = split[i];\n if (key[0] == \"i\") {\n options.noindent = true;\n } else if (key[0] == \"d\") {\n disabled.push(parseInt(key.slice(1)));\n } else if (key[0] == \"s\") {\n options.hasSolved = true;\n } else if (key[0] == \"c\") {\n options.checkCount = parseInt(key.slice(1));\n }\n }\n if (disabled.length > 0) {\n options.disabled = disabled;\n }\n return options;\n }\n // Answer the hash of the answer area\n answerHash() {\n var hash = [];\n var blocks = this.answerBlocks();\n for (var i = 0; i < blocks.length; i++) {\n hash.push(blocks[i].hash());\n }\n if (hash.length === 0) {\n return \"-\";\n } else {\n return hash.join(\"-\");\n }\n }\n // Answer the hash of the source area\n sourceHash() {\n var hash = [];\n var blocks = this.sourceBlocks();\n for (var i = 0; i < blocks.length; i++) {\n hash.push(blocks[i].hash());\n }\n if (hash.length === 0) {\n return \"-\";\n } else {\n return hash.join(\"-\");\n }\n }\n // Inter-problem adaptive changes\n // Based on the recentAttempts, remove distractors, add indent, combine blocks\n adaptBlocks(input) {\n var blocks = [];\n var distractors = [];\n var block;\n for (var i = 0; i < input.length; i++) {\n block = input[i];\n if (block.isDistractor()) {\n distractors.push(block);\n } else {\n blocks.push(block);\n }\n }\n this.recentAttempts = localStorage.getItem(\n this.adaptiveId + \"recentAttempts\"\n );\n if (this.recentAttempts == undefined || this.recentAttempts == \"NaN\") {\n this.recentAttempts = 3;\n }\n var lastestAttemptCount = this.recentAttempts;\n var nBlocks = blocks.length;\n var nBlocksToCombine = 0;\n var nDistractors = distractors.length;\n var nToRemove = 0;\n this.pairDistractors = true;\n var giveIndentation = false;\n if (lastestAttemptCount < 2) {\n // 1 Try\n this.pairDistractors = false;\n this.limitDistractors = false;\n } else if (lastestAttemptCount < 4) {\n // 2-3 Tries\n // Do nothing they are doing normal\n this.pairDistractors = true;\n } else if (lastestAttemptCount < 6) {\n // 4-5 Tries\n // pair distractors\n this.pairDistractors = true;\n } else if (lastestAttemptCount < 8) {\n // 6-7 Tries\n // Remove 50% of distractors\n nToRemove = 0.5 * nDistractors;\n this.pairDistractors = true;\n } else {\n // 8+ Tries\n // Remove all of distractors\n nToRemove = nDistractors;\n this.pairDistractors = true;\n }\n /*\n else if(lastestAttemptCount < 12) { //10-11\n // Remove all distractors and give indentation\n nToRemove = nDistractors;\n giveIndentation = true;\n this.pairDistractors = true;\n } else if(lastestAttemptCount < 14) { // 12-13 Tries\n // Remove all of distractors\n // give indentation\n // reduce problem to 3/4 size\n giveIndentation = true;\n nToRemove = nDistractors;\n nBlocksToCombine = .25 * nBlocks;\n this.pairDistractors = true;\n } else { // >= 14 Tries\n // Remove all of distractors\n // give indentation\n // reduce problem to 1/2 size\n giveIndentation = true;\n nToRemove = nDistractors;\n nBlocksToCombine = .5 * nBlocks;\n this.pairDistractors = true;\n }\n */\n nBlocksToCombine = Math.min(nBlocksToCombine, nBlocks - 3);\n // Never combine so where there are less than three blocks left\n // Remove distractors\n distractors = this.shuffled(distractors);\n distractors = distractors.slice(0, nToRemove);\n var output = [];\n for (i = 0; i < input.length; i++) {\n block = input[i];\n if (!block.isDistractor()) {\n output.push(block);\n } else if ($.inArray(block, distractors) == -1) {\n output.push(block);\n }\n }\n //var output = input;\n if (giveIndentation) {\n for (let i = 0; i < output.length; i++) {\n output[i].addIndent();\n }\n this.indent = 0;\n this.noindent = true;\n }\n // combine blocks\n var solution = [];\n for (i = 0; i < this.lines.length; i++) {\n for (var j = 0; j < output.length; j++) {\n if (output[j].lines[0].index == i) {\n solution.push(output[j]);\n }\n }\n }\n for (let i = 0; i < nBlocksToCombine; i++) {\n // combine one set of blocks\n var best = -10;\n var combineIndex = -10;\n for (j = 0; j < solution.length - 1; j++) {\n block = solution[j];\n var next = solution[j + 1];\n var rating = 10 - block.lines.length - next.lines.length;\n var blockIndent = block.minimumLineIndent();\n var nextIndent = next.minimumLineIndent();\n if (blockIndent == nextIndent) {\n rating += 2;\n } else if (blockIndent > nextIndent) {\n rating -= 1;\n }\n if (\n block.lines[block.lines.length - 1].indent ==\n next.lines[0].indent\n ) {\n rating += 1;\n }\n if (rating >= best) {\n best = rating;\n combineIndex = j;\n }\n }\n block = solution[combineIndex];\n next = solution[combineIndex + 1];\n for (j = 0; j < next.lines.length; j++) {\n block.addLine(next.lines[j]);\n }\n var newSolution = [];\n for (j = 0; j < solution.length; j++) {\n if (j !== combineIndex + 1) {\n newSolution.push(solution[j]);\n }\n }\n var solution = newSolution;\n }\n // reorder\n var combinedOutput = [];\n for (i = 0; i < output.length; i++) {\n for (j = 0; j < solution.length; j++) {\n if (output[i].lines[0].index == solution[j].lines[0].index) {\n combinedOutput.push(solution[j]);\n }\n }\n }\n return combinedOutput;\n }\n // Return an array of code blocks based on what is specified in the problem\n blocksFromSource() {\n var unorderedBlocks = [];\n var originalBlocks = [];\n var blocks = [];\n var lines = [];\n var block, line, i;\n for (i = 0; i < this.lines.length; i++) {\n line = this.lines[i];\n lines.push(line);\n if (!line.groupWithNext) {\n unorderedBlocks.push(new ParsonsBlock(this, lines));\n lines = [];\n }\n }\n originalBlocks = unorderedBlocks;\n // Trim the distractors\n var removedBlocks = [];\n if (this.options.maxdist !== undefined) {\n var maxdist = this.options.maxdist;\n var distractors = [];\n for (i = 0; i < unorderedBlocks.length; i++) {\n block = unorderedBlocks[i];\n if (block.lines[0].distractor) {\n distractors.push(block);\n }\n }\n if (maxdist < distractors.length) {\n distractors = this.shuffled(distractors);\n distractors = distractors.slice(0, maxdist);\n for (i = 0; i < unorderedBlocks.length; i++) {\n block = unorderedBlocks[i];\n if (block.lines[0].distractor) {\n if ($.inArray(block, distractors) > -1) {\n blocks.push(block);\n } else {\n removedBlocks.push(i);\n }\n } else {\n blocks.push(block);\n }\n }\n unorderedBlocks = blocks;\n blocks = [];\n }\n }\n\n // This is necessary, set the pairDistractors value before blocks get shuffled - William Li (August 2020)\n if (this.recentAttempts < 2) {\n // 1 Try\n this.pairDistractors = false;\n } else {\n this.pairDistractors = true;\n }\n\n if (this.options.order === undefined) {\n // Shuffle, respecting paired distractors\n var chunks = [],\n chunk = [];\n for (i = 0; i < unorderedBlocks.length; i++) {\n block = unorderedBlocks[i];\n if (block.lines[0].paired && this.pairDistractors) {\n // William Li (August 2020)\n chunk.push(block);\n } else {\n chunk = [];\n chunk.push(block);\n chunks.push(chunk);\n }\n }\n chunks = this.shuffled(chunks);\n for (i = 0; i < chunks.length; i++) {\n chunk = chunks[i];\n if (chunk.length > 1) {\n // shuffle paired distractors\n chunk = this.shuffled(chunk);\n for (j = 0; j < chunk.length; j++) {\n blocks.push(chunk[j]);\n }\n } else {\n blocks.push(chunk[0]);\n }\n }\n } else {\n // Order according to order specified\n for (i = 0; i < this.options.order.length; i++) {\n block = originalBlocks[this.options.order[i]];\n if (\n block !== undefined &&\n $.inArray(this.options.order[i], removedBlocks) < 0\n ) {\n blocks.push(block);\n }\n }\n }\n this.pairDistractors = true;\n if (this.options.adaptive) {\n this.limitDistractors = true;\n blocks = this.adaptBlocks(blocks);\n if (!this.limitDistractors) {\n for (i = 0; i < removedBlocks.length; i++) {\n var index =\n this.options.order == undefined\n ? Math.random(0, blocks.length)\n : $.inArray(removedBlocks[i], this.options.order);\n blocks.splice(index, 0, originalBlocks[removedBlocks[i]]);\n }\n }\n }\n if (this.pairDistractors && this.options.order != undefined) {\n //move pairs together\n //Go through array looking for ditractor and its pair\n for (i = 1; i < originalBlocks.length; i++) {\n if (\n originalBlocks[i].lines[0].paired &&\n $.inArray(originalBlocks[i], blocks) >= 0\n ) {\n var j = i;\n while ($.inArray(originalBlocks[j - 1], blocks) < 0) {\n // find the paired distractor or solution block it will be next to\n j--;\n }\n var indexTo = $.inArray(originalBlocks[j - 1], blocks);\n var indexFrom = $.inArray(originalBlocks[i], blocks);\n blocks.splice(indexFrom, 1);\n blocks.splice(indexTo, 0, originalBlocks[i]);\n }\n }\n }\n return blocks;\n }\n // Return a codeblock that corresponds to the hash\n blockFromHash(hash) {\n var split = hash.split(\"_\");\n var lines = [];\n for (var i = 0; i < split.length - 1; i++) {\n lines.push(this.lines[split[i]]);\n }\n var block = new ParsonsBlock(this, lines);\n if (this.noindent) {\n block.indent = 0;\n } else {\n block.indent = Number(split[split.length - 1]);\n }\n return block;\n }\n // Return an array of codeblocks that corresponds to the hash\n blocksFromHash(hash) {\n var split;\n if (hash === \"-\" || hash === \"\" || hash === null) {\n split = [];\n } else {\n split = hash.split(\"-\");\n }\n var blocks = [];\n for (var i = 0; i < split.length; i++) {\n blocks.push(this.blockFromHash(split[i]));\n }\n if (this.options.adaptive) {\n return this.adaptBlocks(blocks);\n } else {\n return blocks;\n }\n }\n // Return a block object by the full id including id prefix\n getBlockById(id) {\n for (var i = 0; i < this.blocks.length; i++) {\n var block = this.blocks[i];\n if (block.view.id == id) {\n return block;\n }\n }\n return undefined;\n }\n // Return array of codeblocks that are the solution\n solutionBlocks() {\n var solutionBlocks = [];\n var solutionLines = [];\n for (var i = 0; i < this.lines.length; i++) {\n if (!this.lines[i].distractor) {\n solutionLines.push(this.lines[i]);\n }\n }\n var block = solutionLines[0].block();\n solutionBlocks.push(block);\n for (let i = 1; i < solutionLines.length; i++) {\n var nextBlock = solutionLines[i].block();\n if (block !== nextBlock) {\n block = nextBlock;\n solutionBlocks.push(block);\n }\n }\n return solutionBlocks;\n }\n // Return array of codeblocks based on what is in the source field\n sourceBlocks() {\n var sourceBlocks = [];\n var children = this.sourceArea.childNodes;\n for (var i = 0; i < children.length; i++) {\n var child = children[i];\n if ($(child).hasClass(\"block\")) {\n sourceBlocks.push(this.getBlockById(child.id));\n }\n }\n return sourceBlocks;\n }\n // Return array of enabled codeblocks based on what is in the source field\n enabledSourceBlocks() {\n var all = this.sourceBlocks();\n var enabled = [];\n for (var i = 0; i < all.length; i++) {\n var block = all[i];\n if (block.enabled()) {\n enabled.push(block);\n }\n }\n return enabled;\n }\n // Return array of codeblocks based on what is in the answer field\n answerBlocks() {\n var answerBlocks = [];\n var children = this.answerArea.childNodes;\n for (var i = 0; i < children.length; i++) {\n var block = this.getBlockById(children[i].id);\n if (block !== undefined) {\n answerBlocks.push(block);\n }\n }\n return answerBlocks;\n }\n // Return array of enabled codeblocks based on what is in the answer field\n enabledAnswerBlocks() {\n var all = this.answerBlocks();\n var enabled = [];\n for (var i = 0; i < all.length; i++) {\n var block = all[i];\n if (block.enabled()) {\n enabled.push(block);\n }\n }\n return enabled;\n }\n // Return array of codelines based on what is in the answer field\n answerLines() {\n var answerLines = [];\n var blocks = this.answerBlocks();\n for (var i = 0; i < blocks.length; i++) {\n var block = blocks[i];\n for (var j = 0; j < block.lines.length; j++) {\n answerLines.push(block.lines[j]);\n }\n }\n return answerLines;\n }\n // Go up the hierarchy until you get to a block; return that block element\n getBlockFor(element) {\n var check = element;\n while (!check.classList.contains(\"block\")) {\n check = check.parentElement;\n }\n return check;\n }\n // Return the maximum indent for the solution\n solutionIndent() {\n var indent = 0;\n for (var i = 0; i < this.blocks.length; i++) {\n var block = this.blocks[i];\n indent = Math.max(indent, block.solutionIndent());\n }\n return indent;\n }\n /* =====================================================================\n ==== ACTION ============================================================\n ===================================================================== */\n // The \"Check Me\" button was pressed.\n checkCurrentAnswer() {\n if (!this.hasSolved) {\n this.checkCount++;\n this.clearFeedback();\n if (this.adaptiveId == undefined) {\n this.adaptiveId = this.storageId;\n }\n // TODO - rendering feedback is buried in the grader.grade method.\n // to disable feedback set this.grader.showfeedback boolean\n this.grader.showfeedback = false;\n this.grade = this.grader.grade();\n if (this.grade == \"correct\") {\n this.hasSolved = true;\n this.correct = true;\n $(this.checkButton).prop(\"disabled\", true);\n localStorage.setItem(this.adaptiveId + \"Solved\", true);\n this.recentAttempts = this.checkCount;\n localStorage.setItem(\n this.adaptiveId + \"recentAttempts\",\n this.recentAttempts\n );\n }\n localStorage.setItem(\n this.adaptiveId + this.divid + \"Count\",\n this.checkCount\n );\n this.setLocalStorage();\n // if not solved and not too short then check if should provide help\n if (!this.hasSolved && this.grade !== \"incorrectTooShort\") {\n if (this.canHelp) {\n // only count the attempt if the answer is different (to prevent gaming)\n var answerHash = this.answerHash();\n if (this.lastAnswerHash !== answerHash) {\n this.numDistinct++;\n this.lastAnswerHash = answerHash;\n }\n // if time to offer help\n if (this.numDistinct == 3 && !this.gotHelp) {\n alert($.i18n(\"msg_parson_help_info\"));\n } // end if\n } // end if can help\n } // end if not solved\n } // end outer if not solved\n\n // if now or previous was correct, display runnable\n if (this.hasSolved && this.options.runnable) {\n if (!this.runnableDiv)\n this.generateRunableVersion();\n else //reveal \"reset\" runnable\n this.runnableDiv.style.display = null;\n }\n }\n\n // Conver the parsons-runnable into an activecode and display it\n generateRunableVersion() {\n this.runnableDiv = document.getElementById(this.divid + \"-runnable\");\n this.runnableDiv.style.display = null;\n\n let parsonsText = '';\n for (let b of this.answerBlocks()) {\n for (let l of b.lines) {\n parsonsText += ' '.repeat(l.indent) + l.text + '\\n';\n }\n }\n parsonsText = parsonsText.slice(0, -1); // remove last newline\n\n const textEl = this.runnableDiv.querySelector('textarea');\n textEl.innerHTML = textEl.innerHTML.replace('==PARSONSCODE==', parsonsText);\n\n // data-component=\"parsons-runnable\" marks it as waiting to be turned into an activecode\n const activeCodeToBe = this.runnableDiv.querySelector('[data-component=\"parsons-runnable\"]');\n activeCodeToBe.dataset.component = 'activecode';\n\n window.runestoneComponents.renderOneComponent(this.runnableDiv);\n }\n\n renderFeedback() {\n this.grader.showfeedback = true;\n this.grade = this.grader.graderState;\n var feedbackArea;\n var answerArea = $(this.answerArea);\n\n if (this.showfeedback === true) {\n feedbackArea = $(this.messageDiv);\n } else {\n feedbackArea = $(\"#doesnotexist\");\n }\n\n if (this.grade === \"correct\") {\n answerArea.addClass(\"correct\");\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-info\");\n let message = this.checkCount > 1\n ? $.i18n(\"msg_parson_correct\", this.checkCount)\n : $.i18n(\"msg_parson_correct_first_try\");\n if (this.options.runnable)\n message += \" \" + $.i18n(\"msg_parson_correct_runnable\");\n setTimeout(() => {\n feedbackArea.html(message);\n }, 10);\n }\n\n if (this.grade === \"incorrectTooShort\") {\n // too little code\n answerArea.addClass(\"incorrect\");\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-danger\");\n setTimeout(() => {\n feedbackArea.html($.i18n(\"msg_parson_too_short\"));\n }, 10);\n }\n\n if (this.grade === \"incorrectIndent\") {\n var incorrectBlocks = [];\n for (let i = 0; i < this.grader.indentLeft.length; i++) {\n block = this.grader.indentLeft[i].block();\n if (incorrectBlocks.indexOf(block) == -1) {\n incorrectBlocks.push(block);\n $(block.view).addClass(\"indentLeft\");\n }\n }\n for (let i = 0; i < this.grader.indentRight.length; i++) {\n block = this.grader.indentRight[i].block();\n if (incorrectBlocks.indexOf(block) == -1) {\n incorrectBlocks.push(block);\n $(block.view).addClass(\"indentRight\");\n }\n }\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-danger\");\n setTimeout(() => {\n if (incorrectBlocks.length == 1) {\n feedbackArea.html($.i18n(\"msg_parson_wrong_indent\"));\n } else {\n feedbackArea.html($.i18n(\"msg_parson_wrong_indents\"));\n }\n }, 10);\n }\n\n if (this.grade === \"incorrectMoveBlocks\") {\n var answerBlocks = this.answerBlocks();\n var inSolution = [];\n var inSolutionIndexes = [];\n var notInSolution = [];\n for (let i = 0; i < answerBlocks.length; i++) {\n var block = answerBlocks[i];\n var index = this.solution.indexOf(block.lines[0]);\n if (index == -1) {\n notInSolution.push(block);\n } else {\n inSolution.push(block);\n inSolutionIndexes.push(index);\n }\n }\n var lisIndexes = this.grader.inverseLISIndices(\n inSolutionIndexes,\n inSolution\n );\n for (let i = 0; i < lisIndexes.length; i++) {\n notInSolution.push(inSolution[lisIndexes[i]]);\n }\n answerArea.addClass(\"incorrect\");\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-danger\");\n if (this.showfeedback === true) {\n for (let i = 0; i < notInSolution.length; i++) {\n $(notInSolution[i].view).addClass(\"incorrectPosition\");\n }\n }\n setTimeout(() => {\n feedbackArea.html($.i18n(\"msg_parson_wrong_order\"));\n }, 10);\n }\n }\n\n /* =====================================================================\n ==== ADAPTIVE ==========================================================\n ===================================================================== */\n // Initialize this problem as adaptive\n // helpCount = number of checks before help is given (negative)\n // canHelp = boolean as to whether help can be provided\n // checkCount = how many times it has been checked before correct\n // userRating = 0..100 how good the person is at solving problems\n initializeAdaptive() {\n this.adaptiveId = super.localStorageKey();\n this.canHelp = true;\n //this.helpCount = -3; // Number of checks before help is offered\n this.checkCount = 0;\n this.numDistinct = 0; // number of distinct solution attempts (different from previous)\n this.gotHelp = false;\n // Initialize the userRating\n var storageProblem = localStorage.getItem(this.adaptiveId + \"Problem\");\n if (storageProblem == this.divid) {\n // Already in this problem\n this.checkCount = localStorage.getItem(\n this.adaptiveId + this.divid + \"Count\"\n );\n if (this.checkCount == undefined) {\n this.checkCount = 0;\n }\n return this;\n }\n var count = localStorage.getItem(\n this.adaptiveId + this.divid + \"Count\"\n );\n if (count == undefined || count == \"NaN\") {\n count = 0;\n }\n this.checkCount = count;\n this.recentAttempts = localStorage.getItem(\n this.adaptiveId + \"recentAttempts\"\n );\n if (this.recentAttempts == undefined || this.recentAttempts == \"NaN\") {\n this.recentAttempts = 3;\n }\n localStorage.setItem(\n this.adaptiveId + \"recentAttempts\",\n this.recentAttempts\n );\n localStorage.setItem(this.adaptiveId + \"Problem\", this.divid);\n localStorage.setItem(\n this.adaptiveId + this.divid + \"Count\",\n this.checkCount\n );\n localStorage.setItem(this.adaptiveId + \"Solved\", false);\n }\n // Return a boolean of whether the user must deal with indentation\n usesIndentation() {\n if (this.noindent || this.solutionIndent() == 0) {\n // was $(this.answerArea).hasClass(\"answer\") - bje changed\n return false;\n } else {\n return true;\n }\n }\n // Find a distractor to remove to make the problem easier\n // * try first in the answer area\n // * if not, try the source area\n // * if not, return undefined\n distractorToRemove() {\n var blocks = this.enabledAnswerBlocks();\n var block;\n for (let i = 0; i < blocks.length; i++) {\n block = blocks[i];\n if (block.isDistractor()) {\n return block;\n }\n }\n blocks = this.enabledSourceBlocks();\n for (let i = 0; i < blocks.length; i++) {\n block = blocks[i];\n if (block.isDistractor()) {\n return block;\n }\n }\n return undefined;\n }\n // Return the number of blocks that exist\n numberOfBlocks(fIncludeDistractors = true) {\n var numberOfBlocks = 0;\n for (var i = 0; i < this.blocks.length; i++) {\n if (\n this.blocks[i].enabled() &&\n (fIncludeDistractors || !this.blocks[i].isDistractor())\n ) {\n numberOfBlocks += 1;\n }\n }\n return numberOfBlocks;\n }\n // Remove this distractors to make the problem easier\n removeDistractor(block) {\n // Alert the user to what is happening\n var feedbackArea = $(this.messageDiv);\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-info\");\n setTimeout(() => {\n feedbackArea.html($.i18n(\"msg_parson_not_solution\"));\n }, 10);\n // Stop ability to select\n if (block.lines[0].distractHelptext) {\n block.view.setAttribute(\"data-toggle\", \"tooltip\");\n block.view.setAttribute(\"title\", block.lines[0].distractHelptext);\n }\n block.disable();\n // If in answer area, move to source area\n if (!block.inSourceArea()) {\n var sourceRect = this.sourceArea.getBoundingClientRect();\n var startX = block.pageXCenter() - 1;\n var startY = block.pageYCenter();\n var endX =\n sourceRect.left + window.pageXOffset + sourceRect.width / 2;\n var endY =\n sourceRect.top +\n window.pageYOffset +\n block.view.getBoundingClientRect().height / 2;\n var slideUnderBlock = block.slideUnderBlock();\n if (slideUnderBlock !== undefined) {\n endY +=\n slideUnderBlock.view.getBoundingClientRect().height + 20;\n endY += parseInt($(slideUnderBlock.view).css(\"top\"));\n }\n var that = this;\n $(block.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n $(block.view).animate(\n {\n opacity: 1.0,\n },\n {\n duration:\n Math.sqrt(\n Math.pow(endY - startY, 2) +\n Math.pow(endX - startX, 2)\n ) *\n 4 +\n 500,\n start: function () {\n that.moving = block;\n that.movingX = startX;\n that.movingY = startY;\n that.updateView();\n },\n progress: function (a, p, c) {\n that.movingX = startX * (1 - p) + endX * p;\n that.movingY = startY * (1 - p) + endY * p;\n that.updateView();\n },\n complete: function () {\n delete that.moving;\n delete that.movingX;\n delete that.movingY;\n that.updateView();\n $(block.view).animate(\n {\n opacity: 0.3,\n \"border-color\": \"#d3d3d3\",\n \"background-color\": \"#efefef\",\n },\n {\n duration: 1000,\n complete: function () {\n $(block.view).css({\n opacity: \"\",\n \"border-color\": \"\",\n \"background-color\": \"\",\n });\n $(block.view).addClass(\"disabled\");\n },\n }\n );\n },\n }\n );\n } else {\n $(block.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n $(block.view).animate(\n {\n opacity: 0.3,\n \"border-color\": \"#d3d3d3\",\n \"background-color\": \"#efefef\",\n },\n {\n duration: 2000,\n complete: function () {\n $(block.view).css({\n \"border-color\": \"\",\n \"background-color\": \"\",\n });\n },\n }\n );\n }\n }\n // Give the user the indentation\n removeIndentation() {\n // Alert the user to what is happening\n var feedbackArea = $(this.messageDiv);\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-info\");\n setTimeout(() => {\n feedbackArea.html($.i18n(\"msg_parson_provided_indent\"));\n }, 10);\n // Move and resize blocks\n var blockWidth = 200;\n for (var i = 0; i < this.lines.length; i++) {\n var line = this.lines[i];\n var expandedWidth =\n line.width + line.indent * this.options.pixelsPerIndent + 30;\n blockWidth = Math.max(blockWidth, expandedWidth);\n }\n if (this.options.numbered != undefined) {\n blockWidth += 25;\n }\n this.areaWidth = blockWidth + 22;\n var block, indent;\n var sourceBlocks = this.sourceBlocks();\n for (let i = 0; i < sourceBlocks.length; i++) {\n block = sourceBlocks[i];\n indent = block.solutionIndent();\n if (indent == 0) {\n $(block.view).animate(\n {\n width: blockWidth,\n },\n {\n duration: 1000,\n }\n );\n } else {\n $(block.view).animate(\n {\n width:\n blockWidth - indent * this.options.pixelsPerIndent,\n \"padding-left\":\n indent * this.options.pixelsPerIndent + 10,\n },\n {\n duration: 1000,\n }\n );\n }\n }\n for (let i = 0; i < this.pairedDivs.length; i++) {\n $(this.pairedDivs[i]).animate(\n {\n width: blockWidth + 34,\n },\n {\n duration: 1000,\n }\n );\n }\n var answerBlocks = this.answerBlocks();\n for (let i = 0; i < answerBlocks.length; i++) {\n block = answerBlocks[i];\n indent = block.solutionIndent();\n if (indent == 0) {\n $(block.view).animate(\n {\n left: 0,\n width: blockWidth,\n },\n {\n duration: 1000,\n }\n );\n } else {\n $(block.view).animate(\n {\n left: 0,\n width:\n blockWidth - indent * this.options.pixelsPerIndent,\n \"padding-left\":\n indent * this.options.pixelsPerIndent + 10,\n },\n {\n duration: 1000,\n }\n );\n }\n }\n // Resize answer and source area\n $(this.answerArea).removeClass(\"answer1 answer2 answer3 answer4\");\n $(this.answerArea).addClass(\"answer\");\n this.indent = 0;\n this.noindent = true;\n $(this.sourceArea).animate(\n {\n width: this.areaWidth + 2,\n },\n {\n duration: 1000,\n }\n );\n $(this.answerArea).animate(\n {\n width: this.areaWidth + 2,\n },\n {\n duration: 1000,\n }\n );\n // Change the model (with view)\n $(this.answerArea).animate(\n {\n opacity: 1.0,\n },\n {\n duration: 1100,\n complete: function () {\n $(this.answerArea).css({\n opacity: \"\",\n });\n // Update the model\n for (let i = 0; i < sourceBlocks.length; i++) {\n sourceBlocks[i].addIndent();\n }\n for (let i = 0; i < answerBlocks.length; i++) {\n answerBlocks[i].addIndent();\n }\n },\n }\n );\n }\n\n // first check if any solution blocks are in the source still (left side) and not\n // in the answer\n getSolutionBlockInSource() {\n var solutionBlocks = this.solutionBlocks();\n var answerBlocks = this.answerBlocks();\n var sourceBlocks = this.sourceBlocks();\n var solBlock = null;\n var currBlock = null;\n\n // loop through sourceBlocks and return a block if it is not in the solution\n for (var i = 0; i < sourceBlocks.length; i++) {\n // get the current block from the source\n currBlock = sourceBlocks[i];\n\n // if currBlock is in the solution and isn't the first block and isn't in the answer\n if (\n solutionBlocks.indexOf(currBlock) > 0 &&\n answerBlocks.indexOf(currBlock) < 0\n ) {\n return currBlock;\n }\n }\n // didn't find any block in the source that is in the solution\n return null;\n }\n\n // Find a block2 that is furthest from block1 in the answer\n // don't use the very first block in the solution as block2\n getFurthestBlock() {\n var solutionBlocks = this.solutionBlocks();\n var answerBlocks = this.answerBlocks();\n var maxDist = 0;\n var dist = 0;\n var maxBlock = null;\n var currBlock = null;\n var indexSol = 0;\n var prevBlock = null;\n var indexPrev = 0;\n\n // loop through the blocks in the answer\n for (var i = 0; i < answerBlocks.length; i++) {\n currBlock = answerBlocks[i];\n indexSol = solutionBlocks.indexOf(currBlock);\n if (indexSol > 0) {\n prevBlock = solutionBlocks[indexSol - 1];\n indexPrev = answerBlocks.indexOf(prevBlock);\n //alert(\"my index \" + i + \" index prev \" + indexPrev);\n\n // calculate the distance in the answer\n dist = Math.abs(i - indexPrev);\n if (dist > maxDist) {\n maxDist = dist;\n maxBlock = currBlock;\n }\n }\n }\n return maxBlock;\n }\n\n // Combine blocks together\n combineBlocks() {\n var solutionBlocks = this.solutionBlocks();\n var answerBlocks = this.answerBlocks();\n var sourceBlocks = this.sourceBlocks();\n\n // Alert the user to what is happening\n var feedbackArea = $(this.messageDiv);\n this.messageDiv.style.visibility = \"visible\";\n feedbackArea.attr(\"class\", \"alert alert-info\");\n setTimeout(() => {\n feedbackArea.html($.i18n(\"msg_parson_combined_blocks\"));\n }, 10);\n var block1 = null;\n var block2 = null;\n\n // get a solution block that is still in source (not answer), if any\n block2 = this.getSolutionBlockInSource();\n\n // if none in source get block that is furthest from block1\n if (block2 == null) {\n block2 = this.getFurthestBlock();\n }\n\n // get block1 (above block2) in solution\n var index = solutionBlocks.indexOf(block2);\n block1 = solutionBlocks[index - 1];\n\n // get index of each in answer\n var index1 = answerBlocks.indexOf(block1);\n var index2 = answerBlocks.indexOf(block2);\n var move = false;\n\n // if both in answer set move based on if directly above each other\n if (index1 >= 0 && index2 >= 0) {\n move = index1 + 1 !== index2;\n\n // else if both in source set move again based on if above each other\n } else if (index1 < 0 && index2 < 0) {\n index1 = sourceBlocks.indexOf(block1);\n index2 = sourceBlocks.indexOf(block2);\n move = index1 + 1 !== index2;\n\n // one in source and one in answer so must move\n } else {\n move = true;\n if (index1 < 0) {\n index1 = sourceBlocks.indexOf(block1);\n }\n if (index2 < 0) {\n index2 = sourceBlocks.indexOf(block2);\n }\n }\n\n var subtract = index2 < index1; // is block2 higher\n\n if (move) {\n // Move the block\n var startX = block2.pageXCenter() - 1;\n var startY = block2.pageYCenter();\n var endX = block1.pageXCenter() - 1;\n var endY =\n block1.pageYCenter() +\n block1.view.getBoundingClientRect().height / 2 +\n 5;\n if (subtract) {\n endY -= block2.view.getBoundingClientRect().height / 2;\n } else {\n endY += block2.view.getBoundingClientRect().height / 2;\n }\n var that = this;\n $(block2.view).animate(\n {\n opacity: 1,\n },\n {\n duration: 1000, // 1 seccond\n start: function () {\n $(block1.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n $(block2.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n block2.lines[0].index += 1000;\n that.moving = block2;\n that.movingX = startX;\n that.movingY = startY;\n that.updateView();\n },\n progress: function (a, p, c) {\n that.movingX = startX * (1 - p) + endX * p;\n that.movingY = startY * (1 - p) + endY * p;\n that.updateView();\n },\n complete: function () {\n delete that.moving;\n delete that.movingX;\n delete that.movingY;\n that.updateView();\n block2.lines[0].index -= 1000;\n block1.consumeBlock(block2);\n $(block1.view).animate(\n {\n \"border-color\": \"#d3d3d3\",\n \"background-color\": \"#efefef\",\n },\n {\n duration: 1000,\n complete: function () {\n $(block1.view).css({\n \"border-color\": \"\",\n \"background-color\": \"\",\n });\n },\n }\n );\n },\n }\n );\n } else {\n $(block2.view).animate(\n {\n opacity: 1,\n },\n {\n duration: 1000,\n start: function () {\n $(block1.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n $(block2.view).css({\n \"border-color\": \"#000\",\n \"background-color\": \"#fff\",\n });\n },\n complete: function () {\n block1.consumeBlock(block2);\n $(block1.view).animate(\n {\n \"border-color\": \"#d3d3d3\",\n \"background-color\": \"#efefef\",\n },\n {\n duration: 1000,\n complete: function () {\n $(block1.view).css({\n \"border-color\": \"\",\n \"background-color\": \"\",\n });\n },\n }\n );\n },\n }\n );\n }\n }\n // Adapt the problem to be easier\n // * remove a distractor until none are present\n // * combine blocks until 3 are left\n makeEasier() {\n var distractorToRemove = this.distractorToRemove();\n if (\n distractorToRemove !== undefined &&\n !distractorToRemove.inSourceArea()\n ) {\n alert($.i18n(\"msg_parson_remove_incorrect\"));\n this.removeDistractor(distractorToRemove);\n this.logMove(\"removedDistractor-\" + distractorToRemove.hash());\n } else {\n var numberOfBlocks = this.numberOfBlocks(false);\n if (numberOfBlocks > 3) {\n alert($.i18n(\"msg_parson_will_combine\"));\n this.combineBlocks();\n this.logMove(\"combinedBlocks\");\n } else {\n /*else if(this.numberOfBlocks(true) > 3 && distractorToRemove !== undefined) {\n alert(\"Will remove an incorrect code block from source area\");\n this.removeDistractor(distractorToRemove);\n this.logMove(\"removedDistractor-\" + distractorToRemove.hash());\n } */\n alert($.i18n(\"msg_parson_three_blocks_left\"));\n this.canHelp = false;\n }\n //if (numberOfBlocks < 5) {\n //\tthis.canHelp = false;\n //\tthis.helpButton.disabled = true;\n //}\n }\n }\n // The \"Help Me\" button was pressed and the problem should be simplified\n helpMe() {\n this.clearFeedback();\n //this.helpCount = -1; // amount to allow for multiple helps in a row\n //if (this.helpCount < 0) {\n //\tthis.helpCount = Math.max(this.helpCount, -1); // min 1 attempt before more help\n //this.helpButton.disabled = true;\n //}\n // if less than 3 attempts\n if (this.numDistinct < 3) {\n alert($.i18n(\"msg_parson_atleast_three_attempts\"));\n }\n // otherwise give help\n else {\n this.gotHelp = true;\n this.makeEasier();\n }\n }\n /* =====================================================================\n ==== UTILITY ===========================================================\n ===================================================================== */\n // Return a date from a timestamp (either mySQL or JS format)\n dateFromTimestamp(timestamp) {\n var date = new Date(timestamp);\n if (isNaN(date.getTime())) {\n var t = timestamp.split(/[- :]/);\n date = new Date(t[0], t[1] - 1, t[2], t[3], t[4], t[5]);\n }\n return date;\n }\n // A function for returning a shuffled version of an array\n shuffled(array) {\n var currentIndex = array.length;\n var returnArray = array.slice();\n var temporaryValue, randomIndex;\n // While there remain elements to shuffle...\n while (0 !== currentIndex) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = returnArray[currentIndex];\n returnArray[currentIndex] = returnArray[randomIndex];\n returnArray[randomIndex] = temporaryValue;\n }\n return returnArray;\n }\n /* =====================================================================\n ==== KEYBOARD INTERACTION ==============================================\n ===================================================================== */\n // When the user has entered the Parsons problem via keyboard mode\n enterKeyboardMode() {\n $(this.keyboardTip).show();\n $(this.sourceLabel).hide();\n $(this.answerLabel).hide();\n this.clearFeedback();\n }\n // When the user leaves the Parsons problem via keyboard mode\n exitKeyboardMode() {\n $(this.keyboardTip).hide();\n $(this.sourceLabel).show();\n $(this.answerLabel).show();\n }\n /* =====================================================================\n ==== VIEW ==============================================================\n ===================================================================== */\n // Clear any feedback from the answer area\n clearFeedback() {\n $(this.answerArea).removeClass(\"incorrect correct\");\n var children = this.answerArea.childNodes;\n for (var i = 0; i < children.length; i++) {\n $(children[i]).removeClass(\n \"correctPosition incorrectPosition indentLeft indentRight\"\n );\n }\n this.messageDiv.style.visibility = \"hidden\";\n }\n // Disable the interface\n async disableInteraction() {\n // Disable blocks\n await this.checkServerComplete;\n console.log(\"disabling blocks\");\n if (this.blocks !== undefined) {\n for (var i = 0; i < this.blocks.length; i++) {\n var block = this.blocks[i];\n block.disable();\n }\n }\n // Hide buttons\n $(this.checkButton).hide();\n $(this.resetButton).hide();\n }\n // Based on the moving element, etc., establish the moving state\n // rest: not moving\n // source: moving inside source area\n // answer: moving inside answer area\n // moving: moving outside areas\n movingState() {\n if (this.moving == undefined) {\n return \"rest\";\n }\n var x = this.movingX - window.pageXOffset;\n var y = this.movingY - window.pageYOffset;\n // Check if in answer area\n var bounds = this.answerArea.getBoundingClientRect();\n if (\n x >= bounds.left &&\n x <= bounds.right &&\n y >= bounds.top &&\n y <= bounds.bottom\n ) {\n return \"answer\";\n }\n // Check if in source area\n bounds = this.sourceArea.getBoundingClientRect();\n if (\n x >= bounds.left &&\n x <= bounds.right &&\n y >= bounds.top &&\n y <= bounds.bottom\n ) {\n return \"source\";\n }\n return \"moving\";\n }\n // Update the Parsons view\n // This gets called when dragging a block\n updateView() {\n // Based on the new and the old state, figure out what to update\n var state = this.state;\n var newState = this.movingState();\n var updateSource = true;\n var updateAnswer = true;\n var updateMoving = newState == \"moving\";\n if (state == newState) {\n if (newState == \"rest\") {\n updateSource = false;\n updateAnswer = false;\n } else if (newState == \"source\") {\n updateAnswer = false;\n } else if (newState == \"answer\") {\n updateSource = false;\n } else if (newState == \"moving\") {\n updateAnswer = false;\n updateSource = false;\n }\n }\n var movingHeight;\n if (this.moving !== undefined) {\n // Must get height here as detached items don't have height\n movingHeight = $(this.moving.view).outerHeight(true);\n $(this.moving.view).detach();\n }\n var positionTop, width;\n var baseWidth = this.areaWidth - 22;\n // Update the Source Area\n if (updateSource) {\n positionTop = 0;\n var blocks = this.sourceBlocks();\n if (newState == \"source\") {\n var hasInserted = false;\n var movingBin = this.moving.pairedBin();\n var binForBlock = [];\n for (i = 0; i < blocks.length; i++) {\n binForBlock.push(blocks[i].pairedBin());\n }\n if (!binForBlock.includes(movingBin)) {\n movingBin = -1;\n }\n var insertPositions = [];\n if (binForBlock.length == 0) {\n insertPositions.push(0);\n } else {\n if (movingBin == -1) {\n insertPositions.push(0);\n } else if (binForBlock[0] == movingBin) {\n insertPositions.push(0);\n }\n for (i = 1; i < blocks.length; i++) {\n if (binForBlock[i - 1] == movingBin) {\n insertPositions.push(i);\n } else if (binForBlock[i] == movingBin) {\n insertPositions.push(i);\n } else if (\n movingBin == -1 &&\n binForBlock[i - 1] != binForBlock[i]\n ) {\n insertPositions.push(i);\n }\n }\n if (movingBin == -1) {\n insertPositions.push(binForBlock.length);\n } else if (\n binForBlock[binForBlock.length - 1] == movingBin\n ) {\n insertPositions.push(binForBlock.length);\n }\n }\n var x =\n this.movingX -\n this.sourceArea.getBoundingClientRect().left -\n window.pageXOffset -\n baseWidth / 2 -\n 11;\n var y =\n this.movingY -\n this.sourceArea.getBoundingClientRect().top -\n window.pageYOffset;\n for (i = 0; i < blocks.length; i++) {\n var item = blocks[i];\n var j;\n if (!hasInserted && insertPositions.includes(i)) {\n var testHeight = $(item.view).outerHeight(true);\n for (j = i + 1; j < blocks.length; j++) {\n if (insertPositions.includes(j)) {\n break;\n }\n testHeight += $(blocks[j].view).outerHeight(true);\n }\n if (\n y - positionTop < movingHeight + testHeight / 2 ||\n i == insertPositions[insertPositions.length - 1]\n ) {\n hasInserted = true;\n this.sourceArea.insertBefore(\n this.moving.view,\n item.view\n );\n $(this.moving.view).css({\n left: x,\n top: y - movingHeight / 2,\n width: baseWidth,\n \"z-index\": 3,\n });\n positionTop = positionTop + movingHeight;\n }\n }\n $(item.view).css({\n left: 0,\n top: positionTop,\n width: baseWidth,\n \"z-index\": 2,\n });\n positionTop = positionTop + $(item.view).outerHeight(true);\n }\n if (!hasInserted) {\n $(this.moving.view).appendTo(\n \"#\" + this.counterId + \"-source\"\n );\n $(this.moving.view).css({\n left: x,\n top: y - $(this.moving.view).outerHeight(true) / 2,\n width: baseWidth,\n \"z-index\": 3,\n });\n }\n } else {\n for (var i = 0; i < blocks.length; i++) {\n item = blocks[i];\n $(item.view).css({\n left: 0,\n top: positionTop,\n width: baseWidth,\n \"z-index\": 2,\n });\n positionTop = positionTop + $(item.view).outerHeight(true);\n }\n }\n // Update the Paired Distractor Indicators\n for (i = 0; i < this.pairedBins.length; i++) {\n var bin = this.pairedBins[i];\n var matching = [];\n for (j = 0; j < blocks.length; j++) {\n block = blocks[j];\n if (block.matchesBin(bin)) {\n matching.push(block);\n }\n }\n var div = this.pairedDivs[i];\n if (matching.length == 0) {\n $(div).hide();\n } else {\n $(div).show();\n var height = -5;\n height += parseInt(\n $(matching[matching.length - 1].view).css(\"top\")\n );\n height -= parseInt($(matching[0].view).css(\"top\"));\n height += $(matching[matching.length - 1].view).outerHeight(\n true\n );\n $(div).css({\n left: -6,\n top: $(matching[0].view).css(\"top\"),\n width: baseWidth + 34,\n height: height,\n \"z-index\": 1,\n \"text-indent\": -30,\n \"padding-top\": (height - 70) / 2,\n overflow: \"visible\",\n \"font-size\": 43,\n \"vertical-align\": \"middle\",\n color: \"#7e7ee7\",\n });\n $(div).html(\n \"<span id= 'st' style = 'vertical-align: middle; font-weight: bold; font-size: 15px'>or</span>{\"\n );\n }\n if (matching.length == 1) {\n $(div).html(\"\");\n }\n }\n }\n // Update the Answer Area\n if (updateAnswer) {\n var block, indent;\n positionTop = 0;\n width =\n this.areaWidth +\n this.indent * this.options.pixelsPerIndent -\n 22;\n var blocks = this.answerBlocks();\n if (newState == \"answer\") {\n var hasInserted = false;\n var x =\n this.movingX -\n this.answerArea.getBoundingClientRect().left -\n window.pageXOffset -\n baseWidth / 2 -\n 11;\n var movingIndent = Math.round(x / this.options.pixelsPerIndent);\n if (movingIndent < 0) {\n movingIndent = 0;\n } else if (movingIndent > this.indent) {\n movingIndent = this.indent;\n } else {\n x = movingIndent * this.options.pixelsPerIndent;\n }\n var y =\n this.movingY -\n this.answerArea.getBoundingClientRect().top -\n window.pageYOffset;\n this.moving.indent = movingIndent;\n for (i = 0; i < blocks.length; i++) {\n block = blocks[i];\n if (!hasInserted) {\n if (\n y - positionTop <\n (movingHeight + $(block.view).outerHeight(true)) / 2\n ) {\n hasInserted = true;\n this.answerArea.insertBefore(\n this.moving.view,\n block.view\n );\n $(this.moving.view).css({\n left: x,\n top: y - movingHeight / 2,\n width: baseWidth,\n \"z-index\": 3,\n });\n positionTop = positionTop + movingHeight;\n }\n }\n indent = block.indent * this.options.pixelsPerIndent;\n $(block.view).css({\n left: indent,\n top: positionTop,\n width: width - indent,\n \"z-index\": 2,\n });\n positionTop = positionTop + $(block.view).outerHeight(true);\n }\n if (!hasInserted) {\n $(this.moving.view).appendTo(\n \"#\" + this.counterId + \"-answer\"\n );\n $(this.moving.view).css({\n left: x,\n top: y - $(this.moving.view).outerHeight(true) / 2,\n width: baseWidth,\n \"z-index\": 3,\n });\n }\n } else {\n for (let i = 0; i < blocks.length; i++) {\n block = blocks[i];\n indent = block.indent * this.options.pixelsPerIndent;\n $(block.view).css({\n left: indent,\n top: positionTop,\n width: width - indent,\n \"z-index\": 2,\n });\n positionTop = positionTop + $(block.view).outerHeight(true);\n }\n }\n }\n // Update the Moving Area\n if (updateMoving) {\n // Add it to the lowest place in the source area\n movingBin = this.moving.pairedBin();\n if (movingBin == -1) {\n $(this.moving.view).appendTo(\"#\" + this.counterId + \"-source\");\n } else {\n var before;\n blocks = this.sourceBlocks;\n for (i = 0; i < blocks.length; i++) {\n block = blocks[i];\n if (block.pairedBin() == movingBin) {\n before = i + 1;\n }\n }\n if (before == undefined || before == blocks.length) {\n $(this.moving.view).appendTo(\n \"#\" + this.counterId + \"-source\"\n );\n } else {\n this.sourceArea.insertBefore(\n this.moving.view,\n blocks[before].view\n );\n }\n }\n // Place in the middle of the mouse cursor\n $(this.moving.view).css({\n left:\n this.movingX -\n this.sourceArea.getBoundingClientRect().left -\n window.pageXOffset -\n $(this.moving.view).outerWidth(true) / 2,\n top:\n this.movingY -\n this.sourceArea.getBoundingClientRect().top -\n window.pageYOffset -\n movingHeight / 2,\n width: baseWidth,\n \"z-index\": 3,\n });\n }\n state = newState;\n this.state = state;\n }\n addBlockLabels(blocks) {\n var bin = -1;\n var binCount = 0;\n var binChildren = 0;\n var blocksNotInBins = 0;\n for (let i = 0; i < blocks.length; i++) {\n if (blocks[i].pairedBin() == -1) {\n blocksNotInBins++;\n }\n }\n for (let i = 0; i < blocks.length; i++) {\n var currentBin = blocks[i].pairedBin();\n if (currentBin == -1 || currentBin != bin) {\n bin = currentBin;\n binChildren = 0;\n binCount++;\n }\n var label =\n \"\" +\n binCount +\n (currentBin != -1\n ? String.fromCharCode(97 + binChildren)\n : \" \");\n if (\n binCount < 10 &&\n blocksNotInBins + this.pairedBins.length >= 10\n ) {\n label += \" \";\n }\n blocks[i].addLabel(label, 0);\n binChildren++;\n }\n if (blocksNotInBins + this.pairedBins.length >= 10) {\n this.areaWidth += 5;\n $(this.sourceArea).css({\n width: $(this.sourceArea).width() + 5,\n });\n $(this.answerArea).css({\n width: $(this.answerArea).width() + 5,\n });\n }\n }\n // Put all the blocks back into the source area, reshuffling as necessary\n resetView() {\n // Clear everything\n this.clearFeedback();\n var scrollTop = document.body.scrollTop;\n var block;\n for (let i = 0; i < this.blocks.length; i++) {\n block = this.blocks[i];\n for (var j = 0; j < block.lines.length; j++) {\n var children = $(block.lines[j].view).find(\".block-label\");\n for (var c = 0; c < children.length; c++) {\n children[c].remove();\n }\n }\n block.destroy();\n $(this.blocks[i].view).detach();\n }\n delete this.blocks;\n this.blockIndex = 0;\n if (this.pairedDivs) {\n for (let i = 0; i < this.pairedDivs.length; i++) {\n $(this.pairedDivs[i]).detach();\n }\n }\n $(this.sourceArea).attr(\"style\", \"\");\n $(this.answerArea).removeClass();\n $(this.answerArea).attr(\"style\", \"\");\n this.noindent = this.options.noindent;\n // Reinitialize\n if (this.hasSolved) {\n this.checkCount = 0;\n this.numDistinct = 0;\n this.hasSolved = false;\n if (this.options.adaptive) {\n this.canHelp = true;\n }\n //this.helpCount = -3; // enable after 3 failed attempts\n //this.helpButton.disabled = true;\n localStorage.setItem(this.adaptiveId + \"Problem\", this.divid);\n localStorage.setItem(\n this.adaptiveId + this.divid + \"Count\",\n this.checkCount\n );\n localStorage.setItem(this.adaptiveId + \"Solved\", false);\n }\n this.initializeAreas(this.blocksFromSource(), [], {});\n this.initializeInteractivity();\n document.body.scrollTop = scrollTop;\n if (this.runnableDiv) {\n // hide the rendered runnable - will get reused as is if rerevealed\n this.runnableDiv.style.display = 'none';\n }\n }\n}\n\nParsons.counter = 0;\n\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=parsons]\").each(function (index) {\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n try {\n window.componentMap[this.id] = new Parsons({\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n });\n } catch (err) {\n console.log(`Error rendering Parsons Problem ${this.id}\n Details: ${err}`);\n console.log(err.stack);\n }\n }\n });\n});\n","import Parsons from \"./parsons\";\n\nexport default class TimedParsons extends Parsons {\n constructor(opts) {\n super(opts);\n // todo -- make this configurable\n if (opts.timedfeedback) {\n this.showfeedback = true;\n } else {\n this.showfeedback = false;\n }\n this.grader.showfeedback = this.showfeedback;\n this.hideFeedback();\n $(this.checkButton).hide();\n $(this.helpButton).hide();\n $(this.resetButton).hide();\n }\n checkCorrectTimed() {\n return this.correct ? \"T\" : \"F\";\n }\n hideFeedback() {\n $(this.messageDiv).hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory[\"parsons\"] = function (opts) {\n if (opts.timed) {\n return new TimedParsons(opts);\n }\n return new Parsons(opts);\n};\n"],"names":["a","b","c","d","e","setTimeout","j","f","Array","isArray","g","forEach","length","call","hasOwnProperty","h","Error","stack","replace","console","warn","log","apply","this","arguments","i","prototype","Object","create","constructor","_super","la","k","oa","l","m","q","addEventListener","n","removeEventListener","o","parentNode","p","indexOf","trim","split","r","s","slice","t","push","sort","u","toUpperCase","ma","w","ownerDocument","defaultView","parentWindow","x","manager","callback","element","target","options","inputTarget","domHandler","enable","handler","init","z","pointers","changedPointers","Ea","Ga","Ha","isFirst","isFinal","session","eventType","firstInput","D","firstMultiple","center","E","timeStamp","ra","deltaTime","angle","I","distance","H","offsetDelta","prevDelta","prevInput","deltaX","y","deltaY","B","offsetDirection","G","F","overallVelocityX","overallVelocityY","overallVelocity","qa","scale","Ra","K","rotation","J","maxPointers","C","srcEvent","A","emit","recognize","lastInterval","Da","velocity","velocityX","velocityY","direction","clientX","pa","clientY","Ia","Ja","Ka","La","Ma","Qa","Math","sqrt","atan2","PI","L","evEl","Ta","evWin","Ua","pressed","M","Xa","Ya","store","pointerEvents","N","evTarget","$a","_a","started","O","touches","changedTouches","concat","P","bb","targetIds","Q","Fa","identifier","filter","R","touch","mouse","primaryTouch","lastTouches","S","T","splice","cb","U","abs","db","V","set","Y","defaults","id","ua","state","nb","simultaneous","requireFail","Z","sb","qb","pb","ob","$","_","get","aa","ba","pX","pY","ca","da","_timer","_input","ea","fa","ga","pTime","pCenter","count","ha","recognizers","preset","ia","handlers","oldCssProps","input","inputClass","xa","ya","wa","touchAction","ja","add","recognizeWith","requireFailure","style","cssProps","ka","createEvent","initEvent","gesture","dispatchEvent","na","createElement","round","Date","now","assign","TypeError","sa","keys","ta","test","navigator","userAgent","za","Ba","Na","Oa","Pa","destroy","Sa","mousedown","mousemove","mouseup","type","button","which","pointerType","Va","pointerdown","pointermove","pointerup","pointercancel","pointerout","Wa","MSPointerEvent","PointerEvent","toLowerCase","pointerId","Za","touchstart","touchmove","touchend","touchcancel","ab","sourceCapabilities","firesTouchEvents","eb","fb","gb","hb","ib","jb","kb","lb","mb","CSS","supports","X","compute","actions","update","getTouchAction","W","join","preventDefaults","prevented","preventSrc","preventDefault","rb","tb","dropRecognizeWith","dropRequireFailure","hasRequireFailures","canRecognizeWith","event","additionalEvent","tryEmit","canEmit","process","reset","attrTest","threshold","directionTest","time","clearTimeout","taps","interval","posThreshold","failTimeout","tapCount","VERSION","domEvents","userSelect","touchSelect","touchCallout","contentZooming","userDrag","tapHighlightColor","stop","stopped","curRecognizer","remove","on","off","INPUT_START","INPUT_MOVE","INPUT_END","INPUT_CANCEL","STATE_POSSIBLE","STATE_BEGAN","STATE_CHANGED","STATE_ENDED","STATE_RECOGNIZED","STATE_CANCELLED","STATE_FAILED","DIRECTION_NONE","DIRECTION_LEFT","DIRECTION_RIGHT","DIRECTION_UP","DIRECTION_DOWN","DIRECTION_HORIZONTAL","DIRECTION_VERTICAL","DIRECTION_ALL","Manager","Input","TouchAction","TouchInput","MouseInput","PointerEventInput","TouchMouseInput","SingleTouchInput","Recognizer","AttrRecognizer","Tap","Pan","Swipe","Pinch","Rotate","Press","each","merge","extend","inherit","bindFn","prefixed","self","Hammer","window","document","i18n","load","en","msg_parson_check_me","msg_parson_reset","msg_parson_help","msg_parson_too_short","msg_parson_drag_from_here","msg_parson_drag_to_here","msg_parson_correct_first_try","msg_parson_correct","msg_parson_correct_runnable","msg_parson_wrong_indent","msg_parson_wrong_indents","msg_parson_wrong_order","msg_parson_arrow_navigate","msg_parson_help_info","msg_parson_not_solution","msg_parson_provided_indent","msg_parson_combined_blocks","msg_parson_remove_incorrect","msg_parson_will_combine","msg_parson_atleast_three_attempts","msg_parson_three_blocks_left","msg_parson_will_provide_indent","unshift","charAt","RegExp","substring","parseInt","isNaN","String","fromCharCode","tagName","nodeType","attributes","specified","firstChild","nextSibling","name","value","nodeValue","appendChild","createTextNode","innerHTML","v","match","tripleQuotedStrings","multiLineStrings","hashComments","cStyleComments","regexLiterals","keywords","source","tags","va","trace","PR_normalizedHtml","prettyPrintOne","prettyPrint","getElementsByTagName","getTime","className","setAttribute","replaceChild","PR","createSimpleLexer","registerLangHandler","sourceDecorator","PR_ATTRIB_NAME","PR_ATTRIB_VALUE","PR_COMMENT","PR_DECLARATION","PR_KEYWORD","PR_LITERAL","PR_PLAIN","PR_PUNCTUATION","PR_SOURCE","PR_STRING","PR_TAG","PR_TYPE","LineBasedGrader","problem","inverseLISIndices","arr","allSubsequences","subsequenceForCurrent","current","lastElementAdded","subsequent","longestSubsequence","longestSubsequenceLength","subs","indexes","lIndex","grade","clearFeedback","correctLines","percentLines","incorrectIndents","solutionLines","solution","answerLines","min","max","correctLength","isCorrectOrder","checkCorrectOrdering","checkCorrectIndentation","calculatePercent","graderState","usesIndentation","indentLeft","indentRight","loopLimit","viewIndent","indent","solutionLength","text","numLines","lines","score","percent","hasPath","pred","succ","toString","Map","gpred","gsucc","predecessorsIter","bind","successorsIter","thisLevel","forwardFringe","reverseFringe","has","JSNetworkXNoPath","bidirectionalPredSucc","path","reverse","bidirectionalShortestPath","error","DiGraph","graph","node","adj","edge","addNode","addEdge","datadict","nodes","optData","from","entries","edges","optNbunch","edgesIter","nodesIter","toIterator","KeyError","numberOfNodes","size","nbunchIter","hasNode","ex","JSNetworkXError","nodeNbrs","isObjectLike","undefined","mapIterator","tuple2","nbrData","result","optCopy","addNodesFrom","addEdgesFrom","tuple3c","deepcopy","thisPred","thisSucc","nbrs","sprintf","successors","predecessors","JSNetworkXException","message","JSNetworkXAlgorithmError","super","JSNetworkXUnfeasible","graphToNX","line1","tag","line2tag","depends","isVertexCover","vertexCover","DAGGrader","inSolution","map","block","seen","Set","problematicSubgraph","line2","mvc","subsets","pow","bin","subset","allSubsets","blocks","isDistractor","curIndent","expectedIndent","solutionIndent","orderExplored","explored","fringe","pop","newNodes","topologicalSort","isDirectedAcyclicGraph","line","distractor","ParsonsLine","codestring","displaymath","index","view","trimmed","language","addClass","prettifyLanguage","counterId","initializeWidth","width","outerWidth","pixelsPerIndent","fontSize","getComputedStyle","getPropertyValue","tempCanvasCtx","getContext","possibleFonts","fillerText","font","serifWidth","measureText","includes","replaceAll","fontFamily","noindent","ParsonsBlock","labels","blockIndex","sharedIndent","lineDiv","append","lineIndent","removeClass","labelDiv","numbered","prepend","css","float","addLine","children","consumeBlock","attr","makeTabIndex","detach","newBlocks","addLabel","updateView","addIndent","areaWidth","label","div","offsetHeight","initializeInteractivity","hasClass","hammer","that","panStart","panEnd","panMove","enabled","inSourceArea","sourceArea","childNodes","pageXCenter","boundingRect","getBoundingClientRect","pageXOffset","left","pageYCenter","pageYOffset","top","height","minimumLineIndent","slideUnderBlock","sourceBlocks","pairedBin","pairedBins","matchesBin","validSourceIndexes","lastBin","blockBin","verticalOffset","answerArea","bottom","newFocus","textFocus","enterKeyboardMode","textMove","textMoving","releaseFocus","logMove","exitKeyboardMode","unbind","focus","blur","keydown","keyDown","disable","removeAttr","initializeTabIndex","resetView","hasAttribute","opacity","moving","movingX","pageX","movingY","pageY","isAnswered","keyCode","moveLeft","selectLeft","moveUp","selectUp","moveRight","selectRight","moveDown","selectDown","toggleMove","offset","insertBefore","answerBlocks","item","myIndex","enabledSourceBlocks","chooseNext","chooseOffset","itemOffset","enabledAnswerBlocks","hash","Parsons","opts","orig","containerDiv","origElem","find","question","useRunestoneServices","divid","storageId","localStorageKey","contentArray","counter","initializeOptions","grader","showfeedback","fulltext","html","checkCount","numDistinct","hasSolved","initializeLines","initializeView","caption","addCaption","checkServer","runnableDiv","maxdist","data","order","adaptive","initializeAdaptive","locale","eBookConfig","python","java","javascript","cpp","ruby","outerDiv","parsTextDiv","keyboardTip","hide","sortContainerDiv","sourceRegionDiv","sourceLabel","answerRegionDiv","answerLabel","parsonsControlDiv","checkButton","textContent","checkCurrentAnswer","logCurrentAnswer","renderFeedback","resetButton","prop","setLocalStorage","helpButton","disabled","helpMe","messageDiv","visibility","replaceWith","closest","textBlocks","indents","distractIndex","tagIndex","dependsIndex","textBlock","distractHelptext","dependsString","mystring","arg1","code","paired","inArray","groupWithNext","initializeAreas","replaceElement","isHidden","offsetParent","classList","body","Prism","lang","codeEls","querySelectorAll","el","highlightAllUnder","maxSourceAreaWidth","offsetWidth","areaHeight","maxFunction","height_add","async","runestoneMathReady","then","queueMathJax","MathJax","startup","addition","outerH","outerHeight","isTimed","bins","lineNumbers","pairedDivs","pairDistractors","pairedDiv","addBlockLabels","newerData","dataA","dataB","dateA","timestamp","dateB","dateFromTimestamp","loadData","sourceHash","trash","answerHash","answer","adaptiveHash","optionsFromHash","blocksFromSource","blocksFromHash","correct","needsReinitialization","assessmentTaken","localData","localStorage","getItem","JSON","parse","restoreAnswers","serverData","checkLocalStorage","graderactive","toStore","setItem","stringify","activity","div_id","storageid","act","logBookEvent","sid","key","adaptBlocks","distractors","recentAttempts","adaptiveId","lastestAttemptCount","nBlocks","nBlocksToCombine","nDistractors","nToRemove","limitDistractors","shuffled","output","best","combineIndex","next","rating","blockIndent","nextIndent","newSolution","combinedOutput","originalBlocks","unorderedBlocks","removedBlocks","chunks","chunk","random","indexTo","indexFrom","blockFromHash","Number","getBlockById","solutionBlocks","nextBlock","child","all","getBlockFor","check","contains","parentElement","canHelp","lastAnswerHash","gotHelp","alert","runnable","display","generateRunableVersion","getElementById","parsonsText","repeat","textEl","querySelector","dataset","component","runestoneComponents","renderOneComponent","feedbackArea","incorrectBlocks","inSolutionIndexes","notInSolution","lisIndexes","distractorToRemove","numberOfBlocks","fIncludeDistractors","removeDistractor","animate","duration","complete","sourceRect","startX","startY","endX","endY","start","progress","removeIndentation","blockWidth","expandedWidth","getSolutionBlockInSource","currBlock","getFurthestBlock","maxDist","dist","maxBlock","indexSol","prevBlock","indexPrev","combineBlocks","block1","block2","index1","index2","move","subtract","makeEasier","date","array","temporaryValue","randomIndex","currentIndex","returnArray","floor","show","disableInteraction","checkServerComplete","movingState","bounds","right","movingHeight","positionTop","newState","updateSource","updateAnswer","updateMoving","baseWidth","hasInserted","movingBin","binForBlock","insertPositions","testHeight","appendTo","matching","overflow","color","movingIndent","before","binCount","binChildren","blocksNotInBins","currentBin","scrollTop","componentMap","err","TimedParsons","timedfeedback","hideFeedback","checkCorrectTimed","component_factory","timed"],"sourceRoot":""}