"use strict"; var logger = require('./logger'); var Functions = require('./Functions'); var SecurityError = require('./SecurityError'); var GuiMessageError = require('./gui/GuiMessageError'); var NetworkError = require('./NetworkError'); /** * This static global object contains set of functions that returns/set data in * the Gui (html). */ var GuiConnector = {}; /** * X coordinate of the mouse in a browser. */ GuiConnector.xPos = 0; /** * Y coordinate of the mouse in a browser. */ GuiConnector.yPos = 0; /** * List of GET params passed via url. */ GuiConnector.init = function () { var self = this; if (!String.prototype.endsWith) { String.prototype.endsWith = function (pattern) { var d = this.length - pattern.length; return d >= 0 && this.lastIndexOf(pattern) === d; }; } var isIE = /* @cc_on!@ */false || !!document.documentMode; if (isIE) { alert("This webpage works well with Chrome, Firefox and Safari."); } // bootstrap tab initialization $("ul.nav-tabs a").click(function (e) { e.preventDefault(); $(this).tab('show'); }); self.getParams = []; // find GuiConnector.getParams window.location.search.replace(/\??(?:([^=]+)=([^&]*)&?)/g, function () { function decode(s) { return decodeURIComponent(s.split("+").join(" ")); } GuiConnector.getParams[decode(arguments[1])] = decode(arguments[2]); }); // forser browser to update mouse coordinates whenever mouse move jQuery(document).ready(function () { $(document).mousemove(function (e) { GuiConnector.updateMouseCoordinates(e.pageX, e.pageY); }); }); if (self._windowResizeEvents === undefined) { self._windowResizeEvents = []; if (window.onresize !== null && window.onresize !== undefined) { self.addWindowResizeEvent(window.onresize); } window.onresize = function () { for (var i = 0; i < self._windowResizeEvents.length; i++) { self._windowResizeEvents[i](); } }; } }; GuiConnector.addWindowResizeEvent = function (handler) { this._windowResizeEvents.push(handler); }; /** * Returns name of the file with LCSB logo. * * @param bigLogo * {@link Boolean} value determining if we want to have big logo or * small one */ GuiConnector.getLcsbLogoImg = function (bigLogo) { if (bigLogo) { return 'lcsb_logo_mid.png'; } else { return 'lcsb_logo.png'; } }; /** * Returns name of the file with image that should be presented when we are * wainting for data to be loaded. */ GuiConnector.getLoadingImg = function () { return "icons/ajax-loader.gif"; }; /** * Returns home directory for images in the application. */ GuiConnector.getImgPrefix = function () { return "resources/images/"; }; /** * Updates coordinates of the mouse in the browser. */ GuiConnector.updateMouseCoordinates = function (x, y) { this.xPos = x; this.yPos = y; }; GuiConnector.showProcessing = function (messageText) { var self = GuiConnector; if (self._processingDialog === undefined) { self._processingDialog = document.createElement("div"); self._errorDialogContent = document.createElement("div"); self._processingDialog.appendChild(self._errorDialogContent); document.body.appendChild(self._processingDialog); $(self._processingDialog).dialog({ modal: true, title: "PROCESSING", width: "150px", closeOnEscape: false, open: function (event, ui) { $(".ui-dialog-titlebar-close", ui).hide(); }, }); } if (messageText === undefined) { messageText = "PROCESSING"; } var messageImg = Functions.createElement({ type: "img", src: 'resources/images/icons/ajax-loader.gif', }); self._errorDialogContent.innerHTML = ""; self._errorDialogContent.style.textAlign = "center"; self._errorDialogContent.appendChild(messageImg); $(self._processingDialog).dialog("option", "title", messageText); $(self._processingDialog).dialog("open"); }; GuiConnector.hideProcessing = function () { var self = GuiConnector; $(self._processingDialog).dialog("close"); }; GuiConnector.alert = function (error) { var self = GuiConnector; logger.error(error); if (self._errorDialog === undefined) { self._errorDialog = document.createElement("div"); self._errorDialogContent = document.createElement("div"); self._errorDialog.appendChild(self._errorDialogContent); document.body.appendChild(self._errorDialog); $(self._errorDialog).dialog({ classes: { "ui-dialog": "ui-state-error" }, modal: true, title: "ERROR" }).siblings('.ui-dialog-titlebar').css("background", "red"); } var message = error; if (message instanceof SecurityError) { message = error.message + "<p>Please <a href=\"login.xhtml?from="+encodeURI(window.location.href)+"\">login</a> to access this resource</p>"; } else if (message instanceof GuiMessageError) { message = error.message; } else if (message instanceof NetworkError && (error.message === "XHR error" || error.message === "Failed to fetch")) { message = "File to big.<br>Please reduce file size or contact administrators."; } else if (message instanceof Error) { message = "Unexpected error occurred:<p>" + error.message + "</p>"; } self._errorDialogContent.innerHTML = message; $(self._errorDialog).dialog("open"); }; module.exports = GuiConnector;