Skip to content
Snippets Groups Projects
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;