From f37e639e66646c57271682442c4760e4245a6808 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 13:55:01 -0700 Subject: [PATCH 1/6] Safer logic around undeclared modules This will allow the declared modules to load even when some of them were not declared. --- angular.ng-modules.js | 37 ++++++++++++++++++++++++------------- 1 file changed, 24 insertions(+), 13 deletions(-) diff --git a/angular.ng-modules.js b/angular.ng-modules.js index 169ba15..a8245df 100644 --- a/angular.ng-modules.js +++ b/angular.ng-modules.js @@ -1,6 +1,3 @@ -// By Luis Perez -// From blog post: http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/ - (function() { function initNgModules(element) { var elements = [element], @@ -15,16 +12,17 @@ for(var i = 0; i < names.length; i++) { var name = names[i]; + names[i] = true; append(document.getElementById(name)); name = name.replace(':', '\\:'); if (element.querySelectorAll) { var elements2; elements2 = element.querySelectorAll('.' + name); for(var j = 0; j < elements2.length; j++) append(elements2[j]); - + elements2 = element.querySelectorAll('.' + name + '\\:'); for(var j = 0; j < elements2.length; j++) append(elements2[j]); - + elements2 = element.querySelectorAll('[' + name + ']'); for(var j = 0; j < elements2.length; j++) append(elements2[j]); } @@ -40,10 +38,11 @@ modules.push((match[2] || '').replace(/\s+/g, ',')); } else { if(element.attributes) { - for(var j = 0; j < element.attributes.length; j++) { - var attr = element.attributes[j]; - - if (names.indexOf(attr.name) != -1) { + for (var attrName in element.attributes) { + if(attrName == "length") continue; + var attr = { name: attrName, value: element.attributes[attrName].value }; + + if (names[attr.name]) { moduleElements.push(element); modules.push(attr.value); } @@ -51,15 +50,27 @@ } } } - + for(var i = 0; i < moduleElements.length; i++) { var moduleElement = moduleElements[i]; - var module = modules[i].replace(/ /g,'').split(","); - angular.bootstrap(moduleElement, module); + if (typeof(modules[i]) != 'undefined') { + var moduleList = modules[i].replace(/ /g,'').split(","); + var initializedModuleList = []; + for (var j = 0; j < moduleList.length; ++j) { + + try { + angular.module(moduleList[j]); + initializedModuleList.push(moduleList[j]); + } catch (e) { + console.error(e); + } + } + angular.bootstrap(moduleElement, initializedModuleList); + } } } angular.element(document).ready(function() { initNgModules(document); }); -})(); \ No newline at end of file +})(); From cbcd68a7bf3ff4e405931f0c1c3fb2a67f7aff95 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 13:59:27 -0700 Subject: [PATCH 2/6] added correct credits back in --- angular.ng-modules.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/angular.ng-modules.js b/angular.ng-modules.js index a8245df..8f9d3b4 100644 --- a/angular.ng-modules.js +++ b/angular.ng-modules.js @@ -1,3 +1,6 @@ +// By Luis Perez +// From blog post: http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/ + (function() { function initNgModules(element) { var elements = [element], From 0204317ec4992bd34f1aeebc7f9099ad50aec443 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 14:03:41 -0700 Subject: [PATCH 3/6] Updating to latest with firefox fix --- angular.ng-modules.js | 29 +++++++++++++---------------- 1 file changed, 13 insertions(+), 16 deletions(-) diff --git a/angular.ng-modules.js b/angular.ng-modules.js index 8f9d3b4..5e06dc9 100644 --- a/angular.ng-modules.js +++ b/angular.ng-modules.js @@ -15,7 +15,6 @@ for(var i = 0; i < names.length; i++) { var name = names[i]; - names[i] = true; append(document.getElementById(name)); name = name.replace(':', '\\:'); if (element.querySelectorAll) { @@ -41,11 +40,10 @@ modules.push((match[2] || '').replace(/\s+/g, ',')); } else { if(element.attributes) { - for (var attrName in element.attributes) { - if(attrName == "length") continue; - var attr = { name: attrName, value: element.attributes[attrName].value }; + for(var j = 0; j < element.attributes.length; j++) { + var attr = element.attributes[j]; - if (names[attr.name]) { + if (names.indexOf(attr.name) != -1) { moduleElements.push(element); modules.push(attr.value); } @@ -57,18 +55,17 @@ for(var i = 0; i < moduleElements.length; i++) { var moduleElement = moduleElements[i]; if (typeof(modules[i]) != 'undefined') { - var moduleList = modules[i].replace(/ /g,'').split(","); - var initializedModuleList = []; - for (var j = 0; j < moduleList.length; ++j) { - - try { - angular.module(moduleList[j]); - initializedModuleList.push(moduleList[j]); - } catch (e) { - console.error(e); + var moduleList = modules[i].replace(/ /g,'').split(","); + var initializedModuleList = []; + for (var j = 0; j < moduleList.length; ++j) { + try { + angular.module(moduleList[j]); + initializedModuleList.push(moduleList[j]); + } catch (e) { + console.error(e); + } } - } - angular.bootstrap(moduleElement, initializedModuleList); + angular.bootstrap(moduleElement, initializedModuleList); } } } From fc8522fdec1100a0c9f49ca1a6b3ac1bc4e002f4 Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 14:42:31 -0700 Subject: [PATCH 4/6] Rename to ng-modules-safe.js --- angular.ng-modules.js => ng-modules-safe.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename angular.ng-modules.js => ng-modules-safe.js (100%) diff --git a/angular.ng-modules.js b/ng-modules-safe.js similarity index 100% rename from angular.ng-modules.js rename to ng-modules-safe.js From 7e95682272fe51ed869326f6b2ab55c23850bc2e Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 15:33:06 -0700 Subject: [PATCH 5/6] updating js spaces style --- ng-modules-safe.js | 108 ++++++++++++++++++++++----------------------- 1 file changed, 54 insertions(+), 54 deletions(-) diff --git a/ng-modules-safe.js b/ng-modules-safe.js index 5e06dc9..4e92d39 100644 --- a/ng-modules-safe.js +++ b/ng-modules-safe.js @@ -1,76 +1,76 @@ -// By Luis Perez +// By Luis Perez // From blog post: http://www.simplygoodcode.com/2014/04/angularjs-getting-around-ngapp-limitations-with-ngmodule/ (function() { function initNgModules(element) { - var elements = [element], - moduleElements = [], - modules = [], - names = ['ng:module', 'ng-module', 'x-ng-module', 'data-ng-module', 'ng:modules', 'ng-modules', 'x-ng-modules', 'data-ng-modules'], - NG_MODULE_CLASS_REGEXP = /\sng[:\-]module[s](:\s*([\w\d_]+);?)?\s/; + var elements = [element], + moduleElements = [], + modules = [], + names = ['ng:module', 'ng-module', 'x-ng-module', 'data-ng-module', 'ng:modules', 'ng-modules', 'x-ng-modules', 'data-ng-modules'], + NG_MODULE_CLASS_REGEXP = /\sng[:\-]module[s](:\s*([\w\d_]+);?)?\s/; - function append(element) { - element && elements.push(element); - } + function append(element) { + element && elements.push(element); + } - for(var i = 0; i < names.length; i++) { - var name = names[i]; - append(document.getElementById(name)); - name = name.replace(':', '\\:'); - if (element.querySelectorAll) { - var elements2; - elements2 = element.querySelectorAll('.' + name); - for(var j = 0; j < elements2.length; j++) append(elements2[j]); + for (var i = 0; i < names.length; i++) { + var name = names[i]; + append(document.getElementById(name)); + name = name.replace(':', '\\:'); + if (element.querySelectorAll) { + var elements2; + elements2 = element.querySelectorAll('.' + name); + for (var j = 0; j < elements2.length; j++) append(elements2[j]); - elements2 = element.querySelectorAll('.' + name + '\\:'); - for(var j = 0; j < elements2.length; j++) append(elements2[j]); + elements2 = element.querySelectorAll('.' + name + '\\:'); + for (var j = 0; j < elements2.length; j++) append(elements2[j]); - elements2 = element.querySelectorAll('[' + name + ']'); - for(var j = 0; j < elements2.length; j++) append(elements2[j]); - } + elements2 = element.querySelectorAll('[' + name + ']'); + for (var j = 0; j < elements2.length; j++) append(elements2[j]); } + } - for(var i = 0; i < elements.length; i++) { - var element = elements[i]; + for (var i = 0; i < elements.length; i++) { + var element = elements[i]; - var className = ' ' + element.className + ' '; - var match = NG_MODULE_CLASS_REGEXP.exec(className); - if (match) { - moduleElements.push(element); - modules.push((match[2] || '').replace(/\s+/g, ',')); - } else { - if(element.attributes) { - for(var j = 0; j < element.attributes.length; j++) { - var attr = element.attributes[j]; + var className = ' ' + element.className + ' '; + var match = NG_MODULE_CLASS_REGEXP.exec(className); + if (match) { + moduleElements.push(element); + modules.push((match[2] || '').replace(/\s+/g, ',')); + } else { + if (element.attributes) { + for (var j = 0; j < element.attributes.length; j++) { + var attr = element.attributes[j]; - if (names.indexOf(attr.name) != -1) { - moduleElements.push(element); - modules.push(attr.value); - } - } - } + if (names.indexOf(attr.name) != -1) { + moduleElements.push(element); + modules.push(attr.value); + } } + } } + } - for(var i = 0; i < moduleElements.length; i++) { - var moduleElement = moduleElements[i]; - if (typeof(modules[i]) != 'undefined') { - var moduleList = modules[i].replace(/ /g,'').split(","); - var initializedModuleList = []; - for (var j = 0; j < moduleList.length; ++j) { - try { - angular.module(moduleList[j]); - initializedModuleList.push(moduleList[j]); - } catch (e) { - console.error(e); - } - } - angular.bootstrap(moduleElement, initializedModuleList); + for (var i = 0; i < moduleElements.length; i++) { + var moduleElement = moduleElements[i]; + if (typeof(modules[i]) != 'undefined') { + var moduleList = modules[i].replace(/ /g, '').split(","); + var initializedModuleList = []; + for (var j = 0; j < moduleList.length; ++j) { + try { + angular.module(moduleList[j]); + initializedModuleList.push(moduleList[j]); + } catch (e) { + console.error(e); } + } + angular.bootstrap(moduleElement, initializedModuleList); } + } } angular.element(document).ready(function() { - initNgModules(document); + initNgModules(document); }); })(); From ffedb1d54132bc400d9bba0760065f76247ee51b Mon Sep 17 00:00:00 2001 From: David Date: Fri, 16 Jan 2015 15:35:44 -0700 Subject: [PATCH 6/6] reducing names --- ng-modules-safe.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ng-modules-safe.js b/ng-modules-safe.js index 4e92d39..986dd8a 100644 --- a/ng-modules-safe.js +++ b/ng-modules-safe.js @@ -6,7 +6,7 @@ var elements = [element], moduleElements = [], modules = [], - names = ['ng:module', 'ng-module', 'x-ng-module', 'data-ng-module', 'ng:modules', 'ng-modules', 'x-ng-modules', 'data-ng-modules'], + names = ['ng-module', 'data-ng-module', 'ng-modules', 'data-ng-modules'], NG_MODULE_CLASS_REGEXP = /\sng[:\-]module[s](:\s*([\w\d_]+);?)?\s/; function append(element) {