diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-08-14 16:42:55 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-08-14 22:58:15 +0200 |
commit | a4621c95201a6ac436b3cfdc9bf6ed2d2571e607 (patch) | |
tree | ac4402d775b857eee27e649e12b541f2602502ec /modules/luci-base/htdocs/luci-static | |
parent | 3b335f2764bfda3f18e13bf492e461977599e411 (diff) |
luci-base: luci.js: introduce hasSystemFeature() api
The new function allows querying the presence of certain system features
such as dnsmasq or firewall availability or the compile time features
of hostapd and wpa_supplicant.
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
Diffstat (limited to 'modules/luci-base/htdocs/luci-static')
-rw-r--r-- | modules/luci-base/htdocs/luci-static/resources/luci.js | 44 |
1 files changed, 42 insertions, 2 deletions
diff --git a/modules/luci-base/htdocs/luci-static/resources/luci.js b/modules/luci-base/htdocs/luci-static/resources/luci.js index 66f32d7223..d72764b114 100644 --- a/modules/luci-base/htdocs/luci-static/resources/luci.js +++ b/modules/luci-base/htdocs/luci-static/resources/luci.js @@ -559,6 +559,7 @@ domParser = null, originalCBIInit = null, rpcBaseURL = null, + sysFeatures = null, classes = {}; var LuCI = Class.extend({ @@ -797,6 +798,43 @@ return Promise.resolve(rpcBaseURL); }, + probeSystemFeatures: function() { + if (sysFeatures == null) { + try { + sysFeatures = JSON.parse(window.sessionStorage.getItem('sysFeatures')); + } + catch (e) {} + } + + if (!this.isObject(sysFeatures)) { + sysFeatures = classes.rpc.declare({ + object: 'luci', + method: 'getFeatures', + expect: { '': {} } + })().then(function(features) { + try { + window.sessionStorage.setItem('sysFeatures', JSON.stringify(features)); + } + catch (e) {} + + sysFeatures = features; + + return features; + }); + } + + return Promise.resolve(sysFeatures); + }, + + hasSystemFeature: function() { + var ft = sysFeatures[arguments[0]]; + + if (arguments.length == 2) + return this.isObject(ft) ? ft[arguments[1]] : null; + + return (ft != null && ft != false); + }, + setupDOM: function(res) { var domEv = res[0], uiClass = res[1], @@ -828,10 +866,12 @@ throw 'Session expired'; }); - originalCBIInit(); + return this.probeSystemFeatures().finally(this.initDOM); + }, + initDOM: function() { + originalCBIInit(); Poll.start(); - document.dispatchEvent(new CustomEvent('luci-loaded')); }, |