-
Piotr Gawron authoredPiotr Gawron authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Admin.js 3.61 KiB
"use strict";
/* exported logger */
var Promise = require("bluebird");
var CustomMapOptions = require('./map/CustomMapOptions');
var AbstractGuiElement = require('./gui/AbstractGuiElement');
var ConfigurationAdminPanel = require('./gui/admin/ConfigurationAdminPanel');
var GenomeAdminPanel = require('./gui/admin/GenomeAdminPanel');
var MapsAdminPanel = require('./gui/admin/MapsAdminPanel');
var UsersAdminPanel = require('./gui/admin/UsersAdminPanel');
// noinspection JSUnusedLocalSymbols
var logger = require('./logger');
var GuiUtils = require('./gui/leftPanel/GuiUtils');
/**
* Default constructor.
*
* @param {CustomMapOptions} options
* object representing all parameters needed for map creation
* @constructor
*/
function Admin(options) {
var self = this;
if (!(options instanceof CustomMapOptions)) {
options = new CustomMapOptions(options);
}
self.setElement(options.getElement());
self.setConfiguration(options.getConfiguration());
self.setServerConnector(options.getServerConnector());
self._createGui();
}
Admin.prototype = Object.create(AbstractGuiElement.prototype);
Admin.prototype.constructor = AbstractGuiElement;
/**
*
* @private
*/
Admin.prototype._createGui = function () {
var self = this;
self.getElement().innerHTML = "";
self.getGuiUtils().initTabContent(self);
var panels = [{
name: "PROJECTS",
panelClass: MapsAdminPanel
}, {
name: "USERS",
panelClass: UsersAdminPanel
}, {
name: "CONFIGURATION",
panelClass: ConfigurationAdminPanel
}, {
name: "GENOMES",
panelClass: GenomeAdminPanel
}];
for (var i = 0; i < panels.length; i++) {
self.getGuiUtils().addTab(self, panels[i]);
}
self.addLogoutButton($(this.getElement()).find("> .parentTabs > .nav-tabs")[0]);
};
/**
*
* @param navElement
*/
Admin.prototype.addLogoutButton = function (navElement) {
var self = this;
var logoutLink = self.getGuiUtils().createLogoutLink();
var navLi = document.createElement("li");
navLi.appendChild(logoutLink);
navLi.style.cssFloat = "right";
navElement.appendChild(navLi);
};
/**
*
* @param {HTMLElement} element
*/
Admin.prototype.setElement = function (element) {
this._element = element;
};
/**
*
* @returns {HTMLElement}
*/
Admin.prototype.getElement = function () {
return this._element;
};
/**
*
* @returns {Promise}
*/
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).then(function () {
$(window).trigger('resize');
});
};
/**
*
* @param {Configuration} configuration
*/
Admin.prototype.setConfiguration = function (configuration) {
this._configuration = configuration;
};
/**
*
* @returns {Configuration}
*/
Admin.prototype.getConfiguration = function () {
return this._configuration;
};
/**
*
* @returns {Promise}
*/
Admin.prototype.destroy = function () {
var self = this;
var promises = [];
for (var i = 0; i < self._panels.length; i++) {
promises.push(self._panels[i].destroy());
}
return Promise.all(promises);
};
/**
*
* @param {ServerConnector} serverConnector
*/
Admin.prototype.setServerConnector = function (serverConnector) {
this._serverConnector = serverConnector;
};
/**
*
* @returns {ServerConnector}
*/
Admin.prototype.getServerConnector = function () {
return this._serverConnector;
};
/**
*
* @returns {GuiUtils}
*/
Admin.prototype.getGuiUtils = function () {
var self = this;
if (self._guiUtils === undefined) {
self._guiUtils = new GuiUtils(self.getConfiguration());
}
return this._guiUtils;
};
module.exports = Admin;