"use strict"; /* exported logger */ var AbstractGuiElement = require('./AbstractGuiElement'); var PanelControlElementType = require('./PanelControlElementType'); var Functions = require('../Functions'); var OptionsMenu = require('./OptionsMenu'); var Promise = require("bluebird"); var logger = require('../logger'); var xss = require('xss'); /** * * @param {Object} params * @param {HTMLElement} params.element * @param {CustomMap} params.customMap * @param {boolean} [params.optionsMenu=false] * @param {Configuration} params.configuration * @param {Project} [params.project] * @param {ServerConnector} [params.serverConnector] * * @constructor * * @extends AbstractGuiElement */ function Header(params) { AbstractGuiElement.call(this, params); var self = this; var guiParams = { optionsMenu: params.optionsMenu }; self._createHeaderGui(guiParams); } Header.prototype = Object.create(AbstractGuiElement.prototype); Header.prototype.constructor = Header; /** * * @param {Object} guiParams * @param {boolean} guiParams.optionsMenu * @private */ Header.prototype._createHeaderGui = function (guiParams) { var self = this; self.getElement().className = "minerva-header"; var projectId = self.getProject().getProjectId(); var projectName = xss(self.getProject().getName()); var loadingDiv = Functions.createElement({ type: "div", className: "minerva-loading-div" }); var loadingImg = Functions.createElement({ type: "img", src: 'resources/images/icons/ajax-loader.gif' }); loadingDiv.appendChild(loadingImg); this.setControlElement(PanelControlElementType.FOOTER_LOADING_DIV, loadingDiv); var link = Functions.createElement({ type: "a", style: "padding-right:15px; float:right", content: '<i class="fa fa-lock" style="font-size:17px"></i> ', xss: false }); link.href = self.getServerConnector().getServerBaseUrl() + "admin.xhtml?id=" + projectId; self.getElement().appendChild(link); if (guiParams.optionsMenu) { var optionsElement = Functions.createElement({type: "ul"}); document.body.appendChild(optionsElement); self._optionsMenu = new OptionsMenu({ customMap: self.getMap(), element: optionsElement, configuration: self.getConfiguration() }); var menuLink = Functions.createElement({ type: "a", className: "minerva-menu-link", content: '<i class="fa fa-bars" style="font-size:17px"></i> ', href: "#", onclick: function () { var link = $(menuLink); var offset = link.offset(); var top = offset.top; var left = offset.left; var bottom = top + link.outerHeight(); return self._optionsMenu.open(left, bottom, new Date().getTime()); }, xss: false }); self.getElement().appendChild(menuLink); } self.getElement().appendChild(loadingDiv); var homeLink = Functions.createElement({ type: "a", content: '<i class="fa fa-home" style="font-size:17px"></i> ' + projectName, xss: false }); homeLink.href = self.getServerConnector().getServerBaseUrl() + "?id=" + projectId; self.getElement().appendChild(homeLink); }; /** * * @param {string} message */ Header.prototype.addLoadMessage = function (message) { var self = this; self._loadMessages.push(message); }; /** * * @param {string} message */ Header.prototype.removeLoadMessage = function (message) { var self = this; var index = self._loadMessages.indexOf(message); if (index > -1) { self._loadMessages.splice(index, 1); } else { logger.debug("Removing message that is not there: " + message); } }; /** * return {Promise} */ Header.prototype.init = function () { var self = this; return new Promise(function (resolve) { var div = self.getControlElement(PanelControlElementType.FOOTER_LOADING_DIV); self._loadMessages = []; self._onDataLoadStart = function (e) { self.addLoadMessage(e.arg); $(div).show(); div.title = e.arg; }; self._onDataLoadStop = function (e) { self.removeLoadMessage(e.arg); if (self._loadMessages.length > 0) { div.title = self._loadMessages[0]; } else { $(div).hide(); } }; self.getServerConnector().addListener("onDataLoadStart", self._onDataLoadStart); self.getServerConnector().addListener("onDataLoadStop", self._onDataLoadStop); resolve(); }); }; /** * */ Header.prototype.destroy = function () { var self = this; if (self._onDataLoadStart) { self.getServerConnector().removeListener("onDataLoadStart", self._onDataLoadStart); self.getServerConnector().removeListener("onDataLoadStop", self._onDataLoadStop); } if (self._optionsMenu !== undefined) { document.body.removeChild(self._optionsMenu.getElement()); } }; /** * * @param {PluginManager} pluginManager */ Header.prototype.setPluginManager = function (pluginManager) { var self = this; self._pluginManager = pluginManager; if (self._optionsMenu !== undefined) { self._optionsMenu.setPluginManager(pluginManager); } }; /** * * @returns {PluginManager} */ Header.prototype.getPluginManager = function () { return this._pluginManager; }; module.exports = Header;