2011-07-17 08:05:43 +00:00
|
|
|
'use strict';
|
|
|
|
|
|
2010-01-29 18:15:15 +00:00
|
|
|
/**
|
|
|
|
|
* The MIT License
|
2010-03-26 23:27:18 +00:00
|
|
|
*
|
2010-01-29 18:15:15 +00:00
|
|
|
* Copyright (c) 2010 Adam Abrons and Misko Hevery http://getangular.com
|
2010-03-26 23:27:18 +00:00
|
|
|
*
|
2010-01-29 18:15:15 +00:00
|
|
|
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
|
|
|
* of this software and associated documentation files (the "Software"), to deal
|
|
|
|
|
* in the Software without restriction, including without limitation the rights
|
|
|
|
|
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
|
|
|
* copies of the Software, and to permit persons to whom the Software is
|
|
|
|
|
* furnished to do so, subject to the following conditions:
|
2010-03-26 23:27:18 +00:00
|
|
|
*
|
2010-01-29 18:15:15 +00:00
|
|
|
* The above copyright notice and this permission notice shall be included in
|
|
|
|
|
* all copies or substantial portions of the Software.
|
2010-03-26 23:27:18 +00:00
|
|
|
*
|
2010-01-29 18:15:15 +00:00
|
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
|
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
|
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
|
|
|
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
|
|
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
|
|
|
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
|
|
|
* THE SOFTWARE.
|
|
|
|
|
*/
|
2011-01-06 05:33:35 +00:00
|
|
|
(function(window) {
|
|
|
|
|
|
|
|
|
|
var filename = /^(.*\/)angular-bootstrap.js(#.*)?$/,
|
2010-04-01 21:10:28 +00:00
|
|
|
scripts = document.getElementsByTagName("SCRIPT"),
|
|
|
|
|
serverPath,
|
2011-01-06 05:33:35 +00:00
|
|
|
match,
|
|
|
|
|
globalVars = {};
|
|
|
|
|
|
2010-01-29 18:15:15 +00:00
|
|
|
for(var j = 0; j < scripts.length; j++) {
|
2010-04-01 21:10:28 +00:00
|
|
|
match = (scripts[j].src || "").match(filename);
|
2010-01-29 18:15:15 +00:00
|
|
|
if (match) {
|
|
|
|
|
serverPath = match[1];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2011-01-06 05:33:35 +00:00
|
|
|
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);
|
2011-01-20 22:45:53 +00:00
|
|
|
try {
|
|
|
|
|
globalVars[varKey] = window[prop];
|
|
|
|
|
} catch(e) {} //ignore properties that throw exception when accessed (common in FF)
|
2011-04-12 22:18:08 +00:00
|
|
|
} else if (globalVars[varKey] !== window[prop] && !isActuallyNaN(window[prop]) && prop != 'jqLite') {
|
2011-01-06 05:33:35 +00:00
|
|
|
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' &&
|
2011-04-12 22:18:08 +00:00
|
|
|
prop != 'jqLite' &&
|
2011-01-06 05:33:35 +00:00
|
|
|
!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');
|
|
|
|
|
}
|
2011-02-05 00:41:19 +00:00
|
|
|
};
|
2011-01-06 05:33:35 +00:00
|
|
|
|
|
|
|
|
function addScripts(){
|
|
|
|
|
var prop, i;
|
|
|
|
|
|
|
|
|
|
// initialize the window property cache
|
|
|
|
|
for (prop in window) {
|
2011-01-20 22:45:53 +00:00
|
|
|
try {
|
|
|
|
|
globalVars[key(prop)] = window[prop];
|
|
|
|
|
} catch(e) {} //ignore properties that throw exception when accessed (common in FF)
|
2011-01-06 05:33:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// load the js scripts
|
2011-01-20 22:45:53 +00:00
|
|
|
for (i in Array.prototype.slice.call(arguments, 0)) {
|
2011-01-06 05:33:35 +00:00
|
|
|
file = arguments[i];
|
|
|
|
|
document.write('<script type="text/javascript" src="' + serverPath + file + '" ' +
|
|
|
|
|
'onload="angularClobberTest(\'' + file + '\')"></script>');
|
|
|
|
|
}
|
2010-03-26 23:27:18 +00:00
|
|
|
}
|
2010-01-29 18:15:15 +00:00
|
|
|
|
2010-10-16 04:38:41 +00:00
|
|
|
function addCss(file) {
|
|
|
|
|
document.write('<link rel="stylesheet" type="text/css" href="' +
|
2011-01-06 05:33:35 +00:00
|
|
|
serverPath + '../css/' + file + '"/>');
|
2010-10-16 04:38:41 +00:00
|
|
|
}
|
|
|
|
|
|
2011-01-06 05:33:35 +00:00
|
|
|
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
|
2011-02-15 06:12:45 +00:00
|
|
|
|
|
|
|
|
'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',
|
|
|
|
|
|
2011-01-06 05:33:35 +00:00
|
|
|
'apis.js',
|
|
|
|
|
'filters.js',
|
|
|
|
|
'formatters.js',
|
|
|
|
|
'validators.js',
|
|
|
|
|
'directives.js',
|
|
|
|
|
'markups.js',
|
|
|
|
|
'widgets.js');
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function onLoadListener(){
|
|
|
|
|
// empty the cache to prevent mem leaks
|
|
|
|
|
globalVars = {};
|
2010-10-16 04:38:41 +00:00
|
|
|
|
2011-07-08 02:43:37 +00:00
|
|
|
var config = angularJsConfig(document);
|
2010-10-16 04:38:41 +00:00
|
|
|
|
2011-07-08 02:43:37 +00:00
|
|
|
// 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);
|
2011-01-06 05:33:35 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (window.addEventListener){
|
|
|
|
|
window.addEventListener('load', onLoadListener, false);
|
|
|
|
|
} else if (window.attachEvent){
|
|
|
|
|
window.attachEvent('onload', onLoadListener);
|
|
|
|
|
}
|
2010-03-26 23:27:18 +00:00
|
|
|
|
2011-01-06 05:33:35 +00:00
|
|
|
})(window);
|
2010-01-29 18:15:15 +00:00
|
|
|
|