mirror of
				https://github.com/Ysurac/openmptcprouter-feeds.git
				synced 2025-03-09 15:40:03 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			110 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			110 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 'require view';
 | |
| 'require dom';
 | |
| 'require poll';
 | |
| 'require fs';
 | |
| 'require network';
 | |
| 
 | |
| document.querySelector('head').appendChild(E('link', {
 | |
| 	'rel': 'stylesheet',
 | |
| 	'type': 'text/css',
 | |
| 	'href': L.resource('view/dashboard/css/custom.css')
 | |
| }));
 | |
| 
 | |
| 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) {
 | |
| 
 | |
| 					if (i > 1) {
 | |
| 						dom.append(containers[1], content);
 | |
| 					} else {
 | |
| 						containers[i].parentNode.style.display = '';
 | |
| 						containers[i].parentNode.classList.add('fade-in');
 | |
| 						containers[i].parentNode.classList.add('Dashboard');
 | |
| 						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/dashboard/include')), []).then(function(entries) {
 | |
| 			return Promise.all(entries.filter(function(e) {
 | |
| 				return (e.type == 'file' && e.name.match(/\.js$/));
 | |
| 			}).map(function(e) {
 | |
| 				return 'view.dashboard.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 - 1; i++) {
 | |
| 
 | |
| 			var container = E('div', { 'class': 'section-content' });
 | |
| 
 | |
| 			rv.appendChild(E('div', { 'class': 'cbi-section-' + i, 'style': 'display:none' }, [
 | |
| 				container
 | |
| 			]));
 | |
| 
 | |
| 			containers.push(container);
 | |
| 		}
 | |
| 
 | |
| 		return startPolling(includes, containers).then(function() {
 | |
| 			return rv;
 | |
| 		});
 | |
| 	},
 | |
| 
 | |
| 	handleSaveApply: null,
 | |
| 	handleSave: null,
 | |
| 	handleReset: null
 | |
| });
 |