jsOMS/Utils/oLib.js
2015-12-22 23:15:06 +01:00

272 lines
5.9 KiB
JavaScript

/**
* 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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 <d.eichhorn@oms.com>
*/
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 || {}));