UNPKG

karel

Version:

Compilador y evaluador de Karel en javascript

2 lines (1 loc) 2.08 kB
(function(){(function(d){var e,h,j,i,f,g,a,c,b;h="abcdefghijklmnopqrstuvwxyz";h+=h.toUpperCase();h+="0123456789";j=function(){var k,m,l;m="";for(k=l=1;l<=16;k=++l){m+=h[Math.floor(h.length*Math.random())]}return m};c=function(k){return d.sandbox.queue.push(k)};a=function(k){return d.sandbox.frame.get(0).contentWindow.postMessage(k,"*")};g=c;i=function(l){var k;k=JSON.parse(l.originalEvent.data);if(k.id in d.sandbox.sandboxes){return d.sandbox.sandboxes[k.id].callback(k.data,k.error)}};f=function(k){if(d.sandbox.frame){return}d.sandbox.frame=d("<iframe />").attr("src",k).appendTo("body").css({position:"absolute",top:-9999,left:-9999,width:100,height:100});return d.sandbox.frame.bind("load",function(){var o,l,p,n,m;d(window).bind("message",i);g=a;l=d.sandbox.queue;d.sandbox.queue=[];m=[];for(p=0,n=l.length;p<n;p++){o=l[p];m.push(g(o))}return m})};b=function(){if(!d.sandbox.frame){return}if(d.sandbox.count>0){return}d(window).unbind("message",i);g=c;d.sandbox.frame.unbind().remove();return d.sandbox.frame=null};e=function(k){this.options=d.extend(true,{},d.sandbox.defaults,k||{});this.id=j();this.state="init";return this};e.prototype={constructor:e,callback:function(l,k){return this.options.callback.apply(this,[l,k])},post:function(l,k){return g(JSON.stringify({id:this.id,command:l,options:k}))},run:function(){if(this.state!=="init"){return}f(this.options.url);this.post("run",{input:this.options.input,timeout:this.options.timeout});return this.state="running"},terminate:function(){if(this.state!=="running"){return}this.post("terminate");this.state="terminated";delete d.sandbox.sandboxes[this.id];return d.sandbox.count--}};d.sandbox=function(l){var k;if(!d.support.sandbox){return null}k=new e(l);d.sandbox.sandboxes[k.id]=k;d.sandbox.count++;k.run();return k};d.sandbox.defaults={timeout:0,url:"//ziyan.github.io/jquery-sandbox/0.0.1/sandbox.html",input:{},callback:function(l,k){return true}};d.sandbox.sandboxes={};d.sandbox.count=0;d.sandbox.frame=null;d.sandbox.queue=[];return d.support.sandbox=typeof Worker!==void 0})(window.jQuery)}).call(this);