From 133b7512fa1e116d781d2e44881df10c05a02404 Mon Sep 17 00:00:00 2001 From: Xuan Sang LE Date: Tue, 13 Feb 2018 04:59:08 +0100 Subject: [PATCH] fix tree view, add features to Blogger --- Makefile | 11 +++- src/core/BaseDialog.coffee | 4 +- src/core/db.coffee | 11 +++- src/core/gui.coffee | 4 +- src/core/tags/afx-file-view.js | 19 ++++--- src/core/tags/afx-hbox.js | 11 ++-- src/core/tags/afx-list-view.js | 3 + src/core/tags/afx-tree-view.js | 88 ++++++++++++++++++++--------- src/core/tags/afx-vbox.js | 11 ++-- src/packages/Blogger/Makefile | 2 +- src/packages/Blogger/dialogs.coffee | 47 +++++++++++++++ src/packages/Blogger/main.coffee | 78 +++++++++++++++++++++++-- src/packages/Blogger/main.css | 23 +++++++- src/packages/Blogger/scheme.html | 23 +++++--- src/packages/DummyApp/main.coffee | 6 +- src/packages/NotePad/main.css | 4 +- src/themes/antos/afx-file-view.css | 6 +- src/themes/antos/afx-list-view.css | 30 ++++++---- 18 files changed, 296 insertions(+), 85 deletions(-) create mode 100644 src/packages/Blogger/dialogs.coffee diff --git a/Makefile b/Makefile index 14160ae..d423e83 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,6 @@ coffees= src/core/core.coffee\ - packages = CoreServices NotePad wTerm ActivityMonitor DummyApp Files MarkOn MarketPlace Blogger main: build_coffees build_tags build_themes schemes libs build_packages @@ -78,5 +77,15 @@ build_packages: for d in $(packages); do (cd src/packages/$$d; make);done for d in $(packages); do ( test -d $(BUILDDIR)/packages/$$d || mkdir -p $(BUILDDIR)/packages/$$d && cp -rf src/packages/$$d/build/* $(BUILDDIR)/packages/$$d/);done for d in $(packages); do ( test -d src/packages/$$d/build && rm -r src/packages/$$d/build ); done + +package: + read -r -p "Enter package name: " PKG;\ + test -d $(BUILDDIR)/packages/$$PKG && rm -rf $(BUILDDIR)/packages/$$PKG/*;\ + cd src/packages/$$PKG && make;\ + cd ../../../;\ + test -d $(BUILDDIR)/packages/$$PKG || mkdir -p $(BUILDDIR)/packages/$$PKG;\ + cp -rf src/packages/$$PKG/build/* $(BUILDDIR)/packages/$$PKG/;\ + test -d src/packages/$$PKG/build && rm -r src/packages/$$PKG/build; + clean: rm -rf $(BUILDDIR)/* \ No newline at end of file diff --git a/src/core/BaseDialog.coffee b/src/core/BaseDialog.coffee index d49a16c..0e65892 100644 --- a/src/core/BaseDialog.coffee +++ b/src/core/BaseDialog.coffee @@ -56,7 +56,7 @@ class BasicDialog extends BaseDialog @title = @name if not @title html = " " - html += "<#{v.tag} #{v.att} data-id = 'content#{k}'>" for k,v of @conf.tags + html += "<#{v.tag} #{v.att} style = 'margin-left:5px; margin-right:5px;' data-id = 'content#{k}'>" for k,v of @conf.tags html += "
" html += "" for k,v of @conf.buttons html += "
" @@ -104,7 +104,7 @@ class PromptDialog extends BasicDialog (d.find "content0").set "text", d.data.label (d.find "content1").value = d.data.value if d.data.value xtra: (d) -> - $( d.find "content0" ).keyup (e) -> + $( d.find "content1" ).keyup (e) -> (d.find "bt0").trigger() if e.which is 13 } diff --git a/src/core/db.coffee b/src/core/db.coffee index 2cb23f8..b57d3f3 100644 --- a/src/core/db.coffee +++ b/src/core/db.coffee @@ -3,8 +3,15 @@ class DB save: (d, f) -> _API.handler.dbquery "save", { table: @table, data: d }, f - delete: (id, f) -> - _API.handler.dbquery "delete", { table: @table, id: id }, f + delete: (c, f) -> + rq = { table: @table } + return _courrier.oserror "Unknown condition for delete command", + (_API.throwe "OS.DB"), c unless c and c inst "" + if isNaN c + rq.cond = c + else + rq.id = c + _API.handler.dbquery "delete", rq, f get: (id, f) -> _API.handler.dbquery "get", { table: @table, id: id }, f find: (cond, f) -> diff --git a/src/core/gui.coffee b/src/core/gui.coffee index 39b6dcc..d6e2e3a 100644 --- a/src/core/gui.coffee +++ b/src/core/gui.coffee @@ -97,6 +97,7 @@ self.OS.GUI = forceLaunch: (app, args) -> console.log "This method is used for developing only, please use the launch method instead" _PM.killAll app + ($ _OS.APP[app].style).remove() if _OS.APP[app] and _OS.APP[app].style _OS.APP[app] = undefined _GUI.launch app, args @@ -109,8 +110,9 @@ self.OS.GUI = #load css file css = "#{path}/main.css" css.asFileHandler().onready (d) -> - $ '', { rel: 'stylesheet', type: 'text/css', 'href': "#{_API.handler.get}/#{css}" } + el = $ '', { rel: 'stylesheet', type: 'text/css', 'href': "#{_API.handler.get}/#{css}" } .appendTo 'head' + _OS.APP[app].style = el[0] if _OS.APP[app] , () -> #launch # load app meta data diff --git a/src/core/tags/afx-file-view.js b/src/core/tags/afx-file-view.js index 9f832d8..5460cc5 100644 --- a/src/core/tags/afx-file-view.js +++ b/src/core/tags/afx-file-view.js @@ -82,7 +82,7 @@ var tdata = {} tdata.name = self.path tdata.nodes = getTreeData(self.data) - self.refs.treeview.root.set("*", tdata) + self.refs.treeview.root.set("data", tdata) } var getTreeData = function(data) { @@ -170,20 +170,21 @@ self.refs.treeview.ontreeselect = function(d) { if(!d) return; - if(!d.data)// select the root + var data; + var el = d; + if(d.treepath == 0)// select the root { - var r = self.path.asFileHandler() - r.size = 0 - r.filename = r.path - d.data = { child: r , i:0 } + el = self.path.asFileHandler() + el.size = 0 + el.filename = el.path } - var data = {id:self.rid, data:d.data.child, idx:d.data.i} + var data = {id:self.rid, data:el} self.root.observable.trigger("fileselect",data) } self.refs.treeview.ontreedbclick = function(d) { - if(!d.data) return; - var data = {id:self.rid, data:d.data.child, idx:d.data.i} + if(!d || d.treepath == 0) return; + var data = {id:self.rid, data:d} self.root.observable.trigger("filedbclick",data) } self.root.observable.on("fileselect", function(e){ diff --git a/src/core/tags/afx-hbox.js b/src/core/tags/afx-hbox.js index ebe007b..a5261a6 100644 --- a/src/core/tags/afx-hbox.js +++ b/src/core/tags/afx-hbox.js @@ -40,6 +40,8 @@ if(dw) { if(dw == "grow") return + if(dw[dw.length-1] === "%") + dw = Number(dw.slice(0,-1))*avaiWidth/100; $(this).css("width",dw + "px") ocwidth += Number(dw) } @@ -51,10 +53,11 @@ } }) csize = (avaiWidth - ocwidth)/ (auto_width.length) - $.each(auto_width, function(i,v) - { - $(v).css("width", csize + "px") - }) + if(csize > 0) + $.each(auto_width, function(i,v) + { + $(v).css("width", csize + "px") + }) self.root.observable.trigger("hboxchange", {id:self.rid, w:csize, h:avaiheight}) } diff --git a/src/core/tags/afx-list-view.js b/src/core/tags/afx-list-view.js index 3e5aeea..d4625eb 100644 --- a/src/core/tags/afx-list-view.js +++ b/src/core/tags/afx-list-view.js @@ -6,6 +6,9 @@
  • +
  • diff --git a/src/core/tags/afx-tree-view.js b/src/core/tags/afx-tree-view.js index 749d072..e3d9b2e 100644 --- a/src/core/tags/afx-tree-view.js +++ b/src/core/tags/afx-tree-view.js @@ -1,41 +1,45 @@ -
    +
    • - - + + - { name } + { data.name }
      -
    • - " + i} treeroot= {parent.treeroot}> +
    • + " + i} treeroot= {parent.treeroot}>
    \ No newline at end of file diff --git a/src/core/tags/afx-vbox.js b/src/core/tags/afx-vbox.js index 6f562aa..e8208ae 100644 --- a/src/core/tags/afx-vbox.js +++ b/src/core/tags/afx-vbox.js @@ -43,6 +43,8 @@ if(dw) { if(dw == "grow") return + if(dw[dw.length-1] === "%") + dw = Number(dw.slice(0,-1))*avaiheight/100; $(this).css("height",dw + "px") ocheight += Number(dw) } @@ -54,10 +56,11 @@ } }) csize = (avaiheight - ocheight)/ (auto_height.length) - $.each(auto_height, function(i,v) - { - $(v).css("height", csize + "px") - }) + if(csize > 0) + $.each(auto_height, function(i,v) + { + $(v).css("height", csize + "px") + }) self.root.observable.trigger("vboxchange", {id:self.rid, w:avaiwidth, h:csize}) } diff --git a/src/packages/Blogger/Makefile b/src/packages/Blogger/Makefile index d5b2391..6dba0ff 100644 --- a/src/packages/Blogger/Makefile +++ b/src/packages/Blogger/Makefile @@ -1,4 +1,4 @@ -coffee_files = main.coffee +coffee_files = dialogs.coffee main.coffee jsfiles = diff --git a/src/packages/Blogger/dialogs.coffee b/src/packages/Blogger/dialogs.coffee new file mode 100644 index 0000000..96a1d3c --- /dev/null +++ b/src/packages/Blogger/dialogs.coffee @@ -0,0 +1,47 @@ +class BloggerCategoryDialog extends this.OS.GUI.BasicDialog + constructor: () -> + super "BloggerCategoryDialog", { + tags: [ + { tag: "afx-label", att: "data-height = '20', text = 'Pick a parent:'" }, + { tag: "afx-tree-view" }, + { tag: "afx-label", att: "data-height = '20', text = 'Category name:'" }, + { tag: "input", att: "type = 'text' data-height = '20'" } + ], + width: 200, + height: 300, + resizable: true, + buttons: [ + { + label: "0k", + onclick: (d) -> + sel = (d.find "content1").get "selectedItem" + return d.notify "Please select a parent category" unless sel + val = (d.find "content3").value + return d.notify "Please enter category name" if val is "" + return d.notify "Parent can not be the category itself" if d.data.cat and d.data.cat.id is sel.id + d.handler { p: sel, value: val } if d.handler + d.quit() + }, + { + label: "Cancel", + onclick: (d) -> d.quit() + } + ], + filldata: (d) -> + return unless d.data + #console.log d.data + tree = d.find "content1" + tree.set "data", d.data.tree if d.data.tree + if d.data.cat + it = (tree.find "id", d.data.cat.pid)[0] + tree.set "selectedItem", it + (d.find "content3").value = d.data.cat.name + #(d.find "content0").set "text", d.data.label + #(d.find "content1").value = d.data.value if d.data.value + xtra: (d) -> + $( d.find "content3" ).keyup (e) -> + (d.find "bt0").trigger() if e.which is 13 + } + + +this.OS.register "BloggerCategoryDialog", BloggerCategoryDialog \ No newline at end of file diff --git a/src/packages/Blogger/main.coffee b/src/packages/Blogger/main.coffee index e82af2a..c574f71 100644 --- a/src/packages/Blogger/main.coffee +++ b/src/packages/Blogger/main.coffee @@ -12,11 +12,16 @@ class Blogger extends this.OS.GUI.BaseApplication ] @user = {} @cvlist = @find "cv-list" + @cvlist.set "ontreeselect", (d) -> + #console.log d @bloglist = @find "blog-list" + @userdb = new @_api.DB("user") + @cvcatdb = new @_api.DB("cv_cat") @tabbar.set "onlistselect", (e) -> ($ el).hide() for el in me.containers me.fetchData e.idx ($ me.containers[e.idx]).show() + me.trigger "calibrate" @tabbar.set "items", [ { iconclass: "fa fa-user-circle", selected: true }, @@ -25,29 +30,90 @@ class Blogger extends this.OS.GUI.BaseApplication ] (@find "bt-user-save").set "onbtclick", (e) -> me.saveUser() - + (@find "cv-cat-add").set "onbtclick", (e) -> + me.openDialog "BloggerCategoryDialog", + (d) -> + c = + name: d.value, + pid: d.p.id, + publish: 1 + me.cvcatdb.save c, (r) -> + me.error "Cannot add new category" if r.error + me.refreshCVCat() + #update the list + + , "Add category", { tree: me.cvlist.get "data" } + + (@find "cv-cat-edit").set "onbtclick", (e) -> + cat = me.cvlist.get "selectedItem" + return unless cat + me.openDialog "BloggerCategoryDialog", (d) -> + c = + id: cat.id, + publish: cat.publish, + pid: d.p.id, + name: d.value + + me.cvcatdb.save c, (r) -> + me.error "Cannot Edit category" if r.error + me.refreshCVCat() + , "Edit category", { tree: (me.cvlist.get "data"), cat: cat } + + (@find "cv-cat-del").set "onbtclick", (e) -> + cat = me.cvlist.get "selectedItem" + return unless cat + me.openDialog "YesNoDialog", + (d) -> + return unless d + console.log "delete all child + theirs content" + , "Delete cagegory" , + { iconclass: "fa fa-question-circle", text: "Do you really want to delete: #{cat.name} ?" } fetchData: (idx) -> me = @ switch idx when 0 #user info - db = new @_api.DB("user") - db.get null, (d) -> + + @userdb.get null, (d) -> return me.error "Cannot fetch user data" if d.error me.user = d.result[0] inputs = me.select "[imput-class='user-input']" ($ v).val me.user[v.name] for v in inputs + when 1 # category + @refreshCVCat() else console.log "Not implemented yet" + refreshCVCat: () -> + me = @ + data = + name: "Porfolio", + id:0, + nodes: [] + @cvcatdb.get null, (d) -> + return me.notify "Cannot fetch CV categories" if d.error + me.fetchCVCat d.result, data, "0" + me.cvlist.set "data", data + it = (me.cvlist.find "pid", "2")[0] + me.cvlist.set "selectedItem", it + + fetchCVCat: (table, data, id) -> + result = (v for v in table when v.pid is id) + return data.nodes = null if result.length is 0 + for v in result + v.nodes = [] + @fetchCVCat table, v, v.id + #v.nodes = null if v.nodes.length is 0 + data.nodes.push v + + saveUser:() -> me = @ inputs = @select "[imput-class='user-input']" @user[v.name] = ($ v).val() for v in inputs return @notify "Full name must be entered" if not @user.fullname or @user.fullname is "" - db = new @_api.DB("user") - console.log @user - db.save @user, (r) -> + #console.log @user + @userdb.save @user, (r) -> return me.error "Cannot save user data" if r.error return me.notify "User data updated" diff --git a/src/packages/Blogger/main.css b/src/packages/Blogger/main.css index 46a932d..712f554 100644 --- a/src/packages/Blogger/main.css +++ b/src/packages/Blogger/main.css @@ -4,13 +4,13 @@ afx-app-window[data-id="blogger-win"] afx-list-view[data-id="tabbar"] { background-color: #333333; } -afx-app-window[data-id="blogger-win"] afx-list-view[data-id="tabbar"] li { +afx-app-window[data-id="blogger-win"] afx-list-view[data-id="tabbar"] > div > ul > li { background-color: #333333; font-size: 20px; color: #929292; } -afx-app-window[data-id="blogger-win"] afx-list-view[data-id="tabbar"] li.selected{ +afx-app-window[data-id="blogger-win"] afx-list-view[data-id="tabbar"] > div > ul > li.selected{ color:white; } afx-app-window[data-id="blogger-win"] afx-hbox[data-id="user-container"] { @@ -22,4 +22,21 @@ afx-app-window[data-id="blogger-win"] afx-hbox[data-id="user-container"] afx-hbo } afx-app-window[data-id="blogger-win"] afx-hbox[data-id="user-container"] afx-label{ font-weight: bold; -} \ No newline at end of file +} +afx-app-window[data-id="blogger-win"] afx-hbox.cv-side-bar-btn{ + padding-left:3px; + padding-top:3px; + background-color: #f6F6F6; + border-top: 1px solid #cbcbcb; + color:#414339; +} +afx-app-window[data-id="blogger-win"] afx-resizer{ + border-left: 1px solid #cbcbcb; + background-color: transparent; +} +afx-app-window[data-id="blogger-win"] afx-hbox[data-id="cv-container"] afx-label.cat-header{ + background-color: #f6F6F6; + border-bottom: 1px solid #cbcbcb; + text-align: center; +} + diff --git a/src/packages/Blogger/scheme.html b/src/packages/Blogger/scheme.html index 3506087..4e5ccc3 100644 --- a/src/packages/Blogger/scheme.html +++ b/src/packages/Blogger/scheme.html @@ -1,8 +1,8 @@ - + - + @@ -25,20 +25,29 @@ -