Plugin Directory

Changeset 2212168


Ignore:
Timestamp:
12/14/2019 05:35:23 PM (6 years ago)
Author:
gtanyware
Message:

Version 2.5.6 Fix problem in REST handling errors

Location:
easycoder/trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • easycoder/trunk/easycoder-min.js

    r2210817 r2212168  
    3535c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];c?(a=a.getValue(c)/a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b,lino),a=parseInt(f.content)/parseInt(a.getValue(d)),e.value[e.index]={type:"constant",numeric:!0,content:Math.trunc(a)})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Dummy:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",
    3636keyword:"dummy",lino:b});return!0},run:function(a){return a[a.pc].pc+1}},Encode:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"encode",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);if(c.isValueHolder){var d=a.getValue(c.value[c.index]);c.value[c.index]={type:"constant",numeric:!1,content:a.encode(d)};b.numeric=!1}else a.variableDoesNotHoldAValueError(b.lino,c.name);
    37 return b.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},Exit:{compile:function(a){a.next();a.addCommand({domain:"core",keyword:"exit"});return!0},run:function(a){a.exit();return 0}},Filter:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"filter",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array),
    38 d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d).filter(function(b){c.a=b;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,"Can't parse this array")}return b.pc+1}},Fork:{compile:function(a){var b=a.getLino();a.next();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];try{a.run(a.symbols[b.label].pc)}catch(c){console.log(c.message),
    39 alert(c.message)}return b.pc+1}},Go:{compile:function(a){var b=a.getLino();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"go",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(b.label){if(a.verifySymbol(b.label)){var c=a.symbols[b.label];if(c)return c.pc}a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}return b.goto}},Gosub:{compile:function(a){var b=a.getLino();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",
    40 keyword:"gosub",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(a.verifySymbol(b.label))return a.stack.push(a.pc+1),a.symbols[b.label].pc;a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}},If:{compile:function(a){var b=a.getLino();a.next();var c=a.condition.compile(a),d=a.getPc();a.addCommand({domain:"core",keyword:"if",lino:b,condition:c});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",
    41 keyword:"goto",lino:b,goto:0}),a.getCommandAt(d).else=a.getPc(),a.next(),a.compileOne(!0),a.getCommandAt(c).goto=a.getPc()):a.getCommandAt(d).else=a.getPc();return!0},run:function(a){var b=a[a.pc];return a.condition.test(a,b.condition)?b.pc+1:b.else}},Import:{compile:function(a){var b=a.imports,c=EasyCoder.scripts[b.caller],d=a.getProgram();if(b.length){b=$jscomp.makeIterator(b);for(var e=b.next();!e.done;e=b.next()){e=c.getSymbolRecord(e.value);var f=a.nextToken(),g=e.keyword;if(f===g){if(f=a.compileVariable(e.domain,
    42 g,!0),f=d[a.getSymbols()[f.name].pc],f.element=e.element,f.exporter=e.exporter?e.exporter:c.script,f.exportedName=e.name,f.extra=e.extra,f.isValueHolder=e.isValueHolder,e.program&&(f.program=e.program.script),f.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+e.name+"'");}if(a.tokenIs("and"))throw Error("Imports do not match exports");}else a.next();return!0},run:function(a){return a[a.pc].pc+1}},Index:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol(!0)){var c=
    43 a.getToken();if(a.nextTokenIs("to")){var d=a.getNextValue();a.addCommand({domain:"core",keyword:"index",lino:b,symbol:c,value:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol),d=a.getValue(b.value);d>=c.elements&&a.runtimeError(b.lino,"Array index "+d+" is out of range for '"+c.name+"'");c.index=d;c.imported&&(EasyCoder.symbols[c.exporter].getSymbolRecord(c.exportedName).index=d);return b.pc+1}},Load:{compile:function(a){var b=a.getLino();switch(a.nextToken()){case "plugin":var c=
    44 a.getNextValue();a.addCommand({domain:"core",keyword:"load",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.name);switch(b.keyword){case "load":if(a.checkPlugin(c))return b.pc+1;EasyCoder_Plugins.getLocalPlugin(a.getPluginsPath,c,a.getPlugin,a.addLocalPlugin,function(){a.run(b.pc+1)});return 0}}},Module:{compile:function(a){a.compileVariable("core","module");return!0},run:function(a){return a[a.pc].pc+1}},Multiply:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=
    45 a.getSymbol();var d=a.getCommandAt(c.pc).name}c=a.getValue();a.tokenIs("by")&&a.next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"multiply",lino:b,value1:c,value2:e,target:d}),!0;a.warning("core multiply: Expected value holder")}else return"undefined"===typeof d&&a.warning("core multiply: No target variable given"),a.addCommand({domain:"core",keyword:"multiply",lino:b,value2:e,
    46 target:d}),!0;return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];c?(a=a.getValue(c)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b,lino),a=parseInt(f.content)*parseInt(a.getValue(d)),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Negate:{compile:function(a){var b=
    47 a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"negate",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);c.isValueHolder?c.value[c.index]={type:"constant",numeric:!0,content:-c.value[c.index].content}:a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},On:{compile:function(a){var b=a.getLino(),c=a.nextToken();switch(c){case "close":case "message":case "error":return a.next(),a.addCommand({domain:"core",
    48 keyword:"on",lino:b,action:c}),a.completeHandler()}return a.isSymbol()&&(c=a.getSymbolRecord(),"callback"===c.keyword)?(a.next(),a.addCommand({domain:"core",keyword:"on",lino:b,action:c.name}),a.completeHandler()):!1},run:function(a){var b=a[a.pc],c=b.pc+2;switch(b.action){case "close":a.onClose=c;break;case "message":a.onMessage=c;break;case "error":a.onError=c;break;default:var d=a.getSymbolRecord(b.action);if(d)d.cb=c;else return a.runtimeError(b.lino,"Unknown action '"+b.action+"'"),0}return b.pc+
    49 1}},Print:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:b,value:c});return!0},run:function(a){var b=a[a.pc];a=a.getFormattedValue(b.value);console.log("-> "+a);return b.pc+1}},Put:{compile:function(a){var b=a.getLino(),c=a.getNextValue();if(a.tokenIs("into")){if(a.nextIsSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:b,value:c,target:d});return!0}a.warning("core:put: No such variable: '"+a.getToken()+
    50 "'")}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.target);c.isValueHolder||a.variableDoesNotHoldAValueError(b.lino,c.name);a=a.evaluate(b.value);c.value[c.index]={type:a.type,numeric:a.numeric,content:a.content};c.imported&&(c=EasyCoder.scripts[c.exporter].getSymbolRecord(c.exportedName),c.value[c.index]=a);return b.pc+1}},Replace:{compile:function(a){var b=a.getLino(),c=a.getNextValue();if(a.tokenIs("with")){var d=a.getNextValue();if(a.tokenIs("in")&&a.nextIsSymbol()){var e=a.getSymbolRecord();
    51 if(e.isValueHolder)return a.next(),a.addCommand({domain:"core",keyword:"replace",lino:b,original:c,replacement:d,target:e.name}),!0;throw Error("'"+e.name+"' does not hold a value");}}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.original),d=a.getValue(b.replacement),e=a.getSymbolRecord(b.target);a=a.getValue(e.value[e.index]).split(c).join(d);e.value[e.index]={type:"constant",numeric:!1,content:a};return b.pc+1}},Require:{compile:function(a){var b=a.getLino(),c=a.nextToken();if(["css","js"].includes(c)){var d=
    52 a.getNextValue();a.addCommand({domain:"core",keyword:"require",lino:b,type:c,url:d});return!0}throw Error("File type must be 'css' or 'js'");},run:function(a){var b=a[a.pc];a.require(b.type,a.getValue(b.url),function(){a.run(b.pc+1)});return 0}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Run:{compile:function(a){var b=a.getLino(),c=a.getNextValue(),d=[];if(a.tokenIs("with"))for(;;)if(a.nextIsSymbol(!0)){var e=
    53 a.getSymbolRecord();d.push(e.name);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&a.nextIsSymbol(!0)){var f=a.getSymbolRecord();a.next();if("module"!==f.keyword)throw Error("'"+f.name+"' is not a module");f=f.name}var g=!1;a.tokenIs("nowait")&&(a.next(),g=!0);e=a.getPc();a.addCommand({domain:"core",keyword:"run",lino:b,script:c,imports:d,module:f,nowait:g,then:0});a.tokenIs("then")&&(b=a.getPc(),a.addCommand({domain:"core",keyword:"goto",goto:0}),a.getCommandAt(e).then=a.getPc(),a.next(),
    54 a.compileOne(!0),a.addCommand({domain:"core",keyword:"stop"}),a.getCommandAt(b).goto=a.getPc());return!0},run:function(a){a.nextPc=a.pc+1;a.runScript(a);return 0}},Sanitize:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"sanitize",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.name);a=a.value[a.index];a.content=JSON.stringify(JSON.parse(a.content));return b.pc+1}},Script:{compile:function(a){var b=
    55 a.getProgram();b.script=a.nextToken();if(EasyCoder.scripts[b.script])throw Error("Script '"+b.script+"' is already running.");EasyCoder.scripts[b.script]=b;a.next();return!0},run:function(a){return a[a.pc].pc+1}},Send:{compile:function(a){var b=a.getLino(),c="";a.nextTokenIs("to")||(c=a.getValue());if(a.tokenIs("to")){if(a.nextTokenIs("parent"))var d="parent";else if(a.isSymbol){d=a.getSymbolRecord();if("module"!==d.keyword)throw Error("'"+d.name+"' is not a module");d=d.name}a.next();a.addCommand({domain:"core",
    56 keyword:"send",lino:b,message:c,recipient:d})}return!0},run:function(a){var b=a[a.pc],c=a.getValue(b.message);"parent"===b.recipient?a.parent&&(a=EasyCoder.scripts[a.parent],a.onMessage&&(a.message=c,a.run(a.onMessage))):(a=a.getSymbolRecord(b.recipient),a.program&&(a=EasyCoder.scripts[a.program],a.message=c,a.run(a.onMessage)));return b.pc+1}},Set:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(!c.isValueHolder)return!1;if(a.nextTokenIs("to")){a.next();for(var d=
    57 [];;){a.mark();try{d.push(a.getValue())}catch(f){a.rewind();break}}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setArray",target:c.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setBoolean",target:c.name});return!0}switch(a.getToken()){case "ready":return a.next(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setReady"}),!0;case "element":c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&&
    58 a.nextTokenIs("to"))){var e=a.getNextValue();a.addCommand({domain:"core",keyword:"set",lino:b,request:"setElement",target:d.name,index:c,value:e});return!0}break;case "property":c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&&a.nextTokenIs("to")))return e=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setProperty",target:d.name,name:c,value:e}),!0;break;case "arg":if(c=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&
    59 (d=a.getSymbolRecord(),a.nextTokenIs("to")))return e=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setArg",target:d.name,name:c,value:e}),!0}a.tokenIs("the")&&a.next();switch(a.getToken()){case "elements":a.next();if(a.tokenIs("of")){a.next();if(!a.isSymbol())throw Error("Unknown variable '"+a.getToken()+"'");c=a.getToken();a.next();if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setElements",symbol:c,value:d}),
    60 !0}break;case "encoding":if(a.nextTokenIs("to"))return c=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",request:"encoding",lino:b,encoding:c}),!0;a.addWarning("Unknown encoding option");break;case "payload":if(a.nextTokenIs("of")&&a.nextIsSymbol()&&(c=a.getSymbolRecord(),"callback"===c.keyword&&a.nextTokenIs("to")))return d=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",request:"setPayload",lino:b,callback:c.name,payload:d}),!0}return!1},run:function(a){var b=a[a.pc];switch(b.request){case "setBoolean":var c=
    61 a.getSymbolRecord(b.target);c.isValueHolder?(c.value[c.index]={type:"boolean",content:!0},b.numeric=!1):a.variableDoesNotHoldAValueError(b.lino,c.name);break;case "setReady":if(a=EasyCoder.scripts[a.parent])a.run(a.nextPc),a.nextPc=0;break;case "setArray":c=a.getSymbolRecord(b.target);c.elements=b.value.length;c.value=b.value;break;case "encoding":a.encoding=a.getValue(b.encoding);break;case "setElements":c=a.getSymbolRecord(b.symbol);var d=c.elements;c.elements=a.getValue(b.value);c.index=0;if(c.elements>
    62 d)for(a=d;a<c.elements;a++)c.value.push({}),c.element.push({});else c.value=c.value.slice(0,c.elements),c.element=c.element.slice(0,c.elements);break;case "setElement":c=a.getSymbolRecord(b.target);d=a.getValue(b.index);var e=JSON.parse(a.getValue(c.value[c.index]));a=a.getValue(b.value);e[d]=JSON.parse(a);c.value[c.index].content=JSON.stringify(e);break;case "setProperty":c=a.getSymbolRecord(b.target);(e=a.getValue(c.value[c.index]))||(e="{}");d="";try{d=JSON.parse(e)}catch(f){return a.runtimeError(b.lino,
    63 "Can't parse "+c.name),0}e=a.getValue(b.name);if(a=a.evaluate(b.value))a.content instanceof Array?d[e]=a.content:"boolean"===a.type?d[e]=a.content:a.numeric?d[e]=a.content:'{"'===a.content.substr(0,2)?d[e]=JSON.parse(a.content):d[e]=a.content.split('"').join('\\"'),c.value[c.index]={type:"constant",numeric:!1,content:JSON.stringify(d)};break;case "setPayload":a.getSymbolRecord(b.callback).payload=a.getValue(b.payload);break;case "setArg":d=a.getValue(b.name),c=a.getSymbolRecord(b.target),c[d]=a.getValue(b.value)}return b.pc+
    64 1}},Sort:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"sort",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array),d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d);f.sort(function(b,d){c.a=b;c.b=d;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,
    65 "Can't parse this array")}return b.pc+1}},Split:{compile:function(a){var b=a.getLino();item=a.getNextValue();var c="\n";a.tokenIs("on")&&(c=a.getNextValue());if(["giving","into"].includes(a.getToken())&&a.nextIsSymbol()){var d=a.getSymbolRecord();if("variable"===d.keyword)return a.next(),a.addCommand({domain:"core",keyword:"split",lino:b,item:item,on:c,target:d.name}),!0}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.item),d=a.getValue(b.on);c=c.split(d);d=c.length;targetRecord=a.getSymbolRecord(b.target);
    66 targetRecord.elements=d;for(a=0;a<d;a++)targetRecord.value[a]={type:"constant",numeric:!1,content:c[a]};targetRecord.index=0;return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();if(a.more()&&a.isSymbol()&&!a.getToken().endsWith(":")){var c=a.getSymbolRecord();return"module"===c.keyword?(a.next(),a.addCommand({domain:"core",keyword:"stop",lino:b,name:c.name}),!0):!1}a.addCommand({domain:"core",keyword:"stop",lino:b,next:0});return!0},run:function(a){var b=a[a.pc];if(b.name)a=a.getSymbolRecord(b.name),
    67 EasyCoder.scripts[a.program].exit();else return 0;return b.pc+1}},Take:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();if(a.tokenIs("from"))if(a.next(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var e=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,target:d});return!0}a.warning("core 'take'': Expected value holder")}else{d=
    68 a.getValue();if(a.tokenIs("giving"))return a.next(),e=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e}),!0;a.warning("core 'take'': Expected \"giving\"")}return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];d?(a=a.getValue(d)-a.getValue(c),e.value[e.index]={type:"constant",numeric:!0,content:a}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b.lino),a=parseInt(a.getValue(f))-
    69 parseInt(a.getValue(c)),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Toggle:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a[b.symbol];if(c.isValueHolder){var d=a.domain[c.domain];a=d.value.get(a,c.value[c.index]).content;d.value.put(c,{type:"boolean",content:!a})}else a.variableDoesNotHoldAValueError(b.lino,
    70 c.name);return b.pc+1}},Variable:{compile:function(a){a.compileVariable("core","variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next();d=1;break;case "tick":case "ticks":a.next();d=10;break;case "second":case "seconds":a.next();d=1E3;break;case "minute":case "minutes":a.next(),d=6E4}a.addCommand({domain:"core",keyword:"wait",lino:b,value:c,multiplier:d});return!0},
    71 run:function(a){var b=a[a.pc],c=a.getValue(b.value);setTimeout(function(){a.run&&a.run(b.pc+1)},c*b.multiplier);return 0}},While:{compile:function(a){var b=a.getLino();a.next();var c=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:b,condition:c});b=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});a.getCommandAt(b).goto=a.getPc();return!0},run:function(a){return a.condition.test(a,a[a.pc].condition)?
    72 a.pc+2:a.pc+1}},getHandler:function(a){switch(a){case "add":return EasyCoder_Core.Add;case "alias":return EasyCoder_Core.Alias;case "append":return EasyCoder_Core.Append;case "begin":return EasyCoder_Core.Begin;case "callback":return EasyCoder_Core.Callback;case "clear":return EasyCoder_Core.Clear;case "close":return EasyCoder_Core.Close;case "debug":return EasyCoder_Core.Debug;case "decode":return EasyCoder_Core.Decode;case "divide":return EasyCoder_Core.Divide;case "dummy":return EasyCoder_Core.Dummy;
    73 case "encode":return EasyCoder_Core.Encode;case "end":return EasyCoder_Core.End;case "exit":return EasyCoder_Core.Exit;case "filter":return EasyCoder_Core.Filter;case "fork":return EasyCoder_Core.Fork;case "go":case "goto":return EasyCoder_Core.Go;case "gosub":return EasyCoder_Core.Gosub;case "if":return EasyCoder_Core.If;case "import":return EasyCoder_Core.Import;case "index":return EasyCoder_Core.Index;case "load":return EasyCoder_Core.Load;case "module":return EasyCoder_Core.Module;case "multiply":return EasyCoder_Core.Multiply;
    74 case "negate":return EasyCoder_Core.Negate;case "on":return EasyCoder_Core.On;case "print":return EasyCoder_Core.Print;case "put":return EasyCoder_Core.Put;case "replace":return EasyCoder_Core.Replace;case "require":return EasyCoder_Core.Require;case "return":return EasyCoder_Core.Return;case "run":return EasyCoder_Core.Run;case "sanitize":return EasyCoder_Core.Sanitize;case "script":return EasyCoder_Core.Script;case "send":return EasyCoder_Core.Send;case "set":return EasyCoder_Core.Set;case "sort":return EasyCoder_Core.Sort;
    75 case "split":return EasyCoder_Core.Split;case "stop":return EasyCoder_Core.Stop;case "take":return EasyCoder_Core.Take;case "toggle":return EasyCoder_Core.Toggle;case "variable":return EasyCoder_Core.Variable;case "wait":return EasyCoder_Core.Wait;case "while":return EasyCoder_Core.While;default:return!1}},run:function(a){var b=a[a.pc],c=EasyCoder_Core.getHandler(b.keyword);c||a.runtimeError(b.lino,"Unknown keyword '"+b.keyword+"' in 'core' package");return c.run(a)},isNegate:function(a){return"not"===
    76 a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var b=a.getToken();switch(a.getSymbolRecord().keyword){case "module":return a.next(),{domain:"core",type:"module",name:b};case "variable":var c=a.nextToken();return["format","modulo"].includes(c)?(a=a.getNextValue(),{domain:"core",type:c,name:b,value:a}):{domain:"core",type:"symbol",name:b}}return null}b=a.getToken();if("true"===b)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===b)return a.next(),{domain:"core",
    77 type:"boolean",content:!1};if("random"===b)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:b,radius_c:a};if("sin"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"sin",angle_s:b,radius_s:a};if("tan"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:b,radius_t:a};if(["now","today","newline",
    78 "break","empty"].includes(b))return a.next(),{domain:"core",type:b};if("date"===b)return{domain:"core",type:"date",value:a.getNextValue()};if(["encode","decode","lowercase","hash"].includes(b))return a.next(),a=a.getValue(),{domain:"core",type:b,value:a};if("element"===b)return b=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&(c=a.getSymbolRecord(),a.next(),"variable"===c.keyword)?{domain:"core",type:"element",element:b,symbol:c.name}:null;if("property"===b)return b=a.getNextValue(),a.tokenIs("of")&&
    79 a.nextIsSymbol()&&(c=a.getSymbolRecord(),a.next(),"variable"===c.keyword)?{domain:"core",type:"property",property:b,symbol:c.name}:null;if("arg"===b){var d=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol())return b=a.getSymbolRecord(),a.next(),{domain:"core",type:"arg",value:d,target:b.name}}if(["character","char"].includes(b)&&(b=a.getNextValue(),a.tokenIs("of")))return a=a.getNextValue(),{domain:"core",type:"char",index:b,value:a};a.tokenIs("the")&&a.next();b=a.getToken();switch(b){case "elements":if(a.nextTokenIs("of")&&
    80 a.nextIsSymbol())return c=a.getToken(),a.next(),{domain:"core",type:b,name:c};break;case "index":if(a.nextTokenIs("of")){if(a.nextIsSymbol()){if("in"===a.peek())return b=a.getValue(),a=a.getNextValue(),{domain:"core",type:"indexOf",value1:b,value2:a};c=a.getToken();a.next();return{domain:"core",type:b,name:c}}b=a.getValue();if(a.tokenIs("in"))return a=a.getNextValue(),{domain:"core",type:"indexOf",value1:b,value2:a}}break;case "value":if(a.nextTokenIs("of"))return a.next(),{domain:"core",type:"valueOf",
    81 value:a.getValue()};break;case "length":if(a.nextTokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":case "right":try{if(c=a.getNextValue(),a.tokenIs("of")){var e=a.getNextValue();return{domain:"core",type:b,count:c,value:e}}}catch(f){}break;case "from":c=a.getNextValue();e=a.tokenIs("to")?a.getNextValue():null;if(a.tokenIs("of"))return a=a.getNextValue(),{domain:"core",type:b,from:c,to:e,value:a};break;case "position":b=!1;a.nextTokenIs("nocase")&&(b=
    82 !0,a.next());if(a.tokenIs("of")&&(c=!1,a.nextTokenIs("the")&&a.nextTokenIs("last")&&(a.next(),c=!0),e=a.getValue(),a.tokenIs("in")))return a=a.getNextValue(),{domain:"core",type:"position",needle:e,haystack:a,last:c,nocase:b};break;case "payload":if(a.nextTokenIs("of")&&a.nextIsSymbol()&&(b=a.getSymbolRecord(),"callback"===b.keyword))return a.next(),{domain:"core",type:"payload",callback:b.name};break;case "message":case "error":return a.next(),{domain:"core",type:b}}return null},get:function(a,b){switch(b.type){case "boolean":return{type:"boolean",
    83 numeric:!1,content:b.content};case "elements":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).elements};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*parseFloat(c))*a,10)};case "sin":return c=
    84 a.getValue(b.angle_s),a=a.getValue(b.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*parseFloat(c))*a,10)};case "valueOf":return a=parseInt(a.getValue(b.value)),{type:"constant",numeric:!0,content:a?a:0};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};case "left":return{type:"constant",
    85 numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "right":return c=a.getValue(b.value),{type:"constant",numeric:!1,content:c.substr(c.length-a.getValue(b.count))};case "from":c=a.getValue(b.from);var d=b.to?a.getValue(b.to):null;a=a.getValue(b.value);return{type:"constant",numeric:!1,content:d?a.substr(c,d):a.substr(c)};case "position":return c=a.getValue(b.needle),a=a.getValue(b.haystack),b.nocase&&(c=c.toLowerCase(),a=a.toLowerCase()),{type:"constant",numeric:!0,content:b.last?
    86 a.lastIndexOf(c):a.indexOf(c)};case "payload":return{type:"constant",numeric:!1,content:a.getSymbolRecord(b.callback).payload};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};case "format":c=a.getSymbolRecord(b.name);c=1E3*a.getValue(c.value[c.index]);try{switch(d=JSON.parse(a.getValue(b.value)),d.mode){case "time":return{type:"constant",numeric:!0,content:(new Date(c)).toLocaleTimeString(d.locale,d.options)};
    87 default:var e=new Date(c);return{type:"constant",numeric:!0,content:"iso"===d.format?e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate():e.toLocaleDateString(d.locale,d.options)}}}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse "+b.value);break}case "empty":return{type:"constant",numeric:!1,content:""};case "now":return{type:"constant",numeric:!0,content:Math.floor(Date.now()/1E3)};case "today":return a=new Date,a.setHours(0,0,0,0),{type:"constant",numeric:!0,content:Math.floor(a.getTime()/1E3)};
    88 case "date":c=Date.parse(a.getValue(b.value))/1E3;if(isNaN(c)){a.runtimeError(a[a.pc].lino,"Invalid date format; expecting 'yyyy-mm-dd'");break}return{type:"constant",numeric:!0,content:c};case "newline":return{type:"constant",numeric:!1,content:"\n"};case "break":return{type:"constant",numeric:!1,content:"<br />"};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))};case "lowercase":return{type:"constant",
    89 numeric:!1,content:a.getValue(b.value).toLowerCase()};case "hash":a=a.getValue(b.value);b=0;if(0===a.length)return b;for(c=0;c<a.length;c++)d=a.charCodeAt(c),b=(b<<5)-b+d;return{type:"constant",numeric:!0,content:b};case "element":c=a.getValue(b.element);b=a.getSymbolRecord(b.symbol);d="";try{d=JSON.parse(a.getValue(b.value[b.index]))[c]}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse JSON");break}return{type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};case "property":d=
    90 a.getValue(b.property);b=a.getSymbolRecord(b.symbol);a=a.getValue(b.value[b.index]);c="";if(d&&a)if("object"===typeof a)c=a[d];else if("{"===a.charAt(0))try{c=JSON.parse(a)[d]}catch(f){console.log("Can't parse '"+a+"': "+f.message)}return{type:"constant",numeric:!isNaN(c),content:"object"===typeof c?JSON.stringify(c):c};case "module":return{type:"boolean",numeric:!1,content:a.getSymbolRecord(b.name).program};case "message":return c=a.message,{type:"constant",numeric:!1,content:c};case "error":return c=
    91 a.errorMessage,{type:"constant",numeric:!1,content:c};case "indexOf":d=a.getValue(b.value1);b=a.getValue(b.value2);try{return c=JSON.parse(b).indexOf(d),{type:"constant",numeric:!0,content:c}}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse "+b)}break;case "arg":return c=a.getValue(b.value),c=a.getSymbolRecord(b.target)[c],{type:"constant",numeric:!isNaN(c),content:c};case "char":return c=a.getValue(b.index),{type:"constant",numeric:!1,content:a.getValue(b.value)[c]}}return null},put:function(a,
    92 b){a.value[a.index]=b}},condition:{compile:function(a){if(a.isSymbol()){var b=a.getSymbolRecord();if("module"===b.keyword){if(a.nextTokenIs("is")){var c=!0;a.nextTokenIs("not")&&(a.next(),c=!1);if(a.tokenIs("running"))return a.next(),{domain:"core",type:"moduleRunning",name:b.name,sense:c}}return null}}if(a.tokenIs("not"))return{domain:"core",type:"not",value:a.getNextValue()};try{c=a.getValue();var d=a.getToken();if("includes"===d){var e=a.getNextValue();return{domain:"core",type:"includes",value1:c,
    93 value2:e}}if("is"===d){a.next();var f=EasyCoder_Core.isNegate(a);switch(a.getToken()){case "numeric":return a.next(),{domain:"core",type:"numeric",value1:c,negate:f};case "even":return a.next(),{domain:"core",type:"even",value1:c};case "odd":return a.next(),{domain:"core",type:"odd",value1:c};case "greater":a.next();if(a.tokenIs("than")){a.next();var g=a.getValue();return{domain:"core",type:"greater",value1:c,value2:g,negate:f}}break;case "less":a.next();if(a.tokenIs("than")){a.next();var k=a.getValue();
    94 return{domain:"core",type:"less",value1:c,value2:k,negate:f}}break;default:var h=a.getValue();return{domain:"core",type:"is",value1:c,value2:h,negate:f}}}else if(c)return{domain:"core",type:"boolean",value:c}}catch(l){return a.warning("Can't get a value"),0}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);case "numeric":var c=a.getValue(b.value1);c=" "===c||isNaN(c);return b.negate?c:!c;case "even":return 0===a.getValue(b.value1)%2;case "odd":return 1===a.getValue(b.value1)%
    95 2;case "is":return c=a.compare(a,b.value1,b.value2),b.negate?0!==c:0===c;case "greater":return c=a.compare(a,b.value1,b.value2),b.negate?0>=c:0<c;case "less":return c=a.compare(a,b.value1,b.value2),b.negate?0<=c:0>c;case "not":return!a.getValue(b.value);case "moduleRunning":return c=a.getSymbolRecord(b.name).program,b.sense?c:!c;case "includes":return c=JSON.parse(a.getValue(b.value1)),b=a.getValue(b.value2),c.includes(b)}return!1}}},EasyCoder={name:"EasyCoder_Main",domain:{core:EasyCoder_Core},runtimeError:function(a,
    96 b){this.lino=a;this.reportError({message:"Line "+(0<=a?a:"")+": "+b},this.program);this.program.aborted=!0},nonNumericValueError:function(a){this.runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){this.runtimeError(a,"Variable '"+b+"' does not hold a value")},reportError:function(a,b,c){if(a.message)if(this.compiling||b){c=c?c:b.source;var d=c.tokens;c=c.scriptLines;d=this.compiling?d[EasyCoder_Compiler.getIndex()].lino:b[b.pc].lino;b=this.compiling?"Compile error":
    97 "Runtime error in '"+b.script+"'";b+=":\n";var e=d-5;for(e=0>e?0:e;e<d;e++){var f=(""+(e+1)).padStart(4," ");b+=f+" "+c[e].line.split("\\s").join(" ")+"\n"}b+=a.message+"\n";a=EasyCoder_Compiler.getWarnings();if(a.length)for(b+="Warnings:\n",a=$jscomp.makeIterator(a),c=a.next();!c.done;c=a.next())b+=c.value+"\n";console.log(b);alert(b)}else a="Error: "+a.message,alert(a),console.log(a);else console.log("An error occurred - origin was "+a.path[0])},getSymbolRecord:function(a){a=this[this.symbols[a].pc];
    98 return a.alias?this.getSymbolRecord(a.alias):a.exporter?EasyCoder.scripts[a.exporter].getSymbolRecord(a.exportedName):a},verifySymbol:function(a){return this.symbols.hasOwnProperty(a)},encode:function(a){return EasyCoder_Value.encode(a,this.encoding)},decode:function(a){return EasyCoder_Value.decode(a,this.encoding)},evaluate:function(a){return EasyCoder_Value.evaluate(this,a)},getValue:function(a){return EasyCoder_Value.getValue(this,a)},getFormattedValue:function(a){a=EasyCoder_Value.evaluate(this,
    99 a);if(a.numeric)return a.content;if("boolean"===a.type)return a.content?"true":"false";if("undefined"!==typeof a.content&&2<=a.content.length&&('{"'===a.content.substr(0,2)||"["===a.content[0]))try{var b=JSON.parse(a.content);return JSON.stringify(b,null,2)}catch(c){return this.reportError(c),"{}"}return a.content},getSimpleValue:function(a){return!0===a||!1===a?{type:"boolean",content:a}:{type:"constant",numeric:Number.isInteger(a),content:a}},run:function(a){a&&(this.program=this,EasyCoder_Run.run(this,
    100 a))},exit:function(){EasyCoder_Run.exit(this)},register:function(a){$jscomp$this.program=a},require:function(a,b,c){var d=document.createElement("css"===a?"link":"script");switch(a){case "css":d.type="text/css";d.href=b;d.rel="stylesheet";break;case "js":d.type="text/javascript";d.src=b;break;default:return}d.onload=function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Library "+b+" loaded");c()};document.head.appendChild(d)},isUndefined:function(a){return"undefined"===typeof a},runScript:function(a){var b=
    101 a[a.pc],c=a.getValue(b.script),d=b.imports;d.caller=a.script;var e=b.module?a.getSymbolRecord(b.module):null;try{EasyCoder.tokeniseAndCompile(c.split("\n"),d,e,this.script,b.then)}catch(f){EasyCoder.reportError(f,a,a.source);a.onError?a.run(a.onError):(a=a.parent)&&a.onError&&a.run(a.onError);return}b.nowait&&EasyCoder.run(a.nextPc)},close:function(){},compileScript:function(a,b,c,d){var e=a.tokens;this.compiling=!0;var f=EasyCoder_Compiler;this.compiler=f;f.value=EasyCoder_Value;f.condition=EasyCoder_Condition;
    102 f.domain=this.domain;f.imports=b;b=EasyCoder_Compiler.compile(e);this.compiling=!1;b.EasyCoder=this;b.value=EasyCoder_Value;b.condition=EasyCoder_Condition;b.compare=EasyCoder_Compare;b.source=a;b.run=this.run;b.exit=this.exit;b.runScript=this.runScript;b.evaluate=this.evaluate;b.getValue=this.getValue;b.getFormattedValue=this.getFormattedValue;b.getSimpleValue=this.getSimpleValue;b.encode=this.encode;b.decode=this.decode;b.domain=this.domain;b.require=this.require;b.isUndefined=this.isUndefined;
    103 b.checkPlugin=this.checkPlugin;b.getPlugin=this.getPlugin;b.addLocalPlugin=this.addLocalPlugin;b.getPluginsPath=this.getPluginsPath;b.getSymbolRecord=this.getSymbolRecord;b.verifySymbol=this.verifySymbol;b.runtimeError=this.runtimeError;b.nonNumericValueError=this.nonNumericValueError;b.variableDoesNotHoldAValueError=this.variableDoesNotHoldAValueError;b.reportError=this.reportError;b.register=this.register;b.symbols=f.getSymbols();b.encoding="ec";b.popups=[];b.stack=[];b.queue=[0];b.module=c;b.parent=
    104 d;c&&(c.program=b.script);return b},tokeniseFile:function(a){var b=[],c=[],d=0;a.forEach(function(a,f){b.push({lino:f+1,line:a});for(var e=a.length,k="",h=!0,l=0;l<e;l++){var n=a[l];if(0==n.trim().length)h||(c.push({index:d,lino:f+1,token:k}),d++,k="",h=!0);else if(h=!1,"`"===n){for(m=l;++l<a.length&&"`"!==a[l];);k=a.substr(m,l-m+1)}else if("!"==n)break;else k+=n}0<k.length&&c.push({index:d,lino:f+1,token:k})});return{scriptLines:b,tokens:c}},tokeniseAndCompile:function(a,b,c,d,e){var f=null,g=Date.now();
    105 a=this.tokeniseFile(a);try{f=this.compileScript(a,b,c,d);this.scriptIndex++;f.script||(f.script=this.scriptIndex);var k=Date.now();console.log(k-this.timestamp+" ms: Compiled "+(f.script+": "+a.scriptLines.length+" lines ("+a.tokens.length+" tokens) in ")+(k-g+" ms"))}catch(h){"stop"!==h.message&&(this.reportError(h,d,a),d&&d.onError&&d.run(d.onError))}f&&(EasyCoder.scripts[f.script]=f,c&&(c.program=f.script),f.afterExit=e,f.running=!0,EasyCoder_Run.run(f,0))},tokenise:function(a){var b=a.split("\n");
    106 if(!this.tokenising){try{this.tokeniseAndCompile(b)}catch(c){this.reportError(c,null,a)}this.tokenising=!0}},setPluginCount:function(a){EasyCoder.plugins=[];EasyCoder.pluginCount=a},checkPlugin:function(a){return EasyCoder.domain[a]},getPlugin:function(a,b,c){EasyCoder.domain[a]?c():(a=document.createElement("script"),a.type="text/javascript",a.src=b+"?ver="+EasyCoder.version,a.onload=function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Plugin "+b+" loaded");c()},document.head.appendChild(a))},
    107 addGlobalPlugin:function(a,b){EasyCoder.plugins.push({name:a,handler:b});EasyCoder.plugins.length===EasyCoder.pluginCount&&(EasyCoder.plugins.forEach(function(a){EasyCoder.domain[a.name]=a.handler}),EasyCoder.tokenise(EasyCoder.source))},addLocalPlugin:function(a,b,c){EasyCoder.domain[a]=b;c()},getPluginsPath:function(){return EasyCoder.pluginsPath},loadPluginJs:function(a){var b=this;console.log(Date.now()-this.timestamp+" ms: Load "+a+"/easycoder/plugins.js");var c=document.createElement("script");
    108 c.src=""+window.location.origin+a+"/easycoder/plugins.js?ver="+this.version;c.type="text/javascript";c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(b.timestamp,a,b.setPluginCount,b.getPlugin,b.addGlobalPlugin)};c.onerror=function(){a?b.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):b.reportError({message:"Can't load plugins.js"},b.program,b.source)};document.head.appendChild(c);this.pluginsPath=a},start:function(a){this.source=a;this.scriptIndex=0;a=window.location.pathname;a=a.endsWith("/")?
    109 a.slice(0,-1):"";"undefined"===typeof EasyCoder_Plugins?this.loadPluginJs(a):(this.pluginsPath=a,EasyCoder_Plugins.getGlobalPlugins(this.timestamp,a,this.setPluginCount,this.getPlugin,this.addGlobalPlugin))}},EasyCoder_Run={name:"EasyCoder_Run",run:function(a,b){var c=[],d=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 0};if(c.length)c.push(b);else for(a.register(a),c.push(b);0<c.length;)for(a.pc=c.shift(),a.watchdog=0,b={};a.running;){if(1E6<
    110 a.watchdog){a.lino=a[a.pc].lino;a.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?",a),a);break}a.watchdog++;var e=a[a.pc].domain;a.debugStep&&console.log(a.script+": Line "+a[a.pc].lino+": PC: "+a.pc+" "+e+":"+a[a.pc].keyword);var f=a.domain[e];if(!f){a.runtimeError(a[a.pc].lino,"Unknown domain '"+e+"'");break}a.pc=f.run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;break}if(a.tracing){e=a[a.pc];f=a.source.scriptLines;var g=d(f),k=document.getElementById("easycoder-tracer");
    111 if(!k){a.runtimeError(e.lino,"Element 'easycoder-tracer' was not found");return}k.style.display="block";k.style.visibility="visible";var h="";if(a.tracer){if(k=document.getElementById("easycoder-tracer-content")){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);if(1<e.elements)for(h+=b+": "+e.index+"/"+e.elements+": ",b=0;b<e.elements;b++){var f=e.value[b];h=f?h+(f.content+" "):h+"undefined "}else h=(e=e.value[e.index])?h+(b+": "+e.content):h+(b+": undefined");switch(a.tracer.alignment){case "horizontal":c<
    112 d.length-1&&(h+=", ");break;case "vertical":h+="<br>"}});h+="<hr>";for(var l="",n=5;0<n;n--){if(e.lino){var q=f[e.lino-n].line.substr(g);l+='<input type="text" name="'+n+'"value="'+(e.lino-n+1+": "+q.split("\\s").join(" ")+'"style="width:100%;border:none;enabled:false">')}l+="<br>"}k.innerHTML=h+" "+l;k.style.display="block";b.$jscomp$loop$prop$run$66=document.getElementById("easycoder-run-button");b.$jscomp$loop$prop$step$67=document.getElementById("easycoder-step-button");b.$jscomp$loop$prop$run$66.onclick=
    113 function(b){return function(){b.$jscomp$loop$prop$run$66.blur();a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{EasyCoder_Run.run(a,a.resume)}catch(p){var c="Error in run handler: "+p.message;console.log(c);alert(c)}}}(b);b.$jscomp$loop$prop$step$67.onclick=function(b){return function(){console.log("step");b.$jscomp$loop$prop$step$67.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{a.run(a.resume)}catch(p){var c=
    114 "Error in step handler: "+p.message;console.log(c);alert(c)}}}(b)}a.resume=a.pc;a.pc=0}break}b={$jscomp$loop$prop$run$66:b.$jscomp$loop$prop$run$66,$jscomp$loop$prop$step$67:b.$jscomp$loop$prop$step$67}}},exit:function(a){a.onExit&&a.run(a.onExit);var b=a.parent,c=a.afterExit;delete EasyCoder.scripts[a.script];a.module&&delete a.module.program;Object.keys(a).forEach(function(b){delete a[b]});b&&c&&EasyCoder.scripts[b].run(c)}},EasyCoder_Value={name:"EasyCoder_Value",getItem:function(a){var b=a.getToken();
    115 if(!b)return null;if("true"===b)return a.next(),{type:"boolean",content:!0};if("false"===b)return a.next(),{type:"boolean",content:!1};if("`"===b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b.charAt(0).match(/[0-9-]/)){var c=eval(b);if(Number.isInteger(c))return a.next(),{type:"constant",numeric:!0,content:c};throw Error("'"+b+"' is not an integer");}b=a.getIndex();c=$jscomp.makeIterator(Object.keys(a.domain));for(var d=c.next();!d.done;d=c.next())if(d=
    116 d.value,a.rewindTo(b),d=a.domain[d].value.compile(a))return d;return null},compile:function(a){var b=a.getToken(),c=EasyCoder_Value.getItem(a);if(!c)throw Error("Undefined value: '"+b+"'");if("cat"===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("undefined"===typeof b.type)return a.runtimeError(a[a.pc].lino,"Undefined value (variable not initialized?)"),null;switch(b.type){case "cat":return{type:"constant",
    117 numeric:!1,content:b.parts.reduce(function(b,c){return b+EasyCoder_Value.doValue(a,c).content},"")};case "boolean":case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);if(c.isValueHolder){if(b=c.value[c.index]){c=b.content;if(null===c||"undefined"===typeof c)b.content=b.numeric?0:"";return b}return null}return a.domain[c.domain].value.get(a,b)}return a.domain[b.domain].value.get(a,b)},constant:function(a,b){return{type:"constant",numeric:b,content:a}},evaluate:function(a,b){if(!b)return{type:"constant",
    118 numeric:!1,content:""};var c=EasyCoder_Value.doValue(a,b);if(c)return c;a.runtimeError(a[a.pc].lino,"Can't decode value: "+b)},getValue:function(a,b){return EasyCoder_Value.evaluate(a,b).content},encode:function(a,b){if(a)switch(b){case "ec":return a.replace(/'/g,"~sq~").replace(/"/g,"~dq~").replace(/\n/g,"%0a").replace(/\r/g,"%0d");case "url":return encodeURIComponent(a.replace(/\s/g,"+"));case "sanitize":return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}return a},decode:function(a,b){if(a)switch(b){case "ec":return a.replace(/~dq~/g,
    119 '"').replace(/~sq~/g,"'").replace(/%0a/g,"\n").replace(/%0d/g,"\r");case "url":return decodeURIComponent(a).replace(/\+/g," ")}return a}};EasyCoder.version="2.5.5";EasyCoder.timestamp=Date.now();console.log("EasyCoder loaded; waiting for page");
     37return b.pc+1}},End:{compile:function(a){a.next();return!0},run:function(){return 0}},Exit:{compile:function(a){a.next();a.addCommand({domain:"core",keyword:"exit"});return!0},run:function(a){var b=EasyCoder.scripts[a.parent];a.exit();b&&(b.run(b.nextPc),b.nextPc=0);return 0}},Filter:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"filter",lino:b,array:c.name,func:d});return!0}}return!1},
     38run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array),d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d).filter(function(b){c.a=b;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,"Can't parse this array")}return b.pc+1}},Fork:{compile:function(a){var b=a.getLino();a.next();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"fork",lino:b,label:c});return!0},run:function(a){var b=
     39a[a.pc];try{a.run(a.symbols[b.label].pc)}catch(c){console.log(c.message),alert(c.message)}return b.pc+1}},Go:{compile:function(a){var b=a.getLino();a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"go",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(b.label){if(a.verifySymbol(b.label)){var c=a.symbols[b.label];if(c)return c.pc}a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}return b.goto}},Gosub:{compile:function(a){var b=a.getLino();
     40a.nextTokenIs("to")&&a.next();var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"gosub",lino:b,label:c});return!0},run:function(a){var b=a[a.pc];if(a.verifySymbol(b.label))return a.stack.push(a.pc+1),a.symbols[b.label].pc;a.runtimeError(b.lino,"Unknown symbol '"+b.label+"'");return 0}},If:{compile:function(a){var b=a.getLino();a.next();var c=a.condition.compile(a),d=a.getPc();a.addCommand({domain:"core",keyword:"if",lino:b,condition:c});a.compileOne();if(!a.getToken())return a.getCommandAt(d).else=
     41a.getPc(),!0;a.tokenIs("else")?(c=a.getPc(),a.addCommand({domain:"core",keyword:"goto",lino:b,goto:0}),a.getCommandAt(d).else=a.getPc(),a.next(),a.compileOne(!0),a.getCommandAt(c).goto=a.getPc()):a.getCommandAt(d).else=a.getPc();return!0},run:function(a){var b=a[a.pc];return a.condition.test(a,b.condition)?b.pc+1:b.else}},Import:{compile:function(a){var b=a.imports,c=EasyCoder.scripts[b.caller],d=a.getProgram();if(b.length){b=$jscomp.makeIterator(b);for(var e=b.next();!e.done;e=b.next()){e=c.getSymbolRecord(e.value);
     42var f=a.nextToken(),g=e.keyword;if(f===g){if(f=a.compileVariable(e.domain,g,!0),f=d[a.getSymbols()[f.name].pc],f.element=e.element,f.exporter=e.exporter?e.exporter:c.script,f.exportedName=e.name,f.extra=e.extra,f.isValueHolder=e.isValueHolder,e.program&&(f.program=e.program.script),f.imported=!0,!a.tokenIs("and"))break}else throw Error("Mismatched import variable type for '"+e.name+"'");}if(a.tokenIs("and"))throw Error("Imports do not match exports");}else a.next();return!0},run:function(a){return a[a.pc].pc+
     431}},Index:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol(!0)){var c=a.getToken();if(a.nextTokenIs("to")){var d=a.getNextValue();a.addCommand({domain:"core",keyword:"index",lino:b,symbol:c,value:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol),d=a.getValue(b.value);d>=c.elements&&a.runtimeError(b.lino,"Array index "+d+" is out of range for '"+c.name+"'");c.index=d;c.imported&&(EasyCoder.symbols[c.exporter].getSymbolRecord(c.exportedName).index=d);return b.pc+
     441}},Load:{compile:function(a){var b=a.getLino();switch(a.nextToken()){case "plugin":var c=a.getNextValue();a.addCommand({domain:"core",keyword:"load",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.name);switch(b.keyword){case "load":if(a.checkPlugin(c))return b.pc+1;EasyCoder_Plugins.getLocalPlugin(a.getPluginsPath,c,a.getPlugin,a.addLocalPlugin,function(){a.run(b.pc+1)});return 0}}},Module:{compile:function(a){a.compileVariable("core","module");return!0},run:function(a){return a[a.pc].pc+
     451}},Multiply:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbol();var d=a.getCommandAt(c.pc).name}c=a.getValue();a.tokenIs("by")&&a.next();var e=a.getValue();if(a.tokenIs("giving")){a.next();if(a.isSymbol())return d=a.getSymbol(),d=a.getCommandAt(d.pc).name,a.next(),a.addCommand({domain:"core",keyword:"multiply",lino:b,value1:c,value2:e,target:d}),!0;a.warning("core multiply: Expected value holder")}else return"undefined"===typeof d&&a.warning("core multiply: No target variable given"),
     46a.addCommand({domain:"core",keyword:"multiply",lino:b,value2:e,target:d}),!0;return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=e.value[e.index];c?(a=a.getValue(c)*a.getValue(d),e.value[e.index]={type:"constant",numeric:!0,content:a}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b,lino),a=parseInt(f.content)*parseInt(a.getValue(d)),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.variableDoesNotHoldAValueError(b.lino,
     47e.name);return b.pc+1}},Negate:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"negate",lino:b,symbol:c});return!0}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.symbol);c.isValueHolder?c.value[c.index]={type:"constant",numeric:!0,content:-c.value[c.index].content}:a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},On:{compile:function(a){var b=a.getLino(),c=a.nextToken();switch(c){case "close":case "message":case "error":return a.next(),
     48a.addCommand({domain:"core",keyword:"on",lino:b,action:c}),a.completeHandler()}return a.isSymbol()&&(c=a.getSymbolRecord(),"callback"===c.keyword)?(a.next(),a.addCommand({domain:"core",keyword:"on",lino:b,action:c.name}),a.completeHandler()):!1},run:function(a){var b=a[a.pc],c=b.pc+2;switch(b.action){case "close":a.onClose=c;break;case "message":a.onMessage=c;break;case "error":a.onError=c;break;default:var d=a.getSymbolRecord(b.action);if(d)d.cb=c;else return a.runtimeError(b.lino,"Unknown action '"+
     49b.action+"'"),0}return b.pc+1}},Print:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();a.addCommand({domain:"core",keyword:"print",lino:b,value:c});return!0},run:function(a){var b=a[a.pc];a=a.getFormattedValue(b.value);console.log("-> "+a);return b.pc+1}},Put:{compile:function(a){var b=a.getLino(),c=a.getNextValue();if(a.tokenIs("into")){if(a.nextIsSymbol()){var d=a.getToken();a.next();a.addCommand({domain:"core",keyword:"put",lino:b,value:c,target:d});return!0}a.warning("core:put: No such variable: '"+
     50a.getToken()+"'")}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.target);c.isValueHolder||a.variableDoesNotHoldAValueError(b.lino,c.name);a=a.evaluate(b.value);c.value[c.index]={type:a.type,numeric:a.numeric,content:a.content};c.imported&&(c=EasyCoder.scripts[c.exporter].getSymbolRecord(c.exportedName),c.value[c.index]=a);return b.pc+1}},Replace:{compile:function(a){var b=a.getLino(),c=a.getNextValue();if(a.tokenIs("with")){var d=a.getNextValue();if(a.tokenIs("in")&&a.nextIsSymbol()){var e=
     51a.getSymbolRecord();if(e.isValueHolder)return a.next(),a.addCommand({domain:"core",keyword:"replace",lino:b,original:c,replacement:d,target:e.name}),!0;throw Error("'"+e.name+"' does not hold a value");}}return!1},run:function(a){var b=a[a.pc],c=a.getValue(b.original),d=a.getValue(b.replacement),e=a.getSymbolRecord(b.target);a=a.getValue(e.value[e.index]).split(c).join(d);e.value[e.index]={type:"constant",numeric:!1,content:a};return b.pc+1}},Require:{compile:function(a){var b=a.getLino(),c=a.nextToken();
     52if(["css","js"].includes(c)){var d=a.getNextValue();a.addCommand({domain:"core",keyword:"require",lino:b,type:c,url:d});return!0}throw Error("File type must be 'css' or 'js'");},run:function(a){var b=a[a.pc];a.require(b.type,a.getValue(b.url),function(){a.run(b.pc+1)});return 0}},Return:{compile:function(a){var b=a.getLino();a.next();a.addCommand({domain:"core",keyword:"return",lino:b});return!0},run:function(a){return a.stack.pop()}},Run:{compile:function(a){var b=a.getLino(),c=a.getNextValue(),
     53d=[];if(a.tokenIs("with"))for(;;)if(a.nextIsSymbol(!0)){var e=a.getSymbolRecord();d.push(e.name);a.next();if(!a.tokenIs("and"))break}if(a.tokenIs("as")&&a.nextIsSymbol(!0)){var f=a.getSymbolRecord();a.next();if("module"!==f.keyword)throw Error("'"+f.name+"' is not a module");f=f.name}var g=!1;a.tokenIs("nowait")&&(a.next(),g=!0);e=a.getPc();a.addCommand({domain:"core",keyword:"run",lino:b,script:c,imports:d,module:f,nowait:g,then:0});a.tokenIs("then")&&(b=a.getPc(),a.addCommand({domain:"core",keyword:"goto",
     54goto:0}),a.getCommandAt(e).then=a.getPc(),a.next(),a.compileOne(!0),a.addCommand({domain:"core",keyword:"stop"}),a.getCommandAt(b).goto=a.getPc());return!0},run:function(a){a.nextPc=a.pc+1;a.runScript(a);return 0}},Sanitize:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getToken();a.next();a.addCommand({domain:"core",keyword:"sanitize",lino:b,name:c});return!0}return!1},run:function(a){var b=a[a.pc];a=a.getSymbolRecord(b.name);a=a.value[a.index];a.content=JSON.stringify(JSON.parse(a.content));
     55return b.pc+1}},Script:{compile:function(a){var b=a.getProgram();b.script=a.nextToken();if(EasyCoder.scripts[b.script])throw Error("Script '"+b.script+"' is already running.");EasyCoder.scripts[b.script]=b;a.next();return!0},run:function(a){return a[a.pc].pc+1}},Send:{compile:function(a){var b=a.getLino(),c="";a.nextTokenIs("to")||(c=a.getValue());if(a.tokenIs("to")){if(a.nextTokenIs("parent"))var d="parent";else if(a.isSymbol){d=a.getSymbolRecord();if("module"!==d.keyword)throw Error("'"+d.name+
     56"' is not a module");d=d.name}a.next();a.addCommand({domain:"core",keyword:"send",lino:b,message:c,recipient:d})}return!0},run:function(a){var b=a[a.pc],c=a.getValue(b.message);"parent"===b.recipient?a.parent&&(a=EasyCoder.scripts[a.parent],a.onMessage&&(a.message=c,a.run(a.onMessage))):(a=a.getSymbolRecord(b.recipient),a.program&&(a=EasyCoder.scripts[a.program],a.message=c,a.run(a.onMessage)));return b.pc+1}},Set:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();
     57if(!c.isValueHolder)return!1;if(a.nextTokenIs("to")){a.next();for(var d=[];;){a.mark();try{d.push(a.getValue())}catch(f){a.rewind();break}}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setArray",target:c.name,value:d});return!0}a.addCommand({domain:"core",keyword:"set",lino:b,request:"setBoolean",target:c.name});return!0}switch(a.getToken()){case "ready":return a.next(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setReady"}),!0;case "element":c=a.getNextValue();if(a.tokenIs("of")&&
     58a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&&a.nextTokenIs("to"))){var e=a.getNextValue();a.addCommand({domain:"core",keyword:"set",lino:b,request:"setElement",target:d.name,index:c,value:e});return!0}break;case "property":c=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),"variable"===d.keyword&&a.nextTokenIs("to")))return e=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setProperty",target:d.name,name:c,value:e}),!0;break;
     59case "arg":if(c=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&(d=a.getSymbolRecord(),a.nextTokenIs("to")))return e=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",lino:b,request:"setArg",target:d.name,name:c,value:e}),!0}a.tokenIs("the")&&a.next();switch(a.getToken()){case "elements":a.next();if(a.tokenIs("of")){a.next();if(!a.isSymbol())throw Error("Unknown variable '"+a.getToken()+"'");c=a.getToken();a.next();if(a.tokenIs("to"))return a.next(),d=a.getValue(),a.addCommand({domain:"core",
     60keyword:"set",lino:b,request:"setElements",symbol:c,value:d}),!0}break;case "encoding":if(a.nextTokenIs("to"))return c=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",request:"encoding",lino:b,encoding:c}),!0;a.addWarning("Unknown encoding option");break;case "payload":if(a.nextTokenIs("of")&&a.nextIsSymbol()&&(c=a.getSymbolRecord(),"callback"===c.keyword&&a.nextTokenIs("to")))return d=a.getNextValue(),a.addCommand({domain:"core",keyword:"set",request:"setPayload",lino:b,callback:c.name,
     61payload:d}),!0}return!1},run:function(a){var b=a[a.pc];switch(b.request){case "setBoolean":var c=a.getSymbolRecord(b.target);c.isValueHolder?(c.value[c.index]={type:"boolean",content:!0},b.numeric=!1):a.variableDoesNotHoldAValueError(b.lino,c.name);break;case "setReady":if(a=EasyCoder.scripts[a.parent])a.run(a.nextPc),a.nextPc=0;break;case "setArray":c=a.getSymbolRecord(b.target);c.elements=b.value.length;c.value=b.value;break;case "encoding":a.encoding=a.getValue(b.encoding);break;case "setElements":c=
     62a.getSymbolRecord(b.symbol);var d=c.elements;c.elements=a.getValue(b.value);c.index=0;if(c.elements>d)for(a=d;a<c.elements;a++)c.value.push({}),c.element.push({});else c.value=c.value.slice(0,c.elements),c.element=c.element.slice(0,c.elements);break;case "setElement":c=a.getSymbolRecord(b.target);d=a.getValue(b.index);var e=JSON.parse(a.getValue(c.value[c.index]));a=a.getValue(b.value);e[d]=JSON.parse(a);c.value[c.index].content=JSON.stringify(e);break;case "setProperty":c=a.getSymbolRecord(b.target);
     63(e=a.getValue(c.value[c.index]))||(e="{}");d="";try{d=JSON.parse(e)}catch(f){return a.runtimeError(b.lino,"Can't parse "+c.name),0}e=a.getValue(b.name);if(a=a.evaluate(b.value))a.content instanceof Array?d[e]=a.content:"boolean"===a.type?d[e]=a.content:a.numeric?d[e]=a.content:'{"'===a.content.substr(0,2)?d[e]=JSON.parse(a.content):d[e]=a.content.split('"').join('\\"'),c.value[c.index]={type:"constant",numeric:!1,content:JSON.stringify(d)};break;case "setPayload":a.getSymbolRecord(b.callback).payload=
     64a.getValue(b.payload);break;case "setArg":d=a.getValue(b.name),c=a.getSymbolRecord(b.target),c[d]=a.getValue(b.value)}return b.pc+1}},Sort:{compile:function(a){var b=a.getLino();if(a.nextIsSymbol()){var c=a.getSymbolRecord();if(a.nextTokenIs("with")){var d=a.nextToken();a.next();a.addCommand({domain:"core",keyword:"sort",lino:b,array:c.name,func:d});return!0}}return!1},run:function(a){var b=a[a.pc],c=a.getSymbolRecord(b.array),d=c.value[c.index].content,e=a.getSymbolRecord(b.func).pc;try{var f=JSON.parse(d);
     65f.sort(function(b,d){c.a=b;c.b=d;a.run(e);return c.v});c.value[c.index].content=JSON.stringify(f)}catch(g){a.runtimeError(b.lino,"Can't parse this array")}return b.pc+1}},Split:{compile:function(a){var b=a.getLino();item=a.getNextValue();var c="\n";a.tokenIs("on")&&(c=a.getNextValue());if(["giving","into"].includes(a.getToken())&&a.nextIsSymbol()){var d=a.getSymbolRecord();if("variable"===d.keyword)return a.next(),a.addCommand({domain:"core",keyword:"split",lino:b,item:item,on:c,target:d.name}),!0}return!1},
     66run:function(a){var b=a[a.pc],c=a.getValue(b.item),d=a.getValue(b.on);c=c.split(d);d=c.length;targetRecord=a.getSymbolRecord(b.target);targetRecord.elements=d;for(a=0;a<d;a++)targetRecord.value[a]={type:"constant",numeric:!1,content:c[a]};targetRecord.index=0;return b.pc+1}},Stop:{compile:function(a){var b=a.getLino();a.next();if(a.more()&&a.isSymbol()&&!a.getToken().endsWith(":")){var c=a.getSymbolRecord();return"module"===c.keyword?(a.next(),a.addCommand({domain:"core",keyword:"stop",lino:b,name:c.name}),
     67!0):!1}a.addCommand({domain:"core",keyword:"stop",lino:b,next:0});return!0},run:function(a){var b=a[a.pc];if(b.name)a=a.getSymbolRecord(b.name),EasyCoder.scripts[a.program].exit();else return 0;return b.pc+1}},Take:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue();if(a.tokenIs("from"))if(a.next(),a.isSymbol()){var d=a.getSymbol();if(a.getCommandAt(d.pc).isValueHolder){if("giving"===a.peek()){d=a.getValue();a.next();var e=a.getToken();a.next();a.addCommand({domain:"core",keyword:"take",
     68lino:b,value1:c,value2:d,target:e})}else d=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,target:d});return!0}a.warning("core 'take'': Expected value holder")}else{d=a.getValue();if(a.tokenIs("giving"))return a.next(),e=a.getToken(),a.next(),a.addCommand({domain:"core",keyword:"take",lino:b,value1:c,value2:d,target:e}),!0;a.warning("core 'take'': Expected \"giving\"")}return!1},run:function(a){var b=a[a.pc],c=b.value1,d=b.value2,e=a.getSymbolRecord(b.target);if(e.isValueHolder){var f=
     69e.value[e.index];d?(a=a.getValue(d)-a.getValue(c),e.value[e.index]={type:"constant",numeric:!0,content:a}):(!f.numeric&&isNaN(f.content)&&a.nonNumericValueError(b.lino),a=parseInt(a.getValue(f))-parseInt(a.getValue(c)),e.value[e.index]={type:"constant",numeric:!0,content:a})}else a.variableDoesNotHoldAValueError(b.lino,e.name);return b.pc+1}},Toggle:{compile:function(a){var b=a.getLino();a.next();if(a.isSymbol()){var c=a.getSymbolPc();a.next();a.addCommand({domain:"core",keyword:"toggle",lino:b,symbol:c});
     70return!0}return!1},run:function(a){var b=a[a.pc],c=a[b.symbol];if(c.isValueHolder){var d=a.domain[c.domain];a=d.value.get(a,c.value[c.index]).content;d.value.put(c,{type:"boolean",content:!a})}else a.variableDoesNotHoldAValueError(b.lino,c.name);return b.pc+1}},Variable:{compile:function(a){a.compileVariable("core","variable",!0);return!0},run:function(a){return a[a.pc].pc+1}},Wait:{compile:function(a){var b=a.getLino();a.next();var c=a.getValue(a),d=1E3;switch(a.getToken()){case "milli":case "millis":a.next();
     71d=1;break;case "tick":case "ticks":a.next();d=10;break;case "second":case "seconds":a.next();d=1E3;break;case "minute":case "minutes":a.next(),d=6E4}a.addCommand({domain:"core",keyword:"wait",lino:b,value:c,multiplier:d});return!0},run:function(a){var b=a[a.pc],c=a.getValue(b.value);setTimeout(function(){a.run&&a.run(b.pc+1)},c*b.multiplier);return 0}},While:{compile:function(a){var b=a.getLino();a.next();var c=a.getCondition(),d=a.getPc();a.addCommand({domain:"core",keyword:"while",lino:b,condition:c});
     72b=a.getPc();a.addCommand({domain:"core",keyword:"goto",goto:0});a.compileOne();a.addCommand({domain:"core",keyword:"goto",goto:d});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(a){switch(a){case "add":return EasyCoder_Core.Add;case "alias":return EasyCoder_Core.Alias;case "append":return EasyCoder_Core.Append;case "begin":return EasyCoder_Core.Begin;case "callback":return EasyCoder_Core.Callback;case "clear":return EasyCoder_Core.Clear;
     73case "close":return EasyCoder_Core.Close;case "debug":return EasyCoder_Core.Debug;case "decode":return EasyCoder_Core.Decode;case "divide":return EasyCoder_Core.Divide;case "dummy":return EasyCoder_Core.Dummy;case "encode":return EasyCoder_Core.Encode;case "end":return EasyCoder_Core.End;case "exit":return EasyCoder_Core.Exit;case "filter":return EasyCoder_Core.Filter;case "fork":return EasyCoder_Core.Fork;case "go":case "goto":return EasyCoder_Core.Go;case "gosub":return EasyCoder_Core.Gosub;case "if":return EasyCoder_Core.If;
     74case "import":return EasyCoder_Core.Import;case "index":return EasyCoder_Core.Index;case "load":return EasyCoder_Core.Load;case "module":return EasyCoder_Core.Module;case "multiply":return EasyCoder_Core.Multiply;case "negate":return EasyCoder_Core.Negate;case "on":return EasyCoder_Core.On;case "print":return EasyCoder_Core.Print;case "put":return EasyCoder_Core.Put;case "replace":return EasyCoder_Core.Replace;case "require":return EasyCoder_Core.Require;case "return":return EasyCoder_Core.Return;
     75case "run":return EasyCoder_Core.Run;case "sanitize":return EasyCoder_Core.Sanitize;case "script":return EasyCoder_Core.Script;case "send":return EasyCoder_Core.Send;case "set":return EasyCoder_Core.Set;case "sort":return EasyCoder_Core.Sort;case "split":return EasyCoder_Core.Split;case "stop":return EasyCoder_Core.Stop;case "take":return EasyCoder_Core.Take;case "toggle":return EasyCoder_Core.Toggle;case "variable":return EasyCoder_Core.Variable;case "wait":return EasyCoder_Core.Wait;case "while":return EasyCoder_Core.While;
     76default:return!1}},run:function(a){var b=a[a.pc],c=EasyCoder_Core.getHandler(b.keyword);c||a.runtimeError(b.lino,"Unknown keyword '"+b.keyword+"' in 'core' package");return c.run(a)},isNegate:function(a){return"not"===a.getToken()?(a.next(),!0):!1},value:{compile:function(a){if(a.isSymbol()){var b=a.getToken();switch(a.getSymbolRecord().keyword){case "module":return a.next(),{domain:"core",type:"module",name:b};case "variable":var c=a.nextToken();return["format","modulo"].includes(c)?(a=a.getNextValue(),
     77{domain:"core",type:c,name:b,value:a}):{domain:"core",type:"symbol",name:b}}return null}b=a.getToken();if("true"===b)return a.next(),{domain:"core",type:"boolean",content:!0};if("false"===b)return a.next(),{domain:"core",type:"boolean",content:!1};if("random"===b)return a.next(),{domain:"core",type:"random",range:a.getValue()};if("cos"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"cos",angle_c:b,radius_c:a};if("sin"===b)return a.next(),b=a.getValue(),a.skip("radius"),
     78a=a.getValue(),{domain:"core",type:"sin",angle_s:b,radius_s:a};if("tan"===b)return a.next(),b=a.getValue(),a.skip("radius"),a=a.getValue(),{domain:"core",type:"tan",angle_t:b,radius_t:a};if(["now","today","newline","break","empty"].includes(b))return a.next(),{domain:"core",type:b};if("date"===b)return{domain:"core",type:"date",value:a.getNextValue()};if(["encode","decode","lowercase","hash"].includes(b))return a.next(),a=a.getValue(),{domain:"core",type:b,value:a};if("element"===b)return b=a.getNextValue(),
     79a.tokenIs("of")&&a.nextIsSymbol()&&(c=a.getSymbolRecord(),a.next(),"variable"===c.keyword)?{domain:"core",type:"element",element:b,symbol:c.name}:null;if("property"===b)return b=a.getNextValue(),a.tokenIs("of")&&a.nextIsSymbol()&&(c=a.getSymbolRecord(),a.next(),"variable"===c.keyword)?{domain:"core",type:"property",property:b,symbol:c.name}:null;if("arg"===b){var d=a.getNextValue();if(a.tokenIs("of")&&a.nextIsSymbol())return b=a.getSymbolRecord(),a.next(),{domain:"core",type:"arg",value:d,target:b.name}}if(["character",
     80"char"].includes(b)&&(b=a.getNextValue(),a.tokenIs("of")))return a=a.getNextValue(),{domain:"core",type:"char",index:b,value:a};a.tokenIs("the")&&a.next();b=a.getToken();switch(b){case "elements":if(a.nextTokenIs("of")&&a.nextIsSymbol())return c=a.getToken(),a.next(),{domain:"core",type:b,name:c};break;case "index":if(a.nextTokenIs("of")){if(a.nextIsSymbol()){if("in"===a.peek())return b=a.getValue(),a=a.getNextValue(),{domain:"core",type:"indexOf",value1:b,value2:a};c=a.getToken();a.next();return{domain:"core",
     81type:b,name:c}}b=a.getValue();if(a.tokenIs("in"))return a=a.getNextValue(),{domain:"core",type:"indexOf",value1:b,value2:a}}break;case "value":if(a.nextTokenIs("of"))return a.next(),{domain:"core",type:"valueOf",value:a.getValue()};break;case "length":if(a.nextTokenIs("of"))return a.next(),{domain:"core",type:"lengthOf",value:a.getValue()};break;case "left":case "right":try{if(c=a.getNextValue(),a.tokenIs("of")){var e=a.getNextValue();return{domain:"core",type:b,count:c,value:e}}}catch(f){}break;
     82case "from":c=a.getNextValue();e=a.tokenIs("to")?a.getNextValue():null;if(a.tokenIs("of"))return a=a.getNextValue(),{domain:"core",type:b,from:c,to:e,value:a};break;case "position":b=!1;a.nextTokenIs("nocase")&&(b=!0,a.next());if(a.tokenIs("of")&&(c=!1,a.nextTokenIs("the")&&a.nextTokenIs("last")&&(a.next(),c=!0),e=a.getValue(),a.tokenIs("in")))return a=a.getNextValue(),{domain:"core",type:"position",needle:e,haystack:a,last:c,nocase:b};break;case "payload":if(a.nextTokenIs("of")&&a.nextIsSymbol()&&
     83(b=a.getSymbolRecord(),"callback"===b.keyword))return a.next(),{domain:"core",type:"payload",callback:b.name};break;case "message":case "error":return a.next(),{domain:"core",type:b}}return null},get:function(a,b){switch(b.type){case "boolean":return{type:"boolean",numeric:!1,content:b.content};case "elements":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).elements};case "index":return{type:"constant",numeric:!0,content:a.getSymbolRecord(b.name).index};case "random":return a=
     84a.evaluate(b.range),{type:"constant",numeric:!0,content:Math.floor(Math.random()*a.content)};case "cos":var c=a.getValue(b.angle_c);a=a.getValue(b.radius_c);return{type:"constant",numeric:!0,content:parseInt(Math.cos(.01745329*parseFloat(c))*a,10)};case "sin":return c=a.getValue(b.angle_s),a=a.getValue(b.radius_s),{type:"constant",numeric:!0,content:parseInt(Math.sin(.01745329*parseFloat(c))*a,10)};case "tan":return c=a.getValue(b.angle_t),a=a.getValue(b.radius_t),{type:"constant",numeric:!0,content:parseInt(Math.tan(.01745329*
     85parseFloat(c))*a,10)};case "valueOf":return a=parseInt(a.getValue(b.value)),{type:"constant",numeric:!0,content:a?a:0};case "lengthOf":return{type:"constant",numeric:!0,content:a.getValue(b.value).length};case "left":return{type:"constant",numeric:!1,content:a.getValue(b.value).substr(0,a.getValue(b.count))};case "right":return c=a.getValue(b.value),{type:"constant",numeric:!1,content:c.substr(c.length-a.getValue(b.count))};case "from":c=a.getValue(b.from);var d=b.to?a.getValue(b.to):null;a=a.getValue(b.value);
     86return{type:"constant",numeric:!1,content:d?a.substr(c,d):a.substr(c)};case "position":return c=a.getValue(b.needle),a=a.getValue(b.haystack),b.nocase&&(c=c.toLowerCase(),a=a.toLowerCase()),{type:"constant",numeric:!0,content:b.last?a.lastIndexOf(c):a.indexOf(c)};case "payload":return{type:"constant",numeric:!1,content:a.getSymbolRecord(b.callback).payload};case "modulo":return c=a.getSymbolRecord(b.name),a=a.evaluate(b.value),{type:"constant",numeric:!0,content:c.value[c.index].content%a.content};
     87case "format":c=a.getSymbolRecord(b.name);c=1E3*a.getValue(c.value[c.index]);try{switch(d=JSON.parse(a.getValue(b.value)),d.mode){case "time":return{type:"constant",numeric:!0,content:(new Date(c)).toLocaleTimeString(d.locale,d.options)};default:var e=new Date(c);return{type:"constant",numeric:!0,content:"iso"===d.format?e.getFullYear()+"-"+(e.getMonth()+1)+"-"+e.getDate():e.toLocaleDateString(d.locale,d.options)}}}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse "+b.value);break}case "empty":return{type:"constant",
     88numeric:!1,content:""};case "now":return{type:"constant",numeric:!0,content:Math.floor(Date.now()/1E3)};case "today":return a=new Date,a.setHours(0,0,0,0),{type:"constant",numeric:!0,content:Math.floor(a.getTime()/1E3)};case "date":c=Date.parse(a.getValue(b.value))/1E3;if(isNaN(c)){a.runtimeError(a[a.pc].lino,"Invalid date format; expecting 'yyyy-mm-dd'");break}return{type:"constant",numeric:!0,content:c};case "newline":return{type:"constant",numeric:!1,content:"\n"};case "break":return{type:"constant",
     89numeric:!1,content:"<br />"};case "encode":return{type:"constant",numeric:!1,content:a.encode(a.getValue(b.value))};case "decode":return{type:"constant",numeric:!1,content:a.decode(a.getValue(b.value))};case "lowercase":return{type:"constant",numeric:!1,content:a.getValue(b.value).toLowerCase()};case "hash":a=a.getValue(b.value);b=0;if(0===a.length)return b;for(c=0;c<a.length;c++)d=a.charCodeAt(c),b=(b<<5)-b+d;return{type:"constant",numeric:!0,content:b};case "element":c=a.getValue(b.element);b=a.getSymbolRecord(b.symbol);
     90d="";try{d=JSON.parse(a.getValue(b.value[b.index]))[c]}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse JSON");break}return{type:"constant",numeric:!1,content:"object"===typeof d?JSON.stringify(d):d};case "property":d=a.getValue(b.property);b=a.getSymbolRecord(b.symbol);a=a.getValue(b.value[b.index]);c="";if(d&&a)if("object"===typeof a)c=a[d];else if("{"===a.charAt(0))try{c=JSON.parse(a)[d]}catch(f){console.log("Can't parse '"+a+"': "+f.message)}return{type:"constant",numeric:!isNaN(c),content:"object"===
     91typeof c?JSON.stringify(c):c};case "module":return{type:"boolean",numeric:!1,content:a.getSymbolRecord(b.name).program};case "message":return c=a.message,{type:"constant",numeric:!1,content:c};case "error":return c=a.errorMessage,{type:"constant",numeric:!1,content:c};case "indexOf":d=a.getValue(b.value1);b=a.getValue(b.value2);try{return c=JSON.parse(b).indexOf(d),{type:"constant",numeric:!0,content:c}}catch(f){a.runtimeError(a[a.pc].lino,"Can't parse "+b)}break;case "arg":return c=a.getValue(b.value),
     92c=a.getSymbolRecord(b.target)[c],{type:"constant",numeric:!isNaN(c),content:c};case "char":return c=a.getValue(b.index),{type:"constant",numeric:!1,content:a.getValue(b.value)[c]}}return null},put:function(a,b){a.value[a.index]=b}},condition:{compile:function(a){if(a.isSymbol()){var b=a.getSymbolRecord();if("module"===b.keyword){if(a.nextTokenIs("is")){var c=!0;a.nextTokenIs("not")&&(a.next(),c=!1);if(a.tokenIs("running"))return a.next(),{domain:"core",type:"moduleRunning",name:b.name,sense:c}}return null}}if(a.tokenIs("not"))return{domain:"core",
     93type:"not",value:a.getNextValue()};try{c=a.getValue();var d=a.getToken();if("includes"===d){var e=a.getNextValue();return{domain:"core",type:"includes",value1:c,value2:e}}if("is"===d){a.next();var f=EasyCoder_Core.isNegate(a);switch(a.getToken()){case "numeric":return a.next(),{domain:"core",type:"numeric",value1:c,negate:f};case "even":return a.next(),{domain:"core",type:"even",value1:c};case "odd":return a.next(),{domain:"core",type:"odd",value1:c};case "greater":a.next();if(a.tokenIs("than")){a.next();
     94var g=a.getValue();return{domain:"core",type:"greater",value1:c,value2:g,negate:f}}break;case "less":a.next();if(a.tokenIs("than")){a.next();var k=a.getValue();return{domain:"core",type:"less",value1:c,value2:k,negate:f}}break;default:var h=a.getValue();return{domain:"core",type:"is",value1:c,value2:h,negate:f}}}else if(c)return{domain:"core",type:"boolean",value:c}}catch(l){return a.warning("Can't get a value"),0}return null},test:function(a,b){switch(b.type){case "boolean":return a.getValue(b.value);
     95case "numeric":var c=a.getValue(b.value1);c=" "===c||isNaN(c);return b.negate?c:!c;case "even":return 0===a.getValue(b.value1)%2;case "odd":return 1===a.getValue(b.value1)%2;case "is":return c=a.compare(a,b.value1,b.value2),b.negate?0!==c:0===c;case "greater":return c=a.compare(a,b.value1,b.value2),b.negate?0>=c:0<c;case "less":return c=a.compare(a,b.value1,b.value2),b.negate?0<=c:0>c;case "not":return!a.getValue(b.value);case "moduleRunning":return c=a.getSymbolRecord(b.name).program,b.sense?c:!c;
     96case "includes":return c=JSON.parse(a.getValue(b.value1)),b=a.getValue(b.value2),c.includes(b)}return!1}}},EasyCoder={name:"EasyCoder_Main",domain:{core:EasyCoder_Core},runtimeError:function(a,b){this.lino=a;this.reportError({message:"Line "+(0<=a?a:"")+": "+b},this.program);this.program.aborted=!0},nonNumericValueError:function(a){this.runtimeError(a,"Non-numeric value")},variableDoesNotHoldAValueError:function(a,b){this.runtimeError(a,"Variable '"+b+"' does not hold a value")},reportError:function(a,
     97b,c){if(a.message)if(this.compiling||b){c=c?c:b.source;var d=c.tokens;c=c.scriptLines;d=this.compiling?d[EasyCoder_Compiler.getIndex()].lino:b[b.pc].lino;b=this.compiling?"Compile error":"Runtime error in '"+b.script+"'";b+=":\n";var e=d-5;for(e=0>e?0:e;e<d;e++){var f=(""+(e+1)).padStart(4," ");b+=f+" "+c[e].line.split("\\s").join(" ")+"\n"}b+=a.message+"\n";a=EasyCoder_Compiler.getWarnings();if(a.length)for(b+="Warnings:\n",a=$jscomp.makeIterator(a),c=a.next();!c.done;c=a.next())b+=c.value+"\n";
     98console.log(b);alert(b)}else a="Error: "+a.message,alert(a),console.log(a);else console.log("An error occurred - origin was "+a.path[0])},getSymbolRecord:function(a){a=this[this.symbols[a].pc];return a.alias?this.getSymbolRecord(a.alias):a.exporter?EasyCoder.scripts[a.exporter].getSymbolRecord(a.exportedName):a},verifySymbol:function(a){return this.symbols.hasOwnProperty(a)},encode:function(a){return EasyCoder_Value.encode(a,this.encoding)},decode:function(a){return EasyCoder_Value.decode(a,this.encoding)},
     99evaluate:function(a){return EasyCoder_Value.evaluate(this,a)},getValue:function(a){return EasyCoder_Value.getValue(this,a)},getFormattedValue:function(a){a=EasyCoder_Value.evaluate(this,a);if(a.numeric)return a.content;if("boolean"===a.type)return a.content?"true":"false";if("undefined"!==typeof a.content&&2<=a.content.length&&('{"'===a.content.substr(0,2)||"["===a.content[0]))try{var b=JSON.parse(a.content);return JSON.stringify(b,null,2)}catch(c){return this.reportError(c),"{}"}return a.content},
     100getSimpleValue:function(a){return!0===a||!1===a?{type:"boolean",content:a}:{type:"constant",numeric:Number.isInteger(a),content:a}},run:function(a){a&&(this.program=this,EasyCoder_Run.run(this,a))},exit:function(){EasyCoder_Run.exit(this)},register:function(a){$jscomp$this.program=a},require:function(a,b,c){var d=document.createElement("css"===a?"link":"script");switch(a){case "css":d.type="text/css";d.href=b;d.rel="stylesheet";break;case "js":d.type="text/javascript";d.src=b;break;default:return}d.onload=
     101function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Library "+b+" loaded");c()};document.head.appendChild(d)},isUndefined:function(a){return"undefined"===typeof a},runScript:function(a){var b=a[a.pc],c=a.getValue(b.script),d=b.imports;d.caller=a.script;var e=b.module?a.getSymbolRecord(b.module):null;try{EasyCoder.tokeniseAndCompile(c.split("\n"),d,e,this.script,b.then)}catch(f){EasyCoder.reportError(f,a,a.source);a.onError?a.run(a.onError):(a=a.parent)&&a.onError&&a.run(a.onError);return}b.nowait&&
     102EasyCoder.run(a.nextPc)},close:function(){},compileScript:function(a,b,c,d){var e=a.tokens;this.compiling=!0;var f=EasyCoder_Compiler;this.compiler=f;f.value=EasyCoder_Value;f.condition=EasyCoder_Condition;f.domain=this.domain;f.imports=b;b=EasyCoder_Compiler.compile(e);this.compiling=!1;b.EasyCoder=this;b.value=EasyCoder_Value;b.condition=EasyCoder_Condition;b.compare=EasyCoder_Compare;b.source=a;b.run=this.run;b.exit=this.exit;b.runScript=this.runScript;b.evaluate=this.evaluate;b.getValue=this.getValue;
     103b.getFormattedValue=this.getFormattedValue;b.getSimpleValue=this.getSimpleValue;b.encode=this.encode;b.decode=this.decode;b.domain=this.domain;b.require=this.require;b.isUndefined=this.isUndefined;b.checkPlugin=this.checkPlugin;b.getPlugin=this.getPlugin;b.addLocalPlugin=this.addLocalPlugin;b.getPluginsPath=this.getPluginsPath;b.getSymbolRecord=this.getSymbolRecord;b.verifySymbol=this.verifySymbol;b.runtimeError=this.runtimeError;b.nonNumericValueError=this.nonNumericValueError;b.variableDoesNotHoldAValueError=
     104this.variableDoesNotHoldAValueError;b.reportError=this.reportError;b.register=this.register;b.symbols=f.getSymbols();b.encoding="ec";b.popups=[];b.stack=[];b.queue=[0];b.module=c;b.parent=d;c&&(c.program=b.script);return b},tokeniseFile:function(a){var b=[],c=[],d=0;a.forEach(function(a,f){b.push({lino:f+1,line:a});for(var e=a.length,k="",h=!0,l=0;l<e;l++){var n=a[l];if(0==n.trim().length)h||(c.push({index:d,lino:f+1,token:k}),d++,k="",h=!0);else if(h=!1,"`"===n){for(m=l;++l<a.length&&"`"!==a[l];);
     105k=a.substr(m,l-m+1)}else if("!"==n)break;else k+=n}0<k.length&&c.push({index:d,lino:f+1,token:k})});return{scriptLines:b,tokens:c}},tokeniseAndCompile:function(a,b,c,d,e){var f=null,g=Date.now();a=this.tokeniseFile(a);try{f=this.compileScript(a,b,c,d);this.scriptIndex++;f.script||(f.script=this.scriptIndex);var k=Date.now();console.log(k-this.timestamp+" ms: Compiled "+(f.script+": "+a.scriptLines.length+" lines ("+a.tokens.length+" tokens) in ")+(k-g+" ms"))}catch(h){"stop"!==h.message&&(this.reportError(h,
     106d,a),d&&d.onError&&d.run(d.onError))}f&&(EasyCoder.scripts[f.script]=f,c&&(c.program=f.script),f.afterExit=e,f.running=!0,EasyCoder_Run.run(f,0))},tokenise:function(a){var b=a.split("\n");if(!this.tokenising){try{this.tokeniseAndCompile(b)}catch(c){this.reportError(c,null,a)}this.tokenising=!0}},setPluginCount:function(a){EasyCoder.plugins=[];EasyCoder.pluginCount=a},checkPlugin:function(a){return EasyCoder.domain[a]},getPlugin:function(a,b,c){EasyCoder.domain[a]?c():(a=document.createElement("script"),
     107a.type="text/javascript",a.src=b+"?ver="+EasyCoder.version,a.onload=function(){console.log(Date.now()-EasyCoder.timestamp+" ms: Plugin "+b+" loaded");c()},document.head.appendChild(a))},addGlobalPlugin:function(a,b){EasyCoder.plugins.push({name:a,handler:b});EasyCoder.plugins.length===EasyCoder.pluginCount&&(EasyCoder.plugins.forEach(function(a){EasyCoder.domain[a.name]=a.handler}),EasyCoder.tokenise(EasyCoder.source))},addLocalPlugin:function(a,b,c){EasyCoder.domain[a]=b;c()},getPluginsPath:function(){return EasyCoder.pluginsPath},
     108loadPluginJs:function(a){var b=this;console.log(Date.now()-this.timestamp+" ms: Load "+a+"/easycoder/plugins.js");var c=document.createElement("script");c.src=""+window.location.origin+a+"/easycoder/plugins.js?ver="+this.version;c.type="text/javascript";c.onload=function(){EasyCoder_Plugins.getGlobalPlugins(b.timestamp,a,b.setPluginCount,b.getPlugin,b.addGlobalPlugin)};c.onerror=function(){a?b.loadPluginJs(a.slice(0,a.lastIndexOf("/"))):b.reportError({message:"Can't load plugins.js"},b.program,b.source)};
     109document.head.appendChild(c);this.pluginsPath=a},start:function(a){this.source=a;this.scriptIndex=0;a=window.location.pathname;a=a.endsWith("/")?a.slice(0,-1):"";"undefined"===typeof EasyCoder_Plugins?this.loadPluginJs(a):(this.pluginsPath=a,EasyCoder_Plugins.getGlobalPlugins(this.timestamp,a,this.setPluginCount,this.getPlugin,this.addGlobalPlugin))}},EasyCoder_Run={name:"EasyCoder_Run",run:function(a,b){var c=[],d=function(a){var b=9999;a.forEach(function(a){a=a.line;for(var c=0;c<a.length&&" "===
     110a[c];)c++;0<c&&c<b&&(b=c)});return 0};if(c.length)c.push(b);else for(a.register(a),c.push(b);0<c.length;)for(a.pc=c.shift(),a.watchdog=0,b={};a.running;){if(1E6<a.watchdog){a.lino=a[a.pc].lino;a.reportError(Error("Program runaway intercepted.\nHave you forgotten to increment a loop counter?",a),a);break}a.watchdog++;var e=a[a.pc].domain;a.debugStep&&console.log(a.script+": Line "+a[a.pc].lino+": PC: "+a.pc+" "+e+":"+a[a.pc].keyword);var f=a.domain[e];if(!f){a.runtimeError(a[a.pc].lino,"Unknown domain '"+
     111e+"'");break}a.pc=f.run(a);if(!a.pc)break;if(a.stop){a.tracing=!1;break}if(a.tracing){e=a[a.pc];f=a.source.scriptLines;var g=d(f),k=document.getElementById("easycoder-tracer");if(!k){a.runtimeError(e.lino,"Element 'easycoder-tracer' was not found");return}k.style.display="block";k.style.visibility="visible";var h="";if(a.tracer){if(k=document.getElementById("easycoder-tracer-content")){a.tracer.variables.forEach(function(b,c,d){var e=a.getSymbolRecord(b);if(1<e.elements)for(h+=b+": "+e.index+"/"+
     112e.elements+": ",b=0;b<e.elements;b++){var f=e.value[b];h=f?h+(f.content+" "):h+"undefined "}else h=(e=e.value[e.index])?h+(b+": "+e.content):h+(b+": undefined");switch(a.tracer.alignment){case "horizontal":c<d.length-1&&(h+=", ");break;case "vertical":h+="<br>"}});h+="<hr>";for(var l="",n=5;0<n;n--){if(e.lino){var q=f[e.lino-n].line.substr(g);l+='<input type="text" name="'+n+'"value="'+(e.lino-n+1+": "+q.split("\\s").join(" ")+'"style="width:100%;border:none;enabled:false">')}l+="<br>"}k.innerHTML=
     113h+" "+l;k.style.display="block";b.$jscomp$loop$prop$run$66=document.getElementById("easycoder-run-button");b.$jscomp$loop$prop$step$67=document.getElementById("easycoder-step-button");b.$jscomp$loop$prop$run$66.onclick=function(b){return function(){b.$jscomp$loop$prop$run$66.blur();a.tracing=!1;document.getElementById("easycoder-tracer-content").style.display="none";try{EasyCoder_Run.run(a,a.resume)}catch(p){var c="Error in run handler: "+p.message;console.log(c);alert(c)}}}(b);b.$jscomp$loop$prop$step$67.onclick=
     114function(b){return function(){console.log("step");b.$jscomp$loop$prop$step$67.blur();a.tracing=!0;document.getElementById("easycoder-tracer-content").style.display="block";try{a.run(a.resume)}catch(p){var c="Error in step handler: "+p.message;console.log(c);alert(c)}}}(b)}a.resume=a.pc;a.pc=0}break}b={$jscomp$loop$prop$run$66:b.$jscomp$loop$prop$run$66,$jscomp$loop$prop$step$67:b.$jscomp$loop$prop$step$67}}},exit:function(a){a.onExit&&a.run(a.onExit);var b=a.parent,c=a.afterExit;delete EasyCoder.scripts[a.script];
     115a.module&&delete a.module.program;Object.keys(a).forEach(function(b){delete a[b]});b&&c&&EasyCoder.scripts[b].run(c)}},EasyCoder_Value={name:"EasyCoder_Value",getItem:function(a){var b=a.getToken();if(!b)return null;if("true"===b)return a.next(),{type:"boolean",content:!0};if("false"===b)return a.next(),{type:"boolean",content:!1};if("`"===b.charAt(0))return a.next(),{type:"constant",numeric:!1,content:b.substring(1,b.length-1)};if(b.charAt(0).match(/[0-9-]/)){var c=eval(b);if(Number.isInteger(c))return a.next(),
     116{type:"constant",numeric:!0,content:c};throw Error("'"+b+"' is not an integer");}b=a.getIndex();c=$jscomp.makeIterator(Object.keys(a.domain));for(var d=c.next();!d.done;d=c.next())if(d=d.value,a.rewindTo(b),d=a.domain[d].value.compile(a))return d;return null},compile:function(a){var b=a.getToken(),c=EasyCoder_Value.getItem(a);if(!c)throw Error("Undefined value: '"+b+"'");if("cat"===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},
     117doValue:function(a,b){if("undefined"===typeof b.type)return a.runtimeError(a[a.pc].lino,"Undefined value (variable not initialized?)"),null;switch(b.type){case "cat":return{type:"constant",numeric:!1,content:b.parts.reduce(function(b,c){return b+EasyCoder_Value.doValue(a,c).content},"")};case "boolean":case "constant":return b;case "symbol":var c=a.getSymbolRecord(b.name);if(c.isValueHolder){if(b=c.value[c.index]){c=b.content;if(null===c||"undefined"===typeof c)b.content=b.numeric?0:"";return b}return null}return a.domain[c.domain].value.get(a,
     118b)}return a.domain[b.domain].value.get(a,b)},constant:function(a,b){return{type:"constant",numeric:b,content:a}},evaluate:function(a,b){if(!b)return{type:"constant",numeric:!1,content:""};var c=EasyCoder_Value.doValue(a,b);if(c)return c;a.runtimeError(a[a.pc].lino,"Can't decode value: "+b)},getValue:function(a,b){return EasyCoder_Value.evaluate(a,b).content},encode:function(a,b){if(a)switch(b){case "ec":return a.replace(/'/g,"~sq~").replace(/"/g,"~dq~").replace(/\n/g,"%0a").replace(/\r/g,"%0d");case "url":return encodeURIComponent(a.replace(/\s/g,
     119"+"));case "sanitize":return a.normalize("NFD").replace(/[\u0300-\u036f]/g,"")}return a},decode:function(a,b){if(a)switch(b){case "ec":return a.replace(/~dq~/g,'"').replace(/~sq~/g,"'").replace(/%0a/g,"\n").replace(/%0d/g,"\r");case "url":return decodeURIComponent(a).replace(/\+/g," ")}return a}};EasyCoder.version="2.5.6";EasyCoder.timestamp=Date.now();console.log("EasyCoder loaded; waiting for page");
    120120function EasyCoder_Startup(){console.log(Date.now()-EasyCoder.timestamp+" ms: Page loaded; reset timer & start EasyCoder");EasyCoder.timestamp=Date.now();EasyCoder.scripts={};window.EasyCoder=EasyCoder;var a=document.getElementById("easycoder-script");if(a){a.style.display="none";try{EasyCoder.start(a.innerText)}catch(b){EasyCoder.reportError(b)}}}window.onload=EasyCoder_Startup;
  • easycoder/trunk/easycoder.js

    r2210817 r2212168  
    960960
    961961        run: program => {
     962            let parent = EasyCoder.scripts[program.parent];
    962963            program.exit();
     964            if (parent) {
     965                parent.run(parent.nextPc);
     966                parent.nextPc = 0;
     967            }
    963968            return 0;
    964969        }
     
    42494254    }
    42504255};
    4251 EasyCoder.version = `2.5.5`;
     4256EasyCoder.version = `2.5.6`;
    42524257EasyCoder.timestamp = Date.now();
    42534258console.log(`EasyCoder loaded; waiting for page`);
  • easycoder/trunk/easycoder.php

    r2210817 r2212168  
    44  * Plugin URI: https://easycoder.software
    55  * 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: 2.5.5
     6  * Version: 2.5.6
    77  * Author: EasyCoder Software
    88  * Author URI: https://easycoder.software
     
    1717  function easycoder_enqueue_script() {   
    1818    wp_enqueue_script('easycoder_script', plugin_dir_url( __FILE__ )
    19             . 'easycoder-min.js', array(), '2.5.5');
     19            . 'easycoder-min.js', array(), '2.5.6');
    2020  }
    2121 
  • easycoder/trunk/plugins/rest.js

    r2208785 r2212168  
    135135                        targetRecord.used = true;
    136136                    }
     137                    program.run(command.pc + 1);
    137138                } else {
    138139                    const error = `${request.status} ${request.statusText}`;
     
    144145                    }
    145146                }
    146                 program.run(command.pc + 1);
    147147            };
    148148
  • easycoder/trunk/readme.txt

    r2210817 r2212168  
    5454
    5555== Changelog ==
     56
     57= 2.5.6 14-dec-2019 =
     58* Fix bug in REST handling errors
    5659
    5760= 2.5.5 12-dec-2019 =
Note: See TracChangeset for help on using the changeset viewer.