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 1d71eec..ae146e2 100644 Binary files a/Docify/build/release/Docify.zip and b/Docify/build/release/Docify.zip differ diff --git a/Docify/coffees/dialogs.coffee b/Docify/coffees/dialogs.coffee index fb77380..6c87ce7 100644 --- a/Docify/coffees/dialogs.coffee +++ b/Docify/coffees/dialogs.coffee @@ -125,7 +125,7 @@ class DocDialog extends this.OS.GUI.BasicDialog value: 0 } @ylist.selected = 0 - for y in [1980..new Date().getFullYear()] + for y in [1960..new Date().getFullYear()] @ylist.push { text:"#{y}", value: y, @@ -273,4 +273,57 @@ FilePreviewDialog.scheme = """ +""" + +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" },