Your IP : 18.219.40.177


Current Path : /usr/local/mgr5/skins/orion/src/
Upload File :
Current File : //usr/local/mgr5/skins/orion/src/App.Dom.js

/**
 * Модуль для работы с DOM
 *  App.Dom
 * @param {object} window global object
 * @return {{addClass: function, removeClass: function,
 * toggleClass: function, byId: function, hasClass: function
 * }}
 *
 */
App.Dom = function(window) {
  'use strict';
  var doc = document,
      testAPIelem = doc.createElement('div');

  /**
   * getElementById wrapper
   * @param {String} id value of id
   * @return {?null|object}
   */
  function byId(id) {
    if (typeof id !== 'string') { return null; }
    return doc.getElementById(id);
  }

  /**
   * add class to HTMLNode
   * @param {HTMLNode} elem HTML node
   * @param {string} className name of adding class
   * @type {Function}
   */
  var addClass = testAPIelem.classList ?
      function(elem, className) {
        if (!elem) { return; }
        if (typeof className !== 'string') { return; }
        elem.classList.add(className);

      } : function(elem, className) {
        if (!elem) { return; }
        if (typeof className !== 'string') { return; }
        if (!elem.className.match(className)) {
          elem.className += ' ' + className;
        }
      };

  /**
   * remove class
   * @param {HTMLNode} elem HTML node
   * @param {string} className name of removing class
   * @type {Function}
   */
  var removeClass = testAPIelem.classList ? function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    elem.classList.remove(className);
  } : function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    var regex = new RegExp(className, 'g');
    elem.className += elem.className.replace(regex, '');
  };

  /**
   * toggle class
   * @param {HTMLNode} elem HTML node
   * @param {string} className name of toggling class
   * @type {Function}
   * @return {undefined}
   */
  var toogleClass = testAPIelem.classList ? function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    elem.classList.toggle(className);
  } : function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    var classes = elem.className;
    if (classes.match(className)) {
      var regex = new RegExp(className, 'g');
      elem.className += classes.replace(regex, '');
    } else {
      elem.className += ' ' + className;
    }
  };

  /**
   * check for has class
   * @param {HTMLNode} elem HTML node
   * @param {string} className name of checking class
   * @type {Function}
   * @return {boolean|undefined}
   */
  var hasClass = testAPIelem.classList ? function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    return elem.classList.contains(className);
  } : function(elem, className) {
    if (!elem) { return; }
    if (typeof className !== 'string') { return; }
    var classes = elem.className;
    return classes.match(className);
  };
  return {
    init: function() {},
    byId: byId,
    addClass: addClass,
    removeClass: removeClass,
    toogleClass: toogleClass,
    hasClass: hasClass
  };
}(window);