SankeySheets/scripts/DomUtils.js
2016-05-24 15:08:26 +01:00

114 lines
2.9 KiB
JavaScript

var DomUtils = (function(ns) {
ns.getGroup = function (groupName) {
return Array.prototype.slice.apply(document.getElementsByName (groupName));
}
ns.getChecked = function (groupName) {
var filt = (document.getElementsByName (groupName) || []).filter(function(d) {
return d.checked;
});
return filt.length ? filt[0] : null;
}
ns.elem = function(name) {
if (typeof name === 'string') {
return document.getElementById(name.replace(/^#/, ""));
} else {
return name;
}
};
ns.addStyles = function(elem, styles) {
if (styles) {
styles.toString().split(";").forEach(function(d) {
if (d) {
var s = d.split(":");
if (s.length !== 2) {
throw "invalid style " + d;
}
elem.style[s[0]] = s[1];
}
});
}
return elem;
};
ns.addElem = function(parent, type, text, className, styles) {
parent = ns.elem(parent);
var elem = document.createElement(type);
parent.appendChild(elem);
elem.innerHTML = typeof text === typeof undefined ? '' : text;
if (className) {
elem.className += (" " + className);
}
return ns.addStyles(elem, styles);
};
ns.addClass = function(element, className) {
element = ns.elem(element);
if (!element.classList.contains(className)) {
element.classList.add(className);
}
return element;
};
/**
* hide a div
* @param {element} element
* @param {boolean} addClass whether to remove or add
* @param {string} [className] the class
* @return {element} the div
*/
ns.hide = function(element, addClass, className) {
element = ns.elem(element);
className = className || "mui--hide";
// will only happen if polyfill not loaded..
if (!element.classList.add) {
throw 'classlist not supported';
}
var q = addClass ? ns.addClass(element, className) : element.classList.remove(className);
return element;
};
/**
* flip a div
* @param {element} element
* @param {string} [className] the class
* @return {element} the div
*/
ns.flip = function(element, className) {
element = ns.elem(element);
element.classList.toggle(className || "mui--hide");
return element;
};
/**
* is hidden
* @param {element} element
* @param {string} [className]
* @return {boolean} is it hidden
*/
ns.isHidden = function(element, className) {
element = ns.elem(element);
return element.classList.contains(className || "mui--hide");
};
/**
* gets context of elem if text is preceded by # and the elem exists
*@param {string} label the label or elem id to get
*@return {string} the result
*/
ns.fillLabel = function(label) {
if (label && label.toString().slice(0, 1) === '#') {
var elem = ns.elem(label);
return elem ? elem.innerHTML : label;
}
return label;
}
return ns;
})(DomUtils || {});