diff --git a/TODO b/TODO
index 9c048d3..5c28bd1 100644
--- a/TODO
+++ b/TODO
@@ -1,2 +1 @@
-VFS mountpoints object (selected) is changed between apps, which is not a good ideal
-Some error in event handle using observable
\ No newline at end of file
+add require function that allows load shared library between application
\ No newline at end of file
diff --git a/src/core/BaseDialog.coffee b/src/core/BaseDialog.coffee
index 0e65892..eab9ec7 100644
--- a/src/core/BaseDialog.coffee
+++ b/src/core/BaseDialog.coffee
@@ -17,7 +17,7 @@ class SubWindow extends this.OS.GUI.BaseModel
@parent.meta()
show: () ->
@trigger 'focus'
- ($ @scheme).css "z-index", window._zindex+2
+ ($ @scheme).css "z-index", window._zindex + 2
hide: () ->
@trigger 'hide'
@@ -182,7 +182,7 @@ this.OS.register "InfoDialog", InfoDialog
class YesNoDialog extends BasicDialog
constructor: () ->
super "YesNoDialog", {
- tags: [{ tag: "afx-label", att: "style = 'padding:10px;'" }],
+ tags: [{ tag: "afx-label", att: "style = 'padding-left:10px;'" }],
width: 300,
height: 100,
resizable: true,
diff --git a/src/core/BaseModel.coffee b/src/core/BaseModel.coffee
index 60f163b..c3bc227 100644
--- a/src/core/BaseModel.coffee
+++ b/src/core/BaseModel.coffee
@@ -20,6 +20,11 @@ class BaseModel
@dialog.quit() if @dialog
_PM.kill @
+ path: () ->
+ mt = @meta()
+ return mt.path if mt and mt.path
+ return null
+
init: ->
#implement by sub class
onexit: (e) ->
diff --git a/src/core/api.coffee b/src/core/api.coffee
index 5cf8417..0a96dfc 100644
--- a/src/core/api.coffee
+++ b/src/core/api.coffee
@@ -3,6 +3,7 @@ self.OS.API =
# fetch user data, used by the API to make requests
# handlers are defined in /src/handlers
handler: { }
+ shared: {} # shared libraries
#request a user data
post: (p, d, c, f) ->
q = _courrier.getMID()
@@ -115,6 +116,33 @@ self.OS.API =
path = "resources/#{r}"
_API.get path, c, f
+ require: (l,f) ->
+ path = "os:///scripts/"
+ if not _API.shared[l]
+ js = "#{path}#{l}.js"
+ js.asFileHandler().onready (d) ->
+ _API.shared[l] = true
+ el = $ '
-
-
-
-
diff --git a/src/packages/MarkOn/simplemde.min.css b/src/libs/mde/simplemde.min.css
similarity index 100%
rename from src/packages/MarkOn/simplemde.min.css
rename to src/libs/mde/simplemde.min.css
diff --git a/src/packages/MarkOn/simplemde.min.js b/src/libs/mde/simplemde.min.js
similarity index 100%
rename from src/packages/MarkOn/simplemde.min.js
rename to src/libs/mde/simplemde.min.js
diff --git a/src/packages/Blogger/Makefile b/src/packages/Blogger/Makefile
index 6dba0ff..f64aa65 100644
--- a/src/packages/Blogger/Makefile
+++ b/src/packages/Blogger/Makefile
@@ -4,7 +4,7 @@ jsfiles =
cssfiles = main.css
-copyfiles = scheme.html package.json
+copyfiles = scheme.html cvsection.html package.json
PKG_NAME=Blogger
diff --git a/src/packages/Blogger/cvsection.html b/src/packages/Blogger/cvsection.html
new file mode 100644
index 0000000..6978310
--- /dev/null
+++ b/src/packages/Blogger/cvsection.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/packages/Blogger/dialogs.coffee b/src/packages/Blogger/dialogs.coffee
index 96a1d3c..0cf9d2e 100644
--- a/src/packages/Blogger/dialogs.coffee
+++ b/src/packages/Blogger/dialogs.coffee
@@ -44,4 +44,30 @@ class BloggerCategoryDialog extends this.OS.GUI.BasicDialog
}
-this.OS.register "BloggerCategoryDialog", BloggerCategoryDialog
\ No newline at end of file
+this.OS.register "BloggerCategoryDialog", BloggerCategoryDialog
+
+# This dialog is use for cv section editing
+
+class BloggerCVSectionDiaglog extends this.OS.GUI.BaseDialog
+ constructor: () ->
+ super "BloggerCVSectionDiaglog"
+
+ init: () ->
+ @render "#{@path()}/cvsection.html"
+
+ main: () ->
+ me = @
+ @scheme.set "apptitle", @title
+ inputs = me.select "[input-class='user-input']"
+ (($ v).val me.data[v.name] for v in inputs ) if me.data
+ (@find "bt-cv-sec-save").set "onbtclick", (e) ->
+ data = {}
+ console.log inputs
+ data[v.name] = ($ v).val() for v in inputs
+ return me.notify "Title must not be blank" if data.title is ""
+ return me.notify "Content must not be blank" if data.content is ""
+ data.id = me.data.id if me.data and me.data.id
+ me.handler data if me.handler
+ me.quit()
+
+this.OS.register "BloggerCVSectionDiaglog", BloggerCVSectionDiaglog
\ No newline at end of file
diff --git a/src/packages/Blogger/main.coffee b/src/packages/Blogger/main.coffee
index c574f71..50617c7 100644
--- a/src/packages/Blogger/main.coffee
+++ b/src/packages/Blogger/main.coffee
@@ -13,10 +13,11 @@ class Blogger extends this.OS.GUI.BaseApplication
@user = {}
@cvlist = @find "cv-list"
@cvlist.set "ontreeselect", (d) ->
- #console.log d
+ me.CVSectionByCID Number(d.id)
@bloglist = @find "blog-list"
@userdb = new @_api.DB("user")
@cvcatdb = new @_api.DB("cv_cat")
+ @cvsecdb = new @_api.DB("cv_sections")
@tabbar.set "onlistselect", (e) ->
($ el).hide() for el in me.containers
me.fetchData e.idx
@@ -56,7 +57,7 @@ class Blogger extends this.OS.GUI.BaseApplication
name: d.value
me.cvcatdb.save c, (r) ->
- me.error "Cannot Edit category" if r.error
+ return me.error "Cannot Edit category" if r.error
me.refreshCVCat()
, "Edit category", { tree: (me.cvlist.get "data"), cat: cat }
@@ -69,6 +70,35 @@ class Blogger extends this.OS.GUI.BaseApplication
console.log "delete all child + theirs content"
, "Delete cagegory" ,
{ iconclass: "fa fa-question-circle", text: "Do you really want to delete: #{cat.name} ?" }
+
+ (@find "cv-sec-add").set "onbtclick", (e) ->
+ cat = me.cvlist.get "selectedItem"
+ return me.notify "Please select a category" unless cat and cat.id isnt 0
+ me.openDialog "BloggerCVSectionDiaglog", (d) ->
+ d.cid = Number cat.id
+ d.start = Number d.start
+ d.end = Number d.end
+ me.cvsecdb.save d, (r) ->
+ return me.error "Cannot save section: #{r.error}" if r.error
+ me.CVSectionByCID Number(cat.id)
+
+ , "New section entry for #{cat.name}", null
+
+ (@find "cv-sec-edit").set "onbtclick", (e) ->
+ sec = (me.find "cv-sec-list").get "selected"
+ return me.notify "Please select a section to edit" unless sec
+
+ me.openDialog "BloggerCVSectionDiaglog", (d) ->
+ d.cid = Number sec.cid
+ d.start = Number d.start
+ d.end = Number d.end
+ me.cvsecdb.save d, (r) ->
+ return me.error "Cannot save section: #{r.error}" if r.error
+ console.log d.cid
+ me.CVSectionByCID Number(sec.cid)
+
+ , "Modify section entry", sec
+ # USER TAB
fetchData: (idx) ->
me = @
switch idx
@@ -77,13 +107,25 @@ class Blogger extends this.OS.GUI.BaseApplication
@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']"
+ inputs = me.select "[input-class='user-input']"
($ v).val me.user[v.name] for v in inputs
when 1 # category
@refreshCVCat()
else
console.log "Not implemented yet"
+
+ saveUser:() ->
+ me = @
+ inputs = @select "[input-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 ""
+ #console.log @user
+ @userdb.save @user, (r) ->
+ return me.error "Cannot save user data" if r.error
+ return me.notify "User data updated"
+
+ # PORFOLIO TAB
refreshCVCat: () ->
me = @
data =
@@ -91,11 +133,13 @@ class Blogger extends this.OS.GUI.BaseApplication
id:0,
nodes: []
@cvcatdb.get null, (d) ->
- return me.notify "Cannot fetch CV categories" if d.error
+ if d.error
+ me.cvlist.set "data", data
+ return me.notify "Cannot fetch CV categories"
me.fetchCVCat d.result, data, "0"
me.cvlist.set "data", data
- it = (me.cvlist.find "pid", "2")[0]
- me.cvlist.set "selectedItem", it
+ #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)
@@ -105,17 +149,39 @@ class Blogger extends this.OS.GUI.BaseApplication
@fetchCVCat table, v, v.id
#v.nodes = null if v.nodes.length is 0
data.nodes.push v
-
- saveUser:() ->
+ CVSectionByCID: (cid) ->
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 ""
- #console.log @user
- @userdb.save @user, (r) ->
- return me.error "Cannot save user data" if r.error
- return me.notify "User data updated"
+ @cvsecdb.find "cid=#{cid} ORDER BY start DESC", (d) ->
+ return me.notify "Section list is empty, please add one" if d.error
+ v.text = v.title for v in d.result
+ items = []
+ $(me.find "cv-sec-status").html "Found #{d.result.length} sections"
+ for v in d.result
+ v.text = v.title
+ v.complex = true
+ v.start = Number(v.start)
+ v.end = Number(v.end)
+ v.detail = []
+ v.detail.push { text: v.subtitle, class: "cv-subtitle" } if v.subtitle isnt ""
+ v.detail.push { text: "#{v.start} - #{v.end}", class: "cv-period" } if v.start isnt 0 and v.end isnt 0
+ v.detail.push { text: v.location, class: "cv-loc" } if v.location isnt ""
+ #v.detail.push { text: v.end } if v.end isnt 0
+ v.closable = true
+ v.detail.push { text: v.content, class: "cv-content" }
+ items.push v
+ el = me.find "cv-sec-list"
+ el.set "onitemclose", (e) ->
+ d = me.openDialog "YesNoDialog", (b) ->
+ return unless b
+ me.cvsecdb.delete e.item.item.id, (r) ->
+ return me.error "Cannot delete the section: #{r.error}" if r.error
+ el.remove e.item.item, true
+ , "Delete section" ,
+ { iconclass: "fa fa-question-circle", text: "Do you really want to delete: #{e.item.item.text} ?" }
+ return false
+ el.set "items", items
Blogger.singleton = true
+Blogger.dependencies = [ "mde/simplemde.min" ]
this.OS.register "Blogger", Blogger
\ No newline at end of file
diff --git a/src/packages/Blogger/main.css b/src/packages/Blogger/main.css
index 712f554..b8c72b5 100644
--- a/src/packages/Blogger/main.css
+++ b/src/packages/Blogger/main.css
@@ -40,3 +40,35 @@ afx-app-window[data-id="blogger-win"] afx-hbox[data-id="cv-container"] afx-labe
text-align: center;
}
+afx-app-window[data-id="blogger-cv-sec-win"] afx-hbox{
+ padding:5px;
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] > div.list-container > ul > li{
+ padding-bottom: 10px;
+ padding-top:10px;
+ /*border-bottom: 1px solid #cbcbcb;*/
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] > div.list-container > ul afx-label{
+ font-weight: bold;
+
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] > div.list-container > ul > li.selected {
+ border: 2px solid #cbcbcb;
+ color: #414339;
+ background-color: transparent;
+ border-radius: 5px;
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] .cv-content{
+ text-align: justify;
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] .cv-period, .cv-loc{
+ text-align: right;
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] .cv-subtitle{
+ font-style: italic;
+ float:left;
+}
+afx-app-window[data-id="blogger-win"] afx-list-view[ data-id = "cv-sec-list"] i.closable::before{
+ content: "\f014";
+ font-size: 15px;
+}
\ No newline at end of file
diff --git a/src/packages/Blogger/scheme.html b/src/packages/Blogger/scheme.html
index 4e5ccc3..8b45f04 100644
--- a/src/packages/Blogger/scheme.html
+++ b/src/packages/Blogger/scheme.html
@@ -6,26 +6,26 @@
-
+
-
+
-
+
-
+
-
+
-
+
@@ -44,7 +44,12 @@
- info here
+
+
+
+
+
+
diff --git a/src/packages/DummyApp/main.coffee b/src/packages/DummyApp/main.coffee
index 5f1f747..42738a4 100644
--- a/src/packages/DummyApp/main.coffee
+++ b/src/packages/DummyApp/main.coffee
@@ -58,7 +58,7 @@ class DummyApp extends this.OS.GUI.BaseApplication
{text:"some thing"},
{text:"some thing"},
{text:"some thing"},
- {text:"some thing", complex:true, content:[{text:"Inner content", class:""}]},
+ {text:"some thing", complex:true, detail:[{text:"Inner content", class:""}]},
{text:"some thing"},
{text:"some thing"},
{text:"some thing"},
diff --git a/src/packages/MarkOn/Makefile b/src/packages/MarkOn/Makefile
index 159faef..cb84b83 100644
--- a/src/packages/MarkOn/Makefile
+++ b/src/packages/MarkOn/Makefile
@@ -1,8 +1,8 @@
coffee_files = main.coffee
-jsfiles = simplemde.min.js
+jsfiles =
-cssfiles = simplemde.min.css main.css
+cssfiles = main.css
copyfiles = scheme.html package.json
diff --git a/src/packages/MarkOn/main.coffee b/src/packages/MarkOn/main.coffee
index 25e8940..ee5679d 100644
--- a/src/packages/MarkOn/main.coffee
+++ b/src/packages/MarkOn/main.coffee
@@ -118,4 +118,6 @@ class MarkOn extends this.OS.GUI.BaseApplication
me.quit()
, "Quit", { text: "Quit without saving ?" }
+MarkOn.dependencies = [ "mde/simplemde.min" ]
+
this.OS.register "MarkOn", MarkOn
\ No newline at end of file
diff --git a/src/packages/NotePad/main.coffee b/src/packages/NotePad/main.coffee
index 79b5bdb..ae6a5df 100644
--- a/src/packages/NotePad/main.coffee
+++ b/src/packages/NotePad/main.coffee
@@ -279,4 +279,10 @@ class NotePad extends this.OS.GUI.BaseApplication
, "Quit", { text: "Ignore all #{dirties.length} unsaved files ?" }
NotePad.singleton = false
+NotePad.dependencies = [
+ "ace/ace",
+ "ace/ext-language_tools",
+ "ace/ext-modelist",
+ "ace/ext-themelist"
+]
this.OS.register "NotePad", NotePad
\ No newline at end of file