Changeset 1955044
- Timestamp:
- 10/11/2018 10:30:08 AM (7 years ago)
- Location:
- easycoder/trunk
- Files:
-
- 4 edited
-
easycoder-min.js (modified) (2 diffs)
-
easycoder.js (modified) (28 diffs)
-
easycoder.php (modified) (2 diffs)
-
readme.txt (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
easycoder/trunk/easycoder-min.js
r1952358 r1955044 22 22 b=e.content/b.getValue(f),l.value[l.index]={type:"constant",numeric:!0,content:Math.trunc(b)})}else b.error.VariableDoesNotHoldAValueError(l.name);return a.pc+1}},Encode:{compile:function(b){var a=b.getLino();b.next();if(b.isSymbol()){var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"encode",lino:a,symbol:d});return!0}return!1},run:function(b){var a=b[b.pc],d=b.getSymbolRecord(a.symbol);if(d.isValueHolder){var f=b.getValue(d.value);d.value[d.index]={type:"constant",numeric:"false", 23 23 content:b.encode(f)};a.numeric=!1}else b.error.VariableDoesNotHoldAValueError(d.name);return a.pc+1}},End:{compile:function(b){b.next();return!0},run:function(){return 0}},Extend:{compile:function(b){var a=b.getLino();b.next();var d=b.getValue(),f=b.getValue();b.addCommand({domain:"basic",keyword:"extend",lino:a,request:d,data:f});return!0},run:function(b){var a=b[b.pc];try{if("function"===typeof EasyCoder_extension){var d=b.getValue(a.request),f=b.getValue(a.data);EasyCoder_extension(b,d,f)}else b.error.runtimeError("No extension found")}catch(l){b.error.runtimeError(l.message)}return a.pc+ 24 1}},Fork:{compile:function(b){var a=b.getLino();b.next();b.tokenIs("to")&&b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"fork",lino:a,label:d});return!0},run:function(b){var a=b[b.pc];try{b.run(b ,b.symbols[a.label].pc)}catch(d){console.log(d.message),alert(d.message)}return a.pc+1}},Go:{compile:function(b){var a=b.getLino();b.next();b.tokenIs("to")&&b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"goto",lino:a,label:d});return!0},run:function(b){return b[b.pc].pc+24 1}},Fork:{compile:function(b){var a=b.getLino();b.next();b.tokenIs("to")&&b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"fork",lino:a,label:d});return!0},run:function(b){var a=b[b.pc];try{b.run(b.symbols[a.label].pc)}catch(d){console.log(d.message),alert(d.message)}return a.pc+1}},Go:{compile:function(b){var a=b.getLino();b.next();b.tokenIs("to")&&b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"goto",lino:a,label:d});return!0},run:function(b){return b[b.pc].pc+ 25 25 1}},Gosub:{compile:function(b){var a=b.getLino();b.next();b.tokenIs("to")&&b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"gosub",lino:a,label:d});return!0},run:function(b){var a=b[b.pc];b.stack.push(b.pc+1);return b.symbols[a.label].pc}},Goto:{compile:function(b){var a=b.getLino();b.next();var d=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"goto",lino:a,label:d});return!0},run:function(b){var a=b[b.pc];return a.label?b.symbols[a.label].pc:a.goto}},If:{compile:function(b){var a= 26 26 b.getLino();b.next();var d=b.condition.compile(b),f=b.getPc();b.addCommand({domain:"basic",keyword:"if",lino:a,condition:d});b.compileOne();if(!b.getToken())return b.getCommandAt(f).else=b.getPc(),!0;b.tokenIs("else")?(a=b.getPc(),b.addCommand({domain:"basic",keyword:"goto",goto:0}),b.getCommandAt(f).else=b.getPc(),b.next(),b.compileOne(!0),b.getCommandAt(a).goto=b.getPc()):b.getCommandAt(f).else=b.getPc();return!0},run:function(b){var a=b[b.pc];return b.condition.test(b,a.condition)?a.pc+1:a.else}}, 27 27 Index:{compile:function(b){var a=b.getLino();b.getTokens();b.next();if(b.isSymbol()){var d=b.getToken();b.next();if(b.tokenIs("to")){b.next();var f=b.getValue();b.addCommand({domain:"basic",keyword:"index",lino:a,symbol:d,value:f});return!0}}return!1},run:function(b){var a=b[b.pc],d=b.getSymbolRecord(a.symbol);d.index=b.getValue(a.value);d.index>=d.elements&&b.error.arrayIndexOutOfRangeError(d.name);return a.pc+1}},Multiply:{compile:function(b){var a=b.getLino();b.next();b.getToken();if(b.isSymbol()){var d= 28 b.getSymbol();var f=b.getCommandAt(d.pc).name}d=b.getValue();b.tokenIs("by")&&b.next();var e=b.getValue();if(b.tokenIs("giving")){b.next();if(b.isSymbol())return f=b.getSymbol(),f=b.getCommandAt(f.pc).name,b.next(),b.addCommand({domain:"basic",keyword:"multiply",lino:a,value1:d,value2:e,target:f}),!0;b.warning("basic multiply': Expected value holder")}else return void 0===f&&b.warning("basic multiply': No target variable given"),b.addCommand({domain:"basic",keyword:"multiply",lino:a,value2:e,target:f}),29 !0;return!1},run:function(b){var a=b[b.pc],d=a.value1,f=a.value2, e=b.getSymbolRecord(a.target);if(e.isValueHolder){var g=e.value[e.index];d?(b=b.getValue(d)*b.getValue(f),e.value[e.index]={type:"constant",numeric:!0,content:b}):(g.numeric||b.error.nonNumericValueError(),b=g.content*b.getValue(f),e.value[e.index]={type:"constant",numeric:!0,content:b})}else b.error.VariableDoesNotHoldAValueError(e.name);return a.pc+1}},Negate:{compile:function(b){var a=b.getLino();b.getTokens();b.next();if(b.isSymbol()){var d=28 b.getSymbol();var f=b.getCommandAt(d.pc).name}d=b.getValue();b.tokenIs("by")&&b.next();var l=b.getValue();if(b.tokenIs("giving")){b.next();if(b.isSymbol())return f=b.getSymbol(),f=b.getCommandAt(f.pc).name,b.next(),b.addCommand({domain:"basic",keyword:"multiply",lino:a,value1:d,value2:l,target:f}),!0;b.warning("basic multiply': Expected value holder")}else return void 0===f&&b.warning("basic multiply': No target variable given"),b.addCommand({domain:"basic",keyword:"multiply",lino:a,value2:l,target:f}), 29 !0;return!1},run:function(b){var a=b[b.pc],d=a.value1,f=a.value2,l=b.getSymbolRecord(a.target);if(l.isValueHolder){var e=l.value[l.index];d?(b=b.getValue(d)*b.getValue(f),l.value[l.index]={type:"constant",numeric:!0,content:b}):(e.numeric||b.error.nonNumericValueError(),b=e.content*b.getValue(f),l.value[l.index]={type:"constant",numeric:!0,content:b})}else b.error.VariableDoesNotHoldAValueError(l.name);return a.pc+1}},Negate:{compile:function(b){var a=b.getLino();b.getTokens();b.next();if(b.isSymbol()){var d= 30 30 b.getToken();b.next();b.addCommand({domain:"basic",keyword:"negate",lino:a,symbol:d});return!0}return!1},run:function(b){var a=b[b.pc],d=b.getSymbolRecord(a.symbol);d.isValueHolder?d.value[d.index]={type:"constant",numeric:!0,content:-d.value[d.index].content}:b.error.VariableDoesNotHoldAValueError(d.name);return a.pc+1}},Print:{compile:function(b){var a=b.getLino();b.next();var d=b.getValue();b.addCommand({domain:"basic",keyword:"print",lino:a,value:d});return!0},run:function(b){var a=b[b.pc];b= 31 b.getValue(a.value);console.log("-> "+b);return a.pc+1}},Put:{compile:function(b){var a=b.getLino();b.next();var d=b.getValue();if(b.tokenIs("into")){b.next();if(b.isSymbol()){var f=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"put",lino:a,value:d,target:f});return!0}b.error.noSuchVariableError(b.getToken())}return!1},run:function(a){var b=a[a.pc],d=b.value,f=a.getSymbolRecord(b.target);f.isValueHolder||a.error.variableDoesNotHoldAValueError(f.name);f.value[f.index]=a.evaluate(d);return b.pc+ 32 1}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"basic",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var d=a.getSymbolRecord();if(!d.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var f=[];;){a.mark();try{f.push(a.getValue())}catch(l){a.rewind();break}}a.addCommand({domain:"basic",keyword:"set",lino:b,type:"setArray",target:d.name,value:f});return!0}a.addCommand({domain:"basic", 33 keyword:"set",lino:b,type:"setBoolean",target:d.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of")&&(a.next(),a.getTarget(),a.isSymbol()||a.error.unknownVariableError(a.getToken()),d=a.getToken(),a.next(),a.tokenIs("to"))))return a.next(),f=a.getValue(),a.addCommand({domain:"basic",keyword:"set",lino:b,type:"setElements",symbol:d,value:f}),!0;if(a.tokenIs("encoding")){a.next();if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"basic", 34 keyword:"set",type:"set",lino:b,encoding:d}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setBoolean":var d=a.getSymbolRecord(b.target);d.isValueHolder?(d.value[d.index]={type:"boolean",content:!0},b.numeric=!1):a.error.VariableDoesNotHoldAValueError(d.name);break;case "setElements":d=a.getSymbolRecord(b.symbol);d.elements=a.getValue(b.value);d.index=0;d.value=[];for(a=0;a<d.elements;a++)d.value.push({});break;case "setArray":a=a.getSymbolRecord(b.target); 35 a.elements=b.value.length;a.value=b.value;break;case "encoding":a.encoding=a.getValue(b.encoding)}return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"basic",keyword:"stop",lino:b,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var b=a.getLino();a.next();var d=a.getValue();if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var f=a.getSymbol();if(a.getCommandAt(f.pc).isValueHolder){if("giving"===a.peek()){f=a.getValue();a.next(); 36 var e=a.getToken();a.next();a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d,value2:f,target:e})}else f=a.getToken(),a.next(),a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d,target:f});return!0}a.warning("basic "+g.name+"': Expected value holder")}else{f=a.getValue();if(a.tokenIs("giving"))return a.next(),e=a.getToken(),a.next(),a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d,value2:f,target:e}),!0;a.warning("basic "+g.name+'\': Expected "giving"')}return!1},run:function(a){var b= 37 a[a.pc],d=b.value1,f=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var g=e.value[e.index];f?(a=a.getValue(f)-a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(g.numeric||a.error.nonNumericValueError(),a=a.getValue(g)-a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(e.name);return b.pc+1}},Toggle:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var d=a.getSymbolPc();a.next(); 38 a.addCommand({domain:"basic",keyword:"toggle",lino:b,symbol:d});return!0}return!1},run:function(a){var b=a[a.pc],d=a[b.symbol];if(d.isValueHolder){var f=a.domain[d.domain];a=f.value.get(a,d.value[d.index]).content;f.value.put(d,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(d.name);return b.pc+1}},Variable:{compile:function(a){a.compileVariable("basic","variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var b=a.getLino();a.next();var d= 39 a.getValue(a),f=1E3;switch(a.getToken()){case "milli":case "millis":a.next();f=1;break;case "tick":case "ticks":a.next();f=10;break;case "second":case "seconds":a.next();f=1E3;break;case "minute":case "minutes":a.next(),f=6E4}a.addCommand({domain:"basic",keyword:"wait",lino:b,value:d,multiplier:f});return!0},run:function(a){var b=a[a.pc],d=a.getValue(b.value);setTimeout(function(){a.run(a,b.pc+1)},d*b.multiplier);return 0}},While:{compile:function(a){var b=a.getLino();a.next();var d=a.getCondition(), 40 f=a.getPc();a.addCommand({domain:"basic",keyword:"while",lino:b,condition:d});b=a.getPc();a.addCommand({domain:"basic",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"basic",keyword:"goto",goto:f});a.getCommandAt(b).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(b){switch(b){case "add":return a.Add;case "alias":return a.Alias;case "begin":return a.Begin;case "clear":return a.Clear;case "debug":return a.Debug;case "decode":return a.Decode; 41 case "divide":return a.Divide;case "encode":return a.Encode;case "end":return a.End;case "extend":return a.Extend;case "fork":return a.Fork;case "go":return a.Go;case "gosub":return a.Gosub;case "goto":return a.Goto;case "if":return a.If;case "index":return a.Index;case "multiply":return a.Multiply;case "negate":return a.Negate;case "print":return a.Print;case "put":return a.Put;case "return":return a.Return;case "set":return a.Set;case "stop":return a.Stop;case "take":return a.Take;case "toggle":return a.Toggle; 42 case "variable":return a.Variable;case "wait":return a.Wait;case "while":return a.While;default:return!1}},run:function(b){var c=b[b.pc],d=a.getHandler(c.keyword);d||b.error.runtimeError("Unknown keyword '"+c.keyword+"' in 'basic' package");return d.run(b)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var b=a.getToken();a.next();return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"basic",type:"modulo",name:b,value:a}):{domain:"basic", 43 type:"symbol",name:b}}b=a.getToken();if("true"===b)return a.next(),{domain:"basic",type:"boolean",content:!0};if("false"===b)return a.next(),{domain:"basic",type:"boolean",content:!1};if("random"===b)return a.next(),{domain:"basic",type:"random",range:a.getValue()};if("cos"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"cos",angle_c:b,radius_c:a};if("sin"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"sin",angle_s:b, 44 radius_s:a};if("tan"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"tan",angle_t:b,radius_t:a};if("empty"===b)return a.next(),{domain:"basic",type:"empty"};if("encode"===b)return a.next(),{domain:"basic",type:"encode",value:a.getValue()};if("decode"===b)return a.next(),{domain:"basic",type:"decode",value:a.getValue()};if("element"===b){a.next();b=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var d=a.getSymbolRecord();a.next();if("variable"===d.keyword)return{domain:"basic", 45 type:"element",element:b,symbol:d.name}}return null}if("property"===b)return a.next(),b=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getSymbolRecord(),a.next(),"variable"===d.keyword))?{domain:"basic",type:"property",property:b,symbol:d.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol()))return b=a.getToken(),a.next(),{domain:"basic",type:"index",name:b};break;case "value":a.next();if(a.tokenIs("of"))return a.next(), 46 {domain:"basic",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"basic",type:"lengthOf",value:a.getValue()};break;case "left":a.next();b=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"basic",type:"left",count:b,value:a};break;case "right":if(a.next(),b=a.getValue(),a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"basic",type:"right",count:b,value:a}}return null},get:function(a,c){switch(c.type){case "boolean":return{type:"boolean", 47 numeric:!1,content:c.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(c.name).index};case "random":return a=a.evaluate(c.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var b=a.getValue(c.angle_c);a=a.getValue(c.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*parseFloat(b))*a,10)};case "sin":return b=a.getValue(c.angle_s),a=a.getValue(c.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329* 48 parseFloat(b))*a,10)};case "tan":return b=a.getValue(c.angle_t),a=a.getValue(c.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(b))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(c.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(c.value).length};case "left":return a.getValue(c.value),{type:"constant",numeric:!1,content:a.getValue(c.value).substr(0,a.getValue(c.count))};case "modulo":return b=a.getSymbolRecord(c.name), 49 a=a.evaluate(c.value),{type:"constant",numeric:!0,content:b.value[b.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(c.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(c.value))};case "element":return b=a.getValue(c.element),c=a.getSymbolRecord(c.symbol),a=JSON.parse(a.getValue(c.value[c.index]))[b],{type:"constant",numeric:!1,content:"object"===typeof a? 50 JSON.stringify(a):a};case "property":return b=a.getValue(c.property),c=a.getSymbolRecord(c.symbol),a=a.getValue(c.value[c.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[b]:JSON.parse(a)[b]}}return null},put:function(a,c){a.value[a.index]=c}},condition:{compile:function(b){if(b.tokenIs("not"))return b.next(),{domain:"basic",type:"not",value:b.getValue()};try{var c=b.getValue();if("is"===b.getToken()){b.next();var d=a.isNegate(b);if(b.tokenIs("greater")){b.next();if(b.tokenIs("than")){b.next(); 51 var f=b.getValue();return{domain:"basic",type:"greater",value1:c,value2:f,negate:d}}return null}if(b.tokenIs("less")){b.next();if(b.tokenIs("than")){b.next();var e=b.getValue();return{domain:"basic",type:"less",value1:c,value2:e,negate:d}}return null}var g=b.getValue();return{domain:"basic",type:"is",value1:c,value2:g,negate:d}}if(c)return{domain:"basic",type:"boolean",value:c}}catch(p){console.log(p)}return null},test:function(a,c){switch(c.type){case "boolean":return a.getValue(c.value);case "is":return a= 52 a.compare(a,c.value1,c.value2),c.negate?0!==a:0===a;case "greater":return a=a.compare(a,c.value1,c.value2),c.negate?0>=a:0<a;case "less":return a=a.compare(a,c.value1,c.value2),c.negate?0<=a:0>a;case "not":return!a.getValue(c.value)}}}};k.exports=a},{}],3:[function(e,k,h){var g={A:{compile:function(a){a.compileVariable("browser","a",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Alert:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();a.addCommand({domain:"browser",keyword:"alert", 53 lino:b,value:c});return!0},run:function(a){var b=a.value.evaluate(a,a[a.pc].value).content;alert(b);return a[a.pc].pc+1}},Attach:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getProgram()[a.getSymbol().pc];switch(c.keyword){case "button":case "div":case "header":case "p":case "a":case "img":case "input":case "ul":case "li":case "select":case "span":case "pre":case "popup":a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"browser", 54 keyword:"attach",lino:b,type:c.keyword,symbol:c.name,cssId:d});return!0}break;default:return a.addWarning("type '"+c.keyword+"' not recognized in browser 'attach'"),!1}}a.addWarning("Unrecognised syntax in 'attach'");return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.cssId).content,d=document.getElementById(c);d||a.error.noSuchElementError(c);var f=a.getSymbolRecord(b.symbol);f.value[f.index]={type:"constant",numeric:"false",content:c};"popup"===b.type&&(a.popups.push(d.id),window.onclick= 55 function(b){a.popups.includes(b.target.id)&&(b.target.style.display="none")});return b.pc+1}},Audioclip:{compile:function(a){a.compileVariable("browser","audioclip");return!0},run:function(a){return a[a.pc].pc+1}},BUTTON:{compile:function(a){a.compileVariable("browser","button",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Create:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord(),d=c.name;a.next();switch(c.keyword){case "audioclip":a.tokenIs("from")&& 56 a.next();var f=a.getValue();a.addCommand({domain:"browser",keyword:"create",type:"audioclip",name:c.name,lino:b,target:d,value:f});return!0;case "div":case "p":case "h1":case "h2":case "h3":case "h4":case "h5":case "h6":case "span":case "button":case "input":case "pre":if(d="","input"===c.keyword&&(a.tokenIs("type")?(a.next(),d=a.getToken(),a.next()):a.error.missingInputTypeError()),a.tokenIs("in")&&(a.next(),a.isSymbol())){f=a.getSymbolRecord();"dom"!==f.extra&&a.error.inappropriateTypeError(f.keyword); 57 a.next();for(var e="",g="",h="",k=!0;k;){var n=a.getToken();if(!n)break;a.next();switch(n){case "class":e=a.getValue();break;case "style":g=a.getValue();break;case "text":h=a.getValue();break;default:a.prev(),k=!1}}a.addCommand({domain:"browser",keyword:"create",lino:b,type:c.keyword,name:c.name,inputType:d,className:e,style:g,text:h,parent:f.name});return!0}}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.name);switch(b.type){case "audioclip":c.value[c.index]=b.value;break;default:var d= 58 a.getSymbolRecord(b.parent),f=document.getElementById(d.value[d.index].content);d=document.createElement(b.type);d.id="easycoder-"+c.name+"-"+c.index;c.value[c.index]={type:"constant",numeric:!1,content:d.id};f.appendChild(d);b.inputType&&d.setAttribute("type",b.inputType);b.className&&(d.className=b.className);c=a.value.evaluate(a,b.style).content;c=$jscomp.makeIterator(c.split(";"));for(f=c.next();!f.done;f=c.next())f=f.value.split(":"),d.style[f[0]]=f[1];b.text&&(d.textContent=a.value.evaluate(a, 59 b.text).content)}return a[a.pc].pc+1}},DIV:{compile:function(a){a.compileVariable("browser","div",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Header:{compile:function(a){a.compileVariable("browser","header",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Hide:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"hide",lino:b,symbol:c});return!0}a.addWarning("Unrecognised syntax in 'hide'"); 60 return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol);document.getElementById(a.value[a.index].content).style.visibility="hidden";return b.pc+1}},IMG:{compile:function(a){a.compileVariable("browser","img",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},INPUT:{compile:function(a){a.compileVariable("browser","input",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},LI:{compile:function(a){a.compileVariable("browser","li",!1,"dom");return!0},run:function(a){return a[a.pc].pc+ 61 1}},Location:{compile:function(a){var b=a.getLino();a.getTokens();a.next();var c=a.getValue();a.addCommand({domain:"browser",keyword:"location",lino:b,location:c});return!0},run:function(a){a=a[a.pc];window.location=a.location.content;return a.pc+1}},On:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();switch(c){case "change":case "click":if(a.next(),a.isSymbol()){var d=a.getSymbolRecord();a.next();if("dom"!==d.extra)return!1;a.addCommand({domain:"browser",keyword:"on",lino:b,action:c, 62 symbol:d.name});c=a.getPc();a.addCommand({domain:"basic",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"basic",keyword:"stop",lino:b,next:0});a.getCommandAt(c).goto=a.getPc();return!0}}a.addWarning("Unrecognised syntax in 'on'");return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);switch(b.action){case "change":if("select"===c.keyword){var d=c.value[c.index].content;if(d){var f=document.getElementById(d);f.targetPc=b.pc+2;f.addEventListener("change",function(){try{a.run(a, 63 f.targetPc)}catch(l){console.log(l.message),alert(l.message)}return!1})}}break;case "click":c.value.forEach(function(d,f){if(d=d.content)d=document.getElementById(d),d.targetPc=b.pc+2,d.targetIndex=f,d.onclick=function(b){var d=b.target;d.blur();c.index=d.targetIndex;try{setTimeout(function(){a.run(a,d.targetPc)},1)}catch(n){console.log(n.message),alert(n.message)}return!1}})}return b.pc+1}},P:{compile:function(a){a.compileVariable("browser","p",!1,"dom");return!0},run:function(a){return a[a.pc].pc+ 64 1}},Play:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();"audioclip"===c.keyword&&(a.next(),a.addCommand({domain:"browser",keyword:"play",lino:b,target:c.name}))}return!0},run:function(a){var b=a.getSymbolRecord(a[a.pc].target);b=a.value.evaluate(a,b.value[b.index]).content;(new Audio(b)).play();return a[a.pc].pc+1}},Popup:{compile:function(a){a.compileVariable("browser","popup");return!0},run:function(a){return a[a.pc].pc+1}},PRE:{compile:function(a){a.compileVariable("browser", 65 "pre",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Remove:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"remove",lino:b,symbol:c});return!0}a.unrecognisedSymbol(a.getToken());return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol);document.getElementById(a.value[a.index].content).style.display="none";return b.pc+1}},SELECT:{compile:function(a){a.compileVariable("browser", 66 "select",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Set:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();if(a.tokenIs("from")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContentVar",source:d,target:c});return!0}}else if(c=a.getToken(),"the"===c&&(a.next(),c=a.getToken()),"content"===c){if(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())){c=a.getToken();a.next();if(a.tokenIs("from")&& 67 (a.next(),a.isSymbol()))return d=a.getToken(),a.next(),a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContentVar",source:d,target:c}),!0;if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContent",value:d,target:c}),!0}}else if("text"===c){if(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol()))switch(c=a.getSymbolRecord(),c.keyword){case "button":case "input":if(a.next(),a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"browser", 68 keyword:"set",lino:b,type:"setText",symbolName:c.name,value:d}),!0}}else if("attribute"===c){if(a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("to")))){a.next();var f=a.getValue();a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setAttribute",symbolName:d,attributeName:c,attributeValue:f});return!0}}else if("style"===c&&(a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("to")&&(a.next(), 69 f=a.getValue())))))return a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setStyle",symbolName:d,styleName:c,styleValue:f}),!0;a.addWarning("Unrecognised syntax in 'set'");return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setContentVar":var c=a.getSymbolRecord(b.source);a=a.getSymbolRecord(b.target);c=document.getElementById(c.value[c.index].content);var d=document.getElementById(a.value[a.index].content);d.innerHTML=c.innerHTML;break;case "setContent":c=a.value.evaluate(a,b.value); 70 var f=c.content;c.numeric&&(f=""+f);a=a.getSymbolRecord(b.target);a=a.value[a.index].content;d=document.getElementById(a);d.innerHTML=f;break;case "setText":c=a.getSymbolRecord(b.symbolName);d=document.getElementById(c.value[c.index].content);f=a.value.evaluate(a,b.value).content;switch(c.keyword){case "button":d.innerHTML=f;break;case "input":d.value=f}break;case "setAttribute":c=a.getSymbolRecord(b.symbolName);switch(b.attributeValue.type){case "constant":f=b.attributeValue.content;break;case "symbol":a= 71 a.getSymbolRecord(b.attributeValue.name),f=a.value[a.index].content}a=c.value[c.index].content;d=document.getElementById(a);d.setAttribute(b.attributeName.content,f);break;case "setStyle":c=a.getSymbolRecord(b.symbolName),f=a.value.evaluate(a,b.styleValue),c.value[c.index]||a.error.runtimeError("Variable '"+c.name+"' has not been assigned."),a=c.value[c.index].content,a=document.getElementById(a),c={},c[b.styleName.content]=f.content,Object.assign(a.style,c)}return b.pc+1}},Show:{compile:function(a){var b= 72 a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"show",lino:b,symbol:c});return!0}a.addWarning("Unrecognised syntax in 'show'");return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol);var c=document.getElementById(a.value[a.index].content);switch(a.type){case "span":c.style.display="inline";break;default:c.style.display="block"}c.style.visibility="visible";return b.pc+1}},SPAN:{compile:function(a){a.compileVariable("browser", 73 "span",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Trace:{compile:function(a){var b=a.getLino();a.next();var c=[];if(a.isSymbol()){for(;a.isSymbol();)c.push(a.getToken()),a.next();var d="horizontal";if(a.tokenIs("horizontal")||a.tokenIs("vertical"))d=a.getToken(),a.next();a.addCommand({domain:"browser",keyword:"trace",variant:"setup",lino:b,variables:c,alignment:d});return!0}a.addCommand({domain:"browser",keyword:"trace",variant:"run",lino:b});return!0},run:function(a){var b=a[a.pc]; 74 switch(b.variant){case "setup":console.log("Set up tracer");a.tracer={variables:b.variables,alignment:b.alignment};break;case "run":console.log("Run tracer"),a.tracer||(a.tracer={variables:[],alignment:"horizontal"}),a.tracing=!0,a.stop=!1}return a.pc+1}},UL:{compile:function(a){a.compileVariable("browser","ul",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},getHandler:function(a){switch(a){case "a":return g.A;case "alert":return g.Alert;case "attach":return g.Attach;case "audioclip":return g.Audioclip; 75 case "button":return g.BUTTON;case "create":return g.Create;case "div":return g.DIV;case "header":case "h1":case "h2":case "h3":case "h4":case "h5":case "h6":return g.Header;case "hide":return g.Hide;case "img":return g.IMG;case "input":return g.INPUT;case "li":return g.LI;case "location":return g.Location;case "on":return g.On;case "p":return g.P;case "play":return g.Play;case "popup":return g.Popup;case "pre":return g.PRE;case "remove":return g.Remove;case "select":return g.SELECT;case "set":return g.Set; 76 case "show":return g.Show;case "span":return g.SPAN;case "trace":return g.Trace;case "ul":return g.UL;default:return!1}},run:function(a){var b=a[a.pc],c=g.getHandler(b.keyword);c||a.error.runtimeError("Unknown keyword '"+b.keyword+"' in 'browser' package");return c.run(a)},value:{compile:function(a){var b=a.getToken();if("mobile"===b)return a.next(),{domain:"browser",type:"mobile"};if("br"===b)return a.next(),{domain:"browser",type:"br"};if("color"===b)return a.next(),{domain:"browser",type:"color", 77 value:a.getValue()};a.tokenIs("the")&&a.next();b=a.getToken();if("content"===b)return a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())?(b=a.getSymbolRecord(),a.next(),{domain:"browser",type:"contentOf",symbol:b.name}):null;if(["width","height"].includes(b)&&(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol()))){var c=a.getSymbolRecord();a.next();if("dom"===c.extra)return{domain:"browser",type:"width"===b?"widthOf":"heightOf",symbol:c.name}}return null},get:function(a,b){switch(b.type){case "symbol":a= 78 a.getSymbolRecord(b.name);b=a.value[a.index].content;switch(a.keyword){case "input":case "select":return a=document.getElementById(b),{type:"constant",numeric:!1,content:a.value}}break;case "mobile":return{domain:"browser",type:"boolean",content:"undefined"!==typeof window.orientation||-1!==navigator.userAgent.indexOf("IEMobile")};case "br":return{type:"constant",numeric:!1,content:"<br />"};case "contentOf":return a=a.getSymbolRecord(b.symbol),b=a.value[a.index].content,a=document.getElementById(b), 79 {type:"constant",numeric:!1,content:a.textContent};case "widthOf":return a=a.getSymbolRecord(b.symbol),b=a.value[a.index].content,a=document.getElementById(b),{type:"constant",numeric:!0,content:a.offsetWidth};case "heightOf":return a=a.getSymbolRecord(b.symbol),b=a.value[a.index].content,a=document.getElementById(b),{type:"constant",numeric:!0,content:a.offsetHeight};case "color":for(a=a.value.evaluate(a,b.value).content.toString(16);6>a.length;)a="00"+a;return{type:"constant",numeric:!1,content:"#"+ 80 a}}}},condition:{compile:function(a){},test:function(a,b){}},setStyles:function(a,b){a=document.getElementById(a);b=b.split(";");b=$jscomp.makeIterator(b);for(var c=b.next();!c.done;c=b.next())c=c.value.split(":"),a.setAttribute(c[0],c[1])}};k.exports=g},{}],4:[function(e,k,h){var g={Json:{compile:function(a){var b=a.getLino();a.getTokens();a.next();switch(a.getToken()){case "get":a.next();if(a.tokenIs("item")){a.next();var c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var d=a.getToken(); 81 a.next();if(a.tokenIs("as")&&(a.next(),a.isSymbol())){var f=a.getSymbolRecord();if("variable"===f.keyword)return a.next(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"getItem",target:f.name,item:c,source:d}),!0}}a.error.expectedError("of",a.getToken())}else if(a.tokenIs("element")){a.next();c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("as")&&(a.next(),a.isSymbol()&&(f=a.getSymbolRecord(),"variable"===f.keyword)))))return a.next(),a.addCommand({domain:"json", 82 keyword:"json",lino:b,request:"getElement",target:f.name,element:c,source:d}),!0;a.error.expectedError("of",a.getToken())}if(a.isSymbol()&&(c=a.getSymbolRecord(),"variable"===c.keyword&&(a.next(),a.tokenIs("from"))))return a.next(),d=a.getValue(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"get",target:c.name,value:d}),!0;break;case "set":if(a.next(),a.isSymbol()){c=a.getSymbolRecord();if("select"===c.keyword&&(a.next(),a.tokenIs("from")&&(a.next(),a.isSymbol()&&(d=a.getSymbolRecord(), 83 "variable"===d.keyword))))return a.next(),f=null,a.tokenIs("as")&&(a.next(),f=a.getValue()),a.addCommand({domain:"json",keyword:"json",lino:b,request:"setList",target:c.name,source:d.name,display:f}),!0;break}case "shuffle":return a.next(),a.isSymbol()&&(c=a.getSymbolRecord(),"variable"===c.keyword)?(a.next(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"shuffle",target:c.name}),!0):!1}a.addWarning("Unrecognised syntax in 'json'");return!1},run:function(a){var b=a[a.pc];switch(b.request){case "get":a.ajaxCommand= 84 b;var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===this.readyState&&200===this.status){var b=a.ajaxCommand,c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:this.responseText};a.run(a,b.pc+1)}};b=a.getValue(b.value);c.open("GET",b,!0);c.send();return 0;case "getItem":c=a.getSymbolRecord(b.source);var d=JSON.parse(c.value[c.index].content)[a.getValue(b.item)];c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:"object"=== 85 typeof d?JSON.stringify(d):d};break;case "getElement":c=a.getSymbolRecord(b.source);d=JSON.parse(c.value[c.index].content)[a.getValue(b.element)];c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};break;case "setList":c=a.getSymbolRecord(b.source);c=a.getValue(c.value[c.index]);d=JSON.parse(c);c=a.getSymbolRecord(b.target);var f=document.getElementById(c.value[c.index].content);f.options.length=0;var e=a.getValue(b.display); 86 d.forEach(function(b){var c=e?a.decode(b[e]):null,d=document.createElement("option");d.innerHTML=c?c:b;b=c?JSON.stringify(b):b;d.value=b;f.appendChild(d)});f.selectedIndex=-1;break;case "shuffle":c=a.getSymbolRecord(b.target);d=JSON.parse(a.getValue(c.value[c.index]));for(var g=d.length-1;0<g;g--){var h=Math.floor(Math.random()*(g+1)),k=$jscomp.makeIterator([d[h],d[g]]);d[g]=k.next().value;d[h]=k.next().value}c.value[c.index]={type:"constant",numeric:!1,content:JSON.stringify(d)}}return b.pc+1}}, 87 getHandler:function(a){switch(a){case "json":return g.Json;default:return!1}},run:function(a){var b=a[a.pc],c=g.getHandler(b.keyword);c||a.error.runtimeError("Unknown keyword '"+b.keyword+"' in 'json' package");return c.run(a)},value:{compile:function(a){a.tokenIs("the")&&a.next();if(a.tokenIs("json")&&(a.next(),["size","count"].includes(a.getToken())&&(a.skip("of"),a.isSymbol()))){var b=a.getSymbolRecord();a.next();if(b.isValueHolder)return{domain:"json",type:"size",name:b.name}}return null},get:function(a, 88 b){switch(b.type){case "size":return b=a.getSymbolRecord(b.name),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!0,content:JSON.parse(a).length}}}},condition:{compile:function(a){},test:function(a,b){}}};k.exports=g},{}],5:[function(e,k,h){var g={Attach:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getProgram()[a.getSymbol().pc];switch(c.keyword){case "shape":case "svg":a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"svg", 89 keyword:"attach",lino:b,type:c.keyword,symbol:c.name,cssId:d});return!0}break;default:compile.error.InappropriateVariableTypeError(c.keyword)}}a.addWarning("Unrecognised syntax in 'attach'");return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.cssId).content;document.getElementById(c)||a.error.noSuchElementError(c);a=a.getSymbolRecord(b.symbol);a.value[a.index]={type:"constant",numeric:"false",content:c};return b.pc+1}},Circle:{compile:function(a){a.compileVariable("svg","circle",!1,"dom"); 90 return!0},run:function(a){return a[a.pc].pc+1}},Create:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();a.next();switch(c.keyword){case "svg":if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();for(var f=null,e=!0;e;){var g=a.getToken();a.next();switch(g){case "style":f=a.getValue();break;default:a.prev(),e=!1}}f||(f={type:"constant",numeric:!1,content:"width:100%;height:100%"});a.addCommand({domain:"svg",keyword:"create",lino:b,type:"svg", 91 name:c.name,style:f,parent:d});return!0}break;case "group":if(a.tokenIs("in")&&(a.next(),a.isSymbol()))return f=a.getSymbolRecord(),["svg","group"].includes(f.keyword)||a.error.inappropriateTypeError(f.keyword),a.next(),a.addCommand({domain:"svg",keyword:"create",lino:b,type:"group",name:c.name,parent:f.name}),!0;break;case "circle":case "ellipse":case "line":case "rect":case "text":if(a.tokenIs("in")&&(a.next(),a.isSymbol())){d=a.getSymbolRecord();["svg","group"].includes(d.keyword)||a.error.inappropriateTypeError(d.keyword); 92 a.next();for(e=!0;e;){var h=a.getToken();a.next();switch(h){case "style":f=a.getValue();break;case "text":g=a.getValue();break;default:a.prev(),e=!1}}a.addCommand({domain:"svg",keyword:"create",lino:b,type:c.keyword,name:c.name,style:f,text:g,parent:d.name});return!0}}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.parent),d=a.getSymbolRecord(b.name);if("group"===b.type)d.parent=b.parent,d.x=0,d.y=0;else{if("group"===c.keyword){var f=c;var e=f.value[f.index];e.content||(e.content=[]); 93 for(e.content.push({name:d.name,index:d.index});"group"===c.keyword;)c=a.getSymbolRecord(c.parent)}e=document.getElementById(c.value[c.index].content);c=document.createElementNS("http://www.w3.org/2000/svg",b.type);e.appendChild(c);e="ec-"+d.name+"-"+d.index;c.setAttribute("id",e);"text"===d.keyword&&(c.textContent=a.value.evaluate(a,b.text).content);d.value[d.index]={type:"constant",numeric:!1,content:e};if(b.style){b=a.value.evaluate(a,b.style).content;a.domain.browser.setStyles(e,b);b=d.value[d.index]; 94 switch(d.keyword){case "circle":case "ellipse":b.x=c.getAttribute("cx");b.y=c.getAttribute("cy");break;case "line":b.x=c.getAttribute("x1");b.y=c.getAttribute("y1");b.x2=c.getAttribute("x2");b.y2=c.getAttribute("y2");break;case "rect":case "text":b.x=c.getAttribute("x"),b.y=c.getAttribute("y")}f&&(b.groupName=f.name,b.groupIndex=f.index)}}return a[a.pc].pc+1}},Ellipse:{compile:function(a){a.compileVariable("svg","ellipse",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Group:{compile:function(a){a.compileVariable("svg", 95 "group");return!0},run:function(a){return a[a.pc].pc+1}},Line:{compile:function(a){a.compileVariable("svg","line",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Move:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue(),f=a.getValue();a.addCommand({domain:"svg",keyword:"move",lino:b,type:"moveTo",name:c.name,x:d,y:f});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.x).content, 96 d=a.value.evaluate(a,b.y).content;b=a.getSymbolRecord(b.name);switch(b.keyword){case "group":for(var f=$jscomp.makeIterator(b.value[b.index].content),e=f.next();!e.done;e=f.next()){var g=e.value;e=a.getSymbolRecord(g.name);g=e.value[g.index];var h=document.getElementById(g.content),k=parseInt(g.x)+c,n=parseInt(g.y)+d;switch(e.keyword){case "circle":case "ellipse":h.setAttribute("cx",k);h.setAttribute("cy",n);break;case "line":h.setAttribute("x1",k);h.setAttribute("y1",n);h.setAttribute("x2",parseInt(g.x2)+ 97 c);h.setAttribute("y2",parseInt(g.y2)+d);break;case "rect":case "text":h.setAttribute("x",k),h.setAttribute("y",n)}}b.x=c;b.y=d;break;case "circle":case "ellipse":case "line":case "rect":case "text":e=f=0;g=b.value[b.index];g.groupName&&(e=a.getSymbolRecord(g.groupName),f=e.x,e=e.y);g=b.value[b.index];h=document.getElementById(b.value[b.index].content);switch(b.keyword){case "circle":case "ellipse":h.setAttribute("cx",f+c);h.setAttribute("cy",e+d);break;case "line":h.setAttribute("x1",f+c);h.setAttribute("y1", 98 e+d);b=parseInt(g.x2)-parseInt(g.x1);k=parseInt(g.y2)-parseInt(g.y1);h.setAttribute("x2",f+b+c);h.setAttribute("y2",e+k+d);break;case "rect":case "text":h.setAttribute("x",f+c),h.setAttribute("y",e+d)}g.x=c;g.y=d}return a[a.pc].pc+1}},On:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();switch(c){case "click":if(a.next(),a.isSymbol()){var d=a.getSymbolRecord();a.next();if("group"!==d.keyword)return!1;a.addCommand({domain:"svg",keyword:"on",lino:b,action:c,symbol:d.name});b=a.getPc(); 99 a.addCommand({domain:"basic",keyword:"goto",goto:0});a.compileOne();a.getCommandAt(b).goto=a.getPc();return!0}}a.addWarning("Unrecognised syntax in 'on'");return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);switch(b.action){case "click":if("group"===c.keyword)for(var d=$jscomp.makeIterator(c.value),f=d.next();!f.done;f=d.next())if(f=f.value,f.content){f=$jscomp.makeIterator(f.content);for(var e=f.next();!e.done;e=f.next()){e=e.value;var g=a.getSymbolRecord(e.name),h=g.value[e.index]; 100 h.content&&(h=document.getElementById(h.content),h.targetPc=b.pc+2,h.contentItem=g,h.contentIndex=e.index,h.onclick=function(b){b.target.blur();var d=b.target.contentItem;d.index=b.target.contentIndex;d=d.value[d.index];if(d.groupName){c.index=d.groupIndex;d=$jscomp.makeIterator(c.value[c.index].content);for(var e=d.next();!e.done;e=d.next())e=e.value,a.getSymbolRecord(e.name).index=e.index}try{a.run(a,b.target.targetPc)}catch(u){a.reportError(a.source,u)}return!1})}}}return b.pc+1}},Rect:{compile:function(a){a.compileVariable("svg", 101 "rect",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Set:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();"the"===c&&(a.next(),c=a.getToken());if("text"===c&&(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())))switch(c=a.getSymbolRecord(),c.keyword){case "text":if(a.next(),a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"svg",keyword:"set",lino:b,type:"setText",symbolName:c.name,value:d});return!0}}return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setText":var c= 31 b.getValue(a.value);console.log("-> "+b);return a.pc+1}},Put:{compile:function(b){var a=b.getLino();b.next();var d=b.getValue();if(b.tokenIs("into")){b.next();if(b.isSymbol()){var f=b.getToken();b.next();b.addCommand({domain:"basic",keyword:"put",lino:a,value:d,target:f});return!0}b.error.noSuchVariableError(b.getToken())}return!1},run:function(b){var a=b[b.pc],d=a.value,f=b.getSymbolRecord(a.target);f.isValueHolder||b.error.variableDoesNotHoldAValueError(f.name);f.value[f.index]=b.evaluate(d);return a.pc+ 32 1}},Replace:{compile:function(a){var b=a.getLino();a.next();var d=a.getValue();if(a.tokenIs("with")){a.next();var f=a.getValue();if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var l=a.getSymbolRecord();a.next();if(l.isValueHolder)return a.addCommand({domain:"basic",keyword:"replace",lino:b,original:d,replacement:f,target:l.name}),!0}}return!1},run:function(a){var b=a[a.pc],d=a.getValue(b.original),f=a.getValue(b.replacement),l=a.getSymbolRecord(b.target);a=a.getValue(l.value[l.index]).split(d).join(f); 33 l.value[l.index]={type:"constant",numeric:!1,content:a};return b.pc+1}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"basic",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Set:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var d=a.getSymbolRecord();if(!d.isValueHolder)return!1;a.next();if(a.tokenIs("to")){a.next();for(var f=[];;){a.mark();try{f.push(a.getValue())}catch(l){a.rewind();break}}a.addCommand({domain:"basic",keyword:"set", 34 lino:b,type:"setArray",target:d.name,value:f});return!0}a.addCommand({domain:"basic",keyword:"set",lino:b,type:"setBoolean",target:d.name});return!0}a.tokenIs("the")&&a.next();if(a.tokenIs("elements")&&(a.next(),a.tokenIs("of")&&(a.next(),a.getTarget(),a.isSymbol()||a.error.unknownVariableError(a.getToken()),d=a.getToken(),a.next(),a.tokenIs("to"))))return a.next(),f=a.getValue(),a.addCommand({domain:"basic",keyword:"set",lino:b,type:"setElements",symbol:d,value:f}),!0;if(a.tokenIs("encoding")){a.next(); 35 if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"basic",keyword:"set",type:"encoding",lino:b,encoding:d}),!0;a.addWarning("Unknown encoding option")}return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setBoolean":var d=a.getSymbolRecord(b.target);d.isValueHolder?(d.value[d.index]={type:"boolean",content:!0},b.numeric=!1):a.error.VariableDoesNotHoldAValueError(d.name);break;case "setElements":d=a.getSymbolRecord(b.symbol);d.elements=a.getValue(b.value);d.index=0;d.value= 36 [];for(a=0;a<d.elements;a++)d.value.push({});break;case "setArray":a=a.getSymbolRecord(b.target);a.elements=b.value.length;a.value=b.value;break;case "encoding":a.encoding=a.getValue(b.encoding)}return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"basic",keyword:"stop",lino:b,next:0});return!0},run:function(){return 0}},Take:{compile:function(a){var b=a.getLino();a.next();var d=a.getValue();if(a.tokenIs("from"))if(a.next(),a.getToken(),a.isSymbol()){var f=a.getSymbol(); 37 if(a.getCommandAt(f.pc).isValueHolder){if("giving"===a.peek()){f=a.getValue();a.next();var l=a.getToken();a.next();a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d,value2:f,target:l})}else f=a.getToken(),a.next(),a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d,target:f});return!0}a.warning("basic "+g.name+"': Expected value holder")}else{f=a.getValue();if(a.tokenIs("giving"))return a.next(),l=a.getToken(),a.next(),a.addCommand({domain:"basic",keyword:"take",lino:b,value1:d, 38 value2:f,target:l}),!0;a.warning("basic "+g.name+'\': Expected "giving"')}return!1},run:function(a){var b=a[a.pc],d=b.value1,f=b.value2,l=a.getSymbolRecord(b.target);if(l.isValueHolder){var e=l.value[l.index];f?(a=a.getValue(f)-a.getValue(d),l.value[l.index]={type:"constant",numeric:!0,content:a}):(e.numeric||a.error.nonNumericValueError(),a=a.getValue(e)-a.getValue(d),l.value[l.index]={type:"constant",numeric:!0,content:a})}else a.error.VariableDoesNotHoldAValueError(l.name);return b.pc+1}},Toggle:{compile:function(a){var b= 39 a.getLino();a.getTokens();a.next();if(a.isSymbol()){var d=a.getSymbolPc();a.next();a.addCommand({domain:"basic",keyword:"toggle",lino:b,symbol:d});return!0}return!1},run:function(a){var b=a[a.pc],d=a[b.symbol];if(d.isValueHolder){var f=a.domain[d.domain];a=f.value.get(a,d.value[d.index]).content;f.value.put(d,{type:"boolean",content:!a})}else a.error.VariableDoesNotHoldAValueError(d.name);return b.pc+1}},Variable:{compile:function(a){a.compileVariable("basic","variable",!0);return!0},run:function(a){return a[a.pc].pc+ 40 1}},Wait:{compile:function(a){var b=a.getLino();a.next();var d=a.getValue(a),f=1E3;switch(a.getToken()){case "milli":case "millis":a.next();f=1;break;case "tick":case "ticks":a.next();f=10;break;case "second":case "seconds":a.next();f=1E3;break;case "minute":case "minutes":a.next(),f=6E4}a.addCommand({domain:"basic",keyword:"wait",lino:b,value:d,multiplier:f});return!0},run:function(a){var b=a[a.pc],d=a.getValue(b.value);setTimeout(function(){a.run(b.pc+1)},d*b.multiplier);return 0}},While:{compile:function(a){var b= 41 a.getLino();a.next();var d=a.getCondition(),f=a.getPc();a.addCommand({domain:"basic",keyword:"while",lino:b,condition:d});b=a.getPc();a.addCommand({domain:"basic",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"basic",keyword:"goto",goto:f});a.getCommandAt(b).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?a.pc+2:a.pc+1}},getHandler:function(b){switch(b){case "add":return a.Add;case "alias":return a.Alias;case "begin":return a.Begin;case "clear":return a.Clear; 42 case "debug":return a.Debug;case "decode":return a.Decode;case "divide":return a.Divide;case "encode":return a.Encode;case "end":return a.End;case "extend":return a.Extend;case "fork":return a.Fork;case "go":return a.Go;case "gosub":return a.Gosub;case "goto":return a.Goto;case "if":return a.If;case "index":return a.Index;case "multiply":return a.Multiply;case "negate":return a.Negate;case "print":return a.Print;case "put":return a.Put;case "replace":return a.Replace;case "return":return a.Return; 43 case "set":return a.Set;case "stop":return a.Stop;case "take":return a.Take;case "toggle":return a.Toggle;case "variable":return a.Variable;case "wait":return a.Wait;case "while":return a.While;default:return!1}},run:function(b){var c=b[b.pc],d=a.getHandler(c.keyword);d||b.error.runtimeError("Unknown keyword '"+c.keyword+"' in 'basic' package");return d.run(b)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var b=a.getToken();a.next(); 44 return a.tokenIs("modulo")?(a.next(),a=a.getValue(),{domain:"basic",type:"modulo",name:b,value:a}):{domain:"basic",type:"symbol",name:b}}b=a.getToken();if("true"===b)return a.next(),{domain:"basic",type:"boolean",content:!0};if("false"===b)return a.next(),{domain:"basic",type:"boolean",content:!1};if("random"===b)return a.next(),{domain:"basic",type:"random",range:a.getValue()};if("cos"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"cos",angle_c:b,radius_c:a}; 45 if("sin"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"sin",angle_s:b,radius_s:a};if("tan"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"basic",type:"tan",angle_t:b,radius_t:a};if("empty"===b)return a.next(),{domain:"basic",type:"empty"};if("encode"===b)return a.next(),{domain:"basic",type:"encode",value:a.getValue()};if("decode"===b)return a.next(),{domain:"basic",type:"decode",value:a.getValue()};if("element"===b){a.next(); 46 b=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var d=a.getSymbolRecord();a.next();if("variable"===d.keyword)return{domain:"basic",type:"element",element:b,symbol:d.name}}return null}if("property"===b)return a.next(),b=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getSymbolRecord(),a.next(),"variable"===d.keyword))?{domain:"basic",type:"property",property:b,symbol:d.name}:null;a.tokenIs("the")&&a.next();switch(a.getToken()){case "index":a.next();if(a.tokenIs("of")&&(a.next(), 47 a.isSymbol()))return b=a.getToken(),a.next(),{domain:"basic",type:"index",name:b};break;case "value":a.next();if(a.tokenIs("of"))return a.next(),{domain:"basic",type:"valueOf",value:a.getValue()};break;case "length":a.next();if(a.tokenIs("of"))return a.next(),{domain:"basic",type:"lengthOf",value:a.getValue()};break;case "left":a.next();b=a.getValue();if(a.tokenIs("of"))return a.next(),a=a.getValue(),{domain:"basic",type:"left",count:b,value:a};break;case "right":if(a.next(),b=a.getValue(),a.tokenIs("of"))return a.next(), 48 a=a.getValue(),{domain:"basic",type:"right",count:b,value:a}}return null},get:function(a,c){switch(c.type){case "boolean":return{type:"boolean",numeric:!1,content:c.content};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(c.name).index};case "random":return a=a.evaluate(c.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var b=a.getValue(c.angle_c);a=a.getValue(c.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329* 49 parseFloat(b))*a,10)};case "sin":return b=a.getValue(c.angle_s),a=a.getValue(c.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(b))*a,10)};case "tan":return b=a.getValue(c.angle_t),a=a.getValue(c.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(b))*a,10)};case "valueOf":return{type:"constant",numeric:!0,content:parseInt(a.getValue(c.value))};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(c.value).length}; 50 case "left":return a.getValue(c.value),{type:"constant",numeric:!1,content:a.getValue(c.value).substr(0,a.getValue(c.count))};case "modulo":return b=a.getSymbolRecord(c.name),a=a.evaluate(c.value),{type:"constant",numeric:!0,content:b.value[b.index].content%a.content};case "empty":return{type:"constant",numeric:!1,content:""};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(c.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(c.value))}; 51 case "element":return b=a.getValue(c.element),c=a.getSymbolRecord(c.symbol),a=JSON.parse(a.getValue(c.value[c.index]))[b],{type:"constant",numeric:!1,content:"object"===typeof a?JSON.stringify(a):a};case "property":return b=a.getValue(c.property),c=a.getSymbolRecord(c.symbol),a=a.getValue(c.value[c.index]),{type:"constant",numeric:!1,content:"object"===typeof a?a[b]:JSON.parse(a)[b]}}return null},put:function(a,c){a.value[a.index]=c}},condition:{compile:function(b){if(b.tokenIs("not"))return b.next(), 52 {domain:"basic",type:"not",value:b.getValue()};try{var c=b.getValue();if("is"===b.getToken()){b.next();var d=a.isNegate(b);if(b.tokenIs("greater")){b.next();if(b.tokenIs("than")){b.next();var f=b.getValue();return{domain:"basic",type:"greater",value1:c,value2:f,negate:d}}return null}if(b.tokenIs("less")){b.next();if(b.tokenIs("than")){b.next();var l=b.getValue();return{domain:"basic",type:"less",value1:c,value2:l,negate:d}}return null}var e=b.getValue();return{domain:"basic",type:"is",value1:c,value2:e, 53 negate:d}}if(c)return{domain:"basic",type:"boolean",value:c}}catch(p){console.log(p)}return null},test:function(a,c){switch(c.type){case "boolean":return a.getValue(c.value);case "is":return a=a.compare(a,c.value1,c.value2),c.negate?0!==a:0===a;case "greater":return a=a.compare(a,c.value1,c.value2),c.negate?0>=a:0<a;case "less":return a=a.compare(a,c.value1,c.value2),c.negate?0<=a:0>a;case "not":return!a.getValue(c.value)}}}};k.exports=a},{}],3:[function(e,k,h){var g={A:{compile:function(a){a.compileVariable("browser", 54 "a",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Alert:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();a.addCommand({domain:"browser",keyword:"alert",lino:b,value:c});return!0},run:function(a){var b=a.value.evaluate(a,a[a.pc].value).content;alert(b);return a[a.pc].pc+1}},Attach:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getProgram()[a.getSymbol().pc];switch(c.keyword){case "button":case "div":case "header":case "p":case "a":case "img":case "input":case "ul":case "li":case "select":case "span":case "pre":case "popup":a.next(); 55 if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"browser",keyword:"attach",lino:b,type:c.keyword,symbol:c.name,cssId:d});return!0}break;default:return a.addWarning("type '"+c.keyword+"' not recognized in browser 'attach'"),!1}}a.addWarning("Unrecognised syntax in 'attach'");return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.cssId).content,d=document.getElementById(c);d||a.error.noSuchElementError(c);var f=a.getSymbolRecord(b.symbol);f.value[f.index]={type:"constant", 56 numeric:"false",content:c};"popup"===b.type&&(a.popups.push(d.id),window.onclick=function(b){a.popups.includes(b.target.id)&&(b.target.style.display="none")});return b.pc+1}},Audioclip:{compile:function(a){a.compileVariable("browser","audioclip");return!0},run:function(a){return a[a.pc].pc+1}},BUTTON:{compile:function(a){a.compileVariable("browser","button",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Create:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord(), 57 d=c.name;a.next();switch(c.keyword){case "audioclip":a.tokenIs("from")&&a.next();var f=a.getValue();a.addCommand({domain:"browser",keyword:"create",type:"audioclip",name:c.name,lino:b,target:d,value:f});return!0;case "div":case "p":case "h1":case "h2":case "h3":case "h4":case "h5":case "h6":case "span":case "button":case "input":case "pre":if(d="","input"===c.keyword&&(a.tokenIs("type")?(a.next(),d=a.getToken(),a.next()):a.error.missingInputTypeError()),a.tokenIs("in")&&(a.next(),a.isSymbol())){f= 58 a.getSymbolRecord();"dom"!==f.extra&&a.error.inappropriateTypeError(f.keyword);a.next();for(var e="",g="",h="",k=!0;k;){var n=a.getToken();if(!n)break;a.next();switch(n){case "class":e=a.getValue();break;case "style":g=a.getValue();break;case "text":h=a.getValue();break;default:a.prev(),k=!1}}a.addCommand({domain:"browser",keyword:"create",lino:b,type:c.keyword,name:c.name,inputType:d,className:e,style:g,text:h,parent:f.name});return!0}}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.name); 59 switch(b.type){case "audioclip":c.value[c.index]=b.value;break;default:var d=a.getSymbolRecord(b.parent),f=document.getElementById(d.value[d.index].content);d=document.createElement(b.type);d.id="easycoder-"+c.name+"-"+c.index;c.value[c.index]={type:"constant",numeric:!1,content:d.id};f.appendChild(d);b.inputType&&d.setAttribute("type",b.inputType);b.className&&(d.className=b.className);c=a.value.evaluate(a,b.style).content;c=$jscomp.makeIterator(c.split(";"));for(f=c.next();!f.done;f=c.next())f= 60 f.value.split(":"),d.style[f[0]]=f[1];b.text&&(d.textContent=a.value.evaluate(a,b.text).content)}return a[a.pc].pc+1}},DIV:{compile:function(a){a.compileVariable("browser","div",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Header:{compile:function(a){a.compileVariable("browser","header",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Hide:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser", 61 keyword:"hide",lino:b,symbol:c});return!0}a.addWarning("Unrecognised syntax in 'hide'");return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol);document.getElementById(a.value[a.index].content).style.visibility="hidden";return b.pc+1}},IMG:{compile:function(a){a.compileVariable("browser","img",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},INPUT:{compile:function(a){a.compileVariable("browser","input",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},LI:{compile:function(a){a.compileVariable("browser", 62 "li",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Location:{compile:function(a){var b=a.getLino();a.next();var c=!1;a.tokenIs("new")&&(c=!0,a.next());var d=a.getValue();a.addCommand({domain:"browser",keyword:"location",lino:b,location:d,newWindow:c});return!0},run:function(a){a=a[a.pc];a.newWindow?window.open(a.location.content,"_blank"):window.location=a.location.content;return a.pc+1}},On:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();switch(c){case "change":case "click":if(a.next(), 63 a.isSymbol()){var d=a.getSymbolRecord();a.next();if("dom"!==d.extra)return!1;a.addCommand({domain:"browser",keyword:"on",lino:b,action:c,symbol:d.name});c=a.getPc();a.addCommand({domain:"basic",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"basic",keyword:"stop",lino:b,next:0});a.getCommandAt(c).goto=a.getPc();return!0}case "key":return a.next(),a.addCommand({domain:"browser",keyword:"on",lino:b,action:c,item:"key"}),c=a.getPc(),a.addCommand({domain:"basic",keyword:"goto",goto:0}),a.compileOne(), 64 a.addCommand({domain:"basic",keyword:"stop",lino:b,next:0}),a.getCommandAt(c).goto=a.getPc(),!0}a.addWarning("Unrecognised syntax in 'on'");return!1},run:function(a){var b=a[a.pc];switch(b.action){case "change":var c=a.getSymbolRecord(b.symbol);if("select"===c.keyword&&(c=c.value[c.index].content)){var d=document.getElementById(c);d.targetPc=b.pc+2;d.addEventListener("change",function(){try{a.run(d.targetPc)}catch(l){console.log(l.message),alert(l.message)}return!1})}break;case "click":var f=a.getSymbolRecord(b.symbol); 65 f.value.forEach(function(c,d){if(c=c.content)c=document.getElementById(c),c.targetPc=b.pc+2,c.targetIndex=d,c.onclick=function(b){var c=b.target;c.blur();f.index=c.targetIndex;try{setTimeout(function(){a.run(c.targetPc)},1)}catch(n){console.log(n.message),alert(n.message)}return!1}});break;case "key":a.onKeyPc=b.pc+2,document.onkeypress=function(b){a.key=b.key;try{setTimeout(function(){a.run(a.onKeyPc)},1)}catch(q){console.log("Error: "+q.message)}return!1}}return b.pc+1}},P:{compile:function(a){a.compileVariable("browser", 66 "p",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Play:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();"audioclip"===c.keyword&&(a.next(),a.addCommand({domain:"browser",keyword:"play",lino:b,target:c.name}))}return!0},run:function(a){var b=a.getSymbolRecord(a[a.pc].target);b=a.value.evaluate(a,b.value[b.index]).content;(new Audio(b)).play();return a[a.pc].pc+1}},Popup:{compile:function(a){a.compileVariable("browser","popup");return!0},run:function(a){return a[a.pc].pc+ 67 1}},PRE:{compile:function(a){a.compileVariable("browser","pre",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Remove:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"remove",lino:b,symbol:c});return!0}a.unrecognisedSymbol(a.getToken());return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol);document.getElementById(a.value[a.index].content).style.display="none";return b.pc+1}}, 68 SELECT:{compile:function(a){a.compileVariable("browser","select",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Set:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();if(a.tokenIs("from")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContentVar",source:d,target:c});return!0}}else{c=a.getToken();"the"===c&&(a.next(),c=a.getToken());if("title"===c)return a.skip("to"),c=a.getValue(), 69 a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setTitle",value:c}),!0;if("content"===c){if(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())){c=a.getToken();a.next();if(a.tokenIs("from")&&(a.next(),a.isSymbol()))return d=a.getToken(),a.next(),a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContentVar",source:d,target:c}),!0;if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setContent",value:d,target:c}),!0}}else if("text"=== 70 c){if(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol()))switch(c=a.getSymbolRecord(),c.keyword){case "button":case "input":if(a.next(),a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setText",symbolName:c.name,value:d}),!0}}else if("attribute"===c){if(a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("to")))){a.next();var f=a.getValue();a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setAttribute", 71 symbolName:d,attributeName:c,attributeValue:f});return!0}}else if("style"===c&&(a.next(),c=a.getValue(),a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("to")&&(a.next(),f=a.getValue())))))return a.addCommand({domain:"browser",keyword:"set",lino:b,type:"setStyle",symbolName:d,styleName:c,styleValue:f}),!0}a.addWarning("Unrecognised syntax in 'set'");return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setContentVar":var c=a.getSymbolRecord(b.source);a=a.getSymbolRecord(b.target); 72 c=document.getElementById(c.value[c.index].content);var d=document.getElementById(a.value[a.index].content);d.innerHTML=c.innerHTML;break;case "setContent":c=a.value.evaluate(a,b.value);var f=c.content;c.numeric&&(f=""+f);a=a.getSymbolRecord(b.target);a=a.value[a.index].content;d=document.getElementById(a);d.innerHTML=f;break;case "setText":c=a.getSymbolRecord(b.symbolName);d=document.getElementById(c.value[c.index].content);f=a.value.evaluate(a,b.value).content;switch(c.keyword){case "button":d.innerHTML= 73 f;break;case "input":d.value=f}break;case "setAttribute":c=a.getSymbolRecord(b.symbolName);switch(b.attributeValue.type){case "constant":f=b.attributeValue.content;break;case "symbol":a=a.getSymbolRecord(b.attributeValue.name),f=a.value[a.index].content}a=c.value[c.index].content;d=document.getElementById(a);d.setAttribute(b.attributeName.content,f);break;case "setStyle":c=a.getSymbolRecord(b.symbolName);f=a.value.evaluate(a,b.styleValue);c.value[c.index]||a.error.runtimeError("Variable '"+c.name+ 74 "' has not been assigned.");a=c.value[c.index].content;a=document.getElementById(a);c={};c[b.styleName.content]=f.content;Object.assign(a.style,c);break;case "setTitle":document.title=a.getValue(b.value)}return b.pc+1}},Show:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"browser",keyword:"show",lino:b,symbol:c});return!0}a.addWarning("Unrecognised syntax in 'show'");return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.symbol); 75 var c=document.getElementById(a.value[a.index].content);switch(a.type){case "span":c.style.display="inline";break;default:c.style.display="block"}c.style.visibility="visible";return b.pc+1}},SPAN:{compile:function(a){a.compileVariable("browser","span",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Trace:{compile:function(a){var b=a.getLino();a.next();var c=[];if(a.isSymbol()){for(;a.isSymbol();)c.push(a.getToken()),a.next();var d="horizontal";if(a.tokenIs("horizontal")||a.tokenIs("vertical"))d= 76 a.getToken(),a.next();a.addCommand({domain:"browser",keyword:"trace",variant:"setup",lino:b,variables:c,alignment:d});return!0}a.addCommand({domain:"browser",keyword:"trace",variant:"run",lino:b});return!0},run:function(a){var b=a[a.pc];switch(b.variant){case "setup":console.log("Set up tracer");a.tracer={variables:b.variables,alignment:b.alignment};break;case "run":console.log("Run tracer"),a.tracer||(a.tracer={variables:[],alignment:"horizontal"}),a.tracing=!0,a.stop=!1}return a.pc+1}},UL:{compile:function(a){a.compileVariable("browser", 77 "ul",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},getHandler:function(a){switch(a){case "a":return g.A;case "alert":return g.Alert;case "attach":return g.Attach;case "audioclip":return g.Audioclip;case "button":return g.BUTTON;case "create":return g.Create;case "div":return g.DIV;case "header":case "h1":case "h2":case "h3":case "h4":case "h5":case "h6":return g.Header;case "hide":return g.Hide;case "img":return g.IMG;case "input":return g.INPUT;case "li":return g.LI;case "location":return g.Location; 78 case "on":return g.On;case "p":return g.P;case "play":return g.Play;case "popup":return g.Popup;case "pre":return g.PRE;case "remove":return g.Remove;case "select":return g.SELECT;case "set":return g.Set;case "show":return g.Show;case "span":return g.SPAN;case "trace":return g.Trace;case "ul":return g.UL;default:return!1}},run:function(a){var b=a[a.pc],c=g.getHandler(b.keyword);c||a.error.runtimeError("Unknown keyword '"+b.keyword+"' in 'browser' package");return c.run(a)},value:{compile:function(a){var b= 79 a.getToken();if("mobile"===b)return a.next(),{domain:"browser",type:"mobile"};if("br"===b)return a.next(),{domain:"browser",type:"br"};if("color"===b)return a.next(),{domain:"browser",type:"color",value:a.getValue()};a.tokenIs("the")&&a.next();b=a.getToken();if("content"===b)return a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())?(b=a.getSymbolRecord(),a.next(),{domain:"browser",type:"contentOf",symbol:b.name}):null;if(["width","height"].includes(b)){a.next();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var c= 80 a.getSymbolRecord();a.next();if("dom"===c.extra)return{domain:"browser",type:"width"===b?"widthOf":"heightOf",symbol:c.name}}return null}return"key"==b?(a.next(),{domain:"browser",type:"key"}):null},get:function(a,b){switch(b.type){case "symbol":a=a.getSymbolRecord(b.name);b=a.value[a.index].content;switch(a.keyword){case "input":case "select":return a=document.getElementById(b),{type:"constant",numeric:!1,content:a.value}}break;case "mobile":return{domain:"browser",type:"boolean",content:"undefined"!== 81 typeof window.orientation||-1!==navigator.userAgent.indexOf("IEMobile")};case "br":return{type:"constant",numeric:!1,content:"<br />"};case "contentOf":return a=a.getSymbolRecord(b.symbol),b=a.value[a.index].content,a=document.getElementById(b),{type:"constant",numeric:!1,content:a.textContent};case "widthOf":return a=a.getSymbolRecord(b.symbol),b=a.value[a.index].content,a=document.getElementById(b),{type:"constant",numeric:!0,content:a.offsetWidth};case "heightOf":return a=a.getSymbolRecord(b.symbol), 82 b=a.value[a.index].content,a=document.getElementById(b),{type:"constant",numeric:!0,content:a.offsetHeight};case "color":for(a=a.value.evaluate(a,b.value).content.toString(16);6>a.length;)a="00"+a;return{type:"constant",numeric:!1,content:"#"+a};case "key":return{type:"constant",numeric:!1,content:a.key}}}},condition:{compile:function(a){},test:function(a,b){}},setStyles:function(a,b){a=document.getElementById(a);b=b.split(";");b=$jscomp.makeIterator(b);for(var c=b.next();!c.done;c=b.next())c=c.value.split(":"), 83 a.setAttribute(c[0],c[1])}};k.exports=g},{}],4:[function(e,k,h){var g={Json:{compile:function(a){var b=a.getLino();a.next();switch(a.getToken()){case "get":a.next();if(a.tokenIs("item")){a.next();var c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();if(a.tokenIs("as")&&(a.next(),a.isSymbol())){var f=a.getSymbolRecord();if("variable"===f.keyword)return a.next(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"getItem",target:f.name,item:c,source:d}), 84 !0}}a.error.expectedError("of",a.getToken())}else if(a.tokenIs("element")){a.next();c=a.getValue();if(a.tokenIs("of")&&(a.next(),a.isSymbol()&&(d=a.getToken(),a.next(),a.tokenIs("as")&&(a.next(),a.isSymbol()&&(f=a.getSymbolRecord(),"variable"===f.keyword)))))return a.next(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"getElement",target:f.name,element:c,source:d}),!0;a.error.expectedError("of",a.getToken())}break;case "set":if(a.next(),a.isSymbol()){c=a.getSymbolRecord();if("select"=== 85 c.keyword&&(a.next(),a.tokenIs("from")&&(a.next(),a.isSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword))))return a.next(),f=null,a.tokenIs("as")&&(a.next(),f=a.getValue()),a.addCommand({domain:"json",keyword:"json",lino:b,request:"setList",target:c.name,source:d.name,display:f}),!0;break}case "shuffle":return a.next(),a.isSymbol()&&(c=a.getSymbolRecord(),"variable"===c.keyword)?(a.next(),a.addCommand({domain:"json",keyword:"json",lino:b,request:"shuffle",target:c.name}),!0):!1}a.addWarning("Unrecognised syntax in 'json'"); 86 return!1},run:function(a){var b=a[a.pc];switch(b.request){case "getItem":var c=a.getSymbolRecord(b.source);var d=JSON.parse(c.value[c.index].content)[a.getValue(b.item)];c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};break;case "getElement":c=a.getSymbolRecord(b.source);d=JSON.parse(c.value[c.index].content)[a.getValue(b.element)];c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:"object"=== 87 typeof d?JSON.stringify(d):d};break;case "setList":c=a.getSymbolRecord(b.source);c=a.getValue(c.value[c.index]);d=JSON.parse(c);c=a.getSymbolRecord(b.target);var f=document.getElementById(c.value[c.index].content);f.options.length=0;var e=a.getValue(b.display);d.forEach(function(b){var c=e?a.decode(b[e]):null,d=document.createElement("option");d.innerHTML=c?c:b;b=c?JSON.stringify(b):b;d.value=b;f.appendChild(d)});f.selectedIndex=-1;break;case "shuffle":c=a.getSymbolRecord(b.target);d=JSON.parse(a.getValue(c.value[c.index])); 88 for(var g=d.length-1;0<g;g--){var h=Math.floor(Math.random()*(g+1)),k=$jscomp.makeIterator([d[h],d[g]]);d[g]=k.next().value;d[h]=k.next().value}c.value[c.index]={type:"constant",numeric:!1,content:JSON.stringify(d)}}return b.pc+1}},Rest:{compile:function(a){var b=a.getLino();a.next();switch(a.getToken()){case "get":if(a.next(),a.isSymbol()){var c=a.getSymbolRecord();if("variable"===c.keyword&&(a.next(),a.tokenIs("from"))){a.next();var d=a.getValue();a.addCommand({domain:"json",keyword:"rest",lino:b, 89 request:"get",target:c.name,url:d});return!0}}}a.addWarning("Unrecognised syntax in 'rest'");return!1},run:function(a){var b=a[a.pc];switch(b.request){case "get":a.ajaxCommand=b;var c=new XMLHttpRequest;c.onreadystatechange=function(){if(4===this.readyState&&200===this.status){var b=a.ajaxCommand,c=a.getSymbolRecord(b.target);c.value[c.index]={type:"constant",numeric:!1,content:this.responseText};a.run(b.pc+1)}};b=a.getValue(b.url);c.open("GET",b,!0);c.send()}return 0}},getHandler:function(a){switch(a){case "json":return g.Json; 90 case "rest":return g.Rest;default:return!1}},run:function(a){var b=a[a.pc],c=g.getHandler(b.keyword);c||a.error.runtimeError("Unknown keyword '"+b.keyword+"' in 'json' package");return c.run(a)},value:{compile:function(a){a.tokenIs("the")&&a.next();if(a.tokenIs("json")&&(a.next(),["size","count"].includes(a.getToken())&&(a.skip("of"),a.isSymbol()))){var b=a.getSymbolRecord();a.next();if(b.isValueHolder)return{domain:"json",type:"size",name:b.name}}return null},get:function(a,b){switch(b.type){case "size":return b= 91 a.getSymbolRecord(b.name),a=a.getValue(b.value[b.index]),{type:"constant",numeric:!0,content:JSON.parse(a).length}}}},condition:{compile:function(a){},test:function(a,b){}}};k.exports=g},{}],5:[function(e,k,h){var g={Attach:{compile:function(a){var b=a.getLino();a.getTokens();a.next();if(a.isSymbol()){var c=a.getProgram()[a.getSymbol().pc];switch(c.keyword){case "shape":case "svg":a.next();if(a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"svg",keyword:"attach",lino:b,type:c.keyword, 92 symbol:c.name,cssId:d});return!0}break;default:compile.error.InappropriateVariableTypeError(c.keyword)}}a.addWarning("Unrecognised syntax in 'attach'");return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.cssId).content;document.getElementById(c)||a.error.noSuchElementError(c);a=a.getSymbolRecord(b.symbol);a.value[a.index]={type:"constant",numeric:"false",content:c};return b.pc+1}},Circle:{compile:function(a){a.compileVariable("svg","circle",!1,"dom");return!0},run:function(a){return a[a.pc].pc+ 93 1}},Create:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();a.next();switch(c.keyword){case "svg":if(a.tokenIs("in")&&(a.next(),a.isSymbol())){var d=a.getToken();a.next();for(var f=null,e=!0;e;){var g=a.getToken();a.next();switch(g){case "style":f=a.getValue();break;default:a.prev(),e=!1}}f||(f={type:"constant",numeric:!1,content:"width:100%;height:100%"});a.addCommand({domain:"svg",keyword:"create",lino:b,type:"svg",name:c.name,style:f,parent:d});return!0}break; 94 case "group":if(a.tokenIs("in")&&(a.next(),a.isSymbol()))return f=a.getSymbolRecord(),["svg","group"].includes(f.keyword)||a.error.inappropriateTypeError(f.keyword),a.next(),a.addCommand({domain:"svg",keyword:"create",lino:b,type:"group",name:c.name,parent:f.name}),!0;break;case "circle":case "ellipse":case "line":case "rect":case "text":if(a.tokenIs("in")&&(a.next(),a.isSymbol())){d=a.getSymbolRecord();["svg","group"].includes(d.keyword)||a.error.inappropriateTypeError(d.keyword);a.next();for(e= 95 !0;e;){var h=a.getToken();a.next();switch(h){case "style":f=a.getValue();break;case "text":g=a.getValue();break;default:a.prev(),e=!1}}a.addCommand({domain:"svg",keyword:"create",lino:b,type:c.keyword,name:c.name,style:f,text:g,parent:d.name});return!0}}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.parent),d=a.getSymbolRecord(b.name);if("group"===b.type)d.parent=b.parent,d.x=0,d.y=0;else{if("group"===c.keyword){var f=c;var e=f.value[f.index];e.content||(e.content=[]);for(e.content.push({name:d.name, 96 index:d.index});"group"===c.keyword;)c=a.getSymbolRecord(c.parent)}e=document.getElementById(c.value[c.index].content);c=document.createElementNS("http://www.w3.org/2000/svg",b.type);e.appendChild(c);e="ec-"+d.name+"-"+d.index;c.setAttribute("id",e);"text"===d.keyword&&(c.textContent=a.value.evaluate(a,b.text).content);d.value[d.index]={type:"constant",numeric:!1,content:e};if(b.style){b=a.value.evaluate(a,b.style).content;a.domain.browser.setStyles(e,b);b=d.value[d.index];switch(d.keyword){case "circle":case "ellipse":b.x= 97 c.getAttribute("cx");b.y=c.getAttribute("cy");break;case "line":b.x=c.getAttribute("x1");b.y=c.getAttribute("y1");b.x2=c.getAttribute("x2");b.y2=c.getAttribute("y2");break;case "rect":case "text":b.x=c.getAttribute("x"),b.y=c.getAttribute("y")}f&&(b.groupName=f.name,b.groupIndex=f.index)}}return a[a.pc].pc+1}},Ellipse:{compile:function(a){a.compileVariable("svg","ellipse",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Group:{compile:function(a){a.compileVariable("svg","group");return!0}, 98 run:function(a){return a[a.pc].pc+1}},Line:{compile:function(a){a.compileVariable("svg","line",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},Move:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolRecord();a.next();if(a.tokenIs("to")){a.next();var d=a.getValue(),f=a.getValue();a.addCommand({domain:"svg",keyword:"move",lino:b,type:"moveTo",name:c.name,x:d,y:f});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.value.evaluate(a,b.x).content,d=a.value.evaluate(a, 99 b.y).content;b=a.getSymbolRecord(b.name);switch(b.keyword){case "group":for(var f=$jscomp.makeIterator(b.value[b.index].content),e=f.next();!e.done;e=f.next()){var g=e.value;e=a.getSymbolRecord(g.name);g=e.value[g.index];var h=document.getElementById(g.content),k=parseInt(g.x)+c,n=parseInt(g.y)+d;switch(e.keyword){case "circle":case "ellipse":h.setAttribute("cx",k);h.setAttribute("cy",n);break;case "line":h.setAttribute("x1",k);h.setAttribute("y1",n);h.setAttribute("x2",parseInt(g.x2)+c);h.setAttribute("y2", 100 parseInt(g.y2)+d);break;case "rect":case "text":h.setAttribute("x",k),h.setAttribute("y",n)}}b.x=c;b.y=d;break;case "circle":case "ellipse":case "line":case "rect":case "text":e=f=0;g=b.value[b.index];g.groupName&&(e=a.getSymbolRecord(g.groupName),f=e.x,e=e.y);g=b.value[b.index];h=document.getElementById(b.value[b.index].content);switch(b.keyword){case "circle":case "ellipse":h.setAttribute("cx",f+c);h.setAttribute("cy",e+d);break;case "line":h.setAttribute("x1",f+c);h.setAttribute("y1",e+d);b=parseInt(g.x2)- 101 parseInt(g.x1);k=parseInt(g.y2)-parseInt(g.y1);h.setAttribute("x2",f+b+c);h.setAttribute("y2",e+k+d);break;case "rect":case "text":h.setAttribute("x",f+c),h.setAttribute("y",e+d)}g.x=c;g.y=d}return a[a.pc].pc+1}},On:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();switch(c){case "click":if(a.next(),a.isSymbol()){var d=a.getSymbolRecord();a.next();if("group"!==d.keyword)return!1;a.addCommand({domain:"svg",keyword:"on",lino:b,action:c,symbol:d.name});b=a.getPc();a.addCommand({domain:"basic", 102 keyword:"goto",goto:0});a.compileOne();a.getCommandAt(b).goto=a.getPc();return!0}}a.addWarning("Unrecognised syntax in 'on'");return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);switch(b.action){case "click":if("group"===c.keyword)for(var d=$jscomp.makeIterator(c.value),f=d.next();!f.done;f=d.next())if(f=f.value,f.content){f=$jscomp.makeIterator(f.content);for(var e=f.next();!e.done;e=f.next()){e=e.value;var g=a.getSymbolRecord(e.name),h=g.value[e.index];h.content&&(h=document.getElementById(h.content), 103 h.targetPc=b.pc+2,h.contentItem=g,h.contentIndex=e.index,h.onclick=function(b){b.target.blur();var d=b.target.contentItem;d.index=b.target.contentIndex;d=d.value[d.index];if(d.groupName){c.index=d.groupIndex;d=$jscomp.makeIterator(c.value[c.index].content);for(var f=d.next();!f.done;f=d.next())f=f.value,a.getSymbolRecord(f.name).index=f.index}try{a.run(b.target.targetPc)}catch(u){a.reportError(a.source,u)}return!1})}}}return b.pc+1}},Rect:{compile:function(a){a.compileVariable("svg","rect",!1,"dom"); 104 return!0},run:function(a){return a[a.pc].pc+1}},Set:{compile:function(a){var b=a.getLino();a.next();var c=a.getToken();"the"===c&&(a.next(),c=a.getToken());if("text"===c&&(a.next(),a.tokenIs("of")&&(a.next(),a.isSymbol())))switch(c=a.getSymbolRecord(),c.keyword){case "text":if(a.next(),a.tokenIs("to")){a.next();var d=a.getValue();a.addCommand({domain:"svg",keyword:"set",lino:b,type:"setText",symbolName:c.name,value:d});return!0}}return!1},run:function(a){var b=a[a.pc];switch(b.type){case "setText":var c= 102 105 a.getSymbolRecord(b.symbolName);var d=document.getElementById(c.value[c.index].content);a=a.value.evaluate(a,b.value).content;switch(c.keyword){case "text":d.innerHTML=a}}return b.pc+1}},SVG:{compile:function(a){a.compileVariable("svg","svg");return!0},run:function(a){return a[a.pc].pc+1}},Text:{compile:function(a){a.compileVariable("svg","text",!1,"dom");return!0},run:function(a){return a[a.pc].pc+1}},getHandler:function(a){switch(a){case "attach":return g.Attach;case "circle":return g.Circle;case "create":return g.Create; 103 106 case "ellipse":return g.Ellipse;case "group":return g.Group;case "line":return g.Line;case "move":return g.Move;case "on":return g.On;case "rect":return g.Rect;case "set":return g.Set;case "svg":return g.SVG;case "text":return g.Text;default:return!1}},run:function(a){var b=a[a.pc],c=g.getHandler(b.keyword);c||a.error.runtimeError("Unknown keyword '"+b.keyword+"' in 'svg' package");return c.run(a)},value:{compile:function(a){a.tokenIs("the")&&a.next();if(a.tokenIs("text")&&(a.next(),a.tokenIs("of")&& … … 106 109 getIndex:function(){return a.index},next:function(b){a.index+=void 0===b?1:b},peek:function(){return a.tokens[a.index+1].token},getToken:function(){return a.index>=a.tokens.length?null:a.tokens[a.index]?a.tokens[a.index].token:null},nextToken:function(){b.next();return b.getToken()},skip:function(c){if(a.index>=a.tokens.length)return null;b.next();b.tokenIs(c)&&b.next()},prev:function(){a.index--},getLino:function(){return a.index>=a.tokens.length?0:a.tokens[a.index].lino},tokenIs:function(b){return a.index>= 107 110 a.tokens.length?!1:b===a.tokens[a.index].token},getTarget:function(b){b=void 0===b?a.index:b;return a.tokens[b].token},getTargetPc:function(c){c=void 0===c?a.index:c;return a.symbols[b.getTarget(c)].pc},getCommandAt:function(b){return a.program[b]},isSymbol:function(){return b.getTarget()in a.symbols},getSymbol:function(){return a.symbols[b.getToken()]},getSymbolPc:function(){return b.getSymbol().pc},getSymbolRecord:function(){return a.program[b.getSymbolPc()]},getSymbols:function(){return a.symbols}, 108 getProgram:function(){return a.program},getPc:function(){return a.program.length},getValue:function(){return b.value.compile(b)},getCondition:function(){return b.condition.compile(b)},constant:function(a){return b.value.constant(a)},addCommand:function(b){a.program.push(g({pc:a.program.length},b))},addSymbol:function(b,d){a.symbols[b]={pc:d}},mark:function(){a.savedMark=a.index},rewind:function(){a.index=a.savedMark},compileVariable:function(c,d, e,g){e=void 0===e?!1:e;g=void 0===g?null:g;b.next();109 var f=b.getLino(),h=b.getTokens()[b.getIndex()];a.symbols[h.token]&&b.error.duplicateSymbolError(h.token);var k=b.getPc();b.next();b.addSymbol(h.token,k);b.addCommand({domain:c,keyword:d,lino:f,isSymbol:!0,isValueHolder:e,name:h.token,elements:1,index:0,value:[{}],extra:g})},compileToken:function(){var a=b.getToken();if(a){var d=b.getIndex();b.mark();for(var e=$jscomp.makeIterator(Object.keys(b.domain)),g=e.next();!g.done;g=e.next()){if((g=b.domain[g.value])&&(g=g.getHandler(a))&&g.compile(b))return;111 getProgram:function(){return a.program},getPc:function(){return a.program.length},getValue:function(){return b.value.compile(b)},getCondition:function(){return b.condition.compile(b)},constant:function(a){return b.value.constant(a)},addCommand:function(b){a.program.push(g({pc:a.program.length},b))},addSymbol:function(b,d){a.symbols[b]={pc:d}},mark:function(){a.savedMark=a.index},rewind:function(){a.index=a.savedMark},compileVariable:function(c,d,f,e){f=void 0===f?!1:f;e=void 0===e?null:e;b.next(); 112 var g=b.getLino(),h=b.getTokens()[b.getIndex()];a.symbols[h.token]&&b.error.duplicateSymbolError(h.token);var l=b.getPc();b.next();b.addSymbol(h.token,l);b.addCommand({domain:c,keyword:d,lino:g,isSymbol:!0,isValueHolder:f,name:h.token,elements:1,index:0,value:[{}],extra:e})},compileToken:function(){var a=b.getToken();if(a){var d=b.getIndex();b.mark();for(var f=$jscomp.makeIterator(Object.keys(b.domain)),e=f.next();!e.done;e=f.next()){if((e=b.domain[e.value])&&(e=e.getHandler(a))&&e.compile(b))return; 110 113 b.rewind()}console.log("No handler found");b.error.dontUnderstandError(a,d)}},compileOne:function(){var c=b.getToken();if(c){a.warnings=[];var d=a.program.length;c.endsWith(":")?(a.symbols[c.substring(0,c.length-1)]={pc:d},a.index++):b.compileToken()}},compileFromHere:function(c){for(;a.index<a.tokens.length;){var d=a.tokens[a.index].token;if("else"===d)return a.program;b.compileOne();if(-1<c.indexOf(d))break}},compile:function(c){a.tokens=c;a.index=0;a.program=[];a.symbols={};a.warnings=[];b.compileFromHere([]); 111 114 b.addCommand({domain:"basic",keyword:"stop",lino:b.getLino(),next:0});return a.program}};k.exports=b},{}],8:[function(e,k,h){var g=Object.assign||function(a){for(var b=1;b<arguments.length;b++){var c=arguments[b],d;for(d in c)Object.prototype.hasOwnProperty.call(c,d)&&(a[d]=c[d])}return a};k.exports={compile:function(a){a.mark();for(var b=$jscomp.makeIterator(Object.keys(a.domain)),c=b.next();!c.done;c=b.next()){if(c=a.domain[c.value].condition.compile(a))return g({domain:name},c);a.rewind()}},test:function(a, 112 b){return a.domain[b.domain].condition.test(a,b)}}},{}],9:[function(e,k,h){var g=this,a=e("./Tokenise"),b=e("./Compile"),c=e("./Run"),d=e("./Value"),f=e("./Condition"),l=e("./Compare");h=e("../domain/Basic");var t=e("../domain/Browser"),p=e("../domain/Json");e=e("../domain/Svg");var m={domain:{basic:h,browser:t,json:p,svg:e},compileError:{dontUnderstandError:function(a){throw Error("I don't understand '"+a+"'");},duplicateSymbolError:function(a){throw Error("Symbol '"+a+"' is a duplicate");},inappropriateTypeError:function(a){throw Error("Inappropriate type '"+115 b){return a.domain[b.domain].condition.test(a,b)}}},{}],9:[function(e,k,h){var g=this,a=e("./Tokenise"),b=e("./Compile"),c=e("./Run"),d=e("./Value"),f=e("./Condition"),l=e("./Compare");h=e("../domain/Basic");var q=e("../domain/Browser"),p=e("../domain/Json");e=e("../domain/Svg");var m={domain:{basic:h,browser:q,json:p,svg:e},compileError:{dontUnderstandError:function(a){throw Error("I don't understand '"+a+"'");},duplicateSymbolError:function(a){throw Error("Symbol '"+a+"' is a duplicate");},inappropriateTypeError:function(a){throw Error("Inappropriate type '"+ 113 116 a+"'");},inappropriateVariableTypeError:function(a){throw Error("Inappropriate variable type '"+a+"'");},missingInputTypeError:function(){throw Error("Missing input type");},noSuchVariableError:function(a){throw Error("No such variable: "+a);},notAnIntegerError:function(a){throw Error("Value is not an integer: "+a);},undefinedValueError:function(a){throw Error("Undefined value: "+a);},unknownTypeError:function(a){throw Error("Unknown type: "+a);},unknownVariableError:function(a){throw Error("Unknown variable: "+ 114 117 a);},unrecognisedValueError:function(a){throw Error("I don't understand this value: "+a);},variableDoesNotHoldAValueError:function(a){throw Error("Variable '"+a+"' does not hold a value");},expectedError:function(a,b){throw Error("Expected '"+a+"' but saw '"+b+"'");}},runtimeError:{arrayIndexOutOfRangeError:function(a){throw Error("Array index out of range for "+a);},cantDecodeValueError:function(){throw Error("Can't decode value");},dataTypeMismatchError:function(){throw Error("Data type mismatch"); 115 118 },nonNumericValueError:function(){throw Error("Non-numeric value");},noSuchElementError:function(a){throw Error("No such element: "+a);},runtimeError:function(a){throw Error(a);},undefinedValueError:function(a,b){g.errorPc=b;throw Error("Undefined value: "+a);},variableDoesNotHoldAValueError:function(a){throw Error("Variable '"+a+"' does not hold a value");}},setupTracer:function(){var a=document.getElementById("easycoder-tracer");a&&(a.innerHTML='<div><input id="easycoder-run-button" type="button" value="Run" /><input id="easycoder-step-button" type="button" value="Step" /><div id="easycoder-tracer-content" style="border:1px solid black;padding:4px";width:100%></div>', 116 a.style.display="none")},reportError:function(a,c){var d=b.getProgram(),e=a.tokens;a=a.scriptLines;e=g.compiling?e[b.getIndex()].lino:d.pc.lino;d="";var f=e-5;for(f=0>f?0:f;f<e;f++){for(var h=""+f;4>h.length;)h=" "+h;d+=h+" "+a[f].line +"\n"}d+=c.message+"\n";c=b.getWarnings();if(c.length)for(d+="Warnings:\n",c=$jscomp.makeIterator(c),a=c.next();!a.done;a=c.next())d+=a.value+"\n";console.log(d);alert(d)},getSymbolRecord:function(a){a=g.program[g.program.symbols[a].pc];return a.alias?g.program[g.program.symbols[a.alias].pc]:117 a},evaluate:function(a){return d.evaluate(g.program,a)},encode:function(a){return d.encode(a,g.program.encoding)},decode:function(a){return d.decode(a,g.program.encoding)},getValue:function(a){return d.getValue(g.program,a)},compileScript:function(a,e){m.domain.ext=e;e=a.tokens;try{g.compiling=!0;var h=Date.now();b.value=d;b.condition=f;b.domain=m.domain;b.error=m.compileError;var k=b.compile(e);g.program=k;var n=Date.now();console.log("Compiled "+e.length+" tokens in "+(n-h)+"ms");g.compiling=!1;118 k.source=a;k.run=c;k.value=d;k.evaluate=m.evaluate;k.getValue=m.getValue;k.encode=m.encode;k.decode=m.decode;k.condition=f;k.compare=l;k.domain=m.domain;k.getSymbolRecord=m.getSymbolRecord;k.error=m.runtimeError;k.reportError=m.reportError;k.symbols=b.getSymbols();k.encoding="none";k.popups=[];k.stack=[];k.queue=[0];m.setupTracer();console.log("Run the script");k.run(k,0)}catch(r){m.reportError(a,r)}},start:function(b,c){c=void 0===c?null:c;try{var d=Date.now(),e=a.tokenise(b),f=Date.now();console.log("Tokenised "+ 119 e.scriptLines.length+" lines in "+(f-d)+"ms");m.compileScript(e,c)}catch(r){console.log(r)}}};k.exports=m},{"../domain/Basic":2,"../domain/Browser":3,"../domain/Json":4,"../domain/Svg":5,"./Compare":6,"./Compile":7,"./Condition":8,"./Run":10,"./Tokenise":11,"./Value":12}],10:[function(e,k,h){var g=function(a,b){var c=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++;0<c&&c<b&&(b=c)});return b},d=[];if(d.length)d.push(b);else for(d.push(b);0<d.length;)for(a.pc= 120 d.shift(),b={};;){a.pc=a.domain[a[a.pc].domain].run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;return}if(a.tracing){var e=a[a.pc],h=a.source.scriptLines,k=c(h),p=document.getElementById("easycoder-tracer");if(p){p.style.display="block";p.style.visibility="visible";var m="";if(a.tracer){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);m=(e=e.value[e.index])?m+(b+": "+e.content):m+(b+": undefined");switch(a.tracer.alignment){case "horizontal":c<d.length-1&&(m+=", ");break;case "vertical":m+= 121 "<br>"}});m+="<hr>";p="";for(var n=5;0<n;n--)e.lino&&(p+='<input type="text" name="'+n+'" value="'+h[e.lino-n].line.substr(k)+'"style=width:100%;border:none;enabled="false">'),p+="<br>";e=document.getElementById("easycoder-tracer-content");e.innerHTML=m+p;e.style.display="block";b.run=document.getElementById("easycoder-run-button");b.step=document.getElementById("easycoder-step-button");b.run.onclick=function(b){return function(c){b.run.blur();a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display= 122 "none";try{g(a,a.resume)}catch(q){c="Error in run handler: "+q.message,console.log(c),alert(c)}}}(b);b.step.onclick=function(b){return function(c){console.log("step");b.step.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{g(a,a.resume)}catch(q){c="Error in step handler: "+q.message,console.log(c),alert(c)}}}(b);a.resume=a.pc;a.pc=0}}break}b={run:b.run,step:b.step}}};k.exports=g},{}],11:[function(e,k,h){var g={markComments:function(a){var b=a.list, 123 c=void 0===a.index?0:a.index,d=void 0===a.inComment?!1:a.inComment,e=void 0===a.newList?[]:a.newList;if(c>=b.length)return e;var h=b[c];a=h.lino;h=h.token;var k={list:b,index:c+1,inComment:!1,newList:e.concat({lino:a,index:c,token:h})};e={list:b,index:c+1,inComment:!0,newList:e.concat({lino:a,index:c,comment:!0,token:h})};return d&&0<c&&a===b[c-1].lino?g.markComments(e):"!"===h.charAt(0)?g.markComments(e):g.markComments(k)},markSpacesInStrings:function(a){var b=a.line,c=void 0===a.inComment?!1:a.inComment; 124 a =void 0===a.inQuote?!1:a.inQuote;var d=b.charAt(0);d=a&&" "===d?"\\s":d;if(1===b.length)return d;b=b.substring(1);return"!"!==d||a?"{"!==d||c?"}"===d&&a?d+g.markSpacesInStrings({line:b,inComment:c,inQuote:!1}):d+g.markSpacesInStrings({line:b,inComment:c,inQuote:a}):d+g.markSpacesInStrings({line:b,inComment:c,inQuote:!0}):d+g.markSpacesInStrings({line:b,inComment:!0,inQuote:!1})},tokenise:function(a){a=a.split("\n").map(function(a){return a.length?g.markSpacesInStrings({line:a}):""}).map(function(a,125 b){return{lino:b+1,line:a}});var b=a.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});b=[].concat.apply([],b).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}});b=g.markComments({list:b}).filter(function(a){return!a.comment});return{scriptLines:a,tokens:b}}};k.exports=g},{}],12:[function(e,k,h){var g={getItem:function(a){var b=a.getToken();if(!b)return null;if("{"=== 126 b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b[0].match(/[0-9\-]/)){var c=eval(b);if(Number.isInteger(c))return a.next(),{type:"constant",numeric:!0,content:c};a.error.notAnIntegerError(b)}a.mark();b=$jscomp.makeIterator(Object.keys(a.domain));for(c=b.next();!c.done;c=b.next())if(c=a.domain[c.value].value.compile(a))return c;return null},compile:function(a){var b=a.getToken(),c=a.value.getItem(a);c||a.error.undefinedValueError(b);if("cat"===a.getToken()){for(b=127 {type:"cat",numeric:!1,parts:[c]};a.tokenIs("cat");)a.next(),b.parts.push(a.value.getItem(a));return b}return c},doValue:function(a,b){if("cat"===b.type)return{type:"constant",numeric:!1,content:b.parts.reduce(function(b,c){return b+g.doValue(a,c).content},"")};switch(b.type){case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);return c.isValueHolder?c.value[c.index]?c.value[c.index]:null:a.domain[c.domain].value.get(a,b);case "boolean":return b}return a.domain[b.domain].value.get(a,119 a.style.display="none")},reportError:function(a,c){var d=b.getProgram(),e=a.tokens;a=a.scriptLines;e=g.compiling?e[b.getIndex()].lino:d.pc.lino;d="";var f=e-5;for(f=0>f?0:f;f<e;f++){for(var h=""+f;4>h.length;)h=" "+h;d+=h+" "+a[f].line.split("\\s").join(" ")+"\n"}d+=c.message+"\n";c=b.getWarnings();if(c.length)for(d+="Warnings:\n",c=$jscomp.makeIterator(c),a=c.next();!a.done;a=c.next())d+=a.value+"\n";console.log(d);alert(d)},getSymbolRecord:function(a){a=g.program[g.program.symbols[a].pc];return a.alias? 120 g.program[g.program.symbols[a.alias].pc]:a},evaluate:function(a){return d.evaluate(g.program,a)},encode:function(a){return d.encode(a,g.program.encoding)},decode:function(a){return d.decode(a,g.program.encoding)},getValue:function(a){return d.getValue(g.program,a)},run:function(a){c(g.program,a)},compileScript:function(a,c){m.domain.ext=c;c=a.tokens;try{g.compiling=!0;var e=Date.now();b.value=d;b.condition=f;b.domain=m.domain;b.error=m.compileError;var h=b.compile(c);g.program=h;var k=Date.now(); 121 console.log("Compiled "+c.length+" tokens in "+(k-e)+"ms");g.compiling=!1;h.source=a;h.run=m.run;h.value=d;h.evaluate=m.evaluate;h.getValue=m.getValue;h.encode=m.encode;h.decode=m.decode;h.condition=f;h.compare=l;h.domain=m.domain;h.getSymbolRecord=m.getSymbolRecord;h.error=m.runtimeError;h.reportError=m.reportError;h.symbols=b.getSymbols();h.encoding="none";h.popups=[];h.stack=[];h.queue=[0];m.setupTracer();console.log("Run the script");h.run(0)}catch(t){m.reportError(a,t)}},start:function(b,c){c= 122 void 0===c?null:c;try{var d=Date.now(),e=a.tokenise(b),f=Date.now();console.log("Tokenised "+e.scriptLines.length+" lines in "+(f-d)+"ms");m.compileScript(e,c)}catch(t){console.log(t)}}};k.exports=m},{"../domain/Basic":2,"../domain/Browser":3,"../domain/Json":4,"../domain/Svg":5,"./Compare":6,"./Compile":7,"./Condition":8,"./Run":10,"./Tokenise":11,"./Value":12}],10:[function(e,k,h){var g=function(a,b){var c=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===a[c];)c++; 123 0<c&&c<b&&(b=c)});return 0},d=[];if(d.length)d.push(b);else for(d.push(b);0<d.length;)for(a.pc=d.shift(),b={};;){a.pc=a.domain[a[a.pc].domain].run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;return}if(a.tracing){var e=a[a.pc],h=a.source.scriptLines,k=c(h),p=document.getElementById("easycoder-tracer");if(p){p.style.display="block";p.style.visibility="visible";var m="";if(a.tracer){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);m=(e=e.value[e.index])?m+(b+": "+e.content):m+(b+": undefined"); 124 switch(a.tracer.alignment){case "horizontal":c<d.length-1&&(m+=", ");break;case "vertical":m+="<br>"}});m+="<hr>";p="";for(var n=5;0<n;n--)e.lino&&(p+='<input type="text" name="'+n+'" value="'+h[e.lino-n].line.substr(k)+'"style=width:100%;border:none;enabled="false">'),p+="<br>";e=document.getElementById("easycoder-tracer-content");e.innerHTML=m+p;e.style.display="block";b.run=document.getElementById("easycoder-run-button");b.step=document.getElementById("easycoder-step-button");b.run.onclick=function(b){return function(c){b.run.blur(); 125 a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{g(a,a.resume)}catch(r){c="Error in run handler: "+r.message,console.log(c),alert(c)}}}(b);b.step.onclick=function(b){return function(c){console.log("step");b.step.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{g(a,a.resume)}catch(r){c="Error in step handler: "+r.message,console.log(c),alert(c)}}}(b);a.resume=a.pc;a.pc=0}}break}b={run:b.run,step:b.step}}};k.exports= 126 g},{}],11:[function(e,k,h){var g={markComments:function(a){var b=a.list,c=void 0===a.index?0:a.index,d=void 0===a.inComment?!1:a.inComment,e=void 0===a.newList?[]:a.newList;if(c>=b.length)return e;var h=b[c];a=h.lino;h=h.token;var k={list:b,index:c+1,inComment:!1,newList:e.concat({lino:a,index:c,token:h})};e={list:b,index:c+1,inComment:!0,newList:e.concat({lino:a,index:c,comment:!0,token:h})};return d&&0<c&&a===b[c-1].lino?g.markComments(e):"!"===h.charAt(0)?g.markComments(e):g.markComments(k)},markSpacesInStrings:function(a){var b= 127 a.line,c=void 0===a.inComment?!1:a.inComment;a=void 0===a.inQuote?!1:a.inQuote;var d=b.charAt(0);d=a&&" "===d?"\\s":d;if(1===b.length)return d;b=b.substring(1);return"!"!==d||a?"{"!==d||c?"}"===d&&a?d+g.markSpacesInStrings({line:b,inComment:c,inQuote:!1}):d+g.markSpacesInStrings({line:b,inComment:c,inQuote:a}):d+g.markSpacesInStrings({line:b,inComment:c,inQuote:!0}):d+g.markSpacesInStrings({line:b,inComment:!0,inQuote:!1})},tokenise:function(a){a=a.split("\n").map(function(a){return a.length?g.markSpacesInStrings({line:a}): 128 ""}).map(function(a,b){return{lino:b+1,line:a}});var b=a.map(function(a){return a.line.trim().split(/\s+/).map(function(b,c){return{lino:a.lino,index:c,token:b}})});b=[].concat.apply([],b).filter(function(a){return a.token}).map(function(a){return{lino:a.lino,index:a.index,token:a.token.split("\\s").join(" ")}});b=g.markComments({list:b}).filter(function(a){return!a.comment});return{scriptLines:a,tokens:b}}};k.exports=g},{}],12:[function(e,k,h){var g={getItem:function(a){var b=a.getToken();if(!b)return null; 129 if("{"===b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b[0].match(/[0-9\-]/)){var c=eval(b);if(Number.isInteger(c))return a.next(),{type:"constant",numeric:!0,content:c};a.error.notAnIntegerError(b)}a.mark();b=$jscomp.makeIterator(Object.keys(a.domain));for(c=b.next();!c.done;c=b.next())if(c=a.domain[c.value].value.compile(a))return c;return null},compile:function(a){var b=a.getToken(),c=a.value.getItem(a);c||a.error.undefinedValueError(b);if("cat"=== 130 a.getToken()){for(b={type:"cat",numeric:!1,parts:[c]};a.tokenIs("cat");)a.next(),b.parts.push(a.value.getItem(a));return b}return c},doValue:function(a,b){if("cat"===b.type)return{type:"constant",numeric:!1,content:b.parts.reduce(function(b,c){return b+g.doValue(a,c).content},"")};switch(b.type){case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);return c.isValueHolder?c.value[c.index]?c.value[c.index]:null:a.domain[c.domain].value.get(a,b);case "boolean":return b}return a.domain[b.domain].value.get(a, 128 131 b)},constant:function(a){return{type:"constant",numeric:"false",content:a}},evaluate:function(a,b){if(!b)return{type:"constant",numeric:!1,content:""};if(b=g.doValue(a,b))return b;a.error.cantDecodeValueError()},getValue:function(a,b){return g.evaluate(a,b).content},encode:function(a,b){switch(b){case "url":return encodeURIComponent(a.replace(/\s/g,"+"));default:return a}},decode:function(a,b){switch(b){case "url":return decodeURIComponent(a).replace(/\+/g," ");default:return a}}};k.exports=g},{}]}, 129 132 {},[1]); -
easycoder/trunk/easycoder.js
r1952358 r1955044 518 518 const command = program[program.pc]; 519 519 try { 520 program.run(program , program.symbols[command.label].pc);520 program.run(program.symbols[command.label].pc); 521 521 } catch (err) { 522 522 console.log(err.message); … … 881 881 }, 882 882 883 Replace: { 884 885 compile: compiler => { 886 const lino = compiler.getLino(); 887 compiler.next(); 888 const original = compiler.getValue(); 889 if (compiler.tokenIs('with')) { 890 compiler.next(); 891 const replacement = compiler.getValue(); 892 if (compiler.tokenIs('in')) { 893 compiler.next(); 894 if (compiler.isSymbol()) { 895 const targetRecord = compiler.getSymbolRecord(); 896 compiler.next(); 897 if (targetRecord.isValueHolder) { 898 compiler.addCommand({ 899 domain: 'basic', 900 keyword: 'replace', 901 lino, 902 original, 903 replacement, 904 target: targetRecord.name 905 }); 906 return true; 907 } 908 } 909 } 910 } 911 return false; 912 }, 913 914 // runtime 915 916 run: program => { 917 const command = program[program.pc]; 918 const original = program.getValue(command.original); 919 const replacement = program.getValue(command.replacement); 920 const target = program.getSymbolRecord(command.target); 921 const value = program.getValue(target.value[target.index]); 922 const content = value.split(original).join(replacement); 923 target.value[target.index] = { 924 type: 'constant', 925 numeric: false, 926 content 927 }; 928 return command.pc + 1; 929 } 930 }, 931 883 932 Return: { 884 933 … … 981 1030 domain: 'basic', 982 1031 keyword: 'set', 983 type: ' set',1032 type: 'encoding', 984 1033 lino, 985 1034 encoding … … 1242 1291 const value = program.getValue(command.value); 1243 1292 setTimeout(function () { 1244 program.run( program,command.pc + 1);1293 program.run(command.pc + 1); 1245 1294 }, value * command.multiplier); 1246 1295 return 0; … … 1334 1383 case 'put': 1335 1384 return EasyCoder_Basic.Put; 1385 case 'replace': 1386 return EasyCoder_Basic.Replace; 1336 1387 case 'return': 1337 1388 return EasyCoder_Basic.Return; … … 2180 2231 compile: compiler => { 2181 2232 const lino = compiler.getLino(); 2182 const tokens = compiler.getTokens(); 2183 compiler.next(); 2233 compiler.next(); 2234 var newWindow = false; 2235 if (compiler.tokenIs('new')) { 2236 newWindow = true; 2237 compiler.next(); 2238 } 2184 2239 const location = compiler.getValue(); 2185 2240 compiler.addCommand({ … … 2187 2242 keyword: 'location', 2188 2243 lino, 2189 location 2244 location, 2245 newWindow 2190 2246 }); 2191 2247 return true; … … 2194 2250 run: program => { 2195 2251 const command = program[program.pc]; 2196 window.location = command.location.content; 2252 if (command.newWindow) { 2253 window.open(command.location.content, '_blank'); 2254 } else { 2255 window.location = command.location.content; 2256 } 2197 2257 return command.pc + 1; 2198 2258 } … … 2242 2302 return true; 2243 2303 } 2304 case 'key': 2305 compiler.next(); 2306 compiler.addCommand({ 2307 domain: 'browser', 2308 keyword: 'on', 2309 lino, 2310 action, 2311 item: 'key' 2312 }); 2313 // Add a 'goto' to skip the action 2314 const goto = compiler.getPc(); 2315 compiler.addCommand({ 2316 domain: 'basic', 2317 keyword: 'goto', 2318 goto: 0 2319 }); 2320 // Add the action 2321 compiler.compileOne(); 2322 // Add a 'stop' 2323 compiler.addCommand({ 2324 domain: 'basic', 2325 keyword: 'stop', 2326 lino, 2327 next: 0 2328 }); 2329 // Fixup the 'goto' 2330 compiler.getCommandAt(goto).goto = compiler.getPc(); 2331 return true; 2244 2332 } 2245 2333 compiler.addWarning('Unrecognised syntax in \'on\''); … … 2249 2337 run: program => { 2250 2338 const command = program[program.pc]; 2251 const targetItem = program.getSymbolRecord(command.symbol);2252 2339 switch (command.action) { 2253 2340 case 'change': 2254 if (targetItem.keyword === 'select') { 2255 const cssId = targetItem.value[targetItem.index].content; 2341 const changeItem = program.getSymbolRecord(command.symbol); 2342 if (changeItem.keyword === 'select') { 2343 const cssId = changeItem.value[changeItem.index].content; 2256 2344 if (cssId) { 2257 2345 const target = document.getElementById(cssId); … … 2259 2347 target.addEventListener("change", function () { 2260 2348 try { 2261 program.run( program,target.targetPc);2349 program.run(target.targetPc); 2262 2350 } catch (err) { 2263 2351 console.log(err.message); … … 2270 2358 break; 2271 2359 case 'click': 2272 targetItem.value.forEach(function (value, index) { 2360 const clickItem = program.getSymbolRecord(command.symbol); 2361 clickItem.value.forEach(function (value, index) { 2273 2362 const cssId = value.content; 2274 2363 if (cssId) { … … 2279 2368 const eventTarget = event.target; 2280 2369 eventTarget.blur(); 2281 targetItem.index = eventTarget.targetIndex;2370 clickItem.index = eventTarget.targetIndex; 2282 2371 try { 2283 2372 setTimeout(function () { 2284 program.run( program,eventTarget.targetPc);2373 program.run(eventTarget.targetPc); 2285 2374 }, 1); 2286 2375 } catch (err) { … … 2292 2381 } 2293 2382 }); 2383 break; 2384 case 'key': 2385 program.onKeyPc = command.pc + 2; 2386 document.onkeypress = function (event) { 2387 program.key = event.key; 2388 try { 2389 setTimeout(function () { 2390 program.run(program.onKeyPc); 2391 }, 1); 2392 } catch (err) { 2393 console.log('Error: ' + err.message); 2394 } 2395 return false; 2396 }; 2294 2397 break; 2295 2398 default: … … 2438 2541 token = compiler.getToken(); 2439 2542 } 2440 if (token === 'content') { 2543 if (token === 'title') { 2544 compiler.skip('to'); 2545 const value = compiler.getValue(); 2546 compiler.addCommand({ 2547 domain: 'browser', 2548 keyword: 'set', 2549 lino, 2550 type: 'setTitle', 2551 value 2552 }); 2553 return true; 2554 } else if (token === 'content') { 2441 2555 compiler.next(); 2442 2556 if (compiler.tokenIs('of')) { … … 2631 2745 styles[command.styleName.content] = styleValue.content; 2632 2746 Object.assign(styleTarget.style, styles); 2747 break; 2748 case 'setTitle': 2749 document.title = program.getValue(command.value); 2633 2750 break; 2634 2751 default: … … 2897 3014 } 2898 3015 } 3016 return null; 3017 } 3018 if (token == 'key') { 3019 compiler.next(); 3020 return { 3021 domain: 'browser', 3022 type: 'key' 3023 }; 2899 3024 } 2900 3025 return null; … … 2974 3099 }; 2975 3100 break; 3101 case 'key': 3102 return { 3103 type: 'constant', 3104 numeric: false, 3105 content: program.key 3106 }; 3107 break; 2976 3108 } 2977 3109 } … … 3004 3136 compile: compiler => { 3005 3137 const lino = compiler.getLino(); 3006 const tokens = compiler.getTokens();3007 3138 compiler.next(); 3008 3139 const request = compiler.getToken(); … … 3071 3202 compiler.error.expectedError('of', compiler.getToken()); 3072 3203 } 3073 if (compiler.isSymbol()) {3074 const targetRecord = compiler.getSymbolRecord();3075 if (targetRecord.keyword === 'variable') {3076 compiler.next();3077 if (compiler.tokenIs('from')) {3078 compiler.next();3079 const value = compiler.getValue();3080 compiler.addCommand({3081 domain: 'json',3082 keyword: 'json',3083 lino,3084 request: 'get',3085 target: targetRecord.name,3086 value3087 });3088 return true;3089 }3090 }3091 }3092 3204 break; 3093 3205 case 'set': … … 3151 3263 var targetRecord; 3152 3264 switch (command.request) { 3153 case 'get':3154 program.ajaxCommand = command;3155 const xhttp = new XMLHttpRequest();3156 xhttp.onreadystatechange = function () {3157 if (this.readyState === 4 && this.status === 200) {3158 const command = program.ajaxCommand;3159 const targetRecord = program.getSymbolRecord(command.target);3160 targetRecord.value[targetRecord.index] = {3161 type: 'constant',3162 numeric: false,3163 content: this.responseText3164 };3165 program.run(program, command.pc + 1);3166 }3167 };3168 const value = program.getValue(command.value);3169 xhttp.open('GET', value, true);3170 xhttp.send();3171 return 0;3172 3265 case 'getItem': 3173 3266 sourceRecord = program.getSymbolRecord(command.source); … … 3232 3325 }, 3233 3326 3327 Rest: { 3328 3329 compile: compiler => { 3330 const lino = compiler.getLino(); 3331 compiler.next(); 3332 const request = compiler.getToken(); 3333 switch (request) { 3334 case 'get': 3335 compiler.next(); 3336 if (compiler.isSymbol()) { 3337 const targetRecord = compiler.getSymbolRecord(); 3338 if (targetRecord.keyword === 'variable') { 3339 compiler.next(); 3340 if (compiler.tokenIs('from')) { 3341 compiler.next(); 3342 const url = compiler.getValue(); 3343 compiler.addCommand({ 3344 domain: 'json', 3345 keyword: 'rest', 3346 lino, 3347 request: 'get', 3348 target: targetRecord.name, 3349 url 3350 }); 3351 return true; 3352 } 3353 } 3354 } 3355 } 3356 compiler.addWarning('Unrecognised syntax in \'rest\''); 3357 return false; 3358 }, 3359 3360 run: program => { 3361 const command = program[program.pc]; 3362 switch (command.request) { 3363 case 'get': 3364 program.ajaxCommand = command; 3365 const xhttp = new XMLHttpRequest(); 3366 xhttp.onreadystatechange = function () { 3367 if (this.readyState === 4 && this.status === 200) { 3368 const command = program.ajaxCommand; 3369 const targetRecord = program.getSymbolRecord(command.target); 3370 targetRecord.value[targetRecord.index] = { 3371 type: 'constant', 3372 numeric: false, 3373 content: this.responseText 3374 }; 3375 program.run(command.pc + 1); 3376 } 3377 }; 3378 const url = program.getValue(command.url); 3379 xhttp.open('GET', url, true); 3380 xhttp.send(); 3381 } 3382 return 0; 3383 } 3384 }, 3385 3234 3386 getHandler: name => { 3235 3387 switch (name) { 3236 3388 case 'json': 3237 3389 return EasyCoder_Json.Json; 3390 case 'rest': 3391 return EasyCoder_Json.Rest; 3238 3392 default: 3239 3393 return false; … … 3778 3932 } 3779 3933 try { 3780 program.run( program,event.target.targetPc);3934 program.run(event.target.targetPc); 3781 3935 } catch (err) { 3782 3936 program.reportError(program.source, err); … … 4408 4562 nn = ' ' + nn; 4409 4563 } 4410 errString += nn + ' ' + scriptLines[n].line + '\n';4564 errString += nn + ' ' + scriptLines[n].line.split('\\s').join(' ') + '\n'; 4411 4565 } 4412 4566 errString += err.message + '\n'; … … 4444 4598 getValue: value => { 4445 4599 return EasyCoder_Value.getValue(_this.program, value); 4600 }, 4601 4602 run: pc => { 4603 EasyCoder_Run(_this.program, pc); 4446 4604 }, 4447 4605 … … 4466 4624 4467 4625 program.source = source; 4468 program.run = EasyCoder _Run;4626 program.run = EasyCoder.run; 4469 4627 program.value = EasyCoder_Value; 4470 4628 program.evaluate = EasyCoder.evaluate; … … 4485 4643 EasyCoder.setupTracer(); 4486 4644 console.log('Run the script'); 4487 program.run( program,0);4645 program.run(0); 4488 4646 // console.log('Program: '+ JSON.stringify(program, null, 2)); 4489 4647 } catch (err) { … … 4526 4684 } 4527 4685 }); 4528 return count; 4686 return 0; 4687 // return count; 4529 4688 }; 4530 4689 -
easycoder/trunk/easycoder.php
r1952358 r1955044 4 4 * Plugin URI: https://easycoder.software 5 5 * Description: Control the appearance and behavior of your posts and pages by embedding simple English-like scripts, without the need to learn JavaScript. 6 * Version: 1.5. 26 * Version: 1.5.3 7 7 * Author: EasyCoder Software 8 8 */ … … 10 10 // The EasyCoder library 11 11 function easycoder_enqueue_script() { 12 wp_enqueue_script('easycoder_script', plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '1.5. 2');12 wp_enqueue_script('easycoder_script', plugin_dir_url( __FILE__ ) . 'easycoder-min.js', array(), '1.5.3'); 13 13 } 14 14 -
easycoder/trunk/readme.txt
r1952358 r1955044 22 22 * Show and hide parts of your content, avoiding the need to reload the page by putting everything in at the start and selecting which parts of it to show 23 23 * React to button clicks and other events by altering the appearance or revealing content as above 24 * Retrieve content from web services 24 * Retrieve content from web services using REST and JSON 25 25 * Draw and animate simple graphics 26 26 … … 29 29 *EasyCoder* scripts are embedded in your page or post, inside a special "preformatted" tag. When the page loads, *EasyCoder* looks for this element then compiles and runs the script it contains. When it interacts with HTML elements it attaches their IDs to its own variables, so your HTML and its controlling script are in the same file. 30 30 31 The *EasyCoder* library module is currently about 6 2k bytes in its minimised form. Its performance is good because it precompiles scripts - a process that takes only tens of milliseconds - and the compiled code for each command is only a thin wrapper around the corresponding JavaScript functionality.31 The *EasyCoder* library module is currently about 652k bytes in its minimised form. Its performance is good because it precompiles scripts - a process that takes only tens of milliseconds - and the compiled code for each command is only a thin wrapper around the corresponding JavaScript functionality. 32 32 33 33 When *EasyCoder* detects an error, either in compilation or at runtime, it opens a popup window with a friendly error message that tries to tell you what went wrong and where in the script it happened. … … 44 44 45 45 == Changelog == 46 47 = 1.5.3 11-oct-2018 = 48 * Added 'replace'; fixed bugs. 46 49 47 50 = 1.5.2 =
Note: See TracChangeset
for help on using the changeset viewer.