Permalink
| /* | |
| * utils.js | |
| * | |
| * Independent helper methods (cross browser, etc..) | |
| * | |
| */ | |
| define(function () { | |
| // Define module | |
| var utils = {}; | |
| // Useragent info for keycode handling | |
| var uAgent = (typeof navigator !== 'undefined') ? navigator.userAgent : null; | |
| // | |
| // Shallow copy properties from n objects to destObj | |
| // | |
| utils.extend = function (destObj) { | |
| for (var i = 1; i < arguments.length; i++) { | |
| for (var key in arguments[i]) { | |
| destObj[key] = arguments[i][key]; | |
| } | |
| } | |
| return destObj; | |
| }; | |
| // | |
| // Add a given character to a string at a defined pos | |
| // | |
| utils.addChars = function (str, chars, pos) { | |
| return str.substr(0, pos) + chars + str.substr(pos, str.length); | |
| }; | |
| // | |
| // Remove a span of characters | |
| // | |
| utils.removeChars = function (str, start, end) { | |
| return str.substr(0, start) + str.substr(end, str.length); | |
| }; | |
| // | |
| // Return true/false is num false between bounds | |
| // | |
| utils.isBetween = function (num, bounds) { | |
| bounds.sort(function(a,b) { return a-b; }); | |
| return (num > bounds[0] && num < bounds[1]); | |
| }; | |
| // | |
| // Helper method for cross browser event listeners | |
| // | |
| utils.addListener = function (el, evt, handler) { | |
| return (typeof el.addEventListener !== 'undefined') | |
| ? el.addEventListener(evt, handler, false) | |
| : el.attachEvent('on' + evt, handler); | |
| }; | |
| // | |
| // Helper method for cross browser implementation of preventDefault | |
| // | |
| utils.preventDefault = function (evt) { | |
| return (evt.preventDefault) ? evt.preventDefault() : (evt.returnValue = false); | |
| }; | |
| // | |
| // Helper method for cross browser implementation for grabbing | |
| // clipboard data | |
| // | |
| utils.getClip = function (evt) { | |
| if (evt.clipboardData) { return evt.clipboardData.getData('Text'); } | |
| if (window.clipboardData) { return window.clipboardData.getData('Text'); } | |
| }; | |
| // | |
| // Loop over object and checking for matching properties | |
| // | |
| utils.getMatchingKey = function (which, keyCode, keys) { | |
| // Loop over and return if matched. | |
| for (var k in keys) { | |
| var key = keys[k]; | |
| if (which === key.which && keyCode === key.keyCode) { | |
| return k; | |
| } | |
| } | |
| }; | |
| // | |
| // Returns true/false if k is a del keyDown | |
| // | |
| utils.isDelKeyDown = function (which, keyCode) { | |
| var keys = { | |
| 'backspace': { 'which': 8, 'keyCode': 8 }, | |
| 'delete': { 'which': 46, 'keyCode': 46 } | |
| }; | |
| return utils.getMatchingKey(which, keyCode, keys); | |
| }; | |
| // | |
| // Returns true/false if k is a del keyPress | |
| // | |
| utils.isDelKeyPress = function (which, keyCode) { | |
| var keys = { | |
| 'backspace': { 'which': 8, 'keyCode': 8, 'shiftKey': false }, | |
| 'delete': { 'which': 0, 'keyCode': 46 } | |
| }; | |
| return utils.getMatchingKey(which, keyCode, keys); | |
| }; | |
| // // | |
| // // Determine if keydown relates to specialKey | |
| // // | |
| // utils.isSpecialKeyDown = function (which, keyCode) { | |
| // var keys = { | |
| // 'tab': { 'which': 9, 'keyCode': 9 }, | |
| // 'enter': { 'which': 13, 'keyCode': 13 }, | |
| // 'end': { 'which': 35, 'keyCode': 35 }, | |
| // 'home': { 'which': 36, 'keyCode': 36 }, | |
| // 'leftarrow': { 'which': 37, 'keyCode': 37 }, | |
| // 'uparrow': { 'which': 38, 'keyCode': 38 }, | |
| // 'rightarrow': { 'which': 39, 'keyCode': 39 }, | |
| // 'downarrow': { 'which': 40, 'keyCode': 40 }, | |
| // 'F5': { 'which': 116, 'keyCode': 116 } | |
| // }; | |
| // return utils.getMatchingKey(which, keyCode, keys); | |
| // }; | |
| // | |
| // Determine if keypress relates to specialKey | |
| // | |
| utils.isSpecialKeyPress = function (which, keyCode) { | |
| var keys = { | |
| 'tab': { 'which': 0, 'keyCode': 9 }, | |
| 'enter': { 'which': 13, 'keyCode': 13 }, | |
| 'end': { 'which': 0, 'keyCode': 35 }, | |
| 'home': { 'which': 0, 'keyCode': 36 }, | |
| 'leftarrow': { 'which': 0, 'keyCode': 37 }, | |
| 'uparrow': { 'which': 0, 'keyCode': 38 }, | |
| 'rightarrow': { 'which': 0, 'keyCode': 39 }, | |
| 'downarrow': { 'which': 0, 'keyCode': 40 }, | |
| 'F5': { 'which': 116, 'keyCode': 116 } | |
| }; | |
| return utils.getMatchingKey(which, keyCode, keys); | |
| }; | |
| // | |
| // Returns true/false if modifier key is held down | |
| // | |
| utils.isModifier = function (evt) { | |
| return evt.ctrlKey || evt.altKey || evt.metaKey; | |
| }; | |
| // | |
| // Iterates over each property of object or array. | |
| // | |
| utils.forEach = function (collection, callback, thisArg) { | |
| if (collection.hasOwnProperty('length')) { | |
| for (var index = 0, len = collection.length; index < len; index++) { | |
| if (callback.call(thisArg, collection[index], index, collection) === false) { | |
| break; | |
| } | |
| } | |
| } else { | |
| for (var key in collection) { | |
| if (collection.hasOwnProperty(key)) { | |
| if (callback.call(thisArg, collection[key], key, collection) === false) { | |
| break; | |
| } | |
| } | |
| } | |
| } | |
| }; | |
| // Expose | |
| return utils; | |
| }); |