'use strict'; 'require view'; 'require dom'; 'require poll'; 'require fs'; 'require network'; 'require ui'; return view.extend({ handleToggleSection: function(include, container, ev) { var btn = ev.currentTarget; include.hide = !include.hide; btn.setAttribute('data-style', include.hide ? 'active' : 'inactive'); btn.setAttribute('class', include.hide ? 'label notice' : 'label'); btn.firstChild.data = include.hide ? _('Show') : _('Hide'); btn.blur(); container.style.display = include.hide ? 'none' : 'block'; if (include.hide) { localStorage.setItem(include.id, 'hide'); } else { dom.content(container, E('p', {}, E('em', { 'class': 'spinning' }, [ _('Collecting data...') ]) ) ); localStorage.removeItem(include.id); } }, invokeIncludesLoad: function(includes, first_load) { var tasks = [], has_load = false; for (var i = 0; i < includes.length; i++) { if (includes[i].hide && !first_load) { tasks.push(null); continue; } 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); }, poll_status: function(includes, containers, first_load) { return network.flushCache().then(L.bind( this.invokeIncludesLoad, this, includes, first_load )).then(function(results) { for (var i = 0; i < includes.length; i++) { var content = null; if (includes[i].hide && !first_load) continue; 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 (typeof (includes[i].oneshot) == 'function') { includes[i].oneshot(results ? results[i] : null); includes[i].oneshot = null; } if (content != null) { containers[i].parentNode.style.display = ''; containers[i].parentNode.classList.add('fade-in'); if (!includes[i].hide) dom.content(containers[i], content); } } var ssi = document.querySelector('div.includes'); if (ssi) { ssi.style.display = ''; ssi.classList.add('fade-in'); } }); }, 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() }) }); includes[i].id = title; includes[i].hide = localStorage.getItem(includes[i].id) == 'hide'; var container = E('div'); rv.appendChild(E('div', { 'class': 'cbi-section', 'style': 'display: none' }, [ E('div', { 'class': 'cbi-title' },[ E('h3', { 'style': 'display: flex; justify-content: space-between' }, [ title || '-', E('span', { 'class': includes[i].hide ? 'label notice' : 'label', 'style': 'display: flex; align-items: center; justify-content: center; min-width: 4em', 'data-style': includes[i].hide ? 'active' : 'inactive', 'data-indicator': 'poll-status', 'data-clickable': 'true', 'click': ui.createHandlerFn(this, 'handleToggleSection', includes[i], container) }, [ _(includes[i].hide ? 'Show' : 'Hide') ]) ]), ]), container ])); containers.push(container); } return this.poll_status(includes, containers, true).then(L.bind(function() { return poll.add(L.bind(this.poll_status, this, includes, containers)) }, this)).then(function() { return rv; }); }, handleSaveApply: null, handleSave: null, handleReset: null });