| @@ -1,3 +1,22 @@ | |||
| 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 = { | |||
| isInt:function(v){ | |||
| if (isNaN(v)){ | |||
| @@ -7,21 +26,25 @@ const utils = { | |||
| 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){ | |||