Jquery alternatives and general utils
'use strict';
var Utils = {
ready: function(fn) {
if (document.readyState != 'loading') {
fn();
} else {
document.addEventListener('DOMContentLoaded', fn);
}
},
$: function(selector, container) {
var selectorType = 'querySelectorAll';
if (selector.indexOf('#') === 0) {
selectorType = 'getElementById';
selector = selector.substr(1, selector.length);
}
return [].slice.call((container || document)[selectorType](selector));
// return (container || document)[selectorType](selector);
},
$: function(selector, container) {
return (container || document).querySelector(selector);
},
// Returns all elements that match CSS selector {expr} as an array.
// Querying can optionally be restricted to {container}’s descendants
$$: function(selector, container) {
return [].slice.call((container || document).querySelectorAll(selector));
},
removeClass: function(el, className) {
if (el.classList) {
el.classList.remove(className);
}else {
el.className = el.className.replace(new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'), ' ');
}
},
addClass: function(el, className) {
if (el.classList) {
el.classList.add(className);
}else {
el.className += ' ' + className;
}
},
hasClass: function(el, className) {
if (el.classList) {
return el.classList.contains(className);
}else {
return new RegExp('(^| )' + className + '( |$)', 'gi').test(el.className);
}
},
is: function(el, selector) {
return (el.matches || el.matchesSelector || el.msMatchesSelector || el.mozMatchesSelector || el.webkitMatchesSelector || el.oMatchesSelector).call(el, selector);
},
parents: function(el, className) {
if (Utils.is(el, className)) {
return el;
}
while (el && el.parentNode) {
el = el.parentNode;
// console.log('el.querySelector(selector)', el.querySelector(selector));
// console.log('this.hasClass(selector)', Utils.hasClass(el, selector));
// if (el.querySelector(selector) !== null) {
// if (Utils.hasClass(el, className)) {
if (Utils.is(el, className)) {
return el;
}
}
return null;
},
transEndEventName: {
'WebkitTransition': 'webkitTransitionEnd',
'MozTransition': 'transitionend',
'OTransition': 'oTransitionEnd otransitionend',
'msTransition': 'MSTransitionEnd',
'transition': 'transitionend'
}[Modernizr.prefixed('transition')],
isNumber: function(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
},
trackPage: function (page) {
if (ga){
if(page === undefined){
ga('send', 'pageview');
}else{
ga('send', 'pageview', page);
}
}
},
trackEvent: function (category, action, label) {
ga && ga('send', 'event', category, action, label);
}
};
module.exports = Utils;