| function isElement(el){ | |||||
| // Code based on... | |||||
| // https://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object | |||||
| try { | |||||
| // Using W3 DOM2 (works for FF, Opera and Chrome) | |||||
| return el instanceof HTMLElement; | |||||
| } catch(e) { | |||||
| // Browsers not supporting W3 DOM2 don't have HTMLElement and | |||||
| // an exception is thrown and we end up here. Testing some | |||||
| // properties that all elements have (works on IE7) | |||||
| return (typeof(el) === "object") && | |||||
| (el.nodeType === 1) && | |||||
| (typeof(el.style) === "object") && | |||||
| (typeof(el.ownerDocument) === "object"); | |||||
| } | |||||
| } | |||||
| const utils = { | const utils = { | ||||
| isInt:function(v){ | isInt:function(v){ | ||||
| if (isNaN(v)){ | if (isNaN(v)){ | ||||
| return (x | 0) === x; | return (x | 0) === x; | ||||
| }, | }, | ||||
| isElement:function(el){ | |||||
| // Code based on... | |||||
| // https://stackoverflow.com/questions/384286/javascript-isdom-how-do-you-check-if-a-javascript-object-is-a-dom-object | |||||
| try { | |||||
| // Using W3 DOM2 (works for FF, Opera and Chrome) | |||||
| return el instanceof HTMLElement; | |||||
| } catch(e) { | |||||
| // Browsers not supporting W3 DOM2 don't have HTMLElement and | |||||
| // an exception is thrown and we end up here. Testing some | |||||
| // properties that all elements have (works on IE7) | |||||
| return (typeof(el) === "object") && | |||||
| (el.nodeType === 1) && | |||||
| (typeof(el.style) === "object") && | |||||
| (typeof(el.ownerDocument) === "object"); | |||||
| } | |||||
| isElement:isElement, | |||||
| addEventListeners(el, listeners){ | |||||
| if (!isElement(el)) | |||||
| throw new TypeError("Can only attach listeners to HTMLElement objects."); | |||||
| Objects.keys(listeners).forEach((key) => { | |||||
| el.addEventListener(key, listeners[key]); | |||||
| }); | |||||
| }, | |||||
| addListenerToEvents(el, enames, listener){ | |||||
| if (!isElement(el)) | |||||
| throw new TypeError("Can only attach listeners to HTMLElement objects."); | |||||
| if (!(enames instanceof Array)) | |||||
| throw new TypeError("Expected an array of event name strings."); | |||||
| if (typeof(listener) !== 'function') | |||||
| throw new TypeError("Listener expected to be a function."); | |||||
| enames.forEach((name) => { | |||||
| el.addEventListener(name, listener); | |||||
| }); | |||||
| }, | }, | ||||
| range:function(a, b, step){ | range:function(a, b, step){ |