aboutsummaryrefslogtreecommitdiff
path: root/js/lib/NJUtils.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/NJUtils.js')
-rwxr-xr-xjs/lib/NJUtils.js151
1 files changed, 76 insertions, 75 deletions
diff --git a/js/lib/NJUtils.js b/js/lib/NJUtils.js
index 1406ad98..cfb7ef07 100755
--- a/js/lib/NJUtils.js
+++ b/js/lib/NJUtils.js
@@ -1,24 +1,25 @@
1/* <copyright> 1/* <copyright>
2Copyright (c) 2012, Motorola Mobility, Inc 2Copyright (c) 2012, Motorola Mobility LLC.
3All Rights Reserved. 3All Rights Reserved.
4BSD License.
5 4
6Redistribution and use in source and binary forms, with or without 5Redistribution and use in source and binary forms, with or without
7modification, are permitted provided that the following conditions are met: 6modification, are permitted provided that the following conditions are met:
8 7
9 - Redistributions of source code must retain the above copyright notice, 8* Redistributions of source code must retain the above copyright notice,
10 this list of conditions and the following disclaimer. 9 this list of conditions and the following disclaimer.
11 - Redistributions in binary form must reproduce the above copyright 10
12 notice, this list of conditions and the following disclaimer in the 11* Redistributions in binary form must reproduce the above copyright notice,
13 documentation and/or other materials provided with the distribution. 12 this list of conditions and the following disclaimer in the documentation
14 - Neither the name of Motorola Mobility nor the names of its contributors 13 and/or other materials provided with the distribution.
15 may be used to endorse or promote products derived from this software 14
16 without specific prior written permission. 15* Neither the name of Motorola Mobility LLC nor the names of its
16 contributors may be used to endorse or promote products derived from this
17 software without specific prior written permission.
17 18
18THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
19AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 21IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 22ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
22LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 23LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
23CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 24CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
24SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
@@ -39,7 +40,7 @@ var Montage = require("montage/core/core").Montage,
39exports.NJUtils = Montage.create(Component, { 40exports.NJUtils = Montage.create(Component, {
40 41
41 /* =============== DOM Access ================ */ 42 /* =============== DOM Access ================ */
42 43
43 ///// Quick "getElementById" 44 ///// Quick "getElementById"
44 $ : { 45 $ : {
45 value: function(id, doc) { 46 value: function(id, doc) {
@@ -47,7 +48,7 @@ exports.NJUtils = Montage.create(Component, {
47 return doc.getElementById(id); 48 return doc.getElementById(id);
48 } 49 }
49 }, 50 },
50 51
51 ///// Quick "getElementsByClassName" which also returns as an Array 52 ///// Quick "getElementsByClassName" which also returns as an Array
52 ///// Can return as NodeList by passing true as second argument 53 ///// Can return as NodeList by passing true as second argument
53 $$ : { 54 $$ : {
@@ -57,7 +58,7 @@ exports.NJUtils = Montage.create(Component, {
57 return (asNodeList) ? list : this.toArray(list); 58 return (asNodeList) ? list : this.toArray(list);
58 } 59 }
59 }, 60 },
60 61
61 ///// Get child nodes of element 62 ///// Get child nodes of element
62 ///// Omit filter to only return element nodes 63 ///// Omit filter to only return element nodes
63 ///// Pass in filter function to minimize collection, or 64 ///// Pass in filter function to minimize collection, or
@@ -65,14 +66,14 @@ exports.NJUtils = Montage.create(Component, {
65 children : { 66 children : {
66 value : function(el, filter) { 67 value : function(el, filter) {
67 var f = filter || function(item) { 68 var f = filter || function(item) {
68 return item.nodeType === 1; 69 return item.nodeType === 1;
69 }; 70 };
70 return this.toArray(el.childNodes).filter(f); 71 return this.toArray(el.childNodes).filter(f);
71 } 72 }
72 }, 73 },
73 74
74 /* ============= DOM Manipulation ============= */ 75 /* ============= DOM Manipulation ============= */
75 76
76 ///// Creates and returns text node from string 77 ///// Creates and returns text node from string
77 textNode : { 78 textNode : {
78 value: function(text) { 79 value: function(text) {
@@ -95,7 +96,7 @@ exports.NJUtils = Montage.create(Component, {
95 return el; 96 return el;
96 } 97 }
97 }, 98 },
98 99
99 decor: { 100 decor: {
100 value: function(el, attr) { 101 value: function(el, attr) {
101 if (typeof attr === 'object') { 102 if (typeof attr === 'object') {
@@ -183,56 +184,56 @@ exports.NJUtils = Montage.create(Component, {
183 return node; 184 return node;
184 } 185 }
185 }, 186 },
186 187
187 queryParentSelector : { 188 queryParentSelector : {
188 value: function(el, strSelector) { 189 value: function(el, strSelector) {
189 // queryParentSelector: 190 // queryParentSelector:
190 // Given a DOM element el (required), walk up the DOM tree 191 // Given a DOM element el (required), walk up the DOM tree
191 // and find the first parent that matches selector strSelector (required). 192 // and find the first parent that matches selector strSelector (required).
192 // Returns: The element that matches, or false if there is no match 193 // Returns: The element that matches, or false if there is no match
193 // or if insufficient parameters are supplied. 194 // or if insufficient parameters are supplied.
194 195
195 if ((typeof(el) === "undefined") || (typeof(strSelector) === "undefined")) { 196 if ((typeof(el) === "undefined") || (typeof(strSelector) === "undefined")) {
196 // Parameters are required, m'kay? 197 // Parameters are required, m'kay?
197 return false; 198 return false;
198 } else if ((typeof(el) !== "object") || (typeof(strSelector) !== "string" )) { 199 } else if ((typeof(el) !== "object") || (typeof(strSelector) !== "string" )) {
199 // You also have to use the right parameters. 200 // You also have to use the right parameters.
200 return false; 201 return false;
201 } 202 }
202 203
203 // First, get an empty clone of the parent. 204 // First, get an empty clone of the parent.
204 var myParent = el.parentNode; 205 var myParent = el.parentNode;
205 var clone = myParent.cloneNode(false); 206 var clone = myParent.cloneNode(false);
206 if (clone === null) { 207 if (clone === null) {
207 return false; 208 return false;
208 } 209 }
209 210
210 // If we're at the top of the DOM, our clone will be an htmlDocument. 211 // If we're at the top of the DOM, our clone will be an htmlDocument.
211 // htmlDocument has no tagName. 212 // htmlDocument has no tagName.
212 if (typeof(clone.tagName) !== "undefined") { 213 if (typeof(clone.tagName) !== "undefined") {
213 // create a bogus div to use as a base for querySelector 214 // create a bogus div to use as a base for querySelector
214 var temp = document.createElement("div"); 215 var temp = document.createElement("div");
215 216
216 // Append the clone to the bogus div 217 // Append the clone to the bogus div
217 temp.appendChild(clone); 218 temp.appendChild(clone);
218 219
219 // Now we can use querySelector! Sweet. 220 // Now we can use querySelector! Sweet.
220 var selectorTest = temp.querySelector(strSelector); 221 var selectorTest = temp.querySelector(strSelector);
221 222
222 // What has querySelector returned? 223 // What has querySelector returned?
223 if (selectorTest === null) { 224 if (selectorTest === null) {
224 // No match, so recurse. 225 // No match, so recurse.
225 return this.queryParentSelector(myParent, strSelector); 226 return this.queryParentSelector(myParent, strSelector);
226 } else { 227 } else {
227 // Match! Return the element. 228 // Match! Return the element.
228 return myParent; 229 return myParent;
229 } 230 }
230 } else { 231 } else {
231 // We're at the top of the DOM so we're done. 232 // We're at the top of the DOM so we're done.
232 return false; 233 return false;
233 } 234 }
234 } 235 }
235 236
236 }, 237 },
237 238
238 // Returns the numerical value and unit string from a string. 239 // Returns the numerical value and unit string from a string.
@@ -257,14 +258,14 @@ exports.NJUtils = Montage.create(Component, {
257 }, 258 },
258 259
259 /* ================= Style methods ================= */ 260 /* ================= Style methods ================= */
260 261
261 ///// Get computed height of element 262 ///// Get computed height of element
262 height : { 263 height : {
263 value: function(node, pseudo) { 264 value: function(node, pseudo) {
264 return node.ownerDocument.defaultView.getComputedStyle(node, pseudo).getPropertyValue('height'); 265 return node.ownerDocument.defaultView.getComputedStyle(node, pseudo).getPropertyValue('height');
265 } 266 }
266 }, 267 },
267 268
268 /* ================= Array methods ================= */ 269 /* ================= Array methods ================= */
269 270
270 ///// Return an array from an array-like object 271 ///// Return an array from an array-like object
@@ -273,9 +274,9 @@ exports.NJUtils = Montage.create(Component, {
273 return Array.prototype.slice.call(arrayLikeObj); 274 return Array.prototype.slice.call(arrayLikeObj);
274 } 275 }
275 }, 276 },
276 277
277 /* ================= String methods ================= */ 278 /* ================= String methods ================= */
278 279
279 ///// Return the last part of a path (e.g. filename) 280 ///// Return the last part of a path (e.g. filename)
280 getFileNameFromPath : { 281 getFileNameFromPath : {
281 value: function(path) { 282 value: function(path) {
@@ -310,9 +311,9 @@ exports.NJUtils = Montage.create(Component, {
310 value: function(len) { 311 value: function(len) {
311 var length; 312 var length;
312 len ? length = len : length = 8; 313 len ? length = len : length = 8;
313 314
314 return Uuid.generate().substring(0,length); 315 return Uuid.generate().substring(0,length);
315 } 316 }
316 } 317 }
317