Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
GuiConnector.js 5.13 KiB
"use strict";

var logger = require('./logger');

var Functions = require('./Functions');
var SecurityError = require('./SecurityError');
var GuiMessageError = require('./gui/GuiMessageError');

/**
 * 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,
      dialogClass: 'minerva-no-close',
    });
  }
  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\">login</a> to access this resuorce</p>";
  } else if (message instanceof GuiMessageError) {
    message = error.message;
  } else if (message instanceof Error) {
    message = "Unexpected error occured:<p>" + error.message + "</p>";
  }
  self._errorDialogContent.innerHTML = message;
  $(self._errorDialog).dialog("open");

};

module.exports = GuiConnector;