Skip to content
This repository was archived by the owner on Apr 4, 2025. It is now read-only.

Commit 4206f4a

Browse files
author
Erin Altenhof-Long
committed
fix(ngHint): add bootstrapping refactor
Closes #22
2 parents c89a044 + dfdcef2 commit 4206f4a

File tree

1 file changed

+36
-50
lines changed

1 file changed

+36
-50
lines changed

hint.js

Lines changed: 36 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -31,57 +31,43 @@ else {
3131
window.name = 'NG_DEFER_BOOTSTRAP!';
3232
}
3333

34-
function loadHintModules() {
35-
var selectedModules;
36-
var elts;
37-
var includeModules = function(modulesToInclude) {
38-
var selected = modulesToInclude.map(function(name) {
39-
return 'ngHint' + name[0].toUpperCase() + name.substring(1);
40-
});
41-
return selected;
42-
};
43-
var excludeModules = function(modulesToExclude) {
44-
var selected = allModules.filter(function(name) {
45-
var notFound = true;
46-
modulesToExclude.forEach(function(element) {
47-
if(('ngHint' + element[0].toUpperCase() + element.substring(1)) == name) {
48-
notFound = false;
49-
}
50-
});
51-
if(notFound) {
52-
return name;
53-
}
54-
});
55-
return selected;
56-
};
57-
elts = document.querySelectorAll('[ng-hint-include]');
58-
if(elts.length > 0) {
59-
selectedModules = includeModules(elts[0].attributes['ng-hint-include'].value.split(' '));
60-
}
61-
else {
62-
elts = document.querySelectorAll('[ng-hint-exclude]');
63-
if(elts.length > 0) {
64-
selectedModules = excludeModules(elts[0].attributes['ng-hint-exclude'].value.split(' '));
65-
}
66-
else {
67-
elts = document.querySelectorAll('[ng-hint]');
68-
if(elts.length > 0) {
69-
selectedModules = allModules;
70-
}
71-
}
34+
// determine which modules to load and resume bootstrap
35+
document.addEventListener('DOMContentLoaded', function maybeBootstrap() {
36+
37+
// we don't know if angular is loaded
38+
if (!angular.resumeBootstrap) {
39+
return setTimeout(maybeBootstrap, 1);
7240
}
73-
return selectedModules;
74-
};
7541

76-
// determine which modules to load and resume bootstrap
77-
angular.element(document).ready(function() {
78-
if(!isTest) {
79-
var modules = loadHintModules();
80-
if(modules != undefined) {
81-
angular.resumeBootstrap(modules);
82-
}
83-
else {
84-
angular.resumeBootstrap();
85-
}
42+
var modules = [], elt;
43+
44+
if (elt = document.querySelector('[ng-hint-include]')) {
45+
modules = hintModulesFromElement(elt).map(hintModuleName);
46+
} else if (elt = document.querySelector('[ng-hint-exclude]')) {
47+
modules = excludeModules(hintModulesFromElement(elt));
48+
} else if (document.querySelector('[ng-hint]')) {
49+
modules = allModules;
8650
}
51+
52+
angular.resumeBootstrap(modules);
8753
});
54+
55+
56+
function excludeModules(modulesToExclude) {
57+
modulesToExclude = modulesToExclude.map(hintModuleName);
58+
return allModules.filter(function(module) {
59+
return modulesToExclude.indexOf(module) > -1;
60+
});
61+
}
62+
63+
function hintModulesFromElement (elt) {
64+
return elt.attributes['ng-hint-include'].value.split(' ');
65+
}
66+
67+
function hintModuleName(name) {
68+
return 'ngHint' + title(name);
69+
}
70+
71+
function title (str) {
72+
return str[0].toUpperCase() + str.substr(1);
73+
}

0 commit comments

Comments
 (0)