/** * Core JS functionality * * This logic is supposed to minimize coding and support core javascript functionality. * * @since 1.0.0 */ (function (jsOMS, undefined) { /** * Class finder * * Checking if a element has a class * * @param {Object} ele DOM Element * @param {string} cls Class to find * * @return {boolean} * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.hasClass = function (ele, cls) { return ele !== undefined && ele !== null && ele.className !== undefined && ele.className.match(new RegExp('(\\s|^)' + cls + '(\\s|$)')); }; /** * Add class * * Adding a class to an element * * @param ele DOM Element * @param cls Class to add * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.addClass = function (ele, cls) { if (!jsOMS.hasClass(ele, cls)) { ele.className += " " + cls; } }; /** * Remove class * * Removing a class form an element * * @param ele DOM Element * @param cls Class to remove * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.removeClass = function (ele, cls) { if (jsOMS.hasClass(ele, cls)) { var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)'); ele.className = ele.className.replace(reg, ''); } }; /** * Delayed watcher * * Used to fire event after delay * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.watcher = function () { var timer = 0; return function (callback, ms) { clearTimeout(timer); timer = setTimeout(callback, ms); }; }(); /** * Action prevent * * Preventing event from firering and passing through * * @param event Event Event to stop * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.preventAll = function (event) { if (event.stopPropagation) { event.stopPropagation(); } else { event.cancelBubble = true; } event.preventDefault(); }; /** * Ready invoke * * Invoking a function after page load * * @param func Callback function * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.ready = function (func) { // TODO: IE problems? + Maybe interactive + loaded can cause problems since elements might not be loaded yet?!!?!!?! if (document.readyState === 'complete' || document.readyState === 'loaded' || document.readyState === 'interactive') { func(); } else { document.addEventListener("DOMContentLoaded", function (event) { func(); }); } }; /** * Empty element * * Deleting content from element * * @param ele DOM Element * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.empty = function (ele) { while (ele.firstChild) { ele.removeChild(ele.firstChild); } }; jsOMS.hash = function (str) { var res = 0, len = str.length; for (var i = 0; i < len; i++) { res = res * 31 + str.charCodeAt(i); } return res; }; /** * Check node * * Checking if a selection is a node * * @param ele DOM Node * * @return {boolean} * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.isNode = function (ele) { return ( typeof Node === "object" ? ele instanceof Node : ele && typeof ele === "object" && typeof ele.nodeType === "number" && typeof ele.nodeName === "string" ); }; /** * Check element * * Checking if a selection is a element * * @param o DOM Element * * @return {boolean} * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.isElement = function (o) { return ( typeof HTMLElement === "object" ? o instanceof HTMLElement : o && typeof o === "object" && o !== null && o.nodeType === 1 && typeof o.nodeName === "string" ); }; /** * Getting element by class * * Getting a element by class in the first level * * @param ele DOM Element * @param cls Class to find * * @return Element * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.getByClass = function (ele, cls) { var length = ele.childNodes.length; for (var i = 0; i < length; i++) { if (jsOMS.hasClass(ele.childNodes[i], cls)) { return ele.childNodes[i]; } } return null; }; /** * Merging two arrays recursively * * @param target Target array * @param source Source array * * @return Array * * @function * * @since 1.0.0 * @author Dennis Eichhorn */ jsOMS.merge = function (target, source) { for (var p in source) { try { if (source[p].constructor == Object) { target[p] = merge(target[p], source[p]); } else { target[p] = source[p]; } } catch (e) { target[p] = source[p]; } } return target; }; }(window.jsOMS = window.jsOMS || {}));