Plugin Directory

Changeset 1955044


Ignore:
Timestamp:
10/11/2018 10:30:08 AM (7 years ago)
Author:
gtanyware
Message:

Updates for versionn 1.5.3

Location:
easycoder/trunk
Files:
4 edited

Legend:

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

    r1952358 r1955044  
    2222b=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",
    2323content: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+
     241}},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+
    25251}},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=
    2626b.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}},
    2727Index:{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=
     28b.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=
    3030b.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=
     31b.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+
     321}},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);
     33l.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",
     34lino: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();
     35if(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();
     37if(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,
     38value2: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=
     39a.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+
     401}},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=
     41a.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;
     42case "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;
     43case "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();
     44return 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};
     45if("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();
     46b=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(),
     47a.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(),
     48a=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*
     49parseFloat(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};
     50case "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))};
     51case "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,
     53negate: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();
     55if(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",
     56numeric:"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(),
     57d=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=
     58a.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);
     59switch(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=
     60f.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",
     61keyword:"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(),
     63a.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(),
     64a.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);
     65f.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+
     671}},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}},
     68SELECT:{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(),
     69a.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"===
     70c){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",
     71symbolName: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);
     72c=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=
     73f;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);
     75var 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=
     76a.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;
     78case "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=
     79a.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=
     80a.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"!==
     81typeof 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),
     82b=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(":"),
     83a.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"===
     85c.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'");
     86return!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"===
     87typeof 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]));
     88for(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,
     89request:"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;
     90case "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=
     91a.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,
     92symbol: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+
     931}},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;
     94case "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,
     96index: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=
     97c.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},
     98run: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,
     99b.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",
     100parseInt(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)-
     101parseInt(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",
     102keyword:"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),
     103h.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");
     104return!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=
    102105a.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;
    103106case "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")&&
     
    106109getIndex: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>=
    107110a.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;
     111getProgram: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();
     112var 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;
    110113b.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([]);
    111114b.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 '"+
     115b){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 '"+
    113116a+"'");},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: "+
    114117a);},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");
    115118},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,
     119a.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?
     120g.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();
     121console.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=
     122void 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++;
     1230<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");
     124switch(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();
     125a.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=
     126g},{}],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=
     127a.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;
     129if("{"===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"===
     130a.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,
    128131b)},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},{}]},
    129132{},[1]);
  • easycoder/trunk/easycoder.js

    r1952358 r1955044  
    518518      const command = program[program.pc];
    519519      try {
    520         program.run(program, program.symbols[command.label].pc);
     520        program.run(program.symbols[command.label].pc);
    521521      } catch (err) {
    522522        console.log(err.message);
     
    881881  },
    882882
     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
    883932  Return: {
    884933
     
    9811030            domain: 'basic',
    9821031            keyword: 'set',
    983             type: 'set',
     1032            type: 'encoding',
    9841033            lino,
    9851034            encoding
     
    12421291      const value = program.getValue(command.value);
    12431292      setTimeout(function () {
    1244         program.run(program, command.pc + 1);
     1293        program.run(command.pc + 1);
    12451294      }, value * command.multiplier);
    12461295      return 0;
     
    13341383      case 'put':
    13351384        return EasyCoder_Basic.Put;
     1385      case 'replace':
     1386        return EasyCoder_Basic.Replace;
    13361387      case 'return':
    13371388        return EasyCoder_Basic.Return;
     
    21802231    compile: compiler => {
    21812232      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      }
    21842239      const location = compiler.getValue();
    21852240      compiler.addCommand({
     
    21872242        keyword: 'location',
    21882243        lino,
    2189         location
     2244        location,
     2245        newWindow
    21902246      });
    21912247      return true;
     
    21942250    run: program => {
    21952251      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      }
    21972257      return command.pc + 1;
    21982258    }
     
    22422302            return true;
    22432303          }
     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;
    22442332      }
    22452333      compiler.addWarning('Unrecognised syntax in \'on\'');
     
    22492337    run: program => {
    22502338      const command = program[program.pc];
    2251       const targetItem = program.getSymbolRecord(command.symbol);
    22522339      switch (command.action) {
    22532340        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;
    22562344            if (cssId) {
    22572345              const target = document.getElementById(cssId);
     
    22592347              target.addEventListener("change", function () {
    22602348                try {
    2261                   program.run(program, target.targetPc);
     2349                  program.run(target.targetPc);
    22622350                } catch (err) {
    22632351                  console.log(err.message);
     
    22702358          break;
    22712359        case 'click':
    2272           targetItem.value.forEach(function (value, index) {
     2360          const clickItem = program.getSymbolRecord(command.symbol);
     2361          clickItem.value.forEach(function (value, index) {
    22732362            const cssId = value.content;
    22742363            if (cssId) {
     
    22792368                const eventTarget = event.target;
    22802369                eventTarget.blur();
    2281                 targetItem.index = eventTarget.targetIndex;
     2370                clickItem.index = eventTarget.targetIndex;
    22822371                try {
    22832372                  setTimeout(function () {
    2284                     program.run(program, eventTarget.targetPc);
     2373                    program.run(eventTarget.targetPc);
    22852374                  }, 1);
    22862375                } catch (err) {
     
    22922381            }
    22932382          });
     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          };
    22942397          break;
    22952398        default:
     
    24382541          token = compiler.getToken();
    24392542        }
    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') {
    24412555          compiler.next();
    24422556          if (compiler.tokenIs('of')) {
     
    26312745          styles[command.styleName.content] = styleValue.content;
    26322746          Object.assign(styleTarget.style, styles);
     2747          break;
     2748        case 'setTitle':
     2749          document.title = program.getValue(command.value);
    26332750          break;
    26342751        default:
     
    28973014          }
    28983015        }
     3016        return null;
     3017      }
     3018      if (token == 'key') {
     3019        compiler.next();
     3020        return {
     3021          domain: 'browser',
     3022          type: 'key'
     3023        };
    28993024      }
    29003025      return null;
     
    29743099          };
    29753100          break;
     3101        case 'key':
     3102          return {
     3103            type: 'constant',
     3104            numeric: false,
     3105            content: program.key
     3106          };
     3107          break;
    29763108      }
    29773109    }
     
    30043136    compile: compiler => {
    30053137      const lino = compiler.getLino();
    3006       const tokens = compiler.getTokens();
    30073138      compiler.next();
    30083139      const request = compiler.getToken();
     
    30713202            compiler.error.expectedError('of', compiler.getToken());
    30723203          }
    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                   value
    3087                 });
    3088                 return true;
    3089               }
    3090             }
    3091           }
    30923204          break;
    30933205        case 'set':
     
    31513263      var targetRecord;
    31523264      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.responseText
    3164               };
    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;
    31723265        case 'getItem':
    31733266          sourceRecord = program.getSymbolRecord(command.source);
     
    32323325  },
    32333326
     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
    32343386  getHandler: name => {
    32353387    switch (name) {
    32363388      case 'json':
    32373389        return EasyCoder_Json.Json;
     3390      case 'rest':
     3391        return EasyCoder_Json.Rest;
    32383392      default:
    32393393        return false;
     
    37783932                      }
    37793933                      try {
    3780                         program.run(program, event.target.targetPc);
     3934                        program.run(event.target.targetPc);
    37813935                      } catch (err) {
    37823936                        program.reportError(program.source, err);
     
    44084562        nn = ' ' + nn;
    44094563      }
    4410       errString += nn + ' ' + scriptLines[n].line + '\n';
     4564      errString += nn + ' ' + scriptLines[n].line.split('\\s').join(' ') + '\n';
    44114565    }
    44124566    errString += err.message + '\n';
     
    44444598  getValue: value => {
    44454599    return EasyCoder_Value.getValue(_this.program, value);
     4600  },
     4601
     4602  run: pc => {
     4603    EasyCoder_Run(_this.program, pc);
    44464604  },
    44474605
     
    44664624
    44674625      program.source = source;
    4468       program.run = EasyCoder_Run;
     4626      program.run = EasyCoder.run;
    44694627      program.value = EasyCoder_Value;
    44704628      program.evaluate = EasyCoder.evaluate;
     
    44854643      EasyCoder.setupTracer();
    44864644      console.log('Run the script');
    4487       program.run(program, 0);
     4645      program.run(0);
    44884646      //  console.log('Program: '+ JSON.stringify(program, null, 2));
    44894647    } catch (err) {
     
    45264684      }
    45274685    });
    4528     return count;
     4686    return 0;
     4687    //    return count;
    45294688  };
    45304689
  • easycoder/trunk/easycoder.php

    r1952358 r1955044  
    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: 1.5.2
     6   * Version: 1.5.3
    77   * Author: EasyCoder Software
    88   */
     
    1010   // The EasyCoder library
    1111   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');
    1313   }
    1414
  • easycoder/trunk/readme.txt

    r1952358 r1955044  
    2222* 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
    2323* 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
    2525* Draw and animate simple graphics
    2626
     
    2929*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.
    3030
    31 The *EasyCoder* library module is currently about 62k 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.
     31The *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.
    3232
    3333When *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.
     
    4444
    4545== Changelog ==
     46
     47= 1.5.3 11-oct-2018 =
     48* Added 'replace'; fixed bugs.
    4649
    4750= 1.5.2 =
Note: See TracChangeset for help on using the changeset viewer.