Viewing File: /usr/local/cpanel/3rdparty/share/angular-growl-2/src/growlMessageService.js

angular.module("angular-growl").service("growlMessages", ['$sce', '$timeout', function ($sce, $timeout) {
  "use strict";

  this.directives = {};
  var preloadDirectives = {};

  /**
   * Allows for preloading a directive before the directives
   * controller is initialized
   * @param referenceId
   * @returns {*}
   */
  function preLoad(referenceId) {
    var directive;
    if (preloadDirectives[referenceId]) {
      directive =  preloadDirectives[referenceId];
    } else {
      directive = preloadDirectives[referenceId] = {
        messages: []
      };
    }
    return directive;
  }

  /**
   * Initialize a directive
   * We look at the preloaded directive and use this else we
   * create a new blank object
   * @param referenceId
   * @param limitMessages
   */
  this.initDirective = function (referenceId, limitMessages) {
    // If we already have a directive preloaded use this version
    // so our growl notifications are shown.
    if (preloadDirectives[referenceId]) {
      this.directives[referenceId] = preloadDirectives[referenceId];
      this.directives[referenceId].limitMessages = limitMessages;
    } else {
      this.directives[referenceId] = {
        messages: [],
        limitMessages: limitMessages
      };
    }
    return this.directives[referenceId];
  };

  this.getAllMessages = function (referenceId) {
    referenceId = referenceId || 0;
    var messages;
    if (this.directives[referenceId]) {
      messages =  this.directives[referenceId].messages;
    } else {
      messages = [];
    }
    return messages;
  };

  this.destroyAllMessages = function (referenceId) {
    var messages = this.getAllMessages(referenceId);
    for (var i = messages.length - 1; i >= 0; i--) {
      messages[i].destroy();
    }
    if (this.directives[referenceId]) {
      this.directives[referenceId].messages = [];
    }
  };

  this.addMessage = function (message) {
    var directive, messages, found, msgText;

    // If we dont found our directive preload it!
    if (this.directives[message.referenceId]) {
      directive = this.directives[message.referenceId];
    } else {
      directive = preLoad(message.referenceId);
    }

    messages = directive.messages;

    if (this.onlyUnique) {
      angular.forEach(messages, function (msg) {
        msgText = $sce.getTrustedHtml(msg.text);
        if (message.text === msgText && message.severity === msg.severity && message.title === msg.title) {
          found = true;
        }
      });

      if (found) {
        return;
      }
    }

    message.text = $sce.trustAsHtml(String(message.text));

    /**If message closes on timeout, add's promises array for
     timeouts to stop close. Also sets message.closeoutTimer to ttl / 1000
     **/
    if (message.ttl && message.ttl !== -1) {
      message.countdown = message.ttl / 1000;
      message.promises = [];
      message.close = false;
      message.countdownFunction = function () {
        if (message.countdown > 1) {
          message.countdown--;
          message.promises.push($timeout(message.countdownFunction, 1000));
        } else {
          message.countdown--;
        }
      };
    }

    /** Limit the amount of messages in the container **/
    if (angular.isDefined(directive.limitMessages)) {
      var diff = messages.length - (directive.limitMessages - 1);
      if (diff > 0) {
        messages.splice(directive.limitMessages - 1, diff);
      }
    }

    /** abillity to reverse order (newest first ) **/
    if (this.reverseOrder) {
      messages.unshift(message);
    } else {
      messages.push(message);
    }

    if (typeof (message.onopen) === 'function') {
      message.onopen();
    }

    if (message.ttl && message.ttl !== -1) {
      //adds message timeout to promises and starts messages countdown function.
      message.promises.push($timeout(angular.bind(this, function () {
        this.deleteMessage(message);
      }), message.ttl));
      message.promises.push($timeout(message.countdownFunction, 1000));
    }

    return message;
  };

  this.deleteMessage = function (message) {
    var messages = this.directives[message.referenceId].messages,
      index = messages.indexOf(message);
    if (index > -1) {
      messages[index].close = true;
      messages.splice(index, 1);
    }

    if (typeof (message.onclose) === 'function') {
      message.onclose();
    }
  };
}]);
Back to Directory File Manager