From: Jo-Philipp Wich Date: Mon, 1 Apr 2019 13:38:00 +0000 (+0200) Subject: luci-base: add client based view actions X-Git-Url: http://git.openwrt.org/?a=commitdiff_plain;h=2beb9fa16fffc0cceea1d90c191309dfbcc307cc;p=project%2Fluci.git luci-base: add client based view actions Introduce a new view() target for CBI dispatch nodes, as long with the required template and plumbing work in luci.js to allow requiring view classes. Signed-off-by: Jo-Philipp Wich --- diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js index c71865f96f..896ded3af0 100644 --- a/modules/luci-base/htdocs/luci-static/resources/luci.js +++ b/modules/luci-base/htdocs/luci-static/resources/luci.js @@ -582,19 +582,19 @@ for (var i = 0; ptr && i < parts.length - 1; i++) ptr = ptr[parts[i]]; - if (!ptr) - L.error('DependencyError', - 'Parent "%s" for class "%s" is missing', - parts.slice(0, i).join('.'), name); + if (ptr) + ptr[parts[i]] = instance; - classes[name] = ptr[parts[i]] = instance; + classes[name] = instance; return instance; }); }; /* Request class file */ - classes[name] = Request.get(url, { cache: true }).then(compileClass); + classes[name] = Request.get(url, { cache: true }) + .then(compileClass) + .catch(L.error); return classes[name]; }, @@ -942,18 +942,18 @@ __name__: 'LuCI.View', __init__: function() { - var mc = document.getElementById('maincontent'); + var vp = document.getElementById('view'); - L.dom.content(mc, E('div', { 'class': 'spinning' }, _('Loading view…'))); + L.dom.content(vp, E('div', { 'class': 'spinning' }, _('Loading view…'))); return Promise.resolve(this.load()) .then(L.bind(this.render, this)) .then(L.bind(function(nodes) { - var mc = document.getElementById('maincontent'); + var vp = document.getElementById('view'); - L.dom.content(mc, nodes); - L.dom.append(mc, this.addFooter()); - }, this)); + L.dom.content(vp, nodes); + L.dom.append(vp, this.addFooter()); + }, this)).catch(L.error); }, load: function() {}, diff --git a/modules/luci-base/luasrc/dispatcher.lua b/modules/luci-base/luasrc/dispatcher.lua index 626a46dfd2..e8106b741d 100644 --- a/modules/luci-base/luasrc/dispatcher.lua +++ b/modules/luci-base/luasrc/dispatcher.lua @@ -857,6 +857,15 @@ function template(name) end +local _view = function(self, ...) + require "luci.template".render("view", { view = self.view }) +end + +function view(name) + return {type = "view", view = name, target = _view} +end + + local function _cbi(self, ...) local cbi = require "luci.cbi" local tpl = require "luci.template" diff --git a/modules/luci-base/luasrc/view/view.htm b/modules/luci-base/luasrc/view/view.htm new file mode 100644 index 0000000000..bddd8e4464 --- /dev/null +++ b/modules/luci-base/luasrc/view/view.htm @@ -0,0 +1,8 @@ +<%+header%> + +
+
<%:Loading view…%>
+ +
+ +<%+footer%>