pxt-core 9.3.13 → 9.3.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -0
- package/built/cli.js +7 -2
- package/built/pxt.js +57 -3
- package/built/pxtblockly.js +97 -57
- package/built/pxtblocks.d.ts +59 -21
- package/built/pxtblocks.js +97 -57
- package/built/pxtlib.d.ts +22 -0
- package/built/pxtlib.js +50 -1
- package/built/target.js +1 -1
- package/built/tests/blocksrunner.js +1 -1
- package/built/web/main.js +1 -1
- package/built/web/multiplayer/js/{main.78cecdcb.js → main.75ca8c58.js} +2 -2
- package/built/web/pxtapp.js +1 -1
- package/built/web/pxtasseteditor.js +1 -1
- package/built/web/pxtblockly.js +2 -2
- package/built/web/pxtblocks.js +1 -1
- package/built/web/pxtembed.js +2 -2
- package/built/web/pxtlib.js +1 -1
- package/built/web/pxtworker.js +1 -1
- package/built/web/rtlsemantic.css +1 -1
- package/built/web/runnerembed.js +1 -0
- package/built/web/semantic.css +1 -1
- package/built/web/skillmap/js/{main.8222bb34.js → main.236bd49e.js} +2 -2
- package/built/web/teachertool/css/main.e9386f28.css +1 -0
- package/built/web/teachertool/js/{main.3a94a341.js → main.8aa6604c.js} +2 -2
- package/localtypings/projectheader.d.ts +21 -0
- package/{built → localtypings}/pxteditor.d.ts +1095 -1090
- package/package.json +1 -1
- package/react-common/components/controls/MenuDropdown.tsx +5 -2
- package/react-common/components/util.tsx +1 -1
- package/theme/pxt.less +1 -0
- package/theme/themepacks.less +41 -0
- package/webapp/public/embed.js +1 -1
- package/webapp/public/multiplayer.html +1 -1
- package/webapp/public/skillmap.html +1 -1
- package/webapp/public/teachertool.html +1 -3
- package/built/pxteditor.js +0 -1834
- package/built/pxtrunner.d.ts +0 -151
- package/built/pxtrunner.js +0 -2626
- package/built/web/pxteditor.js +0 -1
- package/built/web/pxtrunner.js +0 -1
- package/built/web/teachertool/css/main.59776cd1.css +0 -1
package/built/web/pxteditor.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var pxt;!function(e){!function(t){let s,o,i,r,n;!function(e){e[e.Stopped=0]="Stopped",e[e.Pending=1]="Pending",e[e.Starting=2]="Starting",e[e.Running=3]="Running"}(s=t.SimState||(t.SimState={})),t.isBlocks=function(t){return e.U.endsWith(t.name,".blocks")},function(e){e.HeaderOnly="errorListHeader",e.Expanded="errorListExpanded"}(o=t.ErrorListState||(t.ErrorListState={})),function(e){e.Muted="muted",e.Unmuted="unmuted",e.Disabled="disabled"}(i=t.MuteState||(t.MuteState={})),function(e){e[e.Hidden=0]="Hidden",e[e.Visible=1]="Visible",e[e.Disabled=2]="Disabled"}(r=t.FilterState||(t.FilterState={})),t.initExtensionsAsync=e=>Promise.resolve({}),t.initFieldExtensionsAsync=e=>Promise.resolve({}),t.HELP_IMAGE_URI="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjYiIGhlaWdodD0iMjYiIHZpZXdCb3g9IjAgMCAyNiAyNiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPGNpcmNsZSBjeD0iMTMiIGN5PSIxMyIgcj0iMTMiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xNy45NTIgOS4xODQwMkMxNy45NTIgMTAuMjU2IDE3LjgxNiAxMS4wNzIgMTcuNTQ0IDExLjYzMkMxNy4yODggMTIuMTkyIDE2Ljc1MiAxMi43OTIgMTUuOTM2IDEzLjQzMkMxNS4xMiAxNC4wNzIgMTQuNTc2IDE0LjU4NCAxNC4zMDQgMTQuOTY4QzE0LjA0OCAxNS4zMzYgMTMuOTIgMTUuNzM2IDEzLjkyIDE2LjE2OFYxNi45NkgxMS44MDhDMTEuNDI0IDE2LjQ2NCAxMS4yMzIgMTUuODQgMTEuMjMyIDE1LjA4OEMxMS4yMzIgMTQuNjg4IDExLjM4NCAxNC4yODggMTEuNjg4IDEzLjg4OEMxMS45OTIgMTMuNDg4IDEyLjUzNiAxMi45NjggMTMuMzIgMTIuMzI4QzE0LjEwNCAxMS42NzIgMTQuNjI0IDExLjE2OCAxNC44OCAxMC44MTZDMTUuMTM2IDEwLjQ0OCAxNS4yNjQgOS45NjgwMiAxNS4yNjQgOS4zNzYwMkMxNS4yNjQgOC4yMDgwMiAxNC40MTYgNy42MjQwMiAxMi43MiA3LjYyNDAyQzExLjc2IDcuNjI0MDIgMTAuNzUyIDcuNzM2MDIgOS42OTYgNy45NjAwMkw5LjE0NCA4LjA4MDAyTDkgNi4wODgwMkMxMC40ODggNS41NjAwMiAxMS44NCA1LjI5NjAyIDEzLjA1NiA1LjI5NjAyQzE0LjczNiA1LjI5NjAyIDE1Ljk2OCA1LjYwODAyIDE2Ljc1MiA2LjIzMjAyQzE3LjU1MiA2Ljg0MDAyIDE3Ljk1MiA3LjgyNDAyIDE3Ljk1MiA5LjE4NDAyWk0xMS40IDIyVjE4LjY0SDE0LjE4NFYyMkgxMS40WiIgZmlsbD0iIzU5NUU3NCIvPgo8L3N2Zz4K",t.initEditorExtensionsAsync=function(){if(!n&&(n=Promise.resolve(),e.appTarget&&e.appTarget.appTheme&&e.appTarget.appTheme.extendFieldEditors)){const t={};n=n.then((()=>e.BrowserUtils.loadBlocklyAsync())).then((()=>e.BrowserUtils.loadScriptAsync("fieldeditors.js"))).then((()=>e.editor.initFieldExtensionsAsync(t))).then((t=>{t.fieldEditors&&t.fieldEditors.forEach((t=>{e.blocks.registerFieldEditor(t.selector,t.editor,t.validator)}))}))}return n}}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s={};function o(e,t,s,o){e.response&&window.parent.postMessage({type:e.type,id:e.id,resp:t,success:s,error:o},"*")}function i(t){return new Promise(((o,i)=>{const r=e.Util.clone(t);r.id=ts.pxtc.Util.guidGen(),t.response&&(s[r.id]={resolve:o,reject:i}),window.parent.postMessage(r,"*"),t.response||o(void 0)}))}t.bindEditorMessages=function(t){const i=(e.appTarget.appTheme.allowParentController||e.shell.isControllerMode())&&e.BrowserUtils.isIFrame(),r=e.appTarget.appTheme.allowPackageExtensions,n=e.appTarget.appTheme.allowSimulatorTelemetry;(i||r||n)&&window.addEventListener("message",(a=>{const c=a.data;if(!c||!/^pxt(host|editor|pkgext|sim)$/.test(c.type))return!1;if("pxtpkgext"===c.type&&r)t().then((e=>{e.handleExtensionRequest(c)}));else if("pxtsim"===c.type&&n){const t=c;"event"===t.action&&(t.category||t.message?e.reportError(t.category,t.message,t.data):e.tickEvent(t.tick,t.data))}else if(i){let i,r=Promise.resolve();if("pxthost"==c.type){const t=s[c.id];t?r=r.then((()=>t.resolve(c))):e.debug(`pxthost: unknown request ${c.id}`)}else"pxteditor"==c.type&&(r=r.then((()=>t().then((t=>{const s=c;switch(e.debug(`pxteditor: ${s.action}`),s.action.toLowerCase()){case"switchjavascript":return Promise.resolve().then((()=>t.openJavaScript()));case"switchpython":return Promise.resolve().then((()=>t.openPython()));case"switchblocks":return Promise.resolve().then((()=>t.openBlocks()));case"startsimulator":return Promise.resolve().then((()=>t.startSimulator()));case"restartsimulator":return Promise.resolve().then((()=>t.restartSimulator()));case"hidesimulator":return Promise.resolve().then((()=>t.collapseSimulator()));case"showsimulator":return Promise.resolve().then((()=>t.expandSimulator()));case"closeflyout":return Promise.resolve().then((()=>t.closeFlyout()));case"unloadproject":return Promise.resolve().then((()=>t.unloadProjectAsync()));case"saveproject":return t.saveProjectAsync();case"redo":return Promise.resolve().then((()=>{const e=t.editor;e&&e.hasRedo()&&e.redo()}));case"undo":return Promise.resolve().then((()=>{const e=t.editor;e&&e.hasUndo()&&e.undo()}));case"setscale":{const e=c;return Promise.resolve().then((()=>t.editor.setScale(e.scale)))}case"stopsimulator":{const e=c;return Promise.resolve().then((()=>t.stopSimulator(e.unload)))}case"newproject":{const e=c;return Promise.resolve().then((()=>t.newProject(e.options)))}case"importproject":{const e=c;return Promise.resolve().then((()=>t.importProjectAsync(e.project,{filters:e.filters,searchBar:e.searchBar})))}case"openheader":{const e=c;return t.openProjectByHeaderIdAsync(e.headerId)}case"startactivity":{const s=c;let o,i=s.path;return/^([jt]s|py|blocks?):/i.test(i)&&(o=/^py:/i.test(i)?e.PYTHON_PROJECT_NAME:/^[jt]s:/i.test(i)?e.JAVASCRIPT_PROJECT_NAME:e.BLOCKS_PROJECT_NAME,i=i.substr(i.indexOf(":")+1)),Promise.resolve().then((()=>t.startActivity({activity:s.activityType,path:i,title:s.title,editor:o,previousProjectHeaderId:s.previousProjectHeaderId,carryoverPreviousCode:s.carryoverPreviousCode})))}case"importtutorial":{const e=c;return Promise.resolve().then((()=>t.importTutorialAsync(e.markdown)))}case"proxytosim":{const e=c;return Promise.resolve().then((()=>t.proxySimulatorMessage(e.content)))}case"renderblocks":{const e=c;return Promise.resolve().then((()=>t.renderBlocksAsync(e))).then((e=>e.xml.then((e=>{i=e.xml}))))}case"renderpython":{const e=c;return Promise.resolve().then((()=>t.renderPythonAsync(e))).then((e=>{i=e.python}))}case"toggletrace":{const e=c;return Promise.resolve().then((()=>t.toggleTrace(e.intervalSpeed)))}case"settracestate":{const e=c;return Promise.resolve().then((()=>t.setTrace(e.enabled,e.intervalSpeed)))}case"setsimulatorfullscreen":{const e=c;return Promise.resolve().then((()=>t.setSimulatorFullScreen(e.enabled)))}case"togglehighcontrast":return Promise.resolve().then((()=>t.toggleHighContrast()));case"sethighcontrast":{const e=c;return Promise.resolve().then((()=>t.setHighContrast(e.on)))}case"togglegreenscreen":return Promise.resolve().then((()=>t.toggleGreenScreen()));case"print":return Promise.resolve().then((()=>t.printCode()));case"pair":return t.pairAsync().then((()=>{}));case"info":return Promise.resolve().then((()=>{i={versions:e.appTarget.versions,locale:ts.pxtc.Util.userLanguage(),availableLocales:e.appTarget.appTheme.availableLocales}}));case"shareproject":{const e=c;return t.anonymousPublishHeaderByIdAsync(e.headerId,e.projectName).then((e=>{i=e}))}case"savelocalprojectstocloud":{const e=c;return t.saveLocalProjectsToCloudAsync(e.headerIds).then((e=>{i={headerIdMap:e}}))}case"requestprojectcloudstatus":{const e=c;return t.requestProjectCloudStatus(e.headerIds)}case"convertcloudprojectstolocal":{const e=c;return t.convertCloudProjectsToLocal(e.userId)}case"setlanguagerestriction":{const e=c;if("no-blocks"===e.restriction)throw console.warn("no-blocks language restriction is not supported"),new Error("no-blocks language restriction is not supported");return t.setLanguageRestrictionAsync(e.restriction)}}return Promise.resolve()})))));r.then((()=>o(c,i,!0,void 0)),(e=>o(c,i,!1,e)))}return!0}),!1)},t.enableControllerAnalytics=function(){if(!e.appTarget.appTheme.allowParentController||!e.BrowserUtils.isIFrame())return;const t=e.tickEvent;e.tickEvent=function(e,s){t&&t(e,s),i({type:"pxthost",action:"event",tick:e,response:!1,data:s})};const s=e.reportException;e.reportException=function(e,t){s&&s(e,t);try{i({type:"pxthost",action:"event",tick:"error",message:e.message,response:!1,data:t})}catch(e){}};const o=e.reportError;e.reportError=function(e,t,s){o&&o(e,t,s),i({type:"pxthost",action:"event",tick:"error",category:e,message:t,data:s})}},t.shouldPostHostMessages=function(){return e.appTarget.appTheme.allowParentController&&e.BrowserUtils.isIFrame()},t.postHostMessageAsync=i}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){!function(t){function s(e){return`experiments-${"object"==typeof e?e.id:e}`}function o(){const t=e.savedAppTheme(),s={},o=i();return o.forEach((e=>{const o=r(e);t[e.id]=!!o,o&&(s[e.id]=o?1:0)})),o.length&&Object.keys(s).length&&(e.tickEvent("experiments.loaded",s),e.reloadAppTargetVariant()),e.appTarget.appTheme}function i(){const t=e.appTarget.appTheme.experiments;return t?[{id:"print",name:lf("Print Code"),description:lf("Print the code from the current project"),feedbackUrl:"https://github.com/microsoft/pxt/issues/4740"},{id:"greenScreen",name:lf("Green screen"),description:lf("Display a webcam video stream or a green background behind the code."),feedbackUrl:"https://github.com/microsoft/pxt/issues/4738"},{id:"allowPackageExtensions",name:lf("Editor Extensions"),description:lf("Allow Extensions to add buttons in the editor."),feedbackUrl:"https://github.com/microsoft/pxt/issues/4741"},{id:"instructions",name:lf("Wiring Instructions"),description:lf("Generate step-by-step assembly instructions for breadboard wiring."),feedbackUrl:"https://github.com/microsoft/pxt/issues/4739"},{id:"debugger",name:lf("Debugger"),description:lf("Step through code and inspect variables in the debugger"),feedbackUrl:"https://github.com/microsoft/pxt/issues/4729"},{id:"bluetoothUartConsole",name:"Bluetooth Console",description:lf("Receives UART message through Web Bluetooth"),feedbackUrl:"https://github.com/microsoft/pxt/issues/4796"},{id:"bluetoothPartialFlashing",name:"Bluetooth Download",description:lf("Download code via Web Bluetooth"),feedbackUrl:"https://github.com/microsoft/pxt/issues/4807"},{id:"simScreenshot",name:lf("Simulator Screenshots"),description:lf("Download screenshots of the simulator"),feedbackUrl:"https://github.com/microsoft/pxt/issues/5232"},{id:"python",name:lf("Static Python"),description:lf("Use Static Python to code your device"),feedbackUrl:"https://github.com/microsoft/pxt/issues/5390"},{id:"simGif",name:lf("Simulator Gifs"),description:lf("Download gifs of the simulator"),feedbackUrl:"https://github.com/microsoft/pxt/issues/5297"},{id:"qrCode",name:lf("Shared QR Code"),description:lf("Generate a QR Code form the shared project url"),feedbackUrl:"https://github.com/microsoft/pxt/issues/5456"},{id:"importExtensionFiles",name:lf("Import Extension Files"),description:lf("Import Extensions from compiled project files")},{id:"debugExtensionCode",name:lf("Debug Extension Code"),description:lf("Use the JavaScript debugger to debug extension code")},{id:"snippetBuilder",name:lf("Snippet Builder"),description:lf("Try out the new snippet dialogs.")},{id:"experimentalHw",name:lf("Experimental Hardware"),description:lf("Enable support for hardware marked 'experimental' in the hardware seletion dialog")},{id:"checkForHwVariantWebUSB",name:lf("Detect Hardware with WebUSB"),description:lf("When compiling, use WebUSB to detect hardware configuration.")},{id:"githubEditor",name:lf("GitHub editor"),description:lf("Review, commit and push to GitHub."),feedbackUrl:"https://github.com/microsoft/pxt/issues/6419",enableOnline:!0},{id:"githubCompiledJs",name:lf("GitHub Pages JavaScript"),description:lf("Commit compiled javascript when creating a release"),enableOnline:!0},{id:"blocksCollapsing",name:lf("Collapse blocks"),description:lf("Collapse and expand functions or event blocks")},{id:"tutorialBlocksDiff",name:lf("Tutorial Block Diffs"),description:lf("Automatially render blocks diff in tutorials")},{id:"openProjectNewTab",name:lf("Open in New Tab"),description:lf("Open an editor in a new tab.")},{id:"openProjectNewDependentTab",name:lf("Open in New Connected Tab"),description:lf("Open connected editors in different browser tabs.")},{id:"accessibleBlocks",name:lf("Accessible Blocks"),description:lf("Use the WASD keys to move and modify blocks."),feedbackUrl:"https://github.com/microsoft/pxt/issues/6850"},{id:"errorList",name:lf("Error List"),description:lf("Show an error list panel for JavaScript and Python.")},{id:"blocksErrorList",name:lf("Blocks Error List"),description:lf("Show an error list panel for Blocks")},{id:"timeMachine",name:lf("Time Machine"),description:lf("Save and restore past versions of a project")}].filter((s=>t.indexOf(s.id)>-1&&!(e.BrowserUtils.isPxtElectron()&&s.enableOnline))):[]}function r(t){return!!e.storage.getLocal(s(t))}function n(t,i){i!=r(t)&&(i?e.storage.setLocal(s(t),"1"):e.storage.removeLocal(s(t)),o())}t.syncTheme=o,t.all=i,t.clear=function(){i().forEach((t=>e.storage.removeLocal(s(t)))),o()},t.someEnabled=function(){return i().some((e=>r(e)))},t.isEnabled=r,t.toggle=function(e){n(e,!r(e))},t.state=function(){const e={};return i().forEach((t=>e[t.id]=r(t))),JSON.stringify(e)},t.setState=n}(t.experiments||(t.experiments={}))}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s=9e5,o=864e5;function i(t,s,o,i){var r,n;const a=[];for(const e of Object.keys(t))(e.endsWith(".ts")||e.endsWith(".jres")||e.endsWith(".py")||e.endsWith(".blocks")||"pxt.json"===e)&&(null==s[e]?a.push({type:"removed",filename:e,value:t[e]}):t[e]!==s[e]&&a.push({type:"edited",filename:e,patch:i(s[e],t[e])}));for(const e of Object.keys(s))(e.endsWith(".ts")||e.endsWith(".jres")||e.endsWith(".py")||e.endsWith(".blocks")||"pxt.json"===e)&&null==t[e]&&a.push({type:"added",filename:e,value:s[e]});if(a.length)return{timestamp:o,editorVersion:null===(n=null===(r=e.appTarget)||void 0===r?void 0:r.versions)||void 0===n?void 0:n.target,changes:a}}function r(e,t,s){const o=Object.assign({},e);for(const i of t.changes)"added"===i.type?delete o[i.filename]:"removed"===i.type?o[i.filename]=i.value:o[i.filename]=s(i.patch,e[i.filename]);return o}function n(t,s){return{timestamp:s,editorVersion:e.appTarget.versions.target,text:e.workspace.createSnapshot(t)}}function a(){var t,s;return null!=(null===(s=null===(t=e.appTarget)||void 0===t?void 0:t.appTheme)||void 0===s?void 0:s.timeMachineDiffInterval)?e.appTarget.appTheme.timeMachineDiffInterval:3e5}t.collapseHistory=function(t,s,o,n,a){var c,l;const p=[];let d,u,h,m=Object.assign({},s),f=null===(l=null===(c=e.appTarget)||void 0===c?void 0:c.versions)||void 0===l?void 0:l.target,{interval:g,minTime:y,maxTime:b}=o;void 0===y&&(y=0),void 0===b&&(b=t[t.length-1].timestamp);for(let e=t.length-1;e>=0;e--){const s=t[e];s.timestamp>b?(p.unshift(s),m=r(m,s,a)):s.timestamp<y?(void 0!==u&&(u-e>1?p.unshift({timestamp:d,editorVersion:f,changes:i(m,h,d,n).changes}):p.unshift(t[u])),p.unshift(s),u=void 0):void 0!==u?d-s.timestamp>g?(u-e>1?p.unshift({timestamp:d,editorVersion:f,changes:i(m,h,d,n).changes}):p.unshift(t[u]),h=Object.assign({},m),m=r(m,s,a),u=e,d=s.timestamp,f=s.editorVersion):m=r(m,s,a):(h=Object.assign({},m),d=s.timestamp,f=s.editorVersion,u=e,m=r(m,s,a))}return void 0!==u&&(u?p.unshift({timestamp:d,editorVersion:f,changes:i(m,h,d,n).changes}):p.unshift(t[0])),p},t.diffScriptText=i,t.applyDiff=r,t.createSnapshot=function(t){try{const s={},o=JSON.parse(t[e.CONFIG_NAME]);for(const i of o.files)i===e.IMAGES_CODE||i===e.TILEMAP_CODE?s[i]="":s[i]=t[i];if(s[e.CONFIG_NAME]=t[e.CONFIG_NAME],o.preferredEditor===e.BLOCKS_PROJECT_NAME?s[e.MAIN_BLOCKS]&&(s[e.MAIN_TS]=""):o.preferredEditor===e.PYTHON_PROJECT_NAME&&s[e.MAIN_PY]&&(s[e.MAIN_TS]=""),o.testFiles)for(const e of o.testFiles)s[e]=t[e];return s}catch(e){return Object.assign({},t)}},t.applySnapshot=function(t,s){var o;try{const i=Object.assign({},s),r=JSON.parse(t[e.CONFIG_NAME]);for(const e of Object.keys(t))-1!==r.files.indexOf(e)||-1!==(null===(o=r.testFiles)||void 0===o?void 0:o.indexOf(e))||i[e]||(i[e]=t[e]);return i}catch(e){const o=Object.assign({},t);for(const e of Object.keys(s))o[e]=s[e];return o}},t.parseHistoryFile=function(e){const t=JSON.parse(e);return t.entries||(t.entries=[]),t.shares||(t.shares=[]),t.snapshots||(t.snapshots=[]),t},t.updateHistory=function(t,c,l,p,d,u){let h;h=t[e.HISTORY_FILE]?e.workspace.parseHistoryFile(t[e.HISTORY_FILE]):{entries:[],snapshots:[n(t,l-1)],shares:[]};for(const e of p)h.shares.some((t=>t.id===e.id))||h.shares.push({id:e.id,timestamp:l});if(function(e,t){const s=Object.keys(e),o=Object.keys(t);if(s.length!==o.length)return!1;for(const i of s){if(-1===o.indexOf(i))return!1;if(e[i]!==t[i])return!1}return!0}(t,c))return void(c[e.HISTORY_FILE]=JSON.stringify(h));let m=!1;if(h.entries.length>1){const e=h.entries[h.entries.length-1].timestamp,t=h.entries[h.entries.length-2].timestamp;l-e<a()&&e-t<a()&&(m=!0)}if(m){const e=i(r(t,h.entries.pop(),u),c,l,d);e&&h.entries.push(e)}else{const e=i(t,c,l,d);e&&h.entries.push(e)}if(0==h.snapshots.length)h.snapshots.push(n(t,l-1));else if(l-h.snapshots[h.snapshots.length-1].timestamp>=function(){var t,o;if(null!=(null===(o=null===(t=e.appTarget)||void 0===t?void 0:t.appTheme)||void 0===o?void 0:o.timeMachineSnapshotInterval))return e.appTarget.appTheme.timeMachineSnapshotInterval;return s}()){h.snapshots.push(n(t,l));const e=[];let s=Math.floor(l/o)*o;for(let t=0;t<h.snapshots.length;t++){const i=h.snapshots[h.snapshots.length-1-t];l-i.timestamp<o||t===h.snapshots.length-1?e.unshift(i):i.timestamp<s&&(e.unshift(i),s=Math.floor(i.timestamp/o)*o)}h.snapshots=e}c[e.HISTORY_FILE]=JSON.stringify(h)},t.pushSnapshotOnHistory=function(t,s){let o;o=t[e.HISTORY_FILE]?e.workspace.parseHistoryFile(t[e.HISTORY_FILE]):{entries:[],snapshots:[],shares:[]},o.snapshots.push(n(t,s)),t[e.HISTORY_FILE]=JSON.stringify(o)},t.updateShareHistory=function(t,s,o){let i;i=t[e.HISTORY_FILE]?e.workspace.parseHistoryFile(t[e.HISTORY_FILE]):{entries:[],snapshots:[],shares:[]};for(const e of o)i.shares.some((t=>t.id===e.id))||i.shares.push({id:e.id,timestamp:s});t[e.HISTORY_FILE]=JSON.stringify(i)}}(e.workspace||(e.workspace={}))}(pxt||(pxt={})),function(e){!function(t){function s(t){const s=e.appTarget.appTheme.invertedMonaco,o=!(!e.appTarget.appTheme.monacoFieldEditors||!e.appTarget.appTheme.monacoFieldEditors.length),i=e.BrowserUtils.isAndroid();let r=monaco.editor.create(t,{model:null,ariaLabel:e.Util.lf("JavaScript editor"),fontFamily:"'Monaco', 'Menlo', 'Ubuntu Mono', 'Consolas', 'source-code-pro', 'monospace'",scrollBeyondLastLine:!0,language:"typescript",mouseWheelZoom:!1,wordBasedSuggestions:!0,lineNumbersMinChars:3,formatOnPaste:!0,folding:o,glyphMargin:o||e.appTarget.appTheme.debugger,minimap:{enabled:!1},fixedOverflowWidgets:!0,autoIndent:"full",useTabStops:!0,dragAndDrop:!0,matchBrackets:"always",occurrencesHighlight:!1,quickSuggestionsDelay:200,theme:s?"vs-dark":"vs",renderIndentGuides:!0,accessibilityHelpUrl:"",quickSuggestions:{other:!i,comments:!i,strings:!i},acceptSuggestionOnCommitCharacter:!i,acceptSuggestionOnEnter:i?"off":"on",accessibilitySupport:i?"off":"on"});return r.layout(),r}t.syncModels=function(e,t,s,o){if(o)return;let i=monaco.languages.typescript.typescriptDefaults.getExtraLibs(),r={};e.sortedDeps().forEach((e=>{e.getFiles().forEach((o=>{let i=e.id+"/"+o;if(/\.(ts)$/.test(o)&&i!=s){if(!monaco.languages.typescript.typescriptDefaults.getExtraLibs()[i]){let s=e.readFile(o)||"\n";t[i]=monaco.languages.typescript.typescriptDefaults.addExtraLib(s,i)}r[i]="1"}}))})),Object.keys(i).filter((e=>/\.(ts)$/.test(e)&&!r[e])).forEach((e=>{t[e].dispose()}))},t.initMonacoAsync=function(t){return new Promise(((o,i)=>{if("object"==typeof window.monaco)return void o(s(t));let r=window.MonacoPaths,n=()=>{let i=window.require;i.config({paths:r}),i(["vs/editor/editor.main"],(()=>{monaco.languages.register({id:"asm",extensions:[".asm"]}),monaco.languages.setMonarchTokensProvider("asm",{tokenPostfix:"",keywords:["movs","mov","adds","add","adcs","adr","subs","sbcs","sub","rsbs","muls","cmp","cmn","ands","eors","orrs","bics","mvns","tst","lsls","lsrs","asrs","rors","ldr","ldrh","ldrb","ldrsh","ldrsb","ldm","str","strh","strb","stm","push","pop","cbz","cbnz","b","bl","bx","blx","sxth","sxtb","uxth","uxtb","rev","rev16","revsh","svc","cpsid","cpsie","setend","bkpt","nop","sev","wfe","wfi","yield","beq","bne","bcs","bhs","bcc","blo","bmi","bpl","bvs","bvc","bhi","bls","bge","blt","bgt","ble","bal","r0","r1","r2","r3","r4","r5","r6","r7","r8","r9","r10","r11","r12","r13","r14","r15","pc","sp","lr"],typeKeywords:[".startaddr",".hex",".short",".space",".section",".string",".byte"],operators:[],symbols:/[:\*]+/,escapes:/\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,tokenizer:{root:[[/(\.)?[a-z_$\.][\w$]*/,{cases:{"@typeKeywords":"keyword","@keywords":"keyword","@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"operator","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,{token:"annotation"}],[/(#|(0[xX]))?[0-9a-fA-F]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",bracket:"@open",next:"@string"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],comment:[],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\/\*/,"comment","@comment"],[/;.*$/,"comment"]]}}),monaco.languages.typescript&&(monaco.languages.typescript.typescriptDefaults.setDiagnosticsOptions({noSyntaxValidation:!0,noSemanticValidation:!0}),monaco.languages.typescript.typescriptDefaults.setWorkerOptions({customWorkerPath:e.webConfig.typeScriptWorkerJs}),monaco.languages.typescript.typescriptDefaults.setCompilerOptions({allowUnreachableCode:!0,noImplicitAny:!0,allowJs:!1,allowUnusedLabels:!0,target:monaco.languages.typescript.ScriptTarget.ES5,outDir:"built",rootDir:".",noLib:!0,mouseWheelZoom:!1})),o(s(t))}))};if(window.require)n();else{let e=document.createElement("script");e.type="text/javascript",e.src=r["vs/loader"],e.addEventListener("load",n),document.body.appendChild(e)}}))},t.createEditor=s}(e.vs||(e.vs={}))}(pxt||(pxt={})),function(e){!function(t){t.freshHeader=function(t,s){return{target:e.appTarget.id,targetVersion:e.appTarget.versions.target,name:t,meta:{},editor:e.JAVASCRIPT_PROJECT_NAME,pubId:"",pubCurrent:!1,_rev:null,id:e.U.guidGen(),recentUse:s,modificationTime:s,cloudUserId:null,cloudCurrent:!1,cloudVersion:null,cloudLastSyncTime:0,isDeleted:!1}}}(e.workspace||(e.workspace={}))}(pxt||(pxt={})),function(e){!function(e){const t={};e.registerMonacoFieldEditor=function(e,s){t[e]=s},e.getMonacoFieldEditor=function(e){return t[e]}}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){t.MonacoReactFieldEditor=class{getId(){return"image-editor"}showEditorAsync(t,s,o){return this.fileType=t,this.editrange=s,this.host=o,this.initAsync().then((()=>{const t=this.textToValue(o.getText(s));return t?(this.fv=e.react.getFieldEditorView(this.getFieldEditorId(),t,this.getOptions()),this.fv.onHide((()=>{this.onClosed()})),this.fv.show(),new Promise(((e,t)=>{this.resolver=e,this.rejecter=t}))):Promise.resolve(null)}))}onClosed(){this.resolver&&(this.resolver({range:this.editrange,replacement:this.resultToText(this.fv.getResult())}),this.editrange=void 0,this.resolver=void 0,this.rejecter=void 0)}dispose(){this.onClosed()}initAsync(){return Promise.resolve()}textToValue(e){return null}resultToText(e){return e+""}getFieldEditorId(){return""}getOptions(){return null}}}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s="music-editor";class o extends t.MonacoReactFieldEditor{textToValue(t){this.isPython=-1===t.indexOf("`"),this.text=t;const s=e.parseAssetTSReference(t);if(s){const{type:t,name:o}=s,i=o.trim(),r=e.react.getTilemapProject();this.isAsset=!0;const n=r.lookupAssetByName("song",i);if(n)return n;{const t=r.createNewSong(e.assets.music.getEmptySong(2));return i&&!r.isNameTaken("song",i)&&e.validateAssetName(i)&&(t.meta.displayName=i),t}}const o=/hex\s*(?:`|\(""")\s*([a-fA-F0-9]*)\s*(?:`|"""\))\s*(?:;?)/m.exec(t);if(o){const t=o[1].trim();return i(t?e.assets.music.decodeSongFromHex(t):e.assets.music.getEmptySong(2))}}resultToText(t){var s;if(null===(s=t.meta)||void 0===s?void 0:s.displayName){const s=e.react.getTilemapProject();return t=this.isAsset||s.lookupAsset(t.type,t.id)?s.updateAsset(t):s.createNewSong(t.song,t.meta.displayName),this.isAsset=!0,e.getTSReferenceForAsset(t,this.isPython)}let o=e.assets.music.encodeSongToHex(t.song);return o=this.isPython?`hex("""${o}""")`:"hex`"+o+"`",this.text.replace(/hex\s*(?:`|\(""")\s*([a-fA-F0-9]*)\s*(?:`|"""\))\s*(?:;?)/m,o)}getFieldEditorId(){return s}getOptions(){return{blocksInfo:this.host.blocksInfo()}}}function i(e){return{type:"song",id:"",internalID:0,meta:{},song:e}}t.MonacoSongEditor=o,t.songEditorDefinition={id:s,foldMatches:!0,glyphCssClass:"fas fa-music sprite-focus-hover",heightInPixels:510,matcher:{searchString:'(?:(?:assets\\s*\\.\\s*song)|(?:music\\s*\\.\\s*create(?:S|_s)ong\\s*\\(\\s*hex))\\s*(?:`|\\(\\s*""")(?:(?:[^(){}:\\[\\]"\';?/,+\\-=*&|^%!`~]|\\n)*)\\s*(?:`|"""\\s*\\))',isRegex:!0,matchCase:!0,matchWholeWord:!1},proto:o},t.registerMonacoFieldEditor(s,t.songEditorDefinition)}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s="soundeffect-editor";class o extends t.MonacoReactFieldEditor{textToValue(e){const t={wave:"sine",startFrequency:5e3,endFrequency:0,startVolume:255,endVolume:0,duration:500,effect:"none",interpolation:"linear"};this.value=t;const s=/\(([^)]*)\)/.exec(e)[1].split(",").map((e=>e.replace(/\s/g,"")));if(8!==s.length)return t;switch(s[0]){case"WaveShape.Sawtooth":t.wave="sawtooth";break;case"WaveShape.Square":t.wave="square";break;case"WaveShape.Noise":t.wave="noise";break;case"WaveShape.Triangle":t.wave="triangle";break;case"WaveShape.Sine":default:t.wave="sine"}const o=(e,t)=>isNaN(e)?t:e;switch(t.startFrequency=o(parseInt(s[1]),t.startFrequency),t.endFrequency=o(parseInt(s[2]),t.endFrequency),t.startVolume=o(parseInt(s[3]),t.startVolume),t.endVolume=o(parseInt(s[4]),t.endVolume),t.duration=o(parseInt(s[5]),t.duration),s[6]){case"SoundExpressionEffect.Vibrato":t.effect="vibrato";break;case"SoundExpressionEffect.Tremolo":t.effect="tremolo";break;case"SoundExpressionEffect.Warble":t.effect="warble";break;case"SoundExpressionEffect.None":default:t.effect="none"}switch(s[7]){case"InterpolationCurve.Logarithmic":t.interpolation="logarithmic";break;case"InterpolationCurve.Curve":t.interpolation="curve";break;case"InterpolationCurve.Linear":default:t.interpolation="linear"}return t}resultToText(e){let t,s,o;switch((e=this.value).wave){case"sine":t="WaveShape.Sine";break;case"square":t="WaveShape.Square";break;case"triangle":t="WaveShape.Triangle";break;case"noise":t="WaveShape.Noise";break;case"sawtooth":t="WaveShape.Sawtooth"}switch(e.effect){case"vibrato":s="SoundExpressionEffect.Vibrato";break;case"tremolo":s="SoundExpressionEffect.Tremolo";break;case"warble":s="SoundExpressionEffect.Warble";break;case"none":s="SoundExpressionEffect.None"}switch(e.interpolation){case"curve":o="InterpolationCurve.Curve";break;case"linear":o="InterpolationCurve.Linear";break;case"logarithmic":o="InterpolationCurve.Logarithmic"}return`music.createSoundEffect(${t}, ${Math.round(e.startFrequency)}, ${Math.round(e.endFrequency)}, ${Math.round(e.startVolume)}, ${Math.round(e.endVolume)}, ${Math.round(e.duration)}, ${s}, ${o})`}getFieldEditorId(){return s}getOptions(){return{onClose:()=>this.fv.hide(),onSoundChange:e=>this.value=e,initialSound:this.value,useFlex:!0,useMixerSynthesizer:"microbit"!==e.appTarget.id}}}t.MonacoSoundEffectEditor=o,t.soundEditorDefinition={id:s,foldMatches:!0,glyphCssClass:"fas fa-music sprite-focus-hover",heightInPixels:510,matcher:{searchString:"music\\s*\\.\\s*createSoundEffect\\s*\\(",isRegex:!0,matchCase:!0,matchWholeWord:!1,validateRange:function(e,t){let s=e.startLineNumber,o=0,i=!1,r=0;const n="createSoundEffect",a=t.getLineCount();for(;s<a;){const a=t.getLineContent(s),c=a.indexOf(n);if(-1!==c&&(i=!0,o=c+n.length),i)for(;o<a.length;){const i=a.charAt(o);if("("===i)r++;else if(")"===i&&(r--,0===r))return new monaco.Range(e.startLineNumber,e.startColumn,s,o+t.getLineMinColumn(s)+1);o++}o=0,s++}}},proto:o},t.registerMonacoFieldEditor(s,t.soundEditorDefinition)}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s="image-editor";class o extends t.MonacoReactFieldEditor{textToValue(t){this.isPython=-1===t.indexOf("`");const s=e.parseAssetTSReference(t);if(s){const{type:t,name:o}=s,i=o.trim(),r=e.react.getTilemapProject();this.isAsset=!0;const n=r.lookupAssetByName("image",i);if(n)return n;{const t=r.createNewImage();return i&&!r.isNameTaken("image",i)&&e.validateAssetName(i)&&(t.meta.displayName=i),t}}return{type:"image",id:"",internalID:0,bitmap:e.sprite.imageLiteralToBitmap(t).data(),meta:{},jresData:""}}resultToText(t){var s;if(null===(s=t.meta)||void 0===s?void 0:s.displayName){const s=e.react.getTilemapProject();return t=this.isAsset||s.lookupAsset(t.type,t.id)?s.updateAsset(t):s.createNewProjectImage(t.bitmap,t.meta.displayName),this.isAsset=!0,e.getTSReferenceForAsset(t,this.isPython)}return e.sprite.bitmapToImageLiteral(e.sprite.Bitmap.fromData(t.bitmap),this.isPython?"python":"typescript")}getFieldEditorId(){return"image-editor"}getOptions(){return{initWidth:16,initHeight:16,blocksInfo:this.host.blocksInfo()}}}t.MonacoSpriteEditor=o,t.spriteEditorDefinition={id:s,foldMatches:!0,glyphCssClass:"sprite-editor-glyph sprite-focus-hover",heightInPixels:510,matcher:{searchString:'(?:img|assets\\s*\\.\\s*image)\\s*(?:`|\\(\\s*""")(?:(?:[^(){}:\\[\\]"\';?/,+\\-=*&|^%!`~]|\\n)*)\\s*(?:`|"""\\s*\\))',isRegex:!0,matchCase:!0,matchWholeWord:!1},proto:o},t.registerMonacoFieldEditor(s,t.spriteEditorDefinition)}(e.editor||(e.editor={}))}(pxt||(pxt={})),function(e){!function(t){const s="tilemap-editor";class o extends t.MonacoReactFieldEditor{textToValue(t){const s=this.readTilemap(t),o=e.react.getTilemapProject();return e.sprite.addMissingTilemapTilesAndReferences(o,s),s}readTilemap(t){const s=e.react.getTilemapProject();if(/^\s*tiles\s*\./.test(t)&&(this.isTilemapLiteral=!1,t)){try{return function(e){return{type:"tilemap",id:"",internalID:0,meta:{},data:e}}(e.sprite.decodeTilemap(t,"typescript",s))}catch(e){}return null}this.isTilemapLiteral=!0;const o=/^\s*(tilemap(?:8|16|32)?)\s*(?:`([^`]*)`)|(?:\(\s*"""([^"]*)"""\s*\))\s*$/.exec(t),i=(o[2]||o[3]||"").trim();let r,n;if(this.tilemapLiteral=o[1],i&&(n=ts.pxtc.escapeIdentifier(i),r=s.getTilemap(n)||s.lookupAssetByName("tilemap",i)),!r){let e=16;"tilemap8"===this.tilemapLiteral?e=8:"tilemap32"===this.tilemapLiteral&&(e=32);const[t]=s.createNewTilemap(n,e,16,16);r=s.getTilemap(t),n=t}return r}resultToText(t){const s=e.react.getTilemapProject();return s.pushUndo(),e.sprite.updateTilemapReferencesFromResult(s,t),this.isTilemapLiteral?(s.updateAsset(t),e.getTSReferenceForAsset(t,"python"===this.fileType)):e.sprite.encodeTilemap(t.data,"typescript"===this.fileType?"typescript":"python")}getFieldEditorId(){return"tilemap-editor"}getOptions(){return{initWidth:16,initHeight:16,blocksInfo:this.host.blocksInfo()}}getCreateTilemapRange(){const e=this.editrange.getStartPosition();let t,s=this.editrange.getEndPosition(),o=1;for(;;){t=new monaco.Range(s.lineNumber,s.column,s.lineNumber+1,0);const i=this.host.getText(t);for(let t=0;t<i.length;t++)if("("===i.charAt(t))o++;else if(")"===i.charAt(t)&&(o--,0===o)){const o=new monaco.Position(s.lineNumber,s.column+t+2);return monaco.Range.fromPositions(e,o)}if(s=t.getEndPosition(),s.lineNumber>e.lineNumber+20)return null}}}t.MonacoTilemapEditor=o,t.tilemapEditorDefinition={id:s,foldMatches:!0,alwaysBuildOnClose:!0,glyphCssClass:"sprite-focus-hover ms-Icon ms-Icon--Nav2DMapView",heightInPixels:510,weight:5,matcher:{searchString:'(?:tilemap(?:8|16|32)?\\s*(?:`|\\(""")(?:[ a-zA-Z0-9_]|\\n)*\\s*(?:`|"""\\)))|(?:tiles\\s*\\.\\s*createTilemap\\s*\\([^\\)]+\\))',isRegex:!0,matchCase:!0,matchWholeWord:!1},proto:o},t.registerMonacoFieldEditor(s,t.tilemapEditorDefinition)}(e.editor||(e.editor={}))}(pxt||(pxt={}));
|
package/built/web/pxtrunner.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
var pxt;!function(e){!function(t){t.startDebuggerAsync=function(e){new n(e).start()};class n{constructor(e){this.container=e,this.pkgLoaded=!1,this.intervalRunning=!1}start(){this.initializeWebsocket(),this.intervalRunning||(this.intervalRunning=!0,this.intervalId=setInterval((()=>{if(!this.ws)try{this.initializeWebsocket()}catch(e){console.warn(`Connection to server failed, retrying in ${n.RETRY_MS} ms`)}}),n.RETRY_MS)),this.session=new pxsim.SimDebugSession(this.container),this.session.start(this)}initializeWebsocket(){e.BrowserUtils.isLocalHost()&&e.Cloud.localToken&&(e.debug("initializing debug pipe"),this.ws=new WebSocket("ws://localhost:3234/"+e.Cloud.localToken+"/simdebug"),this.ws.onopen=t=>{e.debug("debug: socket opened")},this.ws.onclose=t=>{e.debug("debug: socket closed"),this.closeListener&&this.closeListener(),this.session.stopSimulator(),this.ws=void 0},this.ws.onerror=t=>{e.debug("debug: socket closed due to error"),this.errorListener&&this.errorListener(t.type),this.session.stopSimulator(),this.ws=void 0},this.ws.onmessage=t=>{let n;try{n=JSON.parse(t.data)}catch(t){e.debug("debug: could not parse message")}n&&("runner"===n.type?this.handleRunnerMessage(n):("request"===n.type&&"launch"===n.command&&this.sendRunnerMessage("configure",{projectDir:n.arguments.projectDir}),this.dataListener(n)))})}send(e){this.ws.send(e)}onData(e){this.dataListener=e}onError(e){this.errorListener=e}onClose(e){this.closeListener=e}close(){this.session&&this.session.stopSimulator(!0),this.intervalRunning&&(clearInterval(this.intervalId),this.intervalId=void 0),this.ws&&this.ws.close()}handleRunnerMessage(e){switch(e.subtype){case"ready":this.sendRunnerMessage("ready");break;case"runcode":this.runCode(e)}}runCode(t){const n=[];t.breakpoints.forEach((e=>{n.push([e.id,{verified:!0,line:e.line,column:e.column,endLine:e.endLine,endColumn:e.endColumn,source:{path:e.fileName}}])})),this.session.runCode(t.code,t.usedParts,t.usedArguments,new pxsim.BreakpointMap(n),e.appTarget.simulator.boardDefinition)}sendRunnerMessage(e,t={}){t.subtype=e,t.type="runner",this.send(JSON.stringify(t))}}n.RETRY_MS=2500,t.DebugRunner=n}(e.runner||(e.runner={}))}(pxt||(pxt={})),function(e){!function(t){function n(){return{blocksAspectRatio:window.innerHeight<window.innerWidth?1.62:1/1.62,snippetClass:"lang-blocks",signatureClass:"lang-sig",blocksClass:"lang-block",blocksXmlClass:"lang-blocksxml",diffBlocksXmlClass:"lang-diffblocksxml",diffClass:"lang-diff",diffStaticPythonClass:"lang-diffspy",diffBlocksClass:"lang-diffblocks",staticPythonClass:"lang-spy",simulatorClass:"lang-sim",linksClass:"lang-cards",namespacesClass:"lang-namespaces",apisClass:"lang-apis",codeCardClass:"lang-codecard",packageClass:"lang-package",jresClass:"lang-jres",assetJSONClass:"lang-assetsjson",projectClass:"lang-project",snippetReplaceParent:!0,simulator:!0,showEdit:!0,hex:!0,tutorial:!1,showJavaScript:!1,hexName:e.appTarget.id}}function s(e){"undefined"!=typeof hljs&&(e.hasClass("highlight")?hljs.highlightBlock(e[0]):e.find("code.highlight").each((function(e,t){hljs.highlightBlock(t)})),i(e))}function i(t){t.find("span.hljs-comment:contains(@highlight)").each(((t,n)=>{try{!function(e){const t=$(e),n=document.createElement("span");n.className="highlight-line";let s=e.nextSibling;if(!s||s.nodeType!=Node.TEXT_NODE)return;let i=s.textContent,o=i.indexOf("\n");if(o<0)return;s.textContent=i.substring(0,o+1),$(document.createTextNode(i.substring(o+1).replace(/^\s+/,""))).insertAfter($(s)),s=s.nextSibling;for(;s;){let e=s.nextSibling;if(s.nodeType==Node.TEXT_NODE){i=s.textContent;const t=i.indexOf("\n");if(!(t<0)){n.appendChild(document.createTextNode(i.substring(0,t))),s.textContent=i.substring(t+1);break}n.appendChild(s),s=e}else n.appendChild(s),s=e}$(n).insertAfter(t),t.remove()}(n)}catch(t){e.reportException(t)}}))}function o(e,t){e.append($('<div class="ui content blocks"/>').append(t))}function a(e,t,n){e.append($('<div class="ui content js"><div class="subheading"><i class="ui icon xicon js"></i>JavaScript</div></div>').append(t)),s(t)}function r(e,t,n){e.append($('<div class="ui content py"><div class="subheading"><i class="ui icon xicon python"></i>Python</div></div>').append(t)),s(t)}function l(e,t){const n=$('<a class="item" role="button" tabindex="0"><i role="presentation" aria-hidden="true"></i><span class="ui desktop only"></span></a>');return n.attr("aria-label",e),n.attr("title",e),n.find("i").attr("class",t),n.find("span").text(e),n.keypress((e=>{const t="number"==typeof e.which?e.which:e.keyCode;13!==t&&32!==t||(e.preventDefault(),e.currentTarget.click())})),n}function c(t,n,s,i,c,d,p={}){let u=$('<div class="ui bottom attached tabular icon small compact menu hideprint"> <div class="right icon menu"></div></div>'),m=$('<div class="ui top attached segment codewidget"></div>'),g=u.find(".right.menu");const h=e.appTarget.appTheme||{};if(p.showEdit&&!h.hideDocsEdit&&d){const n=l(lf("Edit"),"edit icon"),{package:s,compileBlocks:o,compilePython:a}=d,r=s.host();if(c&&o?(s.setPreferredEditor(e.BLOCKS_PROJECT_NAME),r.writeFile(s,e.MAIN_BLOCKS,o.outfiles[e.MAIN_BLOCKS])):i&&a?(s.setPreferredEditor(e.PYTHON_PROJECT_NAME),r.writeFile(s,e.MAIN_PY,o.outfiles[e.MAIN_PY])):s.setPreferredEditor(e.JAVASCRIPT_PROJECT_NAME),t.assetJSON)for(const e of Object.keys(t.assetJSON))s.config.files.indexOf(e)<0&&s.config.files.push(e),r.writeFile(s,e,t.assetJSON[e]);const p=s.compressToFileAsync();n.click((()=>{e.tickEvent("docs.btn",{button:"edit"}),p.then((n=>{window.open(`${function(t){return(t.pxtUrl||e.appTarget.appTheme.homeUrl||"").replace(/\/$/,"")}(t)}/#project:${ts.pxtc.encodeBase64(e.Util.uint8ArrayToString(n))}`,"pxt")}))})),g.append(n)}if(t.showJavaScript||!c&&!i?(m.append(s),k(),y()):c?(m.append(c),b(),y()):i&&(m.append(i),k(),b()),p.run&&!h.hideDocsSimulator){let n=l(lf("Run"),"play icon").click((()=>{if(e.tickEvent("docs.btn",{button:"sim"}),m.find(".sim")[0])m.find(".sim").remove(),w(m);else{let n="81.97%";e.appTarget.simulator&&(n=100/e.appTarget.simulator.aspectRatio+"%");const i=t.package?"&deps="+encodeURIComponent(t.package):"",o=v(t)+"#nofooter=1"+i,a=t.assetJSON?`data-assets="${encodeURIComponent(JSON.stringify(t.assetJSON))}"`:"",r=encodeURIComponent(s.text());let l=$(`<div class="ui card sim"><div class="ui content"><div style="position:relative;height:0;padding-bottom:${n};overflow:hidden;"><iframe style="position:absolute;top:0;left:0;width:100%;height:100%;" src="${o}" data-code="${r}" ${a} allowfullscreen="allowfullscreen" sandbox="allow-popups allow-forms allow-scripts allow-same-origin" frameborder="0"></iframe></div></div></div>`);m.append(l),w(l)}}));g.append(n)}if(p.hexname&&p.hex){let t=l(lf("Download"),"download icon").click((()=>{e.tickEvent("docs.btn",{button:"hex"}),e.BrowserUtils.browserDownloadBinText(p.hex,p.hexname,{contentType:e.appTarget.compile.hexMimeType})}));g.append(t)}let f=$("<div class=codesnippet></div>");function k(){if(!c)return;const t=l(lf("Blocks"),"icon xicon blocks").click((()=>{e.tickEvent("docs.btn",{button:"blocks"}),m.find(".blocks")[0]?(m.find(".blocks").remove(),w(m)):(o(s?s.parent():m,c),w(c))}));g.append(t)}function b(){if(s)if(p.showJs)a(m,s);else{const t=l("JavaScript","icon xicon js").click((()=>{e.tickEvent("docs.btn",{button:"js"}),m.find(".js")[0]?(m.find(".js").remove(),w(m)):(a(c?c.parent():m,s),w(s))}));g.append(t)}}function y(){if(i)if(p.showPy)r(m,i);else{const t=l("Python","icon xicon python").click((()=>{e.tickEvent("docs.btn",{button:"py"}),m.find(".py")[0]?(m.find(".py").remove(),w(m)):(r(c?c.parent():m,i),w(i))}));g.append(t)}}function w(e){var t;null===(t=e[0])||void 0===t||t.scrollIntoView({behavior:"smooth",block:"center"})}g.children().length&&f.append(u),f.append(m),n.replaceWith(f)}t.defaultClientRenderOptions=n;let d,p=[];function u(t,n,s){if(!t)return Promise.resolve();let i=$("."+t).first();return i[0]?(s.emPixels||(s.emPixels=18),s.layout||(s.layout=e.blocks.BlockLayout.Align),s.splitSvg=!0,p.push({el:i,source:i.text(),options:s,render:n}),i.addClass("lang-shadow"),i.removeClass(t),u(t,n,s)):Promise.resolve()}function m(e){if(!e||e.kind!=ts.SyntaxKind.ExpressionStatement)return null;let t=e;if(!t.expression||t.expression.kind!=ts.SyntaxKind.CallExpression)return null;let n=t.expression;return pxtc.pxtInfo(n).callInfo}function g(t){return d||(d=e.runner.decompileSnippetAsync("",t)),d}function h(t,n){if(!n)return;const s=/^\/(v\d+)/.exec(n.url),i=/^\/(v\d+)/.exec(window.location.pathname),o=/#doc/i.test(window.location.href);n.url&&!s&&i&&!o&&(n.url=`/${i[1]}/${n.url}`),t.append(e.docs.codeCard.render(n,{hideHeader:!0,shortName:!0}))}function f(t,n,s){const i=n.attributes,o=!i.blockHidden&&Blockly.Blocks[i.blockId];if(null==o?void 0:o.codeCard){const n=e.U.clone(o.codeCard);s&&(n.style=s),h(t,n)}else h(t,{name:n.qName,description:i.jsDoc,url:i.help||void 0,style:s})}function k(t,n,s,i){return u(n,((t,n)=>{const o=n.compileProgram;if(!o)return;const a=o.getSourceFile(e.MAIN_TS).statements.slice(0),r=$("<div />").addClass("ui cards");r.attr("role","listbox"),a.forEach((t=>{const s=t.kind,o=m(t);if(o&&n.apiInfo&&n.apiInfo.byQName[o.qName]){const e=n.apiInfo.byQName[o.qName],t=e.attributes,s=Blockly.Blocks[t.blockId];if(i){const i=e,o=n.compileBlocks.blocksInfo.apis.byQName[i.namespace];h(r,{name:o.attributes.blockNamespace||o.name,url:o.attributes.help||"reference/"+(o.attributes.blockNamespace||o.name).toLowerCase(),description:o.attributes.jsDoc,blocksXml:s&&s.codeCard?s.codeCard.blocksXml:t.blockId?`<xml xmlns="http://www.w3.org/1999/xhtml"><block type="${t.blockId}"></block></xml>`:void 0})}else f(r,e)}else switch(s){case ts.SyntaxKind.ExpressionStatement:{const n=t;switch(n.expression.kind){case ts.SyntaxKind.TrueKeyword:case ts.SyntaxKind.FalseKeyword:h(r,{name:"Boolean",url:"blocks/logic/boolean",description:lf("True or false values"),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="logic_boolean"><field name="BOOL">TRUE</field></block></xml>'});break;default:e.debug(`card expr kind: ${n.expression.kind}`)}break}case ts.SyntaxKind.IfStatement:h(r,{name:i?"Logic":"if",url:"blocks/logic"+(i?"":"/if"),description:i?lf("Logic operators and constants"):lf("Conditional statement"),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="controls_if"></block></xml>'});break;case ts.SyntaxKind.WhileStatement:h(r,{name:i?"Loops":"while",url:"blocks/loops"+(i?"":"/while"),description:i?lf("Loops and repetition"):lf("Repeat code while a condition is true."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="device_while"></block></xml>'});break;case ts.SyntaxKind.ForOfStatement:h(r,{name:i?"Loops":"for of",url:"blocks/loops"+(i?"":"/for-of"),description:i?lf("Loops and repetition"):lf("Repeat code for each item in a list."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="controls_for_of"></block></xml>'});break;case ts.SyntaxKind.BreakStatement:h(r,{name:i?"Loops":"break",url:"blocks/loops"+(i?"":"/break"),description:i?lf("Loops and repetition"):lf("Break out of the current loop."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="break_keyword"></block></xml>'});break;case ts.SyntaxKind.ContinueStatement:h(r,{name:i?"Loops":"continue",url:"blocks/loops"+(i?"":"/continue"),description:i?lf("Loops and repetition"):lf("Skip iteration and continue the current loop."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="continue_keyboard"></block></xml>'});break;case ts.SyntaxKind.ForStatement:{let e=t,n=!0;3==e.condition.getChildCount()&&(n=!("0"==e.condition.getChildAt(0).getText()||e.condition.getChildAt(1).kind==ts.SyntaxKind.LessThanToken)),h(r,n?{name:i?"Loops":"for",url:"blocks/loops"+(i?"":"/for"),description:i?lf("Loops and repetition"):lf("Repeat code for a given number of times using an index."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="controls_simple_for"></block></xml>'}:{name:i?"Loops":"repeat",url:"blocks/loops"+(i?"":"/repeat"),description:i?lf("Loops and repetition"):lf("Repeat code for a given number of times."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="controls_repeat_ext"></block></xml>'});break}case ts.SyntaxKind.VariableStatement:h(r,{name:i?"Variables":"variable declaration",url:"blocks/variables"+(i?"":"/assign"),description:i?lf("Variables"):lf("Assign a value to a named variable."),blocksXml:'<xml xmlns="http://www.w3.org/1999/xhtml"><block type="variables_set"></block></xml>'});break;default:e.debug(`card kind: ${s}`)}})),s&&(t=t.parent()),t.replaceWith(r)}),{package:t.package,aspectRatio:t.blocksAspectRatio,assets:t.assetJSON})}function b(t,n){if(!t)return Promise.resolve();let s=$("."+t).first();if(!s[0])return Promise.resolve();s.removeClass(t);const i=e.gallery.parseCodeCardsHtml(s[0]);return i||s.append($("<div/>").addClass("ui segment warning").text("invalid codecard format")),n.snippetReplaceParent&&(s=s.parent()),function(t,n,s){if(!n||0==n.length)return Promise.resolve();if(0==n.length){let i=e.docs.codeCard.render(n[0],s);t.replaceWith(i)}else{let i=document.createElement("div");i.className="ui cards",i.setAttribute("role","listbox"),n.forEach((t=>{const n=/^\/(v\d+)/.exec(t.url),o=/^\/(v\d+)/.exec(window.location.pathname),a=/#doc/i.test(window.location.href);t.url&&!n&&o&&!a&&(t.url=`/${o[1]}${t.url}`);const r=e.docs.codeCard.render(t,s);if(i.appendChild(r),"package"==t.cardType){const n=e.github.parseRepoId((t.url||"").replace(/^\/pkg\//,""));n&&e.packagesConfigAsync().then((o=>{switch(e.github.repoStatus(n,o)){case e.github.GitRepoStatus.Banned:r.remove();break;case e.github.GitRepoStatus.Approved:t.imageUrl=e.github.mkRepoIconUrl(n),i.insertBefore(e.docs.codeCard.render(t,s),r),r.remove()}})).catch((n=>{e.reportException(n),e.debug(`failed to load repo ${t.url}`)}))}})),t.replaceWith(i)}return Promise.resolve()}(s,i,{hideHeader:!0}).then((()=>e.U.delay(1,b(t,n))))}function v(t){return t.pxtUrl?t.pxtUrl+"/--run":e.webConfig&&e.webConfig.runUrl?e.webConfig.runUrl:"/--run"}function y(t){const n={showEdit:!!t.showEdit,run:!!t.simulator};$("code.lang-python").each(((s,o)=>{!function(s,o){"undefined"!=typeof hljs&&($(s).text($(s).text().replace(/^\s*\r?\n/,"")),hljs.highlightBlock(s),i($(s)));const a=e.U.clone(n);o&&(a.run=!1,a.showEdit=!1),c(t,$(s).parent(),$(s),void 0,void 0,void 0,a)}(o,!1),$(o).removeClass("lang-python")}))}t.renderAsync=function(t){return e.analytics.enable(e.Util.userLanguage()),t||(t=n()),t.pxtUrl&&(t.pxtUrl=t.pxtUrl.replace(/\/$/,"")),t.showEdit&&(t.showEdit=!e.BrowserUtils.isIFrame()),function(e){e.packageClass&&($("."+e.packageClass).each(((t,n)=>{let s=$(n),i=s.text().split("\n").map((e=>e.replace(/\s*/g,""))).filter((e=>!!e)).join(",");e.package=e.package?`${e.package},${i}`:i,e.snippetReplaceParent&&(s=s.parent()),s.remove()})),$(".lang-config").each(((t,n)=>{let s=$(n);e.snippetReplaceParent&&(s=s.parent()),s.remove()})))}(t),function(t){let n,s;t.jresClass&&$(`.${t.jresClass}`).each(((e,t)=>{const n=$(t);s=n.text(),t.parentElement.remove()})),t.assetJSONClass&&$(`.${t.assetJSONClass}`).each(((e,t)=>{const s=$(t);n=s.text(),t.parentElement.remove()})),t.assetJSON=function(t,n){if(!t&&!n)return;const s=e.tutorial.parseAssetJson(t)||{};if(n){const t=JSON.parse(n);s[e.TILEMAP_JRES]=JSON.stringify(t),s[e.TILEMAP_CODE]=e.emitTilemapsFromJRes(t)}return s}(n,s)}(t),p=[],function(e){let t=$("code.lang-ghost");e.snippetReplaceParent&&(t=t.parent()),t.remove()}(t),function(e){function t(t){$(`code.lang-blockconfig.${t}`).each(((t,n)=>{let s=$(n);e.snippetReplaceParent&&(s=s.parent()),s.remove()}))}t("local"),t("global")}(t),function(t){t.simulatorClass&&$("."+t.simulatorClass).each(((n,s)=>{let i=$(s),o="81.97%";e.appTarget.simulator&&(o=100/e.appTarget.simulator.aspectRatio+"%");let a=$(`<div class="ui card"><div class="ui content">\n <div style="position:relative;height:0;padding-bottom:${o};overflow:hidden;">\n <iframe style="position:absolute;top:0;left:0;width:100%;height:100%;" allowfullscreen="allowfullscreen" frameborder="0" sandbox="allow-popups allow-forms allow-scripts allow-same-origin"></iframe>\n </div>\n </div></div>`);const r=t.package?"&deps="+encodeURIComponent(t.package):"",l=v(t)+"#nofooter=1"+r,c=encodeURIComponent(i.text().trim()),d=a.find("iframe");d.attr("src",l),d.attr("data-code",c),t.assetJSON&&d.attr("data-assets",JSON.stringify(t.assetJSON)),t.snippetReplaceParent&&(i=i.parent()),i.replaceWith(a)}))}(t),function(t){const n={showEdit:!!t.showEdit,run:!!t.simulator};function s(s,o){"undefined"!=typeof hljs&&($(s).text($(s).text().replace(/^\s*\r?\n/,"")),hljs.highlightBlock(s),i($(s)));const a=e.U.clone(n);o&&(a.run=!1,a.showEdit=!1),c(t,$(s).parent(),$(s),void 0,void 0,void 0,a)}$("code.lang-typescript").each(((e,t)=>{s(t,!1),$(t).removeClass("lang-typescript")})),$("code.lang-typescript-ignore").each(((e,t)=>{$(t).removeClass("lang-typescript-ignore"),$(t).addClass("lang-typescript"),s(t,!0),$(t).removeClass("lang-typescript")})),$("code.lang-typescript-invalid").each(((e,t)=>{$(t).removeClass("lang-typescript-invalid"),$(t).addClass("lang-typescript"),s(t,!0),$(t).removeClass("lang-typescript"),$(t).parent("div").addClass("invalid"),$(t).parent("div").prepend($("<i>",{class:"icon ban"})),$(t).addClass("invalid")})),$("code.lang-typescript-valid").each(((e,t)=>{$(t).removeClass("lang-typescript-valid"),$(t).addClass("lang-typescript"),s(t,!0),$(t).removeClass("lang-typescript"),$(t).parent("div").addClass("valid"),$(t).parent("div").prepend($("<i>",{class:"icon check"})),$(t).addClass("valid")}))}(t),y(t),Promise.resolve().then((()=>b(t.codeCardClass,t))).then((()=>function(t){return"core"==e.appTarget.id?Promise.resolve():g(t).then((t=>{let n={};const s=t.compileBlocks.blocksInfo;s.blocks.forEach((e=>{const t=(e.attributes.blockNamespace||e.namespace).split(".")[0];if(!n[t]){const e=s.apis.byQName[t];e&&e.attributes.color&&(n[t]=e.attributes.color)}}));let i="";return Object.keys(n).forEach((t=>{const s=n[t]||"#dddddd";i+=`\n span.docs.${t.toLowerCase()} {\n background-color: ${s} !important;\n border-color: ${e.toolbox.fadeColor(s,.1,!1)} !important;\n }\n `})),i})).then((t=>(Object.keys(e.toolbox.blockColors).forEach((n=>{const s=e.toolbox.getNamespaceColor(n);t+=`\n span.docs.${n.toLowerCase()} {\n background-color: ${s} !important;\n border-color: ${e.toolbox.fadeColor(s,.1,!1)} !important;\n }\n `})),t))).then((e=>{let t=document.createElement("style");t.id="namespaceColors",t.type="text/css",(document.head||document.getElementsByTagName("head")[0]).appendChild(t),t.appendChild(document.createTextNode(e))}))}(t))).then((()=>function(t){(t=e.Util.clone(t)).emPixels=18,t.snippetMode=!0;const n=$(":not(pre) > code");let s=0;return function i(){if(s>=n.length)return Promise.resolve();const o=$(n[s++]),a=o.text(),r=/^(\|+)([^\|]+)\|+$/.exec(a);if(r){const t=/^(([^\:\.]*?)[\:\.])?(.*)$/.exec(r[2]),n=t[2]?t[2].trim().toLowerCase():"",s=1==r[1].length?`docs inlinebutton ${n}`:`docs inlineblock ${n}`,a=t[3].trim();return o.replaceWith($(`<span class="${s}"/>`).text(e.U.rlf(a))),i()}const l=/^\[(.+)\]$/.exec(a);if(!l)return i();const c=l[1];return e.runner.decompileSnippetAsync(c,t).then((t=>{if(t.blocksSvg){let n=$('<span class="block"/>').append(t.blocksSvg);const s=m(t.compileProgram.getSourceFile(e.MAIN_TS).statements[0]);if(s&&t.apiInfo){const e=t.apiInfo.byQName[s.qName];e&&e.attributes.help&&(n=$('<a class="ui link"/>').attr("href",`/reference/${e.attributes.help}`).append(n))}o.replaceWith(n)}return e.U.delay(1,i())}))}()}(t))).then((()=>k(t,t.linksClass,t.snippetReplaceParent,!1))).then((()=>k(t,t.namespacesClass,t.snippetReplaceParent,!0))).then((()=>function(t,n){const s=t.apisClass;if(!s)return Promise.resolve();const i=$("."+s);return i.length?g(t).then((t=>{const s=t.compileBlocks.blocksInfo,o=e.Util.values(s.apis.byQName).filter((e=>!(e.attributes.hidden||e.attributes.deprecated||e.attributes.blockAliasFor||!e.attributes.jsDoc||!e.attributes.block||/^__/.test(e.name))));i.each(((t,s)=>{let i=$(s);const a=e.Util.toDictionary(i.text().split("\n"),(e=>e)),r=o.filter((e=>!!a[e.attributes.blockNamespace||e.namespace]));if(!r.length)return;r.sort(((e,t)=>{const n=!e.attributes.blockHidden&&Blockly.Blocks[e.attributes.blockId],s=!t.attributes.blockHidden&&Blockly.Blocks[t.attributes.blockId];return!!n!=!!s?(s?1:0)-(n?1:0):e.name.localeCompare(t.name)}));const l=$("<div />").addClass("ui divided items");l.attr("role","listbox"),r.forEach((e=>f(l,e,"item"))),n&&(i=i.parent()),i.replaceWith(l)}))})):Promise.resolve()}(t,t.snippetReplaceParent))).then((()=>function(t){return u(t.signatureClass,((n,s)=>{var i,o,a,r;let l=s.compileProgram;if(!l)return;let d=m(l.getSourceFile(e.MAIN_TS).statements[0]);if(!d||!s.apiInfo)return;const p=s.apiInfo.byQName[d.qName];if(!p)return;let u=Blockly.Blocks[p.attributes.blockId],g=(null===(i=null==u?void 0:u.codeCard)||void 0===i?void 0:i.blocksXml)||void 0;const h=g?e.blocks.render(g):(null===(o=s.compileBlocks)||void 0===o?void 0:o.success)?s.blocksSvg:void 0,f=h?$(h):void 0;let k=ts.pxtc.service.displayStringForSymbol(p,!1,s.apiInfo).split("\n")[1]+";";const b=$('<code class="lang-typescript highlight"/>').text(k),v=(null===(r=null===(a=e.appTarget)||void 0===a?void 0:a.appTheme)||void 0===r?void 0:r.python)&&ts.pxtc.service.displayStringForSymbol(p,!0,s.apiInfo).split("\n")[1],y=v&&$('<code class="lang-python highlight"/>').text(v);if(t.snippetReplaceParent&&(n=n.parent()),e.Util.isTranslationMode()){const e=$('<div class="ui segment" />');e.append($('<div class="ui header"><i class="ui xicon globe"></i></div>')),p.attributes.translationId&&e.append($('<div class="ui message">').text(p.attributes.translationId)),p.attributes.jsDoc&&e.append($('<div class="ui message">').text(p.attributes.jsDoc)),e.insertAfter(n)}c(t,n,b,y,f,s,{showJs:!0,showPy:!0,hideGutter:!0})}),{package:t.package,snippetMode:!0,aspectRatio:t.blocksAspectRatio,assets:t.assetJSON})}(t))).then((()=>function(t){if(t.tutorial)return u(t.snippetClass,((e,n)=>{const s=n.blocksSvg;t.snippetReplaceParent&&(e=e.parent());const i=$('<div class="ui segment codewidget"/>').append(s);e.replaceWith(i)}),{package:t.package,snippetMode:!1,aspectRatio:t.blocksAspectRatio,assets:t.assetJSON});let n=0;return u(t.snippetClass,((s,i)=>{const o=i.compileBlocks&&i.compileBlocks.success?$(i.blocksSvg):void 0,a=i.compilePython&&i.compilePython.success&&i.compilePython.outfiles[e.MAIN_PY],r=$('<code class="lang-typescript highlight"/>').text(s.text().trim()),l=a?$('<code class="lang-python highlight"/>').text(a.trim()):void 0;t.snippetReplaceParent&&(s=s.parent());const d=i.compileJS&&i.compileJS.success,p=t.hex&&d&&i.compileJS.outfiles[pxtc.BINARY_HEX]?i.compileJS.outfiles[pxtc.BINARY_HEX]:void 0,u=`${e.appTarget.nickname||e.appTarget.id}-${t.hexName||""}-${n++}.hex`;c(t,s,r,l,o,i,{showEdit:t.showEdit,run:t.simulator,hexname:u,hex:p})}),{package:t.package,aspectRatio:t.blocksAspectRatio,assets:t.assetJSON})}(t))).then((()=>function(e){return u(e.blocksClass,((t,n)=>{const s=n.blocksSvg;e.snippetReplaceParent&&(t=t.parent());const i=$('<div class="ui segment codewidget"/>').append(s);t.replaceWith(i)}),{package:e.package,snippetMode:!0,aspectRatio:e.blocksAspectRatio,assets:e.assetJSON})}(t))).then((()=>{return(n=t).blocksXmlClass?function t(n,s,i){let o=$("."+n).first();return o[0]?(i.emPixels||(i.emPixels=18),i.splitSvg=!0,e.runner.compileBlocksAsync(o.text(),i).then((a=>{try{s(o,a)}catch(t){e.reportException(t),o.append($("<div/>").addClass("ui segment warning").text(t.message))}return o.removeClass(n),e.U.delay(1,t(n,s,i))}))):Promise.resolve()}(n.blocksXmlClass,((e,t)=>{const s=t.blocksSvg;n.snippetReplaceParent&&(e=e.parent());const i=$('<div class="ui segment codewidget"/>').append(s);e.replaceWith(i)}),{package:n.package,snippetMode:!0,aspectRatio:n.blocksAspectRatio,assets:n.assetJSON}):Promise.resolve();var n})).then((()=>{return(n=t).diffBlocksXmlClass?function t(n,s,i){let o=$("."+n).first();if(!o[0])return Promise.resolve();i.emPixels||(i.emPixels=18),i.splitSvg=!0;const a=o.text().split(/-{10,}/),r=a[0],l=a[1];return e.runner.compileBlocksAsync("",i).then((a=>{o.removeClass(n);try{const t=e.blocks.diffXml(r,l);t?(a.blocksSvg=t.svg,s(o,a)):o.text("no changes")}catch(t){e.reportException(t),o.append($("<div/>").addClass("ui segment warning").text(t.message))}return e.U.delay(1,t(n,s,i))}))}(n.diffBlocksXmlClass,((e,t)=>{const s=t.blocksSvg;n.snippetReplaceParent&&(e=e.parent());const i=$('<div class="ui segment codewidget"/>').append(s);e.replaceWith(i)}),{package:n.package,snippetMode:!0,aspectRatio:n.blocksAspectRatio,assets:n.assetJSON}):Promise.resolve();var n})).then((()=>{return(n=t).diffBlocksClass?function t(s){let i=$("."+s).first();if(!i[0])return Promise.resolve();const{fileA:o,fileB:a}=e.diff.split(i.text(),{removeTrailingSemiColumns:!0});return e.U.promiseMapAllSeries([o,a],(t=>e.runner.decompileSnippetAsync(t,{generateSourceMap:!0}))).then((r=>{try{const t=e.blocks.decompiledDiffAsync(o,r[0].compileBlocks,a,r[1].compileBlocks,{hideDeletedTopBlocks:!0,hideDeletedBlocks:!0}),s=e.diff.render(o,a,{hideLineNumbers:!0,hideMarkerLine:!0,hideMarker:!0,hideRemoved:!0,update:!0,ignoreWhitespace:!0});let l;const[d,p]=r.map((t=>t.compilePython&&t.compilePython.outfiles&&t.compilePython.outfiles[e.MAIN_PY]));d&&p&&(l=e.diff.render(d,p,{hideLineNumbers:!0,hideMarkerLine:!0,hideMarker:!0,hideRemoved:!0,update:!0,ignoreWhitespace:!0})),c(n,i.parent(),$(s),l&&$(l),$(t.svg),void 0,{showEdit:!1,run:!1,hexname:void 0,hex:void 0})}catch(t){e.reportException(t),i.append($("<div/>").addClass("ui segment warning").text(t.message))}return e.U.delay(1,t(s))}))}(n.diffBlocksClass):Promise.resolve();var n})).then((()=>{return(n=t).diffClass?function t(s){let i=$("."+s).first();if(!i[0])return Promise.resolve();const{fileA:o,fileB:a}=e.diff.split(i.text());try{const t=e.diff.render(o,a,{hideLineNumbers:!0,hideMarkerLine:!0,hideMarker:!0,hideRemoved:!0,update:!0,ignoreWhitespace:!0});n.snippetReplaceParent&&(i=i.parent());const r=$('<div class="ui segment codewidget"/>').append(t);i.removeClass(s),i.replaceWith(r)}catch(t){e.reportException(t),i.append($("<div/>").addClass("ui segment warning").text(t.message))}return e.U.delay(1,t(s))}(n.diffClass):Promise.resolve();var n})).then((()=>function(t){const n={showEdit:!!t.showEdit,run:!!t.simulator};return u(t.staticPythonClass,((i,o)=>{const a=o.compilePython;if(a&&a.success){const r=i.clone().removeClass("lang-shadow").addClass("highlight"),l=r.clone().addClass("lang-python").text(a.outfiles[e.MAIN_PY]);r.addClass("lang-typescript"),s(l),c(t,i.parent(),r,l,void 0,o,n)}}),{package:t.package,snippetMode:!0,assets:t.assetJSON})}(t))).then((()=>function(t){return t.projectClass?function n(){let s=$("."+t.projectClass).first(),i=s[0];if(!i)return Promise.resolve();s.removeClass(t.projectClass);let o=e.Cloud.parseScriptId(i.innerText);if(o){if(t.snippetReplaceParent){i=i.parentElement;let e=document.createElement("div");i.parentElement.insertBefore(e,i),i.parentElement.removeChild(i),i=e}return e.runner.renderProjectAsync(i,o).then((()=>n()))}return n()}():Promise.resolve()}(t))).then((()=>function(){const t={};return function n(){const s=p.shift();if(!s)return Promise.resolve();const{el:i,options:o,render:a}=s;return e.runner.decompileSnippetAsync(i.text(),o).then((n=>{const s=n.compileJS&&n.compileJS.diagnostics&&n.compileJS.diagnostics.filter((e=>e.category==pxtc.DiagnosticCategory.Error));s&&s.length&&s.forEach((t=>e.reportError("docs.decompile",""+t.messageText,{code:t.code+""}))),n.blocksSvg.querySelectorAll("defs *").forEach((e=>{t[e.id]?e.remove():t[e.id]=!0})),a(i,n)}),(t=>{e.reportException(t),i.append($("<div/>").addClass("ui segment warning").text(t.message))})).finally((()=>(i.removeClass("lang-shadow"),n())))}().then((()=>{Blockly.Workspace.getAll().forEach((e=>e.dispose())),e.blocks.cleanRenderingWorkspace()}))}()))}}(e.runner||(e.runner={}))}(pxt||(pxt={})),function(e){!function(t){class n{constructor(e,t){this.ksPkg=e,this.topPkg=t,this.files={}}getKsPkg(){return this.ksPkg}getPkgId(){return this.ksPkg?this.ksPkg.id:this.id}isTopLevel(){return this.ksPkg&&0==this.ksPkg.level}setFiles(e){this.files=e}getAllFiles(){return e.Util.mapMap(this.files,((e,t)=>t))}}class s{constructor(){this.githubPackageCache={}}readFile(t,n){let s=d(t);return e.U.lookup(s.files,n)}writeFile(e,t,n){d(e).files[t]=n}getHexInfoAsync(t){return e.hexloader.getHexInfoAsync(this,t)}cacheStoreAsync(e,t){return Promise.resolve()}cacheGetAsync(e){return Promise.resolve(null)}patchDependencies(t,n,s){if(!s)return!1;const i=e.github.parseRepoId(s);if(!i)return!1;for(const n of Object.keys(t.dependencies)){const o=t.dependencies[n],a=e.github.parseRepoId(o);if(a&&i.fullName==a.fullName)return e.semver.strcmp(i.tag,a.tag)<0&&(t.dependencies[n]=s),!0}return!1}downloadPackageAsync(t,n){let s,i=t.verProtocol();"github"==i&&(s=this.githubPackageCache[t._verspec]);let o=d(t);return(s?Promise.resolve(s):t.commonDownloadAsync()).then((a=>{if(a)return"github"!=i||s||(this.githubPackageCache[t._verspec]=e.Util.clone(a)),o.setFiles(a),Promise.resolve();if("empty"==i){if(0==Object.keys(o.files).length&&o.setFiles(p()),n&&n.length){const s=d(t).files,i=JSON.parse(s[e.CONFIG_NAME]);n.forEach((e=>{c(i,e)})),s[e.CONFIG_NAME]=e.Package.stringifyConfig(i)}return Promise.resolve()}if("docs"==i){let n=p(),s=JSON.parse(n[e.CONFIG_NAME]);return t.verArgument().split(",").forEach((e=>{c(s,e)})),s.yotta||(s.yotta={}),s.yotta.ignoreConflicts=!0,n[e.CONFIG_NAME]=e.Package.stringifyConfig(s),o.setFiles(n),Promise.resolve()}return"invalid"==i?(e.log(`skipping invalid pkg ${t.id}`),Promise.resolve()):Promise.reject(`Cannot download ${t.version()}; unknown protocol`)}))}}let i,o,a,r,l;function c(e,t){let n=/^([a-zA-Z0-9_-]+)(=(.+))?$/.exec(t);if(n){if(n[3]&&this&&this.patchDependencies(e,n[1],n[3]))return!1;e.dependencies[n[1]]=n[3]||"*"}else console.warn(`unknown package syntax ${t}`);return!0}function d(e){let s=e._editorPkg;if(s)return s;let i=null;e!=t.mainPkg&&(i=d(t.mainPkg));let o=new n(e,i);return e==t.mainPkg&&(o.topPkg=o),e._editorPkg=o,o}function p(){let t=e.appTarget.tsprj,n=e.U.clone(t.files);return n[e.CONFIG_NAME]=e.Package.stringifyConfig(t.config),n[e.MAIN_BLOCKS]="",n}function u(){e.setAppTarget(window.pxtTargetBundle),e.analytics.enable(e.Util.userLanguage()),e.Util.assert(!!e.appTarget);const t=window.location.href;let n,s=!1;if(/[&?]translate=1/.test(t)&&!e.BrowserUtils.isIE())n=ts.pxtc.Util.TRANSLATION_LOCALE,s=!0,e.Util.enableLiveLocalizationUpdates();else{const i=/PXT_LANG=(.*?)(?:;|$)/.exec(document.cookie),o=/(live)?(force)?lang=([a-z]{2,}(-[A-Z]+)?)/i.exec(t);n=o?o[3]:i&&i[1]||e.appTarget.appTheme.defaultLocale||navigator.userLanguage||navigator.language;const a=e.appTarget.appTheme.defaultLocale,r=null==n?void 0:n.toLocaleLowerCase(),l=e.BrowserUtils.isLocalHostDev()&&(!r||(a?a.toLocaleLowerCase()===r:"en"===r||"en-us"===r));(e.BrowserUtils.isPxtElectron()||l||e.appTarget.appTheme.disableLiveTranslations)&&!(null==o?void 0:o[1])||e.Util.enableLiveLocalizationUpdates(),s=!!o&&!!o[2]}const i=e.appTarget.versions;$&&$.fn&&$.fn.embed&&$.fn.embed.settings&&$.fn.embed.settings.sources&&$.fn.embed.settings.sources.youtube&&($.fn.embed.settings.sources.youtube.url="//www.youtube.com/embed/{id}?rel=0");const o=e.webConfig;return e.Util.updateLocalizationAsync({targetId:e.appTarget.id,baseUrl:o.commitCdnUrl,code:n,pxtBranch:i?i.pxtCrowdinBranch:"",targetBranch:i?i.targetCrowdinBranch:"",force:s}).then((()=>m()))}function m(){t.mainPkg=new e.MainPackage(new s)}function g(e){console.error(e)}function h(n,s,i){const a=n?/\w+:\w+/.test(n)?n:"pub:"+n:"empty:tsprj";let r,l,c;return o&&o._verspec==a?(t.mainPkg=o,r=t.mainPkg.host(),l=Promise.resolve(),c=Promise.resolve()):(r=t.mainPkg.host(),t.mainPkg=new e.MainPackage(r),t.mainPkg._verspec=n?/\w+:\w+/.test(n)?n:"pub:"+n:"empty:tsprj",l=r.downloadPackageAsync(t.mainPkg,i),c=t.mainPkg.installAllAsync(),o=t.mainPkg),l.then((()=>r.readFile(t.mainPkg,e.CONFIG_NAME))).then((n=>n?c.then((()=>{if(s){let n=d(t.mainPkg);n.files[e.MAIN_TS]=s;let i=JSON.parse(n.files[e.CONFIG_NAME]);i.name=window.location.href.split("/").pop().split(/[?#]/)[0],n.files[e.CONFIG_NAME]=e.Package.stringifyConfig(i),t.mainPkg.config.name=i.name,-1==t.mainPkg.config.files.indexOf(e.MAIN_BLOCKS)&&t.mainPkg.config.files.push(e.MAIN_BLOCKS)}})).catch((e=>{g(lf("Cannot load extension: {0}",e.message))})):Promise.resolve()))}function f(e){let n=t.mainPkg.getTargetOptions();return n.isNative=!!e,n.hasHex=!!e,t.mainPkg.getCompileOptionsAsync(n)}function k(e,t){return f(e).then((e=>{t&&t(e);let n=pxtc.compile(e);return n.diagnostics&&n.diagnostics.length>0&&n.diagnostics.forEach((e=>{console.error(e.messageText)})),n}))}function b(n,s,i){var o;a&&s.embedId&&r===s.embedId?a.container=n:(a=new pxsim.SimulatorDriver(n),r=s.embedId);const{fnArgs:l,parts:c,usedBuiltinParts:d}=i||{};let p=e.appTarget.simulator.boardDefinition,u=w(s.id),m={debug:s.debug,mute:s.mute,boardDefinition:p,parts:c,builtinParts:d,fnArgs:l,cdnUrl:e.webConfig.commitCdnUrl,localizedStrings:e.Util.getLocalizedStrings(),highContrast:s.highContrast,storedState:u,light:s.light,single:s.single,hideSimButtons:s.hideSimButtons,autofocus:s.autofocus,queryParameters:s.additionalQueryParameters,mpRole:s.mpRole,theme:null===(o=t.mainPkg.config)||void 0===o?void 0:o.theme};return e.appTarget.simulator&&!s.fullScreen&&(m.aspectRatio=c.length&&e.appTarget.simulator.partsAspectRatio?e.appTarget.simulator.partsAspectRatio:e.appTarget.simulator.aspectRatio),a.setRunOptions(m),m}async function v(t){try{const n=Date.now(),s=await e.Cloud.downloadBuiltSimJsInfoAsync(t.id);return e.tickEvent("perfMeasurement",{durationMs:Date.now()-n,operation:"fetchSimJsInfo"}),s}catch(t){return void e.debug(t.toString())}}async function y(n){var s;const i=Date.now();await h(n.id,n.code,n.dependencies);let o=!1;const a=e.appTarget.versions.target;let r=await k(!1,(s=>{var i;if(s.computeUsedParts=!0,n.debug&&(s.breakpoints=!0),n.assets){const t=JSON.parse(n.assets);for(const n of Object.keys(t)){const i=t[n];if(s.fileSystem[n]=i,s.sourceFiles.indexOf(n)<0&&s.sourceFiles.push(n),/\.jres$/.test(n)){const t=JSON.parse(i);s.jres=e.inflateJRes(t,s.jres)}}}if(n.code&&(s.fileSystem[e.MAIN_TS]=n.code),s.target.preferredEditor===e.PYTHON_PROJECT_NAME){s.target.preferredEditor=e.JAVASCRIPT_PROJECT_NAME,s.ast=!0;const t=E(pxtc.compile(s).ast,s);s.apisInfo=t,s.target.preferredEditor=e.PYTHON_PROJECT_NAME}const r=null===(i=t.mainPkg.config.targetVersions)||void 0===i?void 0:i.target;if(r&&a&&e.semver.cmp(e.semver.parse(r),e.semver.parse(a))<0)for(const t of Object.keys(s.fileSystem))!e.Util.startsWith(t,"pxt_modules")&&e.Util.endsWith(t,".ts")&&(o=!0,s.fileSystem[t]=e.patching.patchJavaScript(r,s.fileSystem[t]))}));(null===(s=r.diagnostics)||void 0===s?void 0:s.length)>0&&o&&(e.log("Compile with upgrade rules failed, trying again with original code"),r=await k(!1,(t=>{n.code&&(t.fileSystem[e.MAIN_TS]=n.code)}))),r.diagnostics&&r.diagnostics.length>0&&console.error("Diagnostics",r.diagnostics);const l=pxtc.buildSimJsInfo(r);return l.parts=r.usedParts,e.tickEvent("perfMeasurement",{durationMs:Date.now()-i,operation:"buildSimJsInfo"}),l}function w(e){let t={};try{let n=window.localStorage.getItem(e);n&&(t=JSON.parse(n))}catch(e){}return t}function x(n,s){if(t.editorLanguageMode=n,s!=e.Util.localeInfo()){const t=/^live-/;return t.test(s)&&e.Util.enableLiveLocalizationUpdates(),e.Util.updateLocalizationAsync({targetId:e.appTarget.id,baseUrl:e.webConfig.commitCdnUrl,code:s.replace(t,""),pxtBranch:e.appTarget.versions.pxtCrowdinBranch,targetBranch:e.appTarget.versions.targetCrowdinBranch})}return Promise.resolve()}function C(t){let n=t.data;if(n)switch(n.type){case"fileloaded":let t=n,s=t.name,i=l.Blocks;/\.ts$/i.test(s)?i=l.TypeScript:/\.py$/i.test(s)&&(i=l.Python),x(i,t.locale);break;case"popout":let o=/((\/v[0-9+])\/)?[^\/]*#(doc|md):([^&?:]+)/i.exec(window.location.href);if(o){const t=e.webConfig.docsUrl||"/--docs";let n=o[2]||"",s="doc"==o[3]?e.webConfig.isStatic?`/docs${o[4]}.html`:`${o[4]}`:`${t}?md=${o[4]}`;window.parent&&window.parent.postMessage({type:"opendoc",url:e.BrowserUtils.urlJoin(n,s)},"*")}break;case"localtoken":let a=n;a&&a.localToken&&(e.Cloud.localToken=a.localToken,I.forEach((e=>e())),I=[])}}function S(t,n){return e.Cloud.privateGetTextAsync(n+"/text").then((e=>JSON.parse(e))).then((e=>P(t,e,n)))}function P(n,s,i=null,o=!1){const a=JSON.parse(s[e.CONFIG_NAME])||{};let r=`# ${a.name} ${a.version?a.version:""}\n\n`;const c="README.md";s[c]&&(r+=s[c].replace(/^#+/,"$0#")+"\n"),a.files.filter((t=>t!=e.CONFIG_NAME&&t!=c)).filter((e=>function(e,t){switch(t){case l.Blocks:return/\.blocks?$/.test(e);case l.TypeScript:return/\.ts?$/.test(e);case l.Python:return/\.py?$/.test(e)}}(e,t.editorLanguageMode))).forEach((e=>{/^main\.(ts|blocks)$/.test(e)||(r+=`\n## ${e}\n`),/\.ts$/.test(e)?r+=`\`\`\`typescript\n${s[e]}\n\`\`\`\n`:/\.blocks?$/.test(e)?r+=`\`\`\`blocksxml\n${s[e]}\n\`\`\`\n`:r+=`\`\`\`${e.substr(e.indexOf("."))}\n${s[e]}\n\`\`\`\n`}));const d=a&&a.dependencies&&Object.keys(a.dependencies).filter((t=>t!=e.appTarget.corepkg));if(d&&d.length&&(r+=`\n## ${lf("Extensions")} #extensions\n\n${d.map((e=>`* ${e}, ${a.dependencies[e]}`)).join("\n")}\n\n\`\`\`package\n${d.map((e=>`${e}=${a.dependencies[e]}`)).join("\n")}\n\`\`\`\n`),i){let t=(e.appTarget.appTheme.shareUrl||"https://makecode.com/")+i;o&&(t="`"+t+"`"),r+=`\n${t}\n\n`}console.debug(`print md: ${r}`);return A(n,r,{print:!0})}e.react.getTilemapProject||(e.react.getTilemapProject=()=>(i||(i=new e.TilemapProject,i.loadPackage(t.mainPkg)),i)),t.initHost=m,t.initFooter=function(t,n){if(!t)return;let s=e.appTarget.appTheme,i=$("body"),o=$(t),a=$("<a/>").attr("href",s.homeUrl).attr("target","_blank");o.append(a),s.organizationLogo?a.append($("<img/>").attr("src",e.Util.toDataUri(s.organizationLogo))):a.append(lf("powered by {0}",s.title)),i.mouseenter((e=>o.fadeOut())),i.mouseleave((e=>o.fadeIn()))},t.showError=g,t.generateHexFileAsync=function(t){return h(t.id).then((()=>k(!0,(n=>{t.code&&(n.fileSystem[e.MAIN_TS]=t.code)})))).then((e=>(e.diagnostics&&e.diagnostics.length>0&&console.error("Diagnostics",e.diagnostics),e.outfiles[pxtc.BINARY_HEX])))},t.generateVMFileAsync=function(t){return e.setHwVariant("vm"),h(t.id).then((()=>k(!0,(n=>{t.code&&(n.fileSystem[e.MAIN_TS]=t.code)})))).then((e=>(console.log(e),e)))},t.simulateAsync=async function(t,n){var s,i;const o=n.builtJsInfo||await v(n)||await y(n),{js:r}=o;if(!r)return void console.error("Program failed to compile");const l=b(t,n,o);return a.options.messageSimulators=null===(i=null===(s=e.appTarget)||void 0===s?void 0:s.simulator)||void 0===i?void 0:i.messageSimulators,a.options.onSimulatorCommand=e=>{"restart"===e.command&&(l.storedState=w(n.id),a.run(r,l)),"setstate"==e.command&&e.stateKey&&function(e,t,n){let s=w(e);if(!e)return;null!=n?s[t]=n:delete s[t];try{window.localStorage.setItem(e,JSON.stringify(s))}catch(e){}}(n.id,e.stateKey,e.stateValue)},o.breakpoints&&n.debug&&a.setBreakpoints(o.breakpoints),a.run(r,l),o},t.preloadSim=function(t,n){var s,i;b(t,n),a.preload((null===(i=null===(s=e.appTarget)||void 0===s?void 0:s.simulator)||void 0===i?void 0:i.aspectRatio)||1,!0)},t.currentDriver=function(){return a},t.postSimMessage=function(e){null==a||a.postMessage(e)},t.fetchSimJsInfo=v,t.buildSimJsInfo=y,function(e){e[e.Blocks=0]="Blocks",e[e.TypeScript=1]="TypeScript",e[e.Python=2]="Python"}(l=t.LanguageMode||(t.LanguageMode={})),t.editorLanguageMode=l.Blocks,t.setEditorContextAsync=x,t.startRenderServer=function(){e.tickEvent("renderer.ready");const n=[];let s;function i(){if(s)return;const o=n.shift();if(!o)return;const a=o.options||{};a.splitSvg=!1,e.tickEvent("renderer.job");const r=/^\s*<xml/.test(o.code);s=(async()=>{await e.BrowserUtils.loadBlocklyAsync();const n=(r?await e.runner.compileBlocksAsync(o.code,a):await t.decompileSnippetAsync(o.code,o.options)).blocksSvg,s=n.viewBox.baseVal.width,i=n.viewBox.baseVal.height,l=n?await e.blocks.layout.blocklyToSvgAsync(n,0,0,s,i):void 0;let c;try{c=l?await e.BrowserUtils.encodeToPngAsync(l.xml,{width:s,height:i}):void 0}catch(e){console.warn(e)}window.parent.postMessage({source:"makecode",type:"renderblocks",id:o.id,width:null==l?void 0:l.width,height:null==l?void 0:l.height,svg:null==l?void 0:l.svg,uri:c||(null==l?void 0:l.xml),css:null==l?void 0:l.css},"*")})().catch((e=>{window.parent.postMessage({source:"makecode",type:"renderblocks",id:o.id,error:e.message},"*")})).finally((()=>{s=void 0,i()}))}e.editor.initEditorExtensionsAsync().then((()=>{window.addEventListener("message",(function(e){const t=e.data;"renderblocks"==t.type&&(n.push(t),i())}),!1),window.parent.postMessage({source:"makecode",type:"renderready",versions:e.appTarget.versions},"*")}))},t.startDocsServer=function(t,n,s){e.tickEvent("docrenderer.ready");const i=[];function o(i,a){e.debug(`rendering ${i}`),s&&$(s).hide(),$(n).hide(),$(t).show(),e.U.delay(100).then((()=>{switch(i){case"print":const t=window.localStorage.printjob;return delete window.localStorage.printjob,P(n,JSON.parse(t),void 0,!0).then((()=>pxsim.print(1e3)));case"project":return P(n,JSON.parse(a)).then((()=>pxsim.print(1e3)));case"projectid":return S(n,JSON.parse(a)).then((()=>pxsim.print(1e3)));case"doc":return async function(t,n){n=n.replace(/^\//,"");const s=await e.Cloud.markdownAsync(n,void 0,!0);try{await A(t,s,{path:n})}catch(e){console.warn(e)}}(n,a);case"book":return function(t,n){n=n.replace(/^\//,""),e.tickEvent("book",{id:n}),e.log(`rendering book from ${n}`);let s;return $("#loading").find(".loader").addClass("text").text(lf("Compiling your book (this may take a minute)")),e.U.delay(100).then((()=>e.Cloud.markdownAsync(n,void 0,!0))).then((t=>{s=e.docs.buildTOC(t),e.log(`TOC: ${JSON.stringify(s,null,2)}`);const n=[];return e.docs.visitTOC(s,(e=>{/^\//.test(e.path)&&!/^\/pkg\//.test(e.path)&&n.push(e)})),e.U.promisePoolAsync(4,n,(async t=>{try{const n=await e.Cloud.markdownAsync(t.path,void 0,!0);t.markdown=n}catch(e){t.markdown=`_${t.path} failed to load._`}}))})).then((n=>{let i=s[0].name;return e.docs.visitTOC(s,(e=>{e.markdown&&(i+="\n\n"+e.markdown)})),A(t,i)}))}(n,a);default:return A(n,a)}})).catch((t=>{$(n).html(`\n <img style="height:4em;" src="${e.appTarget.appTheme.docsLogo}" />\n <h1>${lf("Oops")}</h1>\n <h3>${lf("We could not load the documentation, please check your internet connection.")}</h3>\n <button class="ui button primary" id="tryagain">${lf("Try Again")}</button>`),$(n).find("#tryagain").click((()=>{o(i,a)})),window.parent&&window.parent.postMessage({type:"docfailed",docType:i,src:a},"*")})).finally((()=>{$(t).hide(),s&&$(s).show(),$(n).show()})).then((()=>{}))}function a(e,t){t?(pxsim.U.addClass(e,"disabled"),e.setAttribute("aria-disabled","true")):(pxsim.U.removeClass(e,"disabled"),e.setAttribute("aria-disabled","false"))}async function r(){let e=/^#(doc|md|tutorial|book|project|projectid|print):([^&?:]+)(:([^&?:]+):([^&?:]+))?/i.exec(window.location.hash);if(e){if(s&&(i.push(window.location.hash),i.length>10&&i.shift(),i.length>1&&a(s,!1)),e[4]){let t=l.TypeScript;/^blocks$/i.test(e[4])?t=l.Blocks:/^python$/i.test(e[4])&&(t=l.Python),await x(t,e[5])}o(e[1],decodeURIComponent(e[2]))}}s&&(s.addEventListener("click",(()=>{!function(){if(!s)return;i.length>1&&(i.pop(),window.location.hash=i.pop());i.length<=1&&a(s,!0)}()})),a(s,!0)),e.editor.initEditorExtensionsAsync().then((()=>{window.addEventListener("message",C,!1),window.addEventListener("hashchange",(()=>{r()}),!1),parent.postMessage({type:"sidedocready"},"*"),setTimeout((()=>r()),1)}))},t.renderProjectAsync=S,t.renderProjectFilesAsync=P;function A(n,s,i={}){const o=e.docs.renderMarkdown({template:'\n<aside id=button class=box>\n <a class="ui primary button" href="@ARGS@">@BODY@</a>\n</aside>\n\n<aside id=vimeo>\n<div class="ui two column stackable grid container">\n<div class="column">\n <div class="ui embed mdvid" data-source="vimeo" data-id="@ARGS@" data-placeholder="/thumbnail/1024/vimeo/@ARGS@" data-icon="video play">\n </div>\n</div></div>\n</aside>\n\n<aside id=youtube>\n<div class="ui two column stackable grid container">\n<div class="column">\n <div class="ui embed mdvid" data-source="youtube" data-id="@ARGS@" data-placeholder="https://img.youtube.com/vi/@ARGS@/0.jpg">\n </div>\n</div></div>\n</aside>\n\n<aside id=section>\n \x3c!-- section @ARGS@ --\x3e\n</aside>\n\n<aside id=hide class=box>\n <div style=\'display:none\'>\n @BODY@\n </div>\n</aside>\n\n<aside id=avatar class=box>\n <div class=\'avatar @ARGS@\'>\n <div class=\'avatar-image\'></div>\n <div class=\'ui compact message\'>\n @BODY@\n </div>\n </div>\n</aside>\n\n<aside id=hint class=box>\n <div class="ui info message">\n <div class="content">\n @BODY@\n </div>\n </div>\n</aside>\n\n<aside id=codecard class=box>\n <pre><code class="lang-codecard">@BODY@</code></pre>\n</aside>\n\n<aside id=tutorialhint class=box>\n <div class="ui hint message">\n <div class="content">\n @BODY@\n </div>\n </div>\n</aside>\n\n<aside id=reminder class=box>\n <div class="ui warning message">\n <div class="content">\n @BODY@\n </div>\n </div>\n</aside>\n\n<aside id=alert class=box>\n <div class="ui negative message">\n <div class="content">\n @BODY@\n </div>\n </div>\n</aside>\n\n<aside id=tip class=box>\n <div class="ui positive message">\n <div class="content">\n @BODY@\n </div>\n </div>\n</aside>\n\n\x3c!-- wrapped around ordinary content --\x3e\n<aside id=main-container class=box>\n <div class="ui text">\n @BODY@\n </div>\n</aside>\n\n\x3c!-- used for \'column\' box - they are collected and wrapped in \'column-container\' --\x3e\n<aside id=column class=aside>\n <div class=\'column\'>\n @BODY@\n </div>\n</aside>\n<aside id=column-container class=box>\n <div class="ui three column stackable grid text">\n @BODY@\n </div>\n</aside>\n@breadcrumb@\n@body@',markdown:s,theme:e.appTarget.appTheme});let a=i.blocksAspectRatio||window.innerHeight<window.innerWidth?1.62:1/1.62;$(n).html(o),$(n).find("a").attr("target","_blank");const r=e.runner.defaultClientRenderOptions();return r.tutorial=!!i.tutorial,r.blocksAspectRatio=a||r.blocksAspectRatio,r.showJavaScript=t.editorLanguageMode==l.TypeScript,i.print&&(r.showEdit=!1,r.simulator=!1),e.runner.renderAsync(r).then((()=>{$(n).find('a[href^="/"]').removeAttr("target").each(((e,t)=>{$(t).attr("href","#doc:"+$(t).attr("href").replace(/^\//,""))})),$(n).find(".ui.embed").embed()}))}let T,N;function E(e,t){N||(N={});const n=Object.keys(t.fileSystem).sort().join(";");return N[n]||(N[n]=pxtc.getApiInfo(e,t.jres)),N[n]}t.renderMarkdownAsync=A,t.decompileSnippetAsync=function(n,s){const{assets:o,forceCompilation:a,snippetMode:r,generateSourceMap:l}=s||{};return h(s&&s.packageId?"pub:"+s.packageId:s&&s.package?"docs:"+s.package:null,n).then((()=>f(!!e.appTarget.compile&&e.appTarget.compile.hasHex))).then((c=>{if(n&&(c.fileSystem[e.MAIN_TS]=n),c.ast=!0,o)for(const e of Object.keys(o))c.sourceFiles.indexOf(e)<0&&c.sourceFiles.push(e),c.fileSystem[e]=o[e];let d,p,u;a?(d=pxtc.compile(c),p=d&&d.ast):p=pxtc.getTSProgram(c,T),T=p,e.appTarget.appTheme.python&&(u=ts.pxtc.transpile.tsToPy(p,e.MAIN_TS));let m=E(p,c);return ts.pxtc.localizeApisAsync(m,t.mainPkg).then((()=>{let n=pxtc.getBlocksInfo(m);e.blocks.initializeAndInject(n);const a=null==o?void 0:o[e.TILEMAP_JRES],c=null==o?void 0:o[e.IMAGES_JRES];(a||c)&&(i=new e.TilemapProject,i.loadPackage(t.mainPkg),a&&i.loadTilemapJRes(JSON.parse(a),!0),c&&i.loadAssetsJRes(JSON.parse(c)));let g=pxtc.decompiler.decompileToBlocks(n,p.getSourceFile(e.MAIN_TS),{snippetMode:r,generateSourceMap:l});if(g.diagnostics&&g.diagnostics.length>0&&g.diagnostics.forEach((e=>console.error(e.messageText))),!g.success)return{package:t.mainPkg,compileProgram:p,compileJS:d,compileBlocks:g,apiInfo:m};e.debug(g.outfiles[e.MAIN_BLOCKS]);const h=e.blocks.render(g.outfiles[e.MAIN_BLOCKS],s);return(a||c)&&(i=null),{package:t.mainPkg,compileProgram:p,compileJS:d,compileBlocks:g,compilePython:u,apiInfo:m,blocksSvg:h}}))}))},t.compileBlocksAsync=function(n,s){const{assets:o}=s||{};return h(s&&s.packageId?"pub:"+s.packageId:s&&s.package?"docs:"+s.package:null,"").then((()=>f(!!e.appTarget.compile&&e.appTarget.compile.hasHex))).then((a=>{if(a.ast=!0,o)for(const e of Object.keys(o))a.sourceFiles.indexOf(e)<0&&a.sourceFiles.push(e),a.fileSystem[e]=o[e];const r=E(pxtc.compile(a).ast,a);return ts.pxtc.localizeApisAsync(r,t.mainPkg).then((()=>{const a=pxtc.getBlocksInfo(r);e.blocks.initializeAndInject(a);const l=null==o?void 0:o[e.TILEMAP_JRES],c=null==o?void 0:o[e.IMAGES_JRES];(l||c)&&(i=new e.TilemapProject,i.loadPackage(t.mainPkg),l&&i.loadTilemapJRes(JSON.parse(l),!0),c&&i.loadAssetsJRes(JSON.parse(c)));const d=e.blocks.render(n,s);return(l||c)&&(i=null),{package:t.mainPkg,blocksSvg:d,apiInfo:r}}))}))};let I=[];t.initCallbacks=[],t.init=function(){u().then((()=>{for(let e=0;e<t.initCallbacks.length;++e)t.initCallbacks[e]()}))},function(){let e=window.ksRunnerWhenLoaded;e&&e()}()}(e.runner||(e.runner={}))}(pxt||(pxt={}));
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
:root{--black:#000;--white:#fff;--primary-color:#aa278f;--secondary-color:#eac6eb;--tertiary-color:#850a6b;--hover-color:var(--secondary-color);--active-color:var(--tertiary-color);--inactive-color:var(--secondary-color);--inactive-hover-color:#6e6e6e;--invert-active-color:#fff;--invert-hover-text-color:#850a6b;--body-background-color:#f9f9f9;--default-card-color:#ccc;--card-hover-color:#bfbfbf;--card-border-color:#e9eef2;--dropdown-hover-color:#ccc;--inverted-text-color:var(--white);--subtitle-text-color:#6e6e6e;--header-height:4rem;--header-padding-top:1rem;--body-font-family:"Share Tech Mono",Monaco,Menlo,"Ubuntu Mono",Consolas,source-code-pro,monospace;--feature-text-font:Segoe UI,Tahoma,Geneva,Verdana;--frame-loader-zindex:30;--above-frame-zindex:50;--modal-dimmer-zindex:100;--fullscreen-modal-zindex:90;--graph-backround-zindex:10;--above-graph-zindex:20;--high-contrast-text:var(--white);--high-contrast-background:var(--black);--high-contrast-highlight:#ff0;--high-contrast-focus-outline:2px solid var(--high-contrast-highlight);--high-contrast-hyperlink:#807fff}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background-color:#f9f9f9;background-color:var(--body-background-color);font-family:Share Tech Mono,Monaco,Menlo,Ubuntu Mono,Consolas,source-code-pro,monospace;font-family:var(--body-font-family);margin:0;overflow:hidden;position:relative}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}#root{width:100%}#root,#root.editor{height:100%}.app-container{display:flex;flex-direction:column;height:100%;width:100%}.noclick{cursor:default;pointer-events:none}.header{align-items:center;background-color:#850a6b;background-color:var(--tertiary-color);color:#fff;color:var(--inverted-text-color);display:flex;flex-grow:0;flex-shrink:0;height:4rem;height:var(--header-height);justify-content:space-between;max-height:4rem;max-height:var(--header-height);z-index:50;z-index:var(--above-frame-zindex)}.header-left,.header-right{align-items:center;display:flex;height:100%}.header-logo{display:flex}.header .brand{display:flex;font-size:1.5rem;-webkit-user-select:none;user-select:none}.header .brand:before{border-left:2px solid #fff;content:" ";height:1.5rem;position:relative}.ui.item.logo .name{margin-bottom:1px;margin-left:1rem}.header-logo img{height:1.4rem;margin:0 1rem}.user-menu{height:100%}.user-menu .header-button.sign-in{align-items:center;background-color:#f9f9f9;background-color:var(--body-background-color);border-radius:6px;color:#393939;flex-direction:row-reverse;font-family:Segoe UI,Tahoma,Geneva,Verdana;font-family:var(--feature-text-font);font-weight:500;height:80%;margin:.5rem 1rem .5rem .5rem;padding:.6rem}.user-menu .header-dropdown{cursor:pointer;height:inherit;width:3.5rem}.user-menu .avatar,.user-menu .header-dropdown{align-items:center;display:flex;justify-content:center}.user-menu .avatar{height:100%}.user-menu .avatar img{border:2px solid #fff;border-radius:100%;height:2.5rem;width:2.5rem}.header-org-logo{height:2rem;margin-left:1rem}.header-org-logo img{height:100%}.header-org-logo .header-org-logo-small{display:none}.header i{cursor:pointer;line-height:2rem}.header-dropdown i,.header-dropdown img,.header-dropdown span{align-items:center;display:flex;font-size:1.6rem;height:4rem;height:var(--header-height);justify-content:center;margin:0;width:3.5rem}.header-button{color:#fff;color:var(--invert-active-color);cursor:pointer;flex:1 1;font-size:1.2rem;font-size:1.6rem;height:100%;padding:1rem .5rem;padding:var(--header-padding-top) .5rem;text-align:center;-webkit-user-select:none;user-select:none;white-space:nowrap}.header-button.with-label{display:flex;flex-grow:3}.header-button.icon-only{font-size:inherit;padding:1rem .5rem;padding:var(--header-padding-top) .5rem}.header-button .header-button-label{font-size:1rem;line-height:2rem;margin-right:.4rem;white-space:nowrap}.header-button:hover,.header-dropdown:hover{background-color:rgba(0,0,0,.1)}.header-button:hover>i,.header-dropdown:hover>i{-webkit-transform:scale(1.2);transform:scale(1.2)}.header-button.sign-in:hover{-webkit-transform:scale(1.1);transform:scale(1.1)}.header-button.sign-in:hover>i,.header-button.sign-in:hover>span{-webkit-transform:none;transform:none}.header-activity-display-name{flex-shrink:10;font-size:1.2rem;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.avatar-initials{align-items:center;background-color:#028b9b;border:2px solid #fff;border-radius:100%;display:flex;font-size:16px;height:2.5rem;justify-content:center;width:2.5rem}.header-dropdown.user-dropdown .dropdown-menu{top:4rem;top:var(--header-height)}.usabilla_live_button_container{bottom:14rem!important;top:auto!important}#msccBanner{display:none}.high-contrast .header{background-color:#000;background-color:var(--high-contrast-background);border-bottom:2px solid #fff;border-bottom:2px solid var(--high-contrast-text)}.high-contrast .header-dropdown i{height:calc(4rem - 2px);height:calc(var(--header-height) - 2px)}.high-contrast .avatar-initials{background-color:#000;background-color:var(--high-contrast-background)}.high-contrast a{color:#807fff;color:var(--high-contrast-hyperlink);text-decoration:underline}.high-contrast a:hover{outline:2px solid #ff0;outline:var(--high-contrast-focus-outline)}.notification-container{align-items:baseline;bottom:0;display:flex;justify-content:right;left:0;pointer-events:none;position:fixed;right:2%;top:85%;z-index:1000}.notification-contents{background-color:#eac6eb;background-color:var(--secondary-color);border:4px solid #aa278f;border:4px solid var(--primary-color);border-radius:.285rem;margin-right:1rem;overflow:hidden;padding:0 1rem;pointer-events:none;position:fixed}.debug-container{align-items:flex-end;display:flex;flex-direction:column;height:45vh;padding:1rem}.single-share-link-input-container{align-items:flex-start;display:flex;flex-direction:column;margin-bottom:1.5rem;width:100%}.link-input{width:100%}.rubric-json-input-container{align-items:flex-start;display:flex;flex-direction:column;justify-content:center;margin-bottom:1.5rem;width:100%}.json-input{width:100%}.makecode-frame{height:50vh;margin:0 2.5rem;width:55vw}@media only screen and (max-height:44rem) and (min-width:767px){:root{--header-height:3rem;--header-padding-top:.5rem}.header-button.with-label{flex-grow:1}.user-menu .header-button.sign-in{margin-top:.4rem;padding:.2rem .8rem}}@media only screen and (max-width:767px){.header-org-logo .header-org-logo-large{display:none}.header-org-logo .header-org-logo-small{display:block}.user-menu .header-button.sign-in{padding-left:.6rem}.user-menu .header-button.sign-in .header-button-label{display:none}}
|