This repository was archived by the owner on Apr 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 27.4k
/
Copy pathangular-bootstrap.js
152 lines (126 loc) · 4.2 KB
/
angular-bootstrap.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
'use strict';
/**
* @license AngularJS
* (c) 2010-2011 AngularJS http://angularjs.org
* License: MIT
*/
(function(window) {
var filename = /^(.*\/)angular-bootstrap.js(#.*)?$/,
scripts = document.getElementsByTagName("SCRIPT"),
serverPath,
match,
globalVars = {};
for(var j = 0; j < scripts.length; j++) {
match = (scripts[j].src || "").match(filename);
if (match) {
serverPath = match[1];
}
}
function key(prop) {
return "ng-clobber_" + prop;
}
window.angularClobberTest = function(file) {
var varKey, prop,
clobbered = [];
for (prop in window) {
varKey = key(prop);
if (prop === 'event') { //skip special variables which keep on changing
continue;
}
else if (!globalVars.hasOwnProperty(varKey)) {
//console.log('new global variable found: ', prop);
try {
globalVars[varKey] = window[prop];
} catch(e) {} //ignore properties that throw exception when accessed (common in FF)
} else if (globalVars[varKey] !== window[prop] && !isActuallyNaN(window[prop]) && prop != 'jqLite') {
clobbered.push(prop);
console.error("Global variable clobbered by script " + file + "! Variable name: " + prop);
globalVars[varKey] = window[prop];
}
}
for (varKey in globalVars) {
prop = varKey.substr(11);
if (clobbered.indexOf(prop) == -1 &&
prop != 'event' &&
prop != 'jqLite' &&
!isActuallyNaN(globalVars[varKey]) &&
globalVars[varKey] !== window[prop]) {
delete globalVars[varKey];
console.warn("Global variable unexpectedly deleted in script " + file + "! " +
"Variable name: " + prop);
}
}
function isActuallyNaN(val) {
return isNaN(val) && (typeof val === 'number');
}
};
function addScripts(){
var prop, i;
// initialize the window property cache
for (prop in window) {
try {
globalVars[key(prop)] = window[prop];
} catch(e) {} //ignore properties that throw exception when accessed (common in FF)
}
// load the js scripts
for (i in Array.prototype.slice.call(arguments, 0)) {
var file = arguments[i];
document.write('<script type="text/javascript" src="' + serverPath + file + '" ' +
'onload="angularClobberTest(\'' + file + '\')"></script>');
}
}
function addCss(file) {
document.write('<link rel="stylesheet" type="text/css" href="' +
serverPath + '../css/' + file + '"/>');
}
addCss('angular.css');
addScripts('Angular.js',
'JSON.js',
'Compiler.js',
'Scope.js',
'Injector.js',
'jqLite.js',
'parser.js',
'Resource.js',
'Browser.js',
'sanitizer.js',
'AngularPublic.js',
// Extension points
'service/cookieStore.js',
'service/cookies.js',
'service/defer.js',
'service/document.js',
'service/exceptionHandler.js',
'service/hover.js',
'service/invalidWidgets.js',
'service/location.js',
'service/log.js',
'service/resource.js',
'service/route.js',
'service/updateView.js',
'service/window.js',
'service/xhr.bulk.js',
'service/xhr.cache.js',
'service/xhr.error.js',
'service/xhr.js',
'apis.js',
'filters.js',
'formatters.js',
'validators.js',
'directives.js',
'markups.js',
'widgets.js');
function onLoadListener(){
// empty the cache to prevent mem leaks
globalVars = {};
var config = angularJsConfig(document);
// angular-ie-compat.js needs to be pregenerated for development with IE<8
config.ie_compat = serverPath + '../build/angular-ie-compat.js';
angularInit(config, document);
}
if (window.addEventListener){
window.addEventListener('load', onLoadListener, false);
} else if (window.attachEvent){
window.attachEvent('onload', onLoadListener);
}
})(window);