Restrict the download option to Firefox for now, and disable the external XML link for saved machines
This commit is contained in:
parent
87704cca14
commit
22a4da112d
8 changed files with 397 additions and 383 deletions
|
|
@ -1223,14 +1223,15 @@ function yr(a,b){a.C=null;var c=za(Aa()+"/api/v1/user?req=verify&user="+b),d=c[1
|
|||
function xr(a,b,c){if(c){var d={req:"store"};d.user=b;d.state=jr(a,sr);d.data=c;b=za(Aa()+"/api/v1/user",!1,d);d=b[1];if(b[0]){if(d){var e=d.indexOf("\n");0<e&&(d=d.substr(0,e));d.indexOf("Error: ")||(d=d.substr(7))}d='{"code":'+b[0]+',"data":"'+d+'"}'}b=JSON.parse(d);b&&"ok"==b.code?a.Ua("Machine state saved to server"):c&&(c=b&&b.data||"unable to save machine state",c="error"==b.code?"Error: "+c:"Error "+b.code+": "+c,a.Ua(c),Ia("user",""),a.C=null)}}
|
||||
function Kb(a,b,c){a=kb(a.id);for(var d=0;d<a.length;d++){var e=a[d];if(c)c==e&&(c=null);else if(e.type==b)return e}return null}Ta(function(){for(var a=rb(document,"pcjs-machine"),b=0;b<a.length;b++)for(var c=a[b],d=nb(c),c=rb(c,"pcjs","computer"),e=0;e<c.length;e++){var f=c[e],g=nb(f),g=new or(g,d,!0);qb(g,f);g.da&&tr(g,g.Xf)}});Pa.show.push(function(){for(var a=rb(document,"pcjs","computer"),b=0;b<a.length;b++){var c=nb(a[b]);(c=mb("Computer",c.id))&&c.la&&!c.ra.hc&&c.Xf(-1)}});
|
||||
Pa.exit.push(function(){for(var a=rb(document,"pcjs","computer"),b=0;b<a.length;b++){var c=nb(a[b]);(c=mb("Computer",c.id))&&c.ra.hc&&ir(c,!(!c.A||c.Y),!0)}});var zr=0;function Ar(a,b,c,d,e,f){e("Loading "+a+"...");za(a,!0,null,null,function(g,k,q){q?(k||(k="unable to load "+a+" ("+q+")"),f(k,null)):Br(k,a,b,c,d,e,f)})}
|
||||
function Br(a,b,c,d,e,f,g){function k(a,f){if(f)g(f,null);else{if(c){jb(c,b,a);var k=b;k&&0>k.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(k=window.location.pathname+k);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+k+'"}';a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(k?' url="'+k+'"':""))}k=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,"")),window.ActiveXObject||"ActiveXObject"in
|
||||
window?(k=new window.ActiveXObject("Microsoft.XMLDOM"),k.async=!1,k.loadXML(a)):k=(new window.DOMParser).parseFromString(a,"text/xml")}catch(z){k=null,a=z.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,k)}}a?e?Lr(a,f,k):k(a,null):g("no data"+(b?" for file: "+b:""),null)}
|
||||
function Br(a,b,c,d,e,f,g){function k(a,f){if(f)g(f,null);else{if(c){jb(c,b,a);var k=b;k&&0>k.indexOf("/")&&"/"==window.location.pathname.slice(-1)&&(k=window.location.pathname+k);d?"}"==d.slice(-1)?(d=d.slice(0,-1),1<d.length&&(d+=",")):d='{state:"'+d+'",':d="{";d+='url:"'+k+'"}';"object"==typeof resources&&(k=null);a=a.replace(/(<machine[^>]*\sid=)(['"]).*?\2/,"$1$2"+c+"$2"+(d?" parms='"+d+"'":"")+(k?' url="'+k+'"':""))}k=null;if("<"==a.charAt(0))try{e||(a=a.replace(/<!DOCTYPE(.|[\r\n])*]>\s*/g,
|
||||
"")),window.ActiveXObject||"ActiveXObject"in window?(k=new window.ActiveXObject("Microsoft.XMLDOM"),k.async=!1,k.loadXML(a)):k=(new window.DOMParser).parseFromString(a,"text/xml")}catch(z){k=null,a=z.message}else a="unrecognized XML: "+(255<a.length?a.substr(0,255)+"...":a);g(a,k)}}a?e?Lr(a,f,k):k(a,null):g("no data"+(b?" for file: "+b:""),null)}
|
||||
function Lr(a,b,c){var d;if(d=/<([a-z]+)\s+ref="(.*?)"(.*?)\/>/g.exec(a)){var e=d[2];b("Loading "+e+"...");za(e,!0,null,null,function(f,g,k){if(k||!g)c(a,"unable to resolve XML reference: "+d[0]+" ("+k+")");else{if(f=d[3])if(k=g.match(new RegExp("<"+d[1]+"[^>]*>"))){for(var q=k[0],r,x=/( [a-z]+=)(['"])(.*?)\2/g;r=x.exec(f);)q=0>q.indexOf(r[1])?q.replace(">",r[0]+">"):q.replace(new RegExp(r[1]+"(['\"])(.*?)\\1"),r[0]);k[0]!=q&&(g=g.replace(k[0],q))}else{c(a,"missing <"+d[1]+"> in "+e);return}g=g.replace(/<\?xml[^>]*>[\r\n]*/,
|
||||
"");a=a.replace(d[0],g);Lr(a,b,c)}})}else c(a,null)}
|
||||
function Mr(a,b,c,d){function e(a){if(void 0===k){var b=g&&rb(g,"machine-warning");k=b&&b[0]||g}k&&(k.innerHTML=na(a))}function f(a){e("Error: "+a);q&&(--zr||Wa(!0));q=!1}var g,k,q=!0;zr++;ib[a]={};try{if(g=document.getElementById(a)){var r;if("object"==typeof resources&&(r=resources.css)){var x=document.head||document.getElementsByTagName("head")[0],z=document.createElement("style");z.type="text/css";z.styleSheet?z.styleSheet.cssText=r:z.appendChild(document.createTextNode(r));x.appendChild(z)}c||
|
||||
(c="/versions/pcjs/1.20.9/components.xsl");r=function(d,k){k?Ar(c,null,null,!1,e,function(d,q){if(q)if(jb(a,c,d),e("Processing "+b+"..."),window.ActiveXObject||"ActiveXObject"in window){var r=k.transformNode(q);r?(g.outerHTML=r,--zr||Wa(!0)):f("transformNodeToObject failed")}else document.implementation&&document.implementation.createDocument?(r=new XSLTProcessor,r.importStylesheet(q),(r=r.transformToFragment(k,document))?g.parentNode?(g.parentNode.replaceChild(r,g),--zr||Wa(!0)):f("invalid machine element: "+
|
||||
a):f("transformToFragment failed")):f("unable to transform XML: unsupported browser");else f(d)}):f(d)};"<"!=b.charAt(0)?Ar(b,a,d,!0,e,r):Br(b,null,a,d,!1,e,r)}else f("missing machine element: "+a)}catch(y){f(y.message)}return q}window.embedPC=function(a,b,c,d){Wa(!1);return Mr(a,b,c,d)};window.enableEvents=Wa;window.sendEvent=Xa;
|
||||
function Nr(a,b,c,d){if(!c&&b){d.push(b);a=ib[d[0]];b=null;for(var e in a)if(la(e,"components.xsl")){b=e.replace(".xsl",".css");break}b?za(b,!0,null,null,Or,d):Or(0,null,0,d)}else Ca("Error ("+c+") requesting "+a)}
|
||||
function Or(a,b,c,d){var e,f,g;a=d[0];c=d[1];e=d[4];e=e.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var k=ib[a],q={},r;for(r in k){var x=k[r],z=ka(r);if("xml"==z){for(z=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;f=z.exec(k[r]);){var y=f[2];y&&(k[y]||(x=x.replace(f[0],"")))}f=r=ja(r)}else"xsl"==z&&(g=r=ja(r));q[r]=x}b&&(q[r="css"]=b);d[2]&&(q[r="parms"]=d[2]);d[3]&&(q[r="state"]=d[3]);f&&g?(b=JSON.stringify(q),e=e[1]+"var resources="+b+";"+e[2]+e[3],e=e.replace(/\u00A9/g,"©"),
|
||||
b="data:application/javascript,"+(Ka("Firefox")?encodeURIComponent(e):encodeURI(e)),d=document.createElement("a"),"string"==typeof d.download?(d.href=b,d.download=c+".json",document.body.appendChild(d),d.click(),document.body.removeChild(d)):window.open(b),b='Check your Downloads folder for "'+c+'.json", '+('copy it to your web server as "'+c+'.js", and then add the following to your web page:\n\n'),b+='<div id="'+a+'"></div>\n',b+="...\n",b+='<script type="text/javascript" src="'+c+'.js">\x3c/script>\n',
|
||||
b+='<script type="text/javascript">embedPC("'+a+'","'+f+'","'+g+'");\x3c/script>\n\n',b+="The machine should appear where the <div> is located.",Ca(b)):Ca("Missing XML/XSL resources")}window.savePC=function(a,b){var c=mb("Computer",a),d=mb("Debugger",a);if(c){var e=ir(c,!0),c=c.ia?JSON.stringify(c.ia):null;b||(b="/versions/pcjs/1.20.9/pc"+(d?"-dbg":"")+".js");za(b,!0,null,null,Nr,[a,ja(b,!0),c,e]);return!0}Ca("Unable to identify machine '"+a+"'");return!1};})();
|
||||
function Or(a,b,c,d){var e,f,g;a=d[0];c=d[1];e=d[4];e=e.match(/^(\s*\(function\(\)\{)([\s\S]*)(}\)\(\);\s*)$/);var k=ib[a],q={},r;for(r in k){var x=k[r],z=ka(r);if("xml"==z){for(z=/[ \t]*<disk [^>]*path=(['"])(.*?)\1.*?<\/disk>\n?/g;f=z.exec(k[r]);){var y=f[2];y&&(k[y]||(x=x.replace(f[0],"")))}f=r=ja(r)}else"xsl"==z&&(g=r=ja(r));q[r]=x}b&&(q[r="css"]=b);d[2]&&(q[r="parms"]=d[2]);d[3]&&(q[r="state"]=d[3]);f&&g?(b=JSON.stringify(q),e=e[1]+"var resources="+b+";"+e[2]+e[3],d=document.createElement("a"),
|
||||
r="string"==typeof d.download,e=e.replace(/\u00A9/g,"©"),b="data:application/javascript,",Ka("Firefox")?b+=encodeURIComponent(e):(r=!1,b+=encodeURI(e)),r?(d.href=b,d.download=c+".js",document.body.appendChild(d),d.click(),document.body.removeChild(d),b='Check your Downloads folder for "'+d.download+'", '):(window.open(b),b="Check your browser for a new window/tab containing the PCjs script, "),b=b+('copy it to your web server as "'+c+'.js", and then add the following to your web page:\n\n')+
|
||||
('<div id="'+a+'"></div>\n'),b+="...\n",b+='<script type="text/javascript" src="'+c+'.js">\x3c/script>\n',b+='<script type="text/javascript">embedPC("'+a+'","'+f+'","'+g+'");\x3c/script>\n\n',b+="The machine should appear where the <div> is located.",Ca(b)):Ca("Missing XML/XSL resources")}
|
||||
window.savePC=function(a,b){var c=mb("Computer",a),d=mb("Debugger",a);if(c){var e=ir(c,!0),c=c.ia?JSON.stringify(c.ia):null;b||(b="/versions/pcjs/1.20.9/pc"+(d?"-dbg":"")+".js");za(b,!0,null,null,Nr,[a,ja(b,!0),c,e]);return!0}Ca("Unable to identify machine '"+a+"'");return!1};})();
|
||||
|
|
|
|||
Loading…
Reference in a new issue