Your IP : 18.219.40.177
/**
* Модуль для работы с 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);