summaryrefslogtreecommitdiffhomepage
path: root/modules/luci-base/htdocs/luci-static/resources/luci.js
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-08-14 16:42:55 +0200
committerJo-Philipp Wich <jo@mein.io>2019-08-14 22:58:15 +0200
commita4621c95201a6ac436b3cfdc9bf6ed2d2571e607 (patch)
treeac4402d775b857eee27e649e12b541f2602502ec /modules/luci-base/htdocs/luci-static/resources/luci.js
parent3b335f2764bfda3f18e13bf492e461977599e411 (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/resources/luci.js')
-rw-r--r--modules/luci-base/htdocs/luci-static/resources/luci.js44
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'));
},