diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-04-01 15:38:00 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-07-07 15:25:49 +0200 |
commit | 2beb9fa16fffc0cceea1d90c191309dfbcc307cc (patch) | |
tree | f2183466da7304a2793d6038417b5c4989c5737b | |
parent | 5b7924c8087b93037ae20e03f35bd0c7e9e06a05 (diff) |
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 <jo@mein.io>
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/luci.js | 24 | ||||
-rw-r--r-- | modules/luci-base/luasrc/dispatcher.lua | 9 | ||||
-rw-r--r-- | modules/luci-base/luasrc/view/view.htm | 8 |
3 files changed, 29 insertions, 12 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js index c71865f96..896ded3af 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 626a46dfd..e8106b741 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 000000000..bddd8e446 --- /dev/null +++ b/modules/luci-base/luasrc/view/view.htm @@ -0,0 +1,8 @@ +<%+header%> + +<div id="view"> + <div class="spinning"><%:Loading view…%></div> + <script type="text/javascript">L.require('view.<%=view%>');</script> +</div> + +<%+footer%> |