From 8fef0c5e9606657aefa16b56b0e76b69563d89dd Mon Sep 17 00:00:00 2001 From: Xuan Sang LE Date: Sun, 11 Mar 2018 21:31:40 +0100 Subject: [PATCH] add setting package --- src/core/BaseDialog.coffee | 4 +- src/core/api.coffee | 2 +- src/core/gui.coffee | 13 ++- src/core/settings.coffee | 21 +++-- src/core/tags/afx-calendar-view.tag | 2 +- src/core/tags/afx-hbox.tag | 11 +++ src/core/tags/afx-list-view.tag | 1 + src/core/tags/afx-switch.tag | 5 +- src/core/tags/afx-tab-bar.tag | 2 +- src/core/tags/afx-tab-container.tag | 84 ++++++++++++++++++++ src/core/tags/afx-vbox.tag | 11 +++ src/core/vfs.coffee | 6 +- src/core/vfs/GoogleDriveHandler.coffee | 6 +- src/packages/CodeBlock/main.coffee | 2 +- src/packages/Files/main.coffee | 2 +- src/packages/Setting/Makefile | 11 +++ src/packages/Setting/main.coffee | 25 ++++++ src/packages/Setting/main.css | 11 +++ src/packages/Setting/package.json | 13 +++ src/packages/Setting/scheme.html | 5 ++ src/packages/Setting/schemes/appearance.html | 14 ++++ src/packages/Setting/schemes/vfs.html | 1 + src/themes/antos/afx-tab-container.css | 3 + 23 files changed, 231 insertions(+), 24 deletions(-) create mode 100644 src/core/tags/afx-tab-container.tag create mode 100644 src/packages/Setting/Makefile create mode 100644 src/packages/Setting/main.coffee create mode 100644 src/packages/Setting/main.css create mode 100644 src/packages/Setting/package.json create mode 100644 src/packages/Setting/scheme.html create mode 100644 src/packages/Setting/schemes/appearance.html create mode 100644 src/packages/Setting/schemes/vfs.html create mode 100644 src/themes/antos/afx-tab-container.css diff --git a/src/core/BaseDialog.coffee b/src/core/BaseDialog.coffee index ace2a8f..be54d4b 100644 --- a/src/core/BaseDialog.coffee +++ b/src/core/BaseDialog.coffee @@ -240,7 +240,7 @@ class AboutDialog extends BaseDialog super "AboutDialog" init: () -> - @render "os:///resources/schemes/about.html" + @render "os://resources/schemes/about.html" main: () -> mt = @meta() @@ -260,7 +260,7 @@ class FileDiaLog extends BaseDialog super "FileDiaLog" init: () -> - @render "os:///resources/schemes/filedialog.html" + @render "os://resources/schemes/filedialog.html" main: () -> fileview = @find "fileview" diff --git a/src/core/api.coffee b/src/core/api.coffee index faa7962..33b6673 100644 --- a/src/core/api.coffee +++ b/src/core/api.coffee @@ -242,7 +242,7 @@ self.OS.API = , (e, s) -> _courrier.oserror __("Cannot load 3rd library at: {0}", l), e, r else - path = "os:///scripts/" + path = "os://scripts/" js = "#{path}#{l}.js" js.asFileHandler().onready (d) -> _API.shared[l] = true diff --git a/src/core/gui.coffee b/src/core/gui.coffee index fa121b4..200e8bb 100644 --- a/src/core/gui.coffee +++ b/src/core/gui.coffee @@ -118,7 +118,7 @@ self.OS.GUI = _GUI.launch app, args loadApp: (app, ok, err) -> - path = "os:///packages/#{app}" + path = "os://packages/#{app}" path = _OS.setting.system.packages[app].path if _OS.setting.system.packages[app].path js = path + "/main.js" @@ -210,7 +210,15 @@ self.OS.GUI = c = arr[1].toUpperCase() return unless _GUI.shortcut[fnk] _GUI.shortcut[fnk][c] = f - + + wallpaper: (obj) -> + if obj + _OS.setting.appearance.wp = obj + wp = _OS.setting.appearance.wp + $("body").css("background-image", "url(#{_API.handler.get}/#{wp.url})" ) + .css("background-size", wp.size) + .css("ackground-repeat", wp.repeat) + initDM: -> ($ document).on 'webkitfullscreenchange mozfullscreenchange fullscreenchange MSFullscreenChange', ()-> _GUI.fullscreen = not _GUI.fullscreen @@ -388,6 +396,7 @@ self.OS.GUI = #console.log _OS.setting # load theme _GUI.loadTheme _OS.setting.appearance.theme + _GUI.wallpaper() _courrier.observable.one "syspanelloaded", () -> # TODO load packages list then build system menu _courrier.observable.on "systemlocalechange", (name) -> diff --git a/src/core/settings.coffee b/src/core/settings.coffee index 7f31306..95eecc2 100644 --- a/src/core/settings.coffee +++ b/src/core/settings.coffee @@ -2,18 +2,23 @@ _OS.setting.desktop = conf.desktop if conf.desktop _OS.setting.applications = conf.applications if conf.applications _OS.setting.appearance = conf.appearance if conf.appearance + _OS.setting.appearance.wp = { + url: "os://resources/themes/system/wp/wp2.png", + size: "cover", + repeat: "repeat" + } unless _OS.setting.appearance.wp _OS.setting.user = conf.user _OS.setting.VFS = conf.VFS if conf.VFS - _OS.setting.desktop.path = "home:///.desktop" unless _OS.setting.desktop.path + _OS.setting.desktop.path = "home://.desktop" unless _OS.setting.desktop.path _OS.setting.desktop.menu = {} unless _OS.setting.desktop.menu _OS.setting.VFS.mountpoints = [ #TODO: multi app try to write to this object, it neet to be cloned - { text: __("Applications"), path: 'app:///', iconclass: "fa fa-adn", type: "app" }, - { text: __("Home"), path: 'home:///', iconclass: "fa fa-home", type: "fs" }, + { text: __("Applications"), path: 'app://', iconclass: "fa fa-adn", type: "app" }, + { text: __("Home"), path: 'home://', iconclass: "fa fa-home", type: "fs" }, { text: __("Desktop"), path: _OS.setting.desktop.path , iconclass: "fa fa-desktop", type: "fs" }, - { text: __("OS"), path: 'os:///', iconclass: "fa fa-inbox", type: "fs" }, - { text: __("Google Drive"), path: 'gdv:///', iconclass: "fa fa-inbox", type: "fs" }, - { text: __("Shared"), path: 'shared:///' , iconclass: "fa fa-share-square", type: "fs" } + { text: __("OS"), path: 'os://', iconclass: "fa fa-inbox", type: "fs" }, + { text: __("Google Drive"), path: 'gdv://', iconclass: "fa fa-inbox", type: "fs" }, + { text: __("Shared"), path: 'shared://' , iconclass: "fa fa-share-square", type: "fs" } ] if not _OS.setting.VFS.mountpoints _OS.setting.system = conf.system if conf.system @@ -28,8 +33,8 @@ } if not _OS.setting.system.startup _OS.setting.system.pkgpaths = { - user: "home:///.packages", - system: "os:///packages" + user: "home://.packages", + system: "os://packages" } unless _OS.setting.system.pkgpaths _OS.setting.system.locale = "en_GB" unless _OS.setting.system.locale _OS.setting.system.menu = {} unless _OS.setting.system.menu diff --git a/src/core/tags/afx-calendar-view.tag b/src/core/tags/afx-calendar-view.tag index 8de9f85..dd41f5a 100644 --- a/src/core/tags/afx-calendar-view.tag +++ b/src/core/tags/afx-calendar-view.tag @@ -20,7 +20,7 @@ return self[k] } - this.on("mount", function (e) { + this.on("mount", function (e) { self.refs.grid.root.observable = self.root.observable calendar(null) self.root.observable.on("gridcellselect", function(d){ diff --git a/src/core/tags/afx-hbox.tag b/src/core/tags/afx-hbox.tag index a5261a6..93e9ba4 100644 --- a/src/core/tags/afx-hbox.tag +++ b/src/core/tags/afx-hbox.tag @@ -6,6 +6,7 @@ var self = this this.rid = $(self.root).attr("data-id") || Math.floor(Math.random() * 100000) + 1 this.on('mount', function(){ + self.root.observable = (self.parent && self.parent.root && self.parent.root.observable) || opts.observable || riot.observable() $(self.refs.container) .css("display","flex") .css("flex-direction","row") @@ -29,6 +30,16 @@ var csize, ocwidth = 0, avaiheight; avaiheight = $(self.root).height() avaiWidth = $(self.root).width() + /*if(avaiheight == 0) + { + avaiheight = $(self.parent.root).height() + $(self.root).css("height", avaiheight+"px") + } + if(avaiWidth == 0) + { + avaiWidth = $(self.parent.root).width() + $(self.root).css("height", avaiWidth+"px") + }*/ $(self.refs.container).css("height",avaiheight + "px") $(self.refs.container) .children() diff --git a/src/core/tags/afx-list-view.tag b/src/core/tags/afx-list-view.tag index 084aba6..1e3e709 100644 --- a/src/core/tags/afx-list-view.tag +++ b/src/core/tags/afx-list-view.tag @@ -112,6 +112,7 @@ } this.on("mount", function(){ + self.root.observable = opts.observable || (self.parent && self.parent.root && self.parent.root.observable) || riot.observable() if(opts.dropdown == "true") { $(document).click(function(event) { diff --git a/src/core/tags/afx-switch.tag b/src/core/tags/afx-switch.tag index 1cc93d3..153b32b 100644 --- a/src/core/tags/afx-switch.tag +++ b/src/core/tags/afx-switch.tag @@ -6,7 +6,7 @@ else this.swon = false var self = this - this.root.observable = opts.observable + //this.root.observable = opts.observable if(opts.enable != undefined) this.enable = opts.enable else @@ -31,6 +31,9 @@ opts.swon = !self.swon self.update() } + /*this.on("mount", function(){ + self.root.observable = (self.parent && self.parent.root && self.parent.root.observable) || opts.observable || riot.observable() + })*/ this.on("update", function(e){ self.swon = opts.swon self.onchange = opts.onchange diff --git a/src/core/tags/afx-tab-bar.tag b/src/core/tags/afx-tab-bar.tag index 37cd375..f30e8fa 100644 --- a/src/core/tags/afx-tab-bar.tag +++ b/src/core/tags/afx-tab-bar.tag @@ -3,7 +3,6 @@ + \ No newline at end of file diff --git a/src/core/tags/afx-vbox.tag b/src/core/tags/afx-vbox.tag index e8208ae..43327a0 100644 --- a/src/core/tags/afx-vbox.tag +++ b/src/core/tags/afx-vbox.tag @@ -6,6 +6,7 @@ var self = this this.rid = $(self.root).attr("data-id") || Math.floor(Math.random() * 100000) + 1 this.on('mount', function(){ + self.root.observable = (self.parent && self.parent.root && self.parent.root.observable) || opts.observable || riot.observable() $(self.refs.container) .css("display","flex") .css("flex-direction","column") @@ -32,6 +33,16 @@ var csize, ocheight = 0, avaiheight; avaiheight = $(self.root).height() avaiwidth = $(self.root).width() + /*if(avaiheight == 0) + { + avaiheight = $(self.parent.root).height() + $(self.root).css("height", avaiheight+"px") + } + if(avaiwidth == 0) + { + avaiwidth = $(self.parent.root).width() + $(self.root).css("height", avaiwidth+"px") + }*/ $(self.refs.container).css("height",avaiheight + "px") $(self.refs.container) .children() diff --git a/src/core/vfs.coffee b/src/core/vfs.coffee index a836a99..0d66bd1 100644 --- a/src/core/vfs.coffee +++ b/src/core/vfs.coffee @@ -1,5 +1,5 @@ String.prototype.asFileHandler = () -> - list = @split ":///" + list = @split "://" handlers = _API.VFS.findHandlers list[0] if not handlers or handlers.length is 0 _courrier.osfail __("VFS unknown handler: {0}", @), (_API.throwe "OS.VFS"), @ @@ -25,7 +25,7 @@ class BaseFileHandler @ready = false return unless p @path = p.toString() - list = @path.split ":///" + list = @path.split "://" @protocol = list[0] return unless list.length > 1 re = list[1].replace(/^\/+|\/+$/g, '') @@ -67,7 +67,7 @@ class BaseFileHandler return _courrier.osfail __("VFS Cannot encode file: {0}", me.path), (_API.throwe "OS.VFS"), e parent: () -> return @ if @isRoot() - return (@protocol + ":///" + (@genealogy.slice 0 , @genealogy.length - 1).join "/") + return (@protocol + "://" + (@genealogy.slice 0 , @genealogy.length - 1).join "/") onready: (f, err) -> # read meta data diff --git a/src/core/vfs/GoogleDriveHandler.coffee b/src/core/vfs/GoogleDriveHandler.coffee index bef385d..397e4a4 100644 --- a/src/core/vfs/GoogleDriveHandler.coffee +++ b/src/core/vfs/GoogleDriveHandler.coffee @@ -1,6 +1,6 @@ # GoogleDrive File Handler -G_CACHE = {"gdv:///":{ id: "root", mime: 'dir' } } +G_CACHE = {"gdv://":{ id: "root", mime: 'dir' } } class GoogleDriveHandler extends this.OS.API.VFS.BaseFileHandler constructor: (path) -> @@ -17,7 +17,7 @@ class GoogleDriveHandler extends this.OS.API.VFS.BaseFileHandler fn = (r) -> return f() if r # perform the login - G_CACHE = {"gdv:///":{ id: "root", mime: 'dir' } } + G_CACHE = {"gdv://":{ id: "root", mime: 'dir' } } gapi.auth2.getAuthInstance().signIn() if _API.libready @setting.apilink @@ -316,7 +316,7 @@ self.OS.API.onsearch "Google Drive", (t) -> return arr self.OS.onexit "cleanUpGoogleDrive", () -> - G_CACHE = { "gdv:///": { id: "root", mime: 'dir' } } + G_CACHE = { "gdv://": { id: "root", mime: 'dir' } } return unless _OS.setting.VFS.gdrive and _API.libready _OS.setting.VFS.gdrive.apilink auth2 = gapi.auth2.getAuthInstance() return unless auth2 diff --git a/src/packages/CodeBlock/main.coffee b/src/packages/CodeBlock/main.coffee index fb7bf76..7ce50ad 100644 --- a/src/packages/CodeBlock/main.coffee +++ b/src/packages/CodeBlock/main.coffee @@ -80,7 +80,7 @@ class CodeBlock extends this.OS.GUI.BaseApplication @socket.onopen = () -> console.log "socket open" enc = new TextEncoder "utf-8" - me.socket.send enc.encode me.blen + "os:///packages/packages.json" + me.socket.send enc.encode me.blen + "os://packages/packages.json" @socket.onmessage = (e) -> console.log e.data diff --git a/src/packages/Files/main.coffee b/src/packages/Files/main.coffee index 0ccee9c..e1750bd 100644 --- a/src/packages/Files/main.coffee +++ b/src/packages/Files/main.coffee @@ -8,7 +8,7 @@ class Files extends this.OS.GUI.BaseApplication @view = @find "fileview" @navinput = @find "navinput" @navbar = @find "nav-bar" - @currdir = if @args and @args.length > 0 then @args[0].asFileHandler() else "home:///".asFileHandler() + @currdir = if @args and @args.length > 0 then @args[0].asFileHandler() else "home://".asFileHandler() @favo = @find "favouri" @clipboard = undefined diff --git a/src/packages/Setting/Makefile b/src/packages/Setting/Makefile new file mode 100644 index 0000000..608ed0a --- /dev/null +++ b/src/packages/Setting/Makefile @@ -0,0 +1,11 @@ +coffee_files = main.coffee + +jsfiles = + +cssfiles = main.css + +copyfiles = scheme.html package.json schemes + + +PKG_NAME=Setting +include ../pkg.mk \ No newline at end of file diff --git a/src/packages/Setting/main.coffee b/src/packages/Setting/main.coffee new file mode 100644 index 0000000..a9cd94e --- /dev/null +++ b/src/packages/Setting/main.coffee @@ -0,0 +1,25 @@ +class Setting extends this.OS.GUI.BaseApplication + constructor: (args) -> + super "Setting", args + + main: () -> + me = @ + @container = @find "container" + @container.setTabs [ + { + text: "Appearance", + iconclass: "fa fa-paint-brush", + url: "#{@path()}/schemes/appearance.html", + f: () -> + console.log "finish init appearance" + }, + { + text: "VFS", + iconclass: "fa fa-inbox" , + url: "#{@path()}/schemes/vfs.html" , + f: () -> + console.log "finish init VFS" + } + ] +Setting.singleton = true +this.OS.register "Setting", Setting \ No newline at end of file diff --git a/src/packages/Setting/main.css b/src/packages/Setting/main.css new file mode 100644 index 0000000..1eb5e66 --- /dev/null +++ b/src/packages/Setting/main.css @@ -0,0 +1,11 @@ +afx-app-window[data-id = "setting-window"] afx-tab-container afx-tab-bar afx-list-view > div > ul > li{ + float:none; + border-radius: 0; + font-weight: bold; + padding-top:3px; + padding-bottom: 3px; + border:0; +} +afx-app-window[data-id = "setting-window"] afx-tab-container div[data-ref="container"]{ + border-left: 1px solid #cbcbcb; +} \ No newline at end of file diff --git a/src/packages/Setting/package.json b/src/packages/Setting/package.json new file mode 100644 index 0000000..ecdeeac --- /dev/null +++ b/src/packages/Setting/package.json @@ -0,0 +1,13 @@ +{ + "app":"Setting", + "name":"System setting", + "description":"System setting", + "info":{ + "author": "Xuan Sang LE", + "email": "xsang.le@gmail.com" + }, + "version":"0.1a", + "category":"System", + "iconclass":"fa fa-wrench", + "mimes":["none"] +} \ No newline at end of file diff --git a/src/packages/Setting/scheme.html b/src/packages/Setting/scheme.html new file mode 100644 index 0000000..d1727fd --- /dev/null +++ b/src/packages/Setting/scheme.html @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/src/packages/Setting/schemes/appearance.html b/src/packages/Setting/schemes/appearance.html new file mode 100644 index 0000000..0eb3fb1 --- /dev/null +++ b/src/packages/Setting/schemes/appearance.html @@ -0,0 +1,14 @@ + + + + +
+
+
+ + + +
+ +
+
\ No newline at end of file diff --git a/src/packages/Setting/schemes/vfs.html b/src/packages/Setting/schemes/vfs.html new file mode 100644 index 0000000..f715fbe --- /dev/null +++ b/src/packages/Setting/schemes/vfs.html @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/themes/antos/afx-tab-container.css b/src/themes/antos/afx-tab-container.css new file mode 100644 index 0000000..2765e7d --- /dev/null +++ b/src/themes/antos/afx-tab-container.css @@ -0,0 +1,3 @@ +afx-tab-container{ + display: block; +} \ No newline at end of file