mirror of
https://github.com/openwrt/luci.git
synced 2025-02-07 09:19:55 +00:00
a0db2abea3
Signed-off-by: Jo-Philipp Wich <jo@mein.io>
110 lines
2.5 KiB
JavaScript
110 lines
2.5 KiB
JavaScript
'use strict';
|
|
'require view';
|
|
'require dom';
|
|
'require poll';
|
|
'require fs';
|
|
'require network';
|
|
|
|
function invokeIncludesLoad(includes) {
|
|
var tasks = [], has_load = false;
|
|
|
|
for (var i = 0; i < includes.length; i++) {
|
|
if (typeof(includes[i].load) == 'function') {
|
|
tasks.push(includes[i].load().catch(L.bind(function() {
|
|
this.failed = true;
|
|
}, includes[i])));
|
|
|
|
has_load = true;
|
|
}
|
|
else {
|
|
tasks.push(null);
|
|
}
|
|
}
|
|
|
|
return has_load ? Promise.all(tasks) : Promise.resolve(null);
|
|
}
|
|
|
|
function startPolling(includes, containers) {
|
|
var step = function() {
|
|
return network.flushCache().then(function() {
|
|
return invokeIncludesLoad(includes);
|
|
}).then(function(results) {
|
|
for (var i = 0; i < includes.length; i++) {
|
|
var content = null;
|
|
|
|
if (includes[i].failed)
|
|
continue;
|
|
|
|
if (typeof(includes[i].render) == 'function')
|
|
content = includes[i].render(results ? results[i] : null);
|
|
else if (includes[i].content != null)
|
|
content = includes[i].content;
|
|
|
|
if (content != null) {
|
|
containers[i].parentNode.style.display = '';
|
|
containers[i].parentNode.classList.add('fade-in');
|
|
|
|
dom.content(containers[i], content);
|
|
}
|
|
}
|
|
|
|
var ssi = document.querySelector('div.includes');
|
|
if (ssi) {
|
|
ssi.style.display = '';
|
|
ssi.classList.add('fade-in');
|
|
}
|
|
});
|
|
};
|
|
|
|
return step().then(function() {
|
|
poll.add(step);
|
|
});
|
|
}
|
|
|
|
return view.extend({
|
|
load: function() {
|
|
return L.resolveDefault(fs.list('/www' + L.resource('view/status/include')), []).then(function(entries) {
|
|
return Promise.all(entries.filter(function(e) {
|
|
return (e.type == 'file' && e.name.match(/\.js$/));
|
|
}).map(function(e) {
|
|
return 'view.status.include.' + e.name.replace(/\.js$/, '');
|
|
}).sort().map(function(n) {
|
|
return L.require(n);
|
|
}));
|
|
});
|
|
},
|
|
|
|
render: function(includes) {
|
|
var rv = E([]), containers = [];
|
|
|
|
for (var i = 0; i < includes.length; i++) {
|
|
var title = null;
|
|
|
|
if (includes[i].title != null)
|
|
title = includes[i].title;
|
|
else
|
|
title = String(includes[i]).replace(/^\[ViewStatusInclude\d+_(.+)Class\]$/,
|
|
function(m, n) { return n.replace(/(^|_)(.)/g,
|
|
function(m, s, c) { return (s ? ' ' : '') + c.toUpperCase() })
|
|
});
|
|
|
|
var container = E('div');
|
|
|
|
rv.appendChild(E('div', { 'class': 'cbi-section', 'style': 'display:none' }, [
|
|
title != '' ? E('h3', title) : '',
|
|
container
|
|
]));
|
|
|
|
containers.push(container);
|
|
}
|
|
|
|
return startPolling(includes, containers).then(function() {
|
|
return rv;
|
|
});
|
|
},
|
|
|
|
handleSaveApply: null,
|
|
handleSave: null,
|
|
handleReset: null
|
|
});
|