"use strict"; /* exported logger */ var Promise = require("bluebird"); var CustomMapOptions = require('./map/CustomMapOptions'); var Header = require('./gui/Header'); var ObjectWithListeners = require('./ObjectWithListeners'); var CommentsAdminPanel = require('./gui/admin/CommentsAdminPanel'); var ConfigurationAdminPanel = require('./gui/admin/ConfigurationAdminPanel'); var MapsAdminPanel = require('./gui/admin/MapsAdminPanel'); var ServicesAdminPanel = require('./gui/admin/ServicesAdminPanel'); var UsersAdminPanel = require('./gui/admin/UsersAdminPanel'); var logger = require('./logger'); var Functions = require('./Functions'); /** * Default constructor. * * @param options * CustomMapOptions object representing all parameters needed for map * creation */ function Admin(options) { var self = this; self._panels = []; self._tabIdCount = 0; if (!(options instanceof CustomMapOptions)) { options = new CustomMapOptions(options); } self.setProject(options.getProject()); self.setElement(options.getElement()); self.setConfiguration(options.getConfiguration()); self._createGui(); } Admin.prototype = Object.create(ObjectWithListeners.prototype); Admin.prototype.constructor = ObjectWithListeners; Admin.prototype._createGui = function() { var self = this; self.getElement().innerHTML = ""; var headerDiv = Functions.createElement({ type : "div" }); new Header({ element : headerDiv, customMap : null, project : self.getProject(), adminLink : false, }); self.getElement().appendChild(headerDiv); var panels = [ { name : "COMMENTS", panelClass : CommentsAdminPanel, }, { name : "MAPS", panelClass : MapsAdminPanel, }, { name : "USERS", panelClass : UsersAdminPanel, }, { name : "SERVICES", panelClass : ServicesAdminPanel, }, { name : "CONFIGURATION", panelClass : ConfigurationAdminPanel, } ]; var tabDiv = Functions.createElement({ type : "div", name : "tabView", className : "tabbable boxed parentTabs" }); self.getElement().appendChild(tabDiv); var tabMenuDiv = Functions.createElement({ type : "ul", className : "nav nav-tabs" }); tabDiv.appendChild(tabMenuDiv); var tabContentDiv = Functions.createElement({ type : "div", className : "tab-content" }); tabDiv.appendChild(tabContentDiv); for (var i = 0; i < panels.length; i++) { self.addTab(panels[i], tabMenuDiv, tabContentDiv); } }; Admin.prototype.addTab = function(params, navElement, contentElement) { var self = this; var name = params.name; var tabId = "export_panel_tab_" + this._tabIdCount; self._tabIdCount++; var navClass = ''; var contentClass = 'tab-pane'; if (navElement.children.length === 0) { navClass = "active"; contentClass = "tab-pane active"; } var navLi = document.createElement("li"); navLi.className = navClass; var navLink = document.createElement("a"); navLink.href = "#" + tabId; if (name !== undefined) { navLink.innerHTML = name; } navLink.onclick = function() { $(this).tab('show'); }; navLi.appendChild(navLink); if (name !== undefined) { navLink.innerHTML = name; } navElement.appendChild(navLi); var contentDiv = document.createElement("div"); contentDiv.style.height = "100%"; contentDiv.className = contentClass; contentDiv.id = tabId; contentElement.appendChild(contentDiv); this._panels.push(new params.panelClass({ element : contentDiv, project : self.getProject(), configuration : self.getConfiguration(), })); }; Admin.prototype.setProject = function(project) { this._project = project; }; Admin.prototype.getProject = function() { return this._project; }; Admin.prototype.setElement = function(element) { this._element = element; }; Admin.prototype.getElement = function() { return this._element; }; Admin.prototype.init = function() { var promises = []; for (var i = 0; i < this._panels.length; i++) { promises.push(this._panels[i].init()); } return Promise.all(promises); }; Admin.prototype.setConfiguration = function(configuration) { this._configuration = configuration; }; Admin.prototype.getConfiguration = function() { return this._configuration; }; module.exports = Admin;