| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 | const Mn         = require('backbone.marionette');const Cache      = require('../cache');const Controller = require('../controller');const Api        = require('../api');const Helpers    = require('../../lib/helpers');const template   = require('./main.ejs');module.exports = Mn.View.extend({	template: template,	id:       'dashboard',	columns:  0,	stats: {},	ui: {		links: 'a'	},	events: {		'click @ui.links': function (e) {			e.preventDefault();			Controller.navigate($(e.currentTarget).attr('href'), true);		}	},	templateContext: function () {		const view = this;		return {			getUserName: function () {				return Cache.User.get('nickname') || Cache.User.get('name');			},			getHostStat: function (type) {				if (view.stats && typeof view.stats.hosts !== 'undefined' && typeof view.stats.hosts[type] !== 'undefined') {					return Helpers.niceNumber(view.stats.hosts[type]);				}				return '-';			},			canShow: function (perm) {				return Cache.User.isAdmin() || Cache.User.canView(perm);			},			columns: view.columns		};	},	onRender: function () {		const view = this;		if (typeof view.stats.hosts === 'undefined') {			Api.Reports.getHostStats()				.then(response => {					if (!view.isDestroyed()) {						view.stats.hosts = response;						view.render();					}				})				.catch(err => {					console.log(err);				});		}	},	/**	 * @param {Object}  [model]	 */	preRender: function (model) {		this.columns = 0;		// calculate the available columns based on permissions for the objects		// and store as a variable		const perms = ['proxy_hosts', 'redirection_hosts', 'streams', 'dead_hosts'];		perms.map(perm => {			this.columns += Cache.User.isAdmin() || Cache.User.canView(perm) ? 1 : 0;		});		// Prevent double rendering on initial calls		if (typeof model !== 'undefined') {			this.render();		}	},	initialize: function () {		this.preRender();		this.listenTo(Cache.User, 'change', this.preRender);	}});
 |