From cda5ff741eb25d855a9a35b97e9b0b523a31adaa Mon Sep 17 00:00:00 2001 From: mrsang Date: Wed, 21 Apr 2021 12:44:43 +0200 Subject: [PATCH] fix compilation bug CodePad --- CodePad/build.json | 4 ++-- CodePad/build/debug/main.js | 2 +- CodePad/build/release/CodePad.zip | Bin 7344 -> 7392 bytes 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/CodePad/build.json b/CodePad/build.json index 9984325..ef86276 100644 --- a/CodePad/build.json +++ b/CodePad/build.json @@ -24,9 +24,9 @@ "name": "ts-compile", "data": { "src": [ - "ts/ACEModel.ts", + "ts/main.ts", "ts/BaseEditorModel.ts", - "ts/main.ts" + "ts/ACEModel.ts" ], "dest": "build/debug/main.js" } diff --git a/CodePad/build/debug/main.js b/CodePad/build/debug/main.js index 5a94b93..2a4a056 100644 --- a/CodePad/build/debug/main.js +++ b/CodePad/build/debug/main.js @@ -1 +1 @@ -var ace,OS;!function(t){let e;!function(t){class e extends t.BaseEditorModel{constructor(t,e,i){ace.require("ace/ext/language_tools"),super(t,e,i),this.modes=ace.require("ace/ext/modelist")}resetEditor(){this.setValue(""),this.editor.getSession().setUndoManager(new ace.UndoManager)}getTexModel(){const t={};return t.cursor=this.editor.getCursorPosition(),t.cache=this.getValue(),t.um=this.editor.session.getUndoManager(),t.langmode=this.mode,t}setTextModel(t){this.editor.getSession().setUndoManager(new ace.UndoManager),this.setValue(t.cache),this.setMode(t.langmode),t.cursor&&this.setCursor(t.cursor),this.editor.getSession().setUndoManager(t.um)}newTextModelFrom(t){const e={};return e.um=new ace.UndoManager,e.cache=t.cache,e.cursor=void 0,"Untitled"!==t.path.toString()?e.langmode=this.getModeForPath(t.path):e.langmode={text:"Text",mode:"ace/mode/text"},e}getModes(){const t=[];let e;for(e of Array.from(this.modes.modes))t.push({text:e.caption,mode:e.mode});return t}setTheme(t){this.editor.setTheme(t)}setCursor(t){this.editor.renderer.scrollCursorIntoView({row:t.row,column:t.column},.5),this.editor.selection.moveTo(t.row,t.column)}setMode(t){this.mode=t,this.editor.getSession().setMode(t.mode)}editorSetup(t){this.editor=ace.edit(t),this.editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0,highlightActiveLine:!0,highlightSelectedWord:!0,behavioursEnabled:!0,wrap:!0,fontSize:"10pt",showInvisibles:!0}),this.editor.setTheme("ace/theme/monokai"),this.editor.completers.push({getCompletions(t,e,i,s,a){}}),this.editor.getSession().setUseWrapMode(!0)}on(t,e){switch(t){case"input":case"focus":this.editor.on(t,e);break;case"changeCursor":this.editor.getSession().selection.on(t,e)}}resize(){this.editor.resize()}focus(){this.editor.focus()}getModeForPath(t){const e=this.modes.getModeForPath(t);return{text:e.caption,mode:e.mode}}getEditorStatus(){const t=this.editor.session.selection.getCursor(),e=this.editor.session.getLength();return{row:t.row,column:t.column,line:e,langmode:this.mode,file:this.currfile.path}}getValue(){return this.editor.getValue()}setValue(t){this.editor.setValue(t,-1)}getThemes(){const t=ace.require("ace/ext/themelist"),e=[];for(let i in t.themesByName){const s=t.themesByName[i];e.push({text:s.caption,theme:s.theme})}return e}}t.ACEModel=e}(e=t.application||(t.application={}))}(OS||(OS={})),function(t){let e;!function(t){t.BaseEditorModel=class{constructor(t,e,i){this.container=i,this.currfile="Untitled".asFileHandle(),this.tabbar=e,this.editorSetup(i),this.app=t,this.editormux=!1,this.onstatuschange=void 0,this.on("focus",()=>{this.onstatuschange&&this.onstatuschange(this.getEditorStatus())}),this.on("input",()=>this.editormux?(this.editormux=!1,!1):this.currfile.dirty?void 0:(this.currfile.dirty=!0,this.currfile.text+="*",this.tabbar.update(void 0))),this.on("changeCursor",()=>{this.onstatuschange&&this.onstatuschange(this.getEditorStatus())}),this.tabbar.ontabselect=t=>this.selecteTab($(t.data.item).index()),this.tabbar.ontabclose=t=>{const e=t.data.item;return!!e&&(e.data.dirty?(this.app.openDialog("YesNoDialog",{title:__("Close tab"),text:__("Close without saving ?")}).then(t=>t?this.closeTab(e):this.focus()),!1):this.closeTab(e))}}findTabByFile(t){const e=this.tabbar.items,i=(()=>{const i=[];for(let s=0;s(t.cache=e||"",this.newTab(t))).catch(e=>this.app.error(__("Unable to open: {0}",t.path),e)):this.newTab(t):this.tabbar.selected=e}write(t){this.currfile.cache=this.getValue(),t.write("text/plain").then(e=>{t.dirty=!1,t.text=t.basename,this.tabbar.update(void 0)}).catch(e=>this.app.error(__("Unable to save file: {0}",t.path),e))}save(){return this.currfile.cache=this.getValue(),this.currfile.basename?this.write(this.currfile):this.saveAs()}saveAs(){this.app.openDialog("FileDialog",{title:__("Save as"),file:this.currfile}).then(t=>{let e=t.file.path.asFileHandle();"file"===t.file.type&&(e=e.parent()),this.currfile.setPath(`${e.path}/${t.name}`),this.write(this.currfile)})}dirties(){const t=[];for(let e of Array.from(this.tabbar.items))e.dirty&&t.push(e);return t}set contextmenuHandle(t){this.container.contextmenuHandle=t}closeAll(){this.tabbar.items=[],this.resetEditor()}isDirty(){return this.dirties().length>0}}}(e=t.application||(t.application={}))}(OS||(OS={})),function(t){let e;!function(e){class i extends e.BaseApplication{constructor(t){super("CodePad",t),this.currdir=void 0,this.sdk=void 0}main(){this.extensions={},this.eum=new s,this.fileview=this.find("fileview"),this.sidebar=this.find("sidebar"),this.bottombar=this.find("bottombar"),this.langstat=this.find("langstat"),this.editorstat=this.find("editorstat"),this.filestat=this.find("current-file-lbl"),this.logger=new a(this.find("output-tab")),this.split_mode=!0,this.eum.add(new e.ACEModel(this,this.find("left-tabbar"),this.find("left-editorarea"))).add(new e.ACEModel(this,this.find("right-tabbar"),this.find("right-editorarea"))),this.eum.onstatuschange=t=>this.updateStatus(t),this.fileview.fetch=t=>new Promise((async function(e,i){let s;s="string"==typeof t?t.asFileHandle():t;try{const t=await s.read();return t.error?i(t.error):e(t.result)}catch(t){return i(__e(t))}}));let t="Untitled".asFileHandle();return this.args&&this.args.length>0&&(this.addRecent(this.args[0].path),"dir"===this.args[0].type?this.currdir=this.args[0].path.asFileHandle():(t=this.args[0].path.asFileHandle(),this.currdir=t.parent())),this.setup(),this.eum.active.openFile(t)}setup(){this.setting.recent||(this.setting.recent=[]),this.fileview.onfileopen=t=>{if(t.data&&t.data.path&&"dir"!==t.data.type)return this.addRecent(t.data.path),this.eum.active.openFile(t.data.path.asFileHandle())},this.fileview.onfileselect=t=>{t.data&&t.data.path&&"dir"!==t.data.type&&this.eum.active.selectFile(t.data.path)},this.on("resize",()=>this.eum.resize()),this.on("focus",()=>this.eum.active.focus()),this.eum.contextmenuHandle=(t,e)=>(e.items=[{text:__("Change theme"),onmenuselect:async t=>{try{const t=this.eum.active.getThemes(),e=await this.openDialog("SelectionDialog",{title:__("Select theme"),data:t});this.eum.active.setTheme(e.theme)}catch(t){this.error(__("Unable to set theme"),t)}}},{text:__("Change language mode"),onmenuselect:async t=>{try{const t=this.eum.active.getModes().map(t=>({text:t.text,mode:t.mode})),e=await this.openDialog("SelectionDialog",{title:__("Select language"),data:t});this.eum.active.setMode(e)}catch(t){this.error(__("Unable to set language mode"),t)}}},{text:__("Build with AntOSDK"),shortcut:" (CTRL-ALT-B)",onmenuselect:async t=>{try{this.build()}catch(t){this.error(__("Unable to build with AntOSDK: {0}",t.toString()),t)}}}],e.show(t)),this.fileview.contextmenuHandle=(t,e)=>(e.items=[{text:"__(New file)",id:"new"},{text:"__(New folder)",id:"newdir"},{text:"__(Rename)",id:"rename"},{text:"__(Delete)",id:"delete"}],e.onmenuselect=t=>this.ctxFileMenuHandle(t),e.show(t)),this.bindKey("ALT-N",()=>this.menuAction("new")),this.bindKey("ALT-O",()=>this.menuAction("open")),this.bindKey("ALT-F",()=>this.menuAction("opendir")),this.bindKey("CTRL-S",()=>this.menuAction("save")),this.bindKey("ALT-W",()=>this.menuAction("saveas")),this.bindKey("CTRL-ALT-B",()=>this.build()),this.fileview.ondragndrop=t=>{const e=t.data.from.data.path.asFileHandle(),i=t.data.to.data.path;return e.move(`${i}/${e.basename}`).then((function(s){const a=i,o=e.parent().path;a.lengththis.error(__("Unable to move file/folder"),t))},this.on("filechange",t=>{let{path:e}=t.file;return"file"===t.type&&({path:e}=t.file.parent()),this.fileview.update(e)}),this.find("logger-clear").onbtclick=()=>{this.logger.clear()},void 0===this.setting.showBottomBar&&(this.setting.showBottomBar=!1),this.toggleSideBar(),this.toggleSplitMode(),this.applyAllSetting()}build(){this.currdir&&t.API.requires("pkg://libantosdk/main.js").then(async()=>{try{if(!t.API.AntOSDKBuilder)return;this.sdk||(this.sdk=new t.API.AntOSDKBuilder(this.logger,"")),this.logger.clear(),this.showBottomBar(!0);const e=(this.currdir.path+"/build.json").asFileHandle(),i=await e.read("json");i.root=this.currdir.path;const s=Object.keys(i.targets).map(t=>({text:t})),a=await this.openDialog("SelectionDialog",{title:__("Select a build target"),data:s});await this.load(this.sdk.batch([a.text],i))}catch(t){this.logger.error(__("No {0} file found in the current directory, or the file is invalid format","build.json"))}}).catch(t=>{this.logger.error(__("{0} is not installed, please install it: {1}","libantosdk"))})}updateStatus(t){t||(t=this.eum.active.getEditorStatus()),this.editorstat.text=__("Row {0}, col {1}, lines: {2}",t.row+1,t.column+1,t.line),t.langmode&&(this.langstat.text=t.langmode.text),this.filestat.text=t.file;let e=this.scheme;e.apptitle!=t.file&&(e.apptitle=t.file)}toggleSideBar(){this.currdir?($(this.sidebar).show(),this.fileview.path=this.currdir.path):$(this.sidebar).hide(),this.trigger("resize")}showOutput(t=!1){t&&this.showBottomBar(!0),this.bottombar.selectedIndex=0}applySetting(t){"showBottomBar"==t&&this.showBottomBar(this.setting.showBottomBar)}showBottomBar(t){this.setting.showBottomBar=t,t?$(this.bottombar).show():$(this.bottombar).hide(),this.trigger("resize")}toggleBottomBar(){this.showBottomBar(!this.setting.showBottomBar)}toggleSplitMode(){const t=this.find("right-panel"),e=this.eum.editors[1],i=this.eum.editors[0];if(this.split_mode){if(e.isDirty())return void this.notify(__("Unable to disable split view: Please save changes of modified files on the right panel"));e.closeAll(),$(t).hide(),this.split_mode=!1,i.focus()}else $(t).show(),this.split_mode=!0,e.openFile("Untitled".asFileHandle()),e.focus();this.trigger("resize")}fileMenu(){const t=this.setting.recent.map(t=>({text:t}));return{text:__("File"),nodes:[{text:__("New"),dataid:"new",shortcut:"A-N"},{text:__("Open Recent"),dataid:"recent",nodes:t,onchildselect:(t,e)=>{const i=t.data.item.data.text.asFileHandle();i.onready().then(t=>{t&&("dir"==t.type?(this.currdir=i,this.toggleSideBar()):this.eum.active.openFile(i))})}},{text:__("Open"),dataid:"open",shortcut:"A-O"},{text:__("Open Folder"),dataid:"opendir",shortcut:"A-F"},{text:__("Save"),dataid:"save",shortcut:"C-S"},{text:__("Save as"),dataid:"saveas",shortcut:"A-W"}],onchildselect:(t,e)=>this.menuAction(t.data.item.data.dataid,e)}}ctxFileMenuHandle(t){const e=t.data.item;if(!e)return;const i=e.data;if(!i)return;let s=this.fileview.selectedFile,a=this.currdir;switch(s&&"dir"===s.type&&(a=s.path.asFileHandle()),s&&"file"===s.type&&(a=s.path.asFileHandle().parent()),i.id){case"new":if(!a)return;this.openDialog("PromptDialog",{title:"__(New file)",label:"__(File name)"}).then(async t=>{const e=`${a.path}/${t}`.asFileHandle();try{return await e.write("text/plain"),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to create: {0}",t.stack),t)}});break;case"newdir":if(!a)return;this.openDialog("PromptDialog",{title:"__(New folder)",label:"__(Folder name)"}).then(async t=>{try{return await a.mk(t),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to create: {0}",a.path),t)}});break;case"rename":if(!s)return;this.openDialog("PromptDialog",{title:"__(Rename)",label:"__(File name)",value:s.filename}).then(async t=>{if(t!==s.filename){s=s.path.asFileHandle(),a=s.parent();try{return await s.move(`${a.path}/${t}`),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to rename: {0}",s.path),t)}}});break;case"delete":if(!s)return;this.openDialog("YesNoDialog",{title:"__(Delete)",iconclass:"fa fa-question-circle",text:__("Do you really want to delete: {0}?",s.filename)}).then(async t=>{if(t){s=s.path.asFileHandle(),a=s.parent();try{return await s.remove(),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to delete: {0}",s.path),t)}}})}}addRecent(t){this.setting.recent||(this.setting.recent=[]),this.setting.recent.includes(t)||(this.setting.recent.push(t),this.setting.recent.length>10&&(this.setting.recent=this.setting.recent.slice(0,10)))}menuAction(t,e){let i=this;switch(e&&(i=e),t){case"new":return i.eum.active.openFile("Untitled".asFileHandle());case"open":return i.openDialog("FileDialog",{title:__("Open file"),mimes:Array.from(i.meta().mimes).filter(t=>"dir"!==t)}).then(t=>{this.addRecent(t.file.path),i.eum.active.openFile(t.file.path.asFileHandle())});case"opendir":return i.openDialog("FileDialog",{title:__("Open folder"),mimes:["dir"]}).then((function(t){return i.addRecent(t.file.path),i.currdir=t.file.path.asFileHandle(),i.toggleSideBar()}));case"save":return i.eum.active.save();case"saveas":return i.eum.active.saveAs();default:return console.log(t)}}cleanup(t){let e;const i=this.eum.dirties();if(0!==i.length)t.preventDefault(),this.openDialog("YesNoDialog",{title:"__(Quit)",text:__("Ignore all unsaved files: {0} ?",(()=>{const t=[];for(e of Array.from(i))t.push(e.filename);return t})().join(", "))}).then(t=>{if(t){for(e of Array.from(i))e.dirty=!1;return this.quit(!1)}});else for(let t in this.extensions)this.extensions[t].ext&&this.extensions[t].ext.cleanup&&this.extensions[t].ext.cleanup()}menu(){return[this.fileMenu(),{text:"__(View)",nodes:[{text:"__(Toggle bottom bar)",dataid:"bottombar"},{text:"__(Toggle split view)",dataid:"splitview"}],onchildselect:(t,e)=>{switch(t.data.item.data.dataid){case"bottombar":return this.toggleBottomBar();case"splitview":return this.toggleSplitMode()}}}]}}e.CodePad=i;class s{constructor(){this.active_editor=void 0,this.models=[]}get editors(){return this.models}set contextmenuHandle(t){for(let e of this.models)e.contextmenuHandle=t}get active(){return this.active_editor}add(t){return this.models.push(t),this.active_editor||(this.active_editor=t),t.on("focus",()=>{this.active_editor=t}),this}set onstatuschange(t){for(let e of this.models)e.onstatuschange=t}dirties(){let t=[];for(let e of this.models)t=t.concat(e.dirties());return t}resize(){for(let t of this.models)t.resize()}}class a{constructor(t){this.target=t}info(t){this.log("info",t,!0)}warn(t){this.log("warn",t,!0)}error(t){this.log("error",t,!0)}log(t,e,i){let s=$("
").attr("class","code-pad-log-"+t);if(i){let t=new Date,i=t.getDate()+"/"+(t.getMonth()+1)+"/"+t.getFullYear()+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();s.text(`[${i}]: ${e.__()}`)}else s.text(e.__());$(this.target).append(s),$(this.target).scrollTop($(this.target)[0].scrollHeight)}print(t){this.log("info",t,!1)}clear(){$(this.target).empty()}}i.Logger=a,i.dependencies=["pkg://ACECore/core/ace.js","pkg://ACECore/path.js","pkg://ACECore/core/ext-language_tools.js","pkg://ACECore/core/ext-modelist.js","pkg://ACECore/core/ext-themelist.js"]}(e=t.application||(t.application={}))}(OS||(OS={}));
\ No newline at end of file
+var ace,OS;!function(t){let e;!function(e){class i extends e.BaseApplication{constructor(t){super("CodePad",t),this.currdir=void 0,this.sdk=void 0}main(){this.extensions={},this.eum=new s,this.fileview=this.find("fileview"),this.sidebar=this.find("sidebar"),this.bottombar=this.find("bottombar"),this.langstat=this.find("langstat"),this.editorstat=this.find("editorstat"),this.filestat=this.find("current-file-lbl"),this.logger=new a(this.find("output-tab")),this.split_mode=!0,this.eum.add(new e.ACEModel(this,this.find("left-tabbar"),this.find("left-editorarea"))).add(new e.ACEModel(this,this.find("right-tabbar"),this.find("right-editorarea"))),this.eum.onstatuschange=t=>this.updateStatus(t),this.fileview.fetch=t=>new Promise((async function(e,i){let s;s="string"==typeof t?t.asFileHandle():t;try{const t=await s.read();return t.error?i(t.error):e(t.result)}catch(t){return i(__e(t))}}));let t="Untitled".asFileHandle();return this.args&&this.args.length>0&&(this.addRecent(this.args[0].path),"dir"===this.args[0].type?this.currdir=this.args[0].path.asFileHandle():(t=this.args[0].path.asFileHandle(),this.currdir=t.parent())),this.setup(),this.eum.active.openFile(t)}setup(){this.setting.recent||(this.setting.recent=[]),this.fileview.onfileopen=t=>{if(t.data&&t.data.path&&"dir"!==t.data.type)return this.addRecent(t.data.path),this.eum.active.openFile(t.data.path.asFileHandle())},this.fileview.onfileselect=t=>{t.data&&t.data.path&&"dir"!==t.data.type&&this.eum.active.selectFile(t.data.path)},this.on("resize",()=>this.eum.resize()),this.on("focus",()=>this.eum.active.focus()),this.eum.contextmenuHandle=(t,e)=>(e.items=[{text:__("Change theme"),onmenuselect:async t=>{try{const t=this.eum.active.getThemes(),e=await this.openDialog("SelectionDialog",{title:__("Select theme"),data:t});this.eum.active.setTheme(e.theme)}catch(t){this.error(__("Unable to set theme"),t)}}},{text:__("Change language mode"),onmenuselect:async t=>{try{const t=this.eum.active.getModes().map(t=>({text:t.text,mode:t.mode})),e=await this.openDialog("SelectionDialog",{title:__("Select language"),data:t});this.eum.active.setMode(e)}catch(t){this.error(__("Unable to set language mode"),t)}}},{text:__("Build with AntOSDK"),shortcut:" (CTRL-ALT-B)",onmenuselect:async t=>{try{this.build()}catch(t){this.error(__("Unable to build with AntOSDK: {0}",t.toString()),t)}}}],e.show(t)),this.fileview.contextmenuHandle=(t,e)=>(e.items=[{text:"__(New file)",id:"new"},{text:"__(New folder)",id:"newdir"},{text:"__(Rename)",id:"rename"},{text:"__(Delete)",id:"delete"}],e.onmenuselect=t=>this.ctxFileMenuHandle(t),e.show(t)),this.bindKey("ALT-N",()=>this.menuAction("new")),this.bindKey("ALT-O",()=>this.menuAction("open")),this.bindKey("ALT-F",()=>this.menuAction("opendir")),this.bindKey("CTRL-S",()=>this.menuAction("save")),this.bindKey("ALT-W",()=>this.menuAction("saveas")),this.bindKey("CTRL-ALT-B",()=>this.build()),this.fileview.ondragndrop=t=>{const e=t.data.from.data.path.asFileHandle(),i=t.data.to.data.path;return e.move(`${i}/${e.basename}`).then((function(s){const a=i,o=e.parent().path;a.lengththis.error(__("Unable to move file/folder"),t))},this.on("filechange",t=>{let{path:e}=t.file;return"file"===t.type&&({path:e}=t.file.parent()),this.fileview.update(e)}),this.find("logger-clear").onbtclick=()=>{this.logger.clear()},void 0===this.setting.showBottomBar&&(this.setting.showBottomBar=!1),this.toggleSideBar(),this.toggleSplitMode(),this.applyAllSetting()}build(){this.currdir&&t.API.requires("pkg://libantosdk/main.js").then(async()=>{try{if(!t.API.AntOSDKBuilder)return;this.sdk||(this.sdk=new t.API.AntOSDKBuilder(this.logger,"")),this.logger.clear(),this.showBottomBar(!0);const e=(this.currdir.path+"/build.json").asFileHandle(),i=await e.read("json");i.root=this.currdir.path;const s=Object.keys(i.targets).map(t=>({text:t})),a=await this.openDialog("SelectionDialog",{title:__("Select a build target"),data:s});await this.load(this.sdk.batch([a.text],i))}catch(t){this.logger.error(__("No {0} file found in the current directory, or the file is invalid format","build.json"))}}).catch(t=>{this.logger.error(__("{0} is not installed, please install it: {1}","libantosdk"))})}updateStatus(t){t||(t=this.eum.active.getEditorStatus()),this.editorstat.text=__("Row {0}, col {1}, lines: {2}",t.row+1,t.column+1,t.line),t.langmode&&(this.langstat.text=t.langmode.text),this.filestat.text=t.file;let e=this.scheme;e.apptitle!=t.file&&(e.apptitle=t.file)}toggleSideBar(){this.currdir?($(this.sidebar).show(),this.fileview.path=this.currdir.path):$(this.sidebar).hide(),this.trigger("resize")}showOutput(t=!1){t&&this.showBottomBar(!0),this.bottombar.selectedIndex=0}applySetting(t){"showBottomBar"==t&&this.showBottomBar(this.setting.showBottomBar)}showBottomBar(t){this.setting.showBottomBar=t,t?$(this.bottombar).show():$(this.bottombar).hide(),this.trigger("resize")}toggleBottomBar(){this.showBottomBar(!this.setting.showBottomBar)}toggleSplitMode(){const t=this.find("right-panel"),e=this.eum.editors[1],i=this.eum.editors[0];if(this.split_mode){if(e.isDirty())return void this.notify(__("Unable to disable split view: Please save changes of modified files on the right panel"));e.closeAll(),$(t).hide(),this.split_mode=!1,i.focus()}else $(t).show(),this.split_mode=!0,e.openFile("Untitled".asFileHandle()),e.focus();this.trigger("resize")}fileMenu(){const t=this.setting.recent.map(t=>({text:t}));return{text:__("File"),nodes:[{text:__("New"),dataid:"new",shortcut:"A-N"},{text:__("Open Recent"),dataid:"recent",nodes:t,onchildselect:(t,e)=>{const i=t.data.item.data.text.asFileHandle();i.onready().then(t=>{t&&("dir"==t.type?(this.currdir=i,this.toggleSideBar()):this.eum.active.openFile(i))})}},{text:__("Open"),dataid:"open",shortcut:"A-O"},{text:__("Open Folder"),dataid:"opendir",shortcut:"A-F"},{text:__("Save"),dataid:"save",shortcut:"C-S"},{text:__("Save as"),dataid:"saveas",shortcut:"A-W"}],onchildselect:(t,e)=>this.menuAction(t.data.item.data.dataid,e)}}ctxFileMenuHandle(t){const e=t.data.item;if(!e)return;const i=e.data;if(!i)return;let s=this.fileview.selectedFile,a=this.currdir;switch(s&&"dir"===s.type&&(a=s.path.asFileHandle()),s&&"file"===s.type&&(a=s.path.asFileHandle().parent()),i.id){case"new":if(!a)return;this.openDialog("PromptDialog",{title:"__(New file)",label:"__(File name)"}).then(async t=>{const e=`${a.path}/${t}`.asFileHandle();try{return await e.write("text/plain"),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to create: {0}",t.stack),t)}});break;case"newdir":if(!a)return;this.openDialog("PromptDialog",{title:"__(New folder)",label:"__(Folder name)"}).then(async t=>{try{return await a.mk(t),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to create: {0}",a.path),t)}});break;case"rename":if(!s)return;this.openDialog("PromptDialog",{title:"__(Rename)",label:"__(File name)",value:s.filename}).then(async t=>{if(t!==s.filename){s=s.path.asFileHandle(),a=s.parent();try{return await s.move(`${a.path}/${t}`),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to rename: {0}",s.path),t)}}});break;case"delete":if(!s)return;this.openDialog("YesNoDialog",{title:"__(Delete)",iconclass:"fa fa-question-circle",text:__("Do you really want to delete: {0}?",s.filename)}).then(async t=>{if(t){s=s.path.asFileHandle(),a=s.parent();try{return await s.remove(),this.fileview.update(a.path)}catch(t){return this.error(__("Fail to delete: {0}",s.path),t)}}})}}addRecent(t){this.setting.recent||(this.setting.recent=[]),this.setting.recent.includes(t)||(this.setting.recent.push(t),this.setting.recent.length>10&&(this.setting.recent=this.setting.recent.slice(0,10)))}menuAction(t,e){let i=this;switch(e&&(i=e),t){case"new":return i.eum.active.openFile("Untitled".asFileHandle());case"open":return i.openDialog("FileDialog",{title:__("Open file"),mimes:Array.from(i.meta().mimes).filter(t=>"dir"!==t)}).then(t=>{this.addRecent(t.file.path),i.eum.active.openFile(t.file.path.asFileHandle())});case"opendir":return i.openDialog("FileDialog",{title:__("Open folder"),mimes:["dir"]}).then((function(t){return i.addRecent(t.file.path),i.currdir=t.file.path.asFileHandle(),i.toggleSideBar()}));case"save":return i.eum.active.save();case"saveas":return i.eum.active.saveAs();default:return console.log(t)}}cleanup(t){let e;const i=this.eum.dirties();if(0!==i.length)t.preventDefault(),this.openDialog("YesNoDialog",{title:"__(Quit)",text:__("Ignore all unsaved files: {0} ?",(()=>{const t=[];for(e of Array.from(i))t.push(e.filename);return t})().join(", "))}).then(t=>{if(t){for(e of Array.from(i))e.dirty=!1;return this.quit(!1)}});else for(let t in this.extensions)this.extensions[t].ext&&this.extensions[t].ext.cleanup&&this.extensions[t].ext.cleanup()}menu(){return[this.fileMenu(),{text:"__(View)",nodes:[{text:"__(Toggle bottom bar)",dataid:"bottombar"},{text:"__(Toggle split view)",dataid:"splitview"}],onchildselect:(t,e)=>{switch(t.data.item.data.dataid){case"bottombar":return this.toggleBottomBar();case"splitview":return this.toggleSplitMode()}}}]}}e.CodePad=i;class s{constructor(){this.active_editor=void 0,this.models=[]}get editors(){return this.models}set contextmenuHandle(t){for(let e of this.models)e.contextmenuHandle=t}get active(){return this.active_editor}add(t){return this.models.push(t),this.active_editor||(this.active_editor=t),t.on("focus",()=>{this.active_editor=t}),this}set onstatuschange(t){for(let e of this.models)e.onstatuschange=t}dirties(){let t=[];for(let e of this.models)t=t.concat(e.dirties());return t}resize(){for(let t of this.models)t.resize()}}class a{constructor(t){this.target=t}info(t){this.log("info",t,!0)}warn(t){this.log("warn",t,!0)}error(t){this.log("error",t,!0)}log(t,e,i){let s=$("
").attr("class","code-pad-log-"+t);if(i){let t=new Date,i=t.getDate()+"/"+(t.getMonth()+1)+"/"+t.getFullYear()+" "+t.getHours()+":"+t.getMinutes()+":"+t.getSeconds();s.text(`[${i}]: ${e.__()}`)}else s.text(e.__());$(this.target).append(s),$(this.target).scrollTop($(this.target)[0].scrollHeight)}print(t){this.log("info",t,!1)}clear(){$(this.target).empty()}}i.Logger=a,i.dependencies=["pkg://ACECore/core/ace.js","pkg://ACECore/path.js","pkg://ACECore/core/ext-language_tools.js","pkg://ACECore/core/ext-modelist.js","pkg://ACECore/core/ext-themelist.js"]}(e=t.application||(t.application={}))}(OS||(OS={})),function(t){let e;!function(t){t.BaseEditorModel=class{constructor(t,e,i){this.container=i,this.currfile="Untitled".asFileHandle(),this.tabbar=e,this.editorSetup(i),this.app=t,this.editormux=!1,this.onstatuschange=void 0,this.on("focus",()=>{this.onstatuschange&&this.onstatuschange(this.getEditorStatus())}),this.on("input",()=>this.editormux?(this.editormux=!1,!1):this.currfile.dirty?void 0:(this.currfile.dirty=!0,this.currfile.text+="*",this.tabbar.update(void 0))),this.on("changeCursor",()=>{this.onstatuschange&&this.onstatuschange(this.getEditorStatus())}),this.tabbar.ontabselect=t=>this.selecteTab($(t.data.item).index()),this.tabbar.ontabclose=t=>{const e=t.data.item;return!!e&&(e.data.dirty?(this.app.openDialog("YesNoDialog",{title:__("Close tab"),text:__("Close without saving ?")}).then(t=>t?this.closeTab(e):this.focus()),!1):this.closeTab(e))}}findTabByFile(t){const e=this.tabbar.items,i=(()=>{const i=[];for(let s=0;s(t.cache=e||"",this.newTab(t))).catch(e=>this.app.error(__("Unable to open: {0}",t.path),e)):this.newTab(t):this.tabbar.selected=e}write(t){this.currfile.cache=this.getValue(),t.write("text/plain").then(e=>{t.dirty=!1,t.text=t.basename,this.tabbar.update(void 0)}).catch(e=>this.app.error(__("Unable to save file: {0}",t.path),e))}save(){return this.currfile.cache=this.getValue(),this.currfile.basename?this.write(this.currfile):this.saveAs()}saveAs(){this.app.openDialog("FileDialog",{title:__("Save as"),file:this.currfile}).then(t=>{let e=t.file.path.asFileHandle();"file"===t.file.type&&(e=e.parent()),this.currfile.setPath(`${e.path}/${t.name}`),this.write(this.currfile)})}dirties(){const t=[];for(let e of Array.from(this.tabbar.items))e.dirty&&t.push(e);return t}set contextmenuHandle(t){this.container.contextmenuHandle=t}closeAll(){this.tabbar.items=[],this.resetEditor()}isDirty(){return this.dirties().length>0}}}(e=t.application||(t.application={}))}(OS||(OS={})),function(t){let e;!function(t){class e extends t.BaseEditorModel{constructor(t,e,i){ace.require("ace/ext/language_tools"),super(t,e,i),this.modes=ace.require("ace/ext/modelist")}resetEditor(){this.setValue(""),this.editor.getSession().setUndoManager(new ace.UndoManager)}getTexModel(){const t={};return t.cursor=this.editor.getCursorPosition(),t.cache=this.getValue(),t.um=this.editor.session.getUndoManager(),t.langmode=this.mode,t}setTextModel(t){this.editor.getSession().setUndoManager(new ace.UndoManager),this.setValue(t.cache),this.setMode(t.langmode),t.cursor&&this.setCursor(t.cursor),this.editor.getSession().setUndoManager(t.um)}newTextModelFrom(t){const e={};return e.um=new ace.UndoManager,e.cache=t.cache,e.cursor=void 0,"Untitled"!==t.path.toString()?e.langmode=this.getModeForPath(t.path):e.langmode={text:"Text",mode:"ace/mode/text"},e}getModes(){const t=[];let e;for(e of Array.from(this.modes.modes))t.push({text:e.caption,mode:e.mode});return t}setTheme(t){this.editor.setTheme(t)}setCursor(t){this.editor.renderer.scrollCursorIntoView({row:t.row,column:t.column},.5),this.editor.selection.moveTo(t.row,t.column)}setMode(t){this.mode=t,this.editor.getSession().setMode(t.mode)}editorSetup(t){this.editor=ace.edit(t),this.editor.setOptions({enableBasicAutocompletion:!0,enableSnippets:!0,enableLiveAutocompletion:!0,highlightActiveLine:!0,highlightSelectedWord:!0,behavioursEnabled:!0,wrap:!0,fontSize:"10pt",showInvisibles:!0}),this.editor.setTheme("ace/theme/monokai"),this.editor.completers.push({getCompletions(t,e,i,s,a){}}),this.editor.getSession().setUseWrapMode(!0)}on(t,e){switch(t){case"input":case"focus":this.editor.on(t,e);break;case"changeCursor":this.editor.getSession().selection.on(t,e)}}resize(){this.editor.resize()}focus(){this.editor.focus()}getModeForPath(t){const e=this.modes.getModeForPath(t);return{text:e.caption,mode:e.mode}}getEditorStatus(){const t=this.editor.session.selection.getCursor(),e=this.editor.session.getLength();return{row:t.row,column:t.column,line:e,langmode:this.mode,file:this.currfile.path}}getValue(){return this.editor.getValue()}setValue(t){this.editor.setValue(t,-1)}getThemes(){const t=ace.require("ace/ext/themelist"),e=[];for(let i in t.themesByName){const s=t.themesByName[i];e.push({text:s.caption,theme:s.theme})}return e}}t.ACEModel=e}(e=t.application||(t.application={}))}(OS||(OS={}));
\ No newline at end of file
diff --git a/CodePad/build/release/CodePad.zip b/CodePad/build/release/CodePad.zip
index 38f47a331b6c7f7d6d6273ca5de9ba1a1433d118..bcadaa118f3e5cff92c86940f664422000e1722d 100644
GIT binary patch
delta 5008
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
aK^!asU{#ZE92@~mlZ+f52DKXi0000cHlx)5

delta 4986
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