-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Admin.js 4.39 KiB
"use strict";
/* exported logger */
var Promise = require("bluebird");
var CustomMapOptions = require('./map/CustomMapOptions');
var Header = require('./gui/Header');
var GuiUtils = require('./gui/leftPanel/GuiUtils');
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.setGuiUtils(new GuiUtils());
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"
});
self.setHeader(new Header({
element : headerDiv,
customMap : null,
project : self.getProject(),
adminLink : false,
}));
self.getElement().appendChild(headerDiv);
var panels = [ {
name : "COMMENTS",
panelClass : CommentsAdminPanel,
}, {
name : "PROJECTS",
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 tabId = "admin_panel_tab_" + this._tabIdCount;
self._tabIdCount++;
var navLi = self.getGuiUtils().createTabMenuObject({
id : tabId,
name : params.name,
navigationBar : navElement
});
navElement.appendChild(navLi);
var contentDiv = self.getGuiUtils().createTabContentObject({
id : tabId,
navigationObject :navLi,
});
contentElement.appendChild(contentDiv);
this._panels.push(new params.panelClass({
element : contentDiv,
name : params.name,
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());
}
promises.push(this.getHeader().init())
return Promise.all(promises);
};
Admin.prototype.setConfiguration = function(configuration) {
this._configuration = configuration;
};
Admin.prototype.getConfiguration = function() {
return this._configuration;
};
Admin.prototype.setHeader = function(header) {
this._header = header;
};
Admin.prototype.getHeader = function() {
return this._header;
};
Admin.prototype.setGuiUtils = function(guiUtils) {
this._guiUtils = guiUtils;
};
Admin.prototype.getGuiUtils = function() {
return this._guiUtils;
};
module.exports = Admin;