From b0c2e088f92f383f5c7d867a0995079569fa3443 Mon Sep 17 00:00:00 2001 From: Xuan Sang LE Date: Sat, 30 Jan 2021 17:45:45 +0000 Subject: [PATCH] Enable printing in Docify --- Docify/README.md | 1 + Docify/api/api.lua | 27 ++++++++++++++++ Docify/assets/scheme.html | 2 +- Docify/build/debug/README.md | 1 + Docify/build/debug/api.lua | 27 ++++++++++++++++ Docify/build/debug/main.css | 9 ++++++ Docify/build/debug/main.js | 2 +- Docify/build/debug/package.json | 2 +- Docify/build/debug/scheme.html | 2 +- Docify/build/release/Docify.zip | Bin 28936 -> 32752 bytes Docify/coffees/dialogs.coffee | 55 +++++++++++++++++++++++++++++++- Docify/coffees/main.coffee | 23 +++++++++++-- Docify/css/main.css | 9 ++++++ Docify/package.json | 2 +- packages.json | 2 +- 15 files changed, 155 insertions(+), 9 deletions(-) diff --git a/Docify/README.md b/Docify/README.md index 303c22b..6b3a96f 100644 --- a/Docify/README.md +++ b/Docify/README.md @@ -2,6 +2,7 @@ Simple PDF document manager ## Change logs +- v0.0.6-a: Add print dialog (support server side printing) - v0.0.5-a: Fix delete file bug - v0.0.4-a: Display file size in entry meta-data - v0.0.3-a: Fix document moved bug, sort entries by year, month, day \ No newline at end of file diff --git a/Docify/api/api.lua b/Docify/api/api.lua index 4c87db7..9fb4241 100644 --- a/Docify/api/api.lua +++ b/Docify/api/api.lua @@ -396,6 +396,33 @@ handle.delete = function(param) end end +handle.printdoc = function(opt) + local cmd = "lp " + if opt.printer and opt.printer ~= "" then + cmd = cmd .. " -d "..opt.printer + end + if opt.side == 0 then + cmd = cmd.. " -o sides=one-sided" + elseif opt.side == 1 then + cmd = cmd.. " -o sides=two-sided-long-edge" + elseif opt.side == 2 then + cmd = cmd .. " -o sides=two-sided-short-edge" + end + -- orientation landscape + if opt.orientation == 1 then + cmd = cmd.." -o orientation-requested=5" + end + + if opt.range == 1 then + cmd = cmd.." -P "..opt.pages + end + + cmd = cmd.. " "..vfs.ospath(opt.file) + print(cmd) + os.execute(cmd) + return result("A print job has been posted on server. Check if it successes") +end + if arg.action and handle[arg.action] then -- check if the database exits diff --git a/Docify/assets/scheme.html b/Docify/assets/scheme.html index df9e332..e0c0bcd 100644 --- a/Docify/assets/scheme.html +++ b/Docify/assets/scheme.html @@ -26,7 +26,7 @@
- +
diff --git a/Docify/build/debug/README.md b/Docify/build/debug/README.md index 303c22b..6b3a96f 100644 --- a/Docify/build/debug/README.md +++ b/Docify/build/debug/README.md @@ -2,6 +2,7 @@ Simple PDF document manager ## Change logs +- v0.0.6-a: Add print dialog (support server side printing) - v0.0.5-a: Fix delete file bug - v0.0.4-a: Display file size in entry meta-data - v0.0.3-a: Fix document moved bug, sort entries by year, month, day \ No newline at end of file diff --git a/Docify/build/debug/api.lua b/Docify/build/debug/api.lua index 4c87db7..9fb4241 100644 --- a/Docify/build/debug/api.lua +++ b/Docify/build/debug/api.lua @@ -396,6 +396,33 @@ handle.delete = function(param) end end +handle.printdoc = function(opt) + local cmd = "lp " + if opt.printer and opt.printer ~= "" then + cmd = cmd .. " -d "..opt.printer + end + if opt.side == 0 then + cmd = cmd.. " -o sides=one-sided" + elseif opt.side == 1 then + cmd = cmd.. " -o sides=two-sided-long-edge" + elseif opt.side == 2 then + cmd = cmd .. " -o sides=two-sided-short-edge" + end + -- orientation landscape + if opt.orientation == 1 then + cmd = cmd.." -o orientation-requested=5" + end + + if opt.range == 1 then + cmd = cmd.." -P "..opt.pages + end + + cmd = cmd.. " "..vfs.ospath(opt.file) + print(cmd) + os.execute(cmd) + return result("A print job has been posted on server. Check if it successes") +end + if arg.action and handle[arg.action] then -- check if the database exits diff --git a/Docify/build/debug/main.css b/Docify/build/debug/main.css index d6335a0..6b0de1d 100644 --- a/Docify/build/debug/main.css +++ b/Docify/build/debug/main.css @@ -13,4 +13,13 @@ canvas[data-id = "preview-canvas"] { display: block; margin:0 auto; +} +afx-app-window[data-id = "DocifyPrintDialog"] i.label-text { + font-weight: bold; +} + +afx-app-window[data-id = "DocifyPrintDialog"] input[type="radio"] { + margin: 0; + height: 12px; + margin-left: 10px; } \ No newline at end of file diff --git a/Docify/build/debug/main.js b/Docify/build/debug/main.js index 482046d..a851837 100644 --- a/Docify/build/debug/main.js +++ b/Docify/build/debug/main.js @@ -1 +1 @@ -(function(){var t,i,a,r;(r=class t extends this.OS.GUI.BasicDialog{constructor(){super("OwnerDialog",t.scheme)}main(){return super.main(),this.oview=this.find("ownview"),this.oview.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog("PromptDialog",{title:__("Owner"),label:__("Name")}).then(t=>this.parent.exec("insert",{table:"owners",data:{name:t}}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable to insert owner: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.oview.selectedItem)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.parent.exec("delete",{table:"owners",id:parseInt(e.data.id)}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable delete category: {0}",t.toString()),t))})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:t=>{var e;if(e=this.oview.selectedItem)return this.openDialog("PromptDialog",{title:__("Owner"),label:__("Name"),value:e.data.name}).then(t=>this.parent.exec("update",{table:"owners",data:{id:parseInt(e.data.id),name:t}}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable to update owner: {0}",t.toString()),t))).catch(t=>this.error(t.toString()))}}],this.owner_refresh()}owner_refresh(){return this.parent.exec("fetch","owners").then(t=>{var e,i,a,r;for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch owners: {0}",t.toString()),e))}}).scheme="\n \n \n \n",(t=class t extends this.OS.GUI.BasicDialog{constructor(){super("DocDialog",t.scheme)}main(){var t,e,i,r,s,n,h,o;for(super.main(),this.flist=this.find("file-list"),this.dlist=this.find("dlist"),this.mlist=this.find("mlist"),this.ylist=this.find("ylist"),this.olist=this.find("olist"),this.setting=this.parent.setting,this.exec=this.parent.exec,this.preview=this.parent.preview,this.exec("fetch","owners").then(t=>{var e,i,a,r,s,n,h;if(t.error)return this.error(t.error);for(e=0,a=(s=t.result).length;ethis.error(__("Unable to fetch owner list: {0}",t.toString()),t)),this.dlist.push({text:"None",value:0}),h=0,t=i=1;i<=31;t=++i)this.dlist.push({text:""+t,value:t}),this.data&&parseInt(this.data.day)===t&&(h=t);for(this.dlist.selected=h,this.mlist.push({text:"None",value:0}),h=0,t=r=1;r<=12;t=++r)this.mlist.push({text:""+t,value:t}),this.data&&parseInt(this.data.month)===t&&(h=t);for(this.mlist.selected=h,this.ylist.push({text:"None",value:0}),this.ylist.selected=0,o=s=1980,n=(new Date).getFullYear();1980<=n?s<=n:s>=n;o=1980<=n?++s:--s)this.ylist.push({text:""+o,value:o,selected:this.data&&parseInt(this.data.year)===o});if(this.flist.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog(new a).then(t=>(t.text=t.filename,this.flist.push(t)))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.flist.selectedItem)return this.flist.delete(e)}}],this.flist.onlistselect=t=>this.parent.preview(t.data.item.data.path,this.find("preview-canvas")),this.find("btsave").onbtclick=t=>{var e,i;return(e={name:this.find("title").value.trim(),day:this.dlist.selectedItem.data.value,month:this.mlist.selectedItem.data.value,year:this.ylist.selectedItem.data.value,file:function(){var t,e,a,r;for(r=[],t=0,e=(a=this.flist.data).length;t0?(this.handle&&this.handle(e),this.quit()):this.notify(__("Please attach files to the entry")):this.notify(__("Please enter title"))},this.data)return this.find("title").value=this.data.name,this.find("note").value=this.data.note,this.find("tag").value=this.data.tags,(e=this.data.file.asFileHandle()).text=e.filename,this.flist.data=[e]}}).scheme='\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
',(a=class t extends this.OS.GUI.BasicDialog{constructor(){super("FilePreviewDialog",t.scheme)}main(){return super.main(),this.flist=this.find("file-list"),this.flist.buttons=[{text:"",iconclass:"fa fa-refresh",onbtclick:t=>this.refresh()}],this.flist.onlistselect=t=>this.parent.preview(t.data.item.data.path,this.find("preview-canvas")),this.find("btok").onbtclick=t=>{var e;return(e=this.flist.selectedItem)?(this.handle&&this.handle(e.data),this.quit()):this.quit()},this.refresh()}refresh(){return(this.parent.setting.docpath+"/unclassified").asFileHandle().read().then(t=>{var e,i,a,r;if(t.error)return this.error(t.error);for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch unclassified file list: {0}",t.toString()),t))}}).scheme='\n \n \n \n \n \n \n
\n \n
\n
\n \n
\n \n
\n
\n
',i=class extends this.OS.application.BaseApplication{constructor(t){super("Docify",t)}main(){return this.catview=this.find("catview"),this.docview=this.find("docview"),this.docpreview=this.find("preview-canvas"),this.docgrid=this.find("docgrid"),this.docgrid.header=[{text:"",width:100},{text:""}],this.find("btdld").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return e.data.file.asFileHandle().download().catch(t=>this.error(__("Unable to download: {}",t.toString()),t))},this.find("btopen").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return e.data.file.asFileHandle().meta().then(t=>t.error?this.error(t.error):this._gui.openWith(t.result)).catch(t=>this.error(t.toString(),t))},this.catview.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog("PromptDialog",{title:__("Category"),label:__("Name")}).then(t=>this.exec("insert",{table:"categories",data:{name:t}}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable to insert category: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.catview.selectedItem)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.exec("delete",{table:"categories",id:parseInt(e.data.id)}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable delete category: {0}",t.toString()),t))})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:t=>{var e;if(e=this.catview.selectedItem)return this.openDialog("PromptDialog",{title:__("Category"),label:__("Name"),value:e.data.name}).then(t=>this.exec("update",{table:"categories",data:{id:parseInt(e.data.id),name:t}}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable to update category: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))}}],this.docview.onlistselect=t=>{var e;if(this.clear_preview(),e=t.data.item)return this.exec("get_doc",e.data.id).then(t=>{var e,i,a,r,s,n;if(t.error)return this.error(t.error);for(i in this.preview(t.result.file,this.docpreview),s=[],t.result.fileinfo&&(t.result.size=(t.result.fileinfo.size/1024).toFixed(2)+" Kb"),a={ctime:"Created on",mtime:"Modified on",note:"Note",tags:"Tags",name:"Title",owner:"Owner",edate:"Effective date",file:"File",size:"Size"},t.result.edate=`${t.result.day}/${t.result.month}/${t.result.year}`,r=t.result)n=r[i],(e=a[i])&&s.push([{text:e},{text:n}]);return this.docgrid.rows=s}).catch(t=>this.error(t.toString(),t))},this.catview.onlistselect=t=>{var e;if(this.clear_preview(),e=t.data.item)return this.update_doclist(e.data.id)},this.find("bt-add-doc").onbtclick=e=>{var i;return(i=this.catview.selectedItem)?this.openDialog(new t).then(t=>(t.cid=parseInt(i.data.id),this.exec("insertdoc",t).then(t=>t.error?this.error(t.error):(t.result&&this.notify(t.result),this.update_doclist(i.data.id),this.clear_preview())).catch(t=>this.error(t.toString(),t)))):this.notify(__("Please select a category"))},this.find("bt-del-doc").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return this.ask({text:__("Do you really want to delete: `{0}`",e.data.name)}).then(t=>{if(t)return this.exec("deletedoc",{id:e.data.id,file:e.data.file}).then(t=>t.error?this.error(t.error):(this.notify(t.result),this.update_doclist(e.data.cid),this.clear_preview())).catch(t=>this.error(t.toString(),t))})},this.find("bt-edit-doc").onbtclick=e=>{var i,a;if(a=this.docview.selectedItem,i=this.catview.selectedItem,a)return this.openDialog(new t,a.data).then(t=>(t.cid=parseInt(i.data.id),t.id=a.data.id,this.exec("updatedoc",{data:t,rm:!t.file.includes(a.data.file)&&a.data.file}).then(t=>t.error?this.error(t.error):(t.result&&this.notify(t.result),this.update_doclist(i.data.id),this.clear_preview())).catch(t=>this.error(t.toString(),t))))},this.initialize()}update_doclist(t){return this.exec("select",{table:"docs",cond:`cid = ${t} ORDER BY year DESC, month DESC, day DESC`}).then(t=>{var e,i,a,r;if(t.error)return this.error(t.error);for(e=0,i=(a=t.result).length;ethis.error(t.toString(),t))}clear_preview(){return this.docpreview.getContext("2d").clearRect(0,0,this.docpreview.width,this.docpreview.height),this.docgrid.rows=[]}preview(t,e){return this.exec("preview",t).then(t=>{var i;return t.error?this.error(t.error):(i=t.result.asFileHandle()).read("binary").then(t=>{var a,r;return(r=new Image).onload=()=>{var t;return t=e.getContext("2d"),e.height=r.height,e.width=r.width,t.drawImage(r,0,0)},a=new Blob([t],{type:i.info.mime}),r.src=URL.createObjectURL(a)}).catch(t=>this.error(t.toString(),t))}).catch(t=>this.error(t.toString(),t))}cat_refresh(){return this.docview.data=[],this.clear_preview(),this.exec("fetch","categories").then(t=>{var e,i,a,r;for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch categories: {0}",t.toString()),t))}initialize(){return this.setting.docpath?this.initdb():this.openDialog("FileDialog",{title:__("Please select a doc path"),mimes:["dir"]}).then(t=>(this.setting.docpath=t.file.path,this._api.setting(),this.initdb())).catch(t=>this.error(t.toString(),t))}exec(t,e){var i;return i={path:this.path()+"/api.lua",parameters:{action:t,docpath:this.setting.docpath,args:e}},this.call(i)}initdb(){return this.setting.docpath?this.exec("init").then(t=>t.error?this.error(t.error):(this.notify(t.result),this.cat_refresh())).catch(t=>this.error(__("Unable to init database: {0}",t.toString()),t)):this.error(__("No configured docpath"))}menu(){return[{text:"__(View)",nodes:[{text:"__(Owners)",id:"owners"},{text:"__(Preview)",id:"preview"},{text:"__(Change doc path)",id:"setdocp"}],onchildselect:t=>this.fileMenuHandle(t.data.item.data.id)}]}fileMenuHandle(t){switch(t){case"owners":return this.openDialog(new r,{title:__("Owners")});case"preview":return this.openDialog(new a).then(t=>this.notify(t.path));case"setdocp":return this.setting.docpath=void 0,this.initialize()}}},this.OS.register("Docify",i)}).call(this); \ No newline at end of file +(function(){var t,i,a,r,n;(r=class t extends this.OS.GUI.BasicDialog{constructor(){super("OwnerDialog",t.scheme)}main(){return super.main(),this.oview=this.find("ownview"),this.oview.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog("PromptDialog",{title:__("Owner"),label:__("Name")}).then(t=>this.parent.exec("insert",{table:"owners",data:{name:t}}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable to insert owner: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.oview.selectedItem)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.parent.exec("delete",{table:"owners",id:parseInt(e.data.id)}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable delete category: {0}",t.toString()),t))})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:t=>{var e;if(e=this.oview.selectedItem)return this.openDialog("PromptDialog",{title:__("Owner"),label:__("Name"),value:e.data.name}).then(t=>this.parent.exec("update",{table:"owners",data:{id:parseInt(e.data.id),name:t}}).then(t=>t.error?this.error(t.error):this.owner_refresh()).catch(t=>this.error(__("Unable to update owner: {0}",t.toString()),t))).catch(t=>this.error(t.toString()))}}],this.owner_refresh()}owner_refresh(){return this.parent.exec("fetch","owners").then(t=>{var e,i,a,r;for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch owners: {0}",t.toString()),e))}}).scheme="\n \n \n \n",(t=class t extends this.OS.GUI.BasicDialog{constructor(){super("DocDialog",t.scheme)}main(){var t,e,i,r,n,s,h,l;for(super.main(),this.flist=this.find("file-list"),this.dlist=this.find("dlist"),this.mlist=this.find("mlist"),this.ylist=this.find("ylist"),this.olist=this.find("olist"),this.setting=this.parent.setting,this.exec=this.parent.exec,this.preview=this.parent.preview,this.exec("fetch","owners").then(t=>{var e,i,a,r,n,s,h;if(t.error)return this.error(t.error);for(e=0,a=(n=t.result).length;ethis.error(__("Unable to fetch owner list: {0}",t.toString()),t)),this.dlist.push({text:"None",value:0}),h=0,t=i=1;i<=31;t=++i)this.dlist.push({text:""+t,value:t}),this.data&&parseInt(this.data.day)===t&&(h=t);for(this.dlist.selected=h,this.mlist.push({text:"None",value:0}),h=0,t=r=1;r<=12;t=++r)this.mlist.push({text:""+t,value:t}),this.data&&parseInt(this.data.month)===t&&(h=t);for(this.mlist.selected=h,this.ylist.push({text:"None",value:0}),this.ylist.selected=0,l=n=1960,s=(new Date).getFullYear();1960<=s?n<=s:n>=s;l=1960<=s?++n:--n)this.ylist.push({text:""+l,value:l,selected:this.data&&parseInt(this.data.year)===l});if(this.flist.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog(new a).then(t=>(t.text=t.filename,this.flist.push(t)))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.flist.selectedItem)return this.flist.delete(e)}}],this.flist.onlistselect=t=>this.parent.preview(t.data.item.data.path,this.find("preview-canvas")),this.find("btsave").onbtclick=t=>{var e,i;return(e={name:this.find("title").value.trim(),day:this.dlist.selectedItem.data.value,month:this.mlist.selectedItem.data.value,year:this.ylist.selectedItem.data.value,file:function(){var t,e,a,r;for(r=[],t=0,e=(a=this.flist.data).length;t0?(this.handle&&this.handle(e),this.quit()):this.notify(__("Please attach files to the entry")):this.notify(__("Please enter title"))},this.data)return this.find("title").value=this.data.name,this.find("note").value=this.data.note,this.find("tag").value=this.data.tags,(e=this.data.file.asFileHandle()).text=e.filename,this.flist.data=[e]}}).scheme='\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
',(a=class t extends this.OS.GUI.BasicDialog{constructor(){super("FilePreviewDialog",t.scheme)}main(){return super.main(),this.flist=this.find("file-list"),this.flist.buttons=[{text:"",iconclass:"fa fa-refresh",onbtclick:t=>this.refresh()}],this.flist.onlistselect=t=>this.parent.preview(t.data.item.data.path,this.find("preview-canvas")),this.find("btok").onbtclick=t=>{var e;return(e=this.flist.selectedItem)?(this.handle&&this.handle(e.data),this.quit()):this.quit()},this.refresh()}refresh(){return(this.parent.setting.docpath+"/unclassified").asFileHandle().read().then(t=>{var e,i,a,r;if(t.error)return this.error(t.error);for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch unclassified file list: {0}",t.toString()),t))}}).scheme='\n \n \n \n \n \n \n
\n \n
\n
\n \n
\n \n
\n
\n
',(n=class t extends this.OS.GUI.BasicDialog{constructor(){super("PrintDialog",t.scheme)}main(){return super.main(),this.find("printerName").value=this.parent.setting.printer,this.find("btnprint").onbtclick=t=>{var e;return(e={}).range=parseInt($("input[name=range]:checked",this.scheme).val()),e.pages=this.find("txtPageRange").value,e.printer=this.find("printerName").value,e.orientation=parseInt($("input[name=orientation]:checked",this.scheme).val()),e.side=parseInt($("input[name=side]:checked",this.scheme).val()),this.handle&&this.handle(e),this.quit()}}}).scheme='\n \n \n \n \n
\n \n
\n \n \n \n
\n \n
\n \n
\n \n \n
\n \n
\n \n
\n \n
\n \n \n
\n
\n \n
\n
\n
',i=class extends this.OS.application.BaseApplication{constructor(t){super("Docify",t)}main(){return this.setting.printer||(this.setting.printer=""),this.catview=this.find("catview"),this.docview=this.find("docview"),this.docpreview=this.find("preview-canvas"),this.docgrid=this.find("docgrid"),this.docgrid.header=[{text:"",width:100},{text:""}],this.find("btdld").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return e.data.file.asFileHandle().download().catch(t=>this.error(__("Unable to download: {}",t.toString()),t))},this.find("btopen").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return e.data.file.asFileHandle().meta().then(t=>t.error?this.error(t.error):this._gui.openWith(t.result)).catch(t=>this.error(t.toString(),t))},this.find("btprint").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return this.openDialog(new n,{}).then(t=>{if(t)return t.file=e.data.file,this.exec("printdoc",t).then(t=>t.error?this.error(t.error):this.notify(t.result)).catch(t=>this.error(__("Unable to insert category: {0}",t.toString()),t))})},this.catview.buttons=[{text:"",iconclass:"fa fa-plus-circle",onbtclick:t=>this.openDialog("PromptDialog",{title:__("Category"),label:__("Name")}).then(t=>this.exec("insert",{table:"categories",data:{name:t}}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable to insert category: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))},{text:"",iconclass:"fa fa-minus-circle",onbtclick:t=>{var e;if(e=this.catview.selectedItem)return this.ask({text:__("Do you realy want to delete: `{0}`",e.data.text)}).then(t=>{if(t)return this.exec("delete",{table:"categories",id:parseInt(e.data.id)}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable delete category: {0}",t.toString()),t))})}},{text:"",iconclass:"fa fa-pencil-square-o",onbtclick:t=>{var e;if(e=this.catview.selectedItem)return this.openDialog("PromptDialog",{title:__("Category"),label:__("Name"),value:e.data.name}).then(t=>this.exec("update",{table:"categories",data:{id:parseInt(e.data.id),name:t}}).then(t=>t.error?this.error(t.error):this.cat_refresh()).catch(t=>this.error(__("Unable to update category: {0}",t.toString()),t))).catch(t=>this.error(t.toString(),t))}}],this.docview.onlistselect=t=>{var e;if(this.clear_preview(),e=t.data.item)return this.exec("get_doc",e.data.id).then(t=>{var e,i,a,r,n,s;if(t.error)return this.error(t.error);for(i in this.preview(t.result.file,this.docpreview),n=[],t.result.fileinfo&&(t.result.size=(t.result.fileinfo.size/1024).toFixed(2)+" Kb"),a={ctime:"Created on",mtime:"Modified on",note:"Note",tags:"Tags",name:"Title",owner:"Owner",edate:"Effective date",file:"File",size:"Size"},t.result.edate=`${t.result.day}/${t.result.month}/${t.result.year}`,r=t.result)s=r[i],(e=a[i])&&n.push([{text:e},{text:s}]);return this.docgrid.rows=n}).catch(t=>this.error(t.toString(),t))},this.catview.onlistselect=t=>{var e;if(this.clear_preview(),e=t.data.item)return this.update_doclist(e.data.id)},this.find("bt-add-doc").onbtclick=e=>{var i;return(i=this.catview.selectedItem)?this.openDialog(new t).then(t=>(t.cid=parseInt(i.data.id),this.exec("insertdoc",t).then(t=>t.error?this.error(t.error):(t.result&&this.notify(t.result),this.update_doclist(i.data.id),this.clear_preview())).catch(t=>this.error(t.toString(),t)))):this.notify(__("Please select a category"))},this.find("bt-del-doc").onbtclick=t=>{var e;if(e=this.docview.selectedItem)return this.ask({text:__("Do you really want to delete: `{0}`",e.data.name)}).then(t=>{if(t)return this.exec("deletedoc",{id:e.data.id,file:e.data.file}).then(t=>t.error?this.error(t.error):(this.notify(t.result),this.update_doclist(e.data.cid),this.clear_preview())).catch(t=>this.error(t.toString(),t))})},this.find("bt-edit-doc").onbtclick=e=>{var i,a;if(a=this.docview.selectedItem,i=this.catview.selectedItem,a)return this.openDialog(new t,a.data).then(t=>(t.cid=parseInt(i.data.id),t.id=a.data.id,this.exec("updatedoc",{data:t,rm:!t.file.includes(a.data.file)&&a.data.file}).then(t=>t.error?this.error(t.error):(t.result&&this.notify(t.result),this.update_doclist(i.data.id),this.clear_preview())).catch(t=>this.error(t.toString(),t))))},this.initialize()}update_doclist(t){return this.exec("select",{table:"docs",cond:`cid = ${t} ORDER BY year DESC, month DESC, day DESC`}).then(t=>{var e,i,a,r;if(t.error)return this.error(t.error);for(e=0,i=(a=t.result).length;ethis.error(t.toString(),t))}clear_preview(){return this.docpreview.getContext("2d").clearRect(0,0,this.docpreview.width,this.docpreview.height),this.docgrid.rows=[]}preview(t,e){return this.exec("preview",t).then(t=>{var i;return t.error?this.error(t.error):(i=t.result.asFileHandle()).read("binary").then(t=>{var a,r;return(r=new Image).onload=()=>{var t;return t=e.getContext("2d"),e.height=r.height,e.width=r.width,t.drawImage(r,0,0)},a=new Blob([t],{type:i.info.mime}),r.src=URL.createObjectURL(a)}).catch(t=>this.error(t.toString(),t))}).catch(t=>this.error(t.toString(),t))}cat_refresh(){return this.docview.data=[],this.clear_preview(),this.exec("fetch","categories").then(t=>{var e,i,a,r;for(e=0,i=(a=t.result).length;ethis.error(__("Unable to fetch categories: {0}",t.toString()),t))}initialize(){return this.setting.docpath?this.initdb():this.openDialog("FileDialog",{title:__("Please select a doc path"),mimes:["dir"]}).then(t=>(this.setting.docpath=t.file.path,this._api.setting(),this.initdb())).catch(t=>this.error(t.toString(),t))}exec(t,e){var i;return i={path:this.path()+"/api.lua",parameters:{action:t,docpath:this.setting.docpath,args:e}},this.call(i)}initdb(){return this.setting.docpath?this.exec("init").then(t=>t.error?this.error(t.error):(this.notify(t.result),this.cat_refresh())).catch(t=>this.error(__("Unable to init database: {0}",t.toString()),t)):this.error(__("No configured docpath"))}menu(){return[{text:"__(Options)",nodes:[{text:"__(Owners)",id:"owners"},{text:"__(Preview)",id:"preview"},{text:"__(Change doc path)",id:"setdocp"},{text:"__(Set default printer)",id:"setprinter"}],onchildselect:t=>this.fileMenuHandle(t.data.item.data.id)}]}fileMenuHandle(t){switch(t){case"owners":return this.openDialog(new r,{title:__("Owners")});case"preview":return this.openDialog(new a).then(t=>this.notify(t.path));case"setdocp":return this.setting.docpath=void 0,this.initialize();case"setprinter":return this.openDialog("PromptDialog",{title:__("Default Printer"),label:__("Enter printer name")}).then(t=>this.setting.printer=t)}}},this.OS.register("Docify",i)}).call(this); \ No newline at end of file diff --git a/Docify/build/debug/package.json b/Docify/build/debug/package.json index 504bd2e..9300c0c 100644 --- a/Docify/build/debug/package.json +++ b/Docify/build/debug/package.json @@ -7,7 +7,7 @@ "author": "", "email": "" }, - "version":"0.0.5-a", + "version":"0.0.6-a", "category":"Other", "iconclass":"fa fa-adn", "mimes":["none"], diff --git a/Docify/build/debug/scheme.html b/Docify/build/debug/scheme.html index df9e332..e0c0bcd 100644 --- a/Docify/build/debug/scheme.html +++ b/Docify/build/debug/scheme.html @@ -26,7 +26,7 @@
- +
diff --git a/Docify/build/release/Docify.zip b/Docify/build/release/Docify.zip index 1d71eec7e3befea0f8e44a836a4f037554fe1995..ae146e2e78980b71d47b92f87075743f5a592386 100644 GIT binary patch delta 3474 zcmbVPOKcm*8QzsG$=1VGV#$$YCmBy%Yd7L9Ny(N|lFL}O1lh73DOM6UkW^vC9g^!T zXV*JJN2)EWC{m!86a@xB4nZDHfg&kT1ObDfC+Bqtd`RI-gB*e$dTB2yd=Hv-W_Br& zsw@YkAd)-t|KI<9@Hc-~@BK&ZpFO{8cZVWgw_eR(dj7Ma)GKL4c_sZ}{|5&9_rTtD z7gNVC01FhWxIkSWYkolW4!~cYU$8w;s5txGC0_po`(Tqc1_9Gm_^Kr>QP6;(3t_wx$kR$hjj18;nwuwo~en=ZZVSO4sBd&bcA4h z!I<4}zFk73$@B7|+1)%)*NVjSNnq2m$PBaSdMHW{nE@K7*E^WGyPq99us=TzYGL@#VH!6>^Z@vAj*X>~h4@qVI z^!=@We#w>jQvLmVSY;pMBZp>1JxoY7;39BM&t68JLD32Y>|gkhpjqESgM%uar>g<7 zU}!t8&-t#)7*y=AYP5}iZ@hKGvcI3;$*?UScewN;+7U!G5@HcMstSVyKa zhv(6vZVF4RvWe{ql02@JN`#h1ES_kHR6VMj9>OJB&bqlU>kbd=TG=ACXETMC4$s0? z`ln;51Yx&xhmVYO=Gw0es*_cU+uLEe`{&cFdKL( z-zweDZk`)G>taWPGQ22!hFb)6Qwpfn*scQWizwa4<|$O)JfP)lbXYn2|4cpdke zJe?Z&SyZM#0*j&*Q2|lrz!U^=bO8`BV)E5rIoS;WuQiL)<;OiQmy}2O+;SL$pWO*O z4R;1j!@S57k^#9SyL-B~!Qw|AYRn<28e4y+pOwxW?3~%0L0fGtG^^8)B>#`av%D#X zwoCul>@7asPR@@o{z83#)&=k|#zyX*<7v6oy62j$6Pep+)`J2#gOQvqb!l-Fe?B$n z?f}f~_)!_cgE`?>mwA>8z4#i2OF--;Tcj;b4J_>-ZG@-Hj&_VRi;=5JlbpzheK}qL z&4n_Wf-GG*&>o7pl!a`3vX}MX{&R$`dVHA0(@EZDPVnK>G*zR{3G=z6U0gAitCae< zpQt2GDVw_-=kiPR!||H349;s4VtAFj2xc{CVXfPv)3=DRb0Dsc|@HeRygl2CNyN({8K-6EFM$y*Tp2w zptVHwg{&=Z3@&LOmtG28#|-_KiG|s%C9QVl#bj6e4DWnCChSdAO~$;U1rtC}^jtwW}iXWrM zt_O8K>BM%gQ7gY~JSZD0rTf*EUS+%A9qe;|2-H`+UcN$!|1S9hrT+GQnw<&;FE=lJ zin6zUFF*e=q9~Up$0sgMniXgEe6zTX{f=)wolR`L$JqzLKviIG?r@5-r-^7f8|_PG hfsn1xTlcC>#*8? zdiXs)408kd#>;Q+9XFDL2qg#MjMisUWfMqr*m|Yybvl`!_zgd`K1UkiUL~s+W2JolqMkBkuPW}3 zYUCK>ON0$;M5PUku=#u}5(qFzjJi9h|9UE4(jyeuXb4m5@#xzwCsQv|lgB3$CtOUK zE-^zky{f4fOD6HKitMex$9x|=I_a=hCq79~%otXuJ}z0ejfmaGi{K^r;7=ipndKt` zco)&kOSwtEtZOO0d;9wtQ0nrK%4E}R(a13+L(^F^mr+bwW*QSwTrhoYr}cq`I@`|Y z^fE{@C2MJBABL%FXm=|~5APaD$%&9;`3^mCz)&OzU23fH{cmOuyk6r(t)Yb}6}uC0 zEOn#*(F;$j`!8&!7NHK&22FX%`{3Nj@#xryQpjxeB&hGk2#ML*ga~CZ2tTXto5J@- zGa$tCZIQ1bgbJw~QLeD9o}1Ni#P${lLV6Y +""" + +class PrintDialog extends this.OS.GUI.BasicDialog + constructor: () -> + super "PrintDialog", PrintDialog.scheme + + main: () -> + super.main() + @find("printerName").value = @parent.setting.printer + @find("btnprint").onbtclick = (e) => + data = {} + data.range = parseInt($('input[name=range]:checked', @scheme).val()) + data.pages = @find("txtPageRange").value + data.printer = @find("printerName").value + data.orientation = parseInt($('input[name=orientation]:checked', @scheme).val()) + data.side = parseInt($('input[name=side]:checked', @scheme).val()) + @handle data if @handle + @quit() + +PrintDialog.scheme = """ + + + + + +
+ +
+ + + +
+ +
+ +
+ + +
+ +
+ +
+ +
+ + +
+
+ +
+
+
""" \ No newline at end of file diff --git a/Docify/coffees/main.coffee b/Docify/coffees/main.coffee index 55caccf..5524d16 100644 --- a/Docify/coffees/main.coffee +++ b/Docify/coffees/main.coffee @@ -4,6 +4,8 @@ class Docify extends this.OS.application.BaseApplication main: () -> + @setting.printer = "" unless @setting.printer + @catview = @find "catview" @docview = @find "docview" @docpreview = @find "preview-canvas" @@ -26,6 +28,18 @@ class Docify extends this.OS.application.BaseApplication return @error m.error if m.error @_gui.openWith m.result .catch (e) => @error e.toString(), e + @find("btprint").onbtclick = (e) => + item = @docview.selectedItem + return unless item + @openDialog new PrintDialog(), {} + .then (d) => + return unless d + d.file = item.data.file + @exec("printdoc", d) + .then (r) => + return @error r.error if r.error + @notify r.result + .catch (e) => @error __("Unable to insert category: {0}", e.toString()), e @catview.buttons = [ { text: "", @@ -241,11 +255,12 @@ class Docify extends this.OS.application.BaseApplication menu: () -> [ { - text: "__(View)", + text: "__(Options)", nodes: [ { text: "__(Owners)", id:"owners"}, { text: "__(Preview)", id:"preview"}, - { text: "__(Change doc path)", id:"setdocp"} + { text: "__(Change doc path)", id:"setdocp"}, + { text: "__(Set default printer)", id:"setprinter"} ], onchildselect: (e) => @fileMenuHandle e.data.item.data.id } @@ -262,5 +277,9 @@ class Docify extends this.OS.application.BaseApplication when "setdocp" @setting.docpath = undefined @initialize() + when "setprinter" + @openDialog "PromptDialog", {title: __("Default Printer"), label: __("Enter printer name")} + .then (n) => + @setting.printer = n this.OS.register "Docify", Docify \ No newline at end of file diff --git a/Docify/css/main.css b/Docify/css/main.css index b828c05..1c69b86 100644 --- a/Docify/css/main.css +++ b/Docify/css/main.css @@ -12,4 +12,13 @@ canvas[data-id = "preview-canvas"] { display: block; margin:0 auto; +} +afx-app-window[data-id = "DocifyPrintDialog"] i.label-text { + font-weight: bold; +} + +afx-app-window[data-id = "DocifyPrintDialog"] input[type="radio"] { + margin: 0; + height: 12px; + margin-left: 10px; } \ No newline at end of file diff --git a/Docify/package.json b/Docify/package.json index 504bd2e..9300c0c 100644 --- a/Docify/package.json +++ b/Docify/package.json @@ -7,7 +7,7 @@ "author": "", "email": "" }, - "version":"0.0.5-a", + "version":"0.0.6-a", "category":"Other", "iconclass":"fa fa-adn", "mimes":["none"], diff --git a/packages.json b/packages.json index c5b4f70..e6df81c 100644 --- a/packages.json +++ b/packages.json @@ -105,7 +105,7 @@ "description": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Docify/README.md", "category": "Other", "author": "", - "version": "0.0.5-a", + "version": "0.0.6-a", "dependencies": [], "download": "https://raw.githubusercontent.com/lxsang/antosdk-apps/master/Docify/build/release/Docify.zip" },