| 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
 | 'use strict';
/**
 * @license AngularJS
 * (c) 2010-2011 AngularJS http://angularjs.org
 * License: MIT
 */
(function(window, document) {
  var filename = /^(.*\/)angular-bootstrap.js(#.*)?$/,
      scripts = document.getElementsByTagName("SCRIPT"),
      config,
      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');
    }
  };
  window.addScripts = function(scripts) {
    delete window.addScripts;
    delete window.angularFiles;
    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 scripts) {
      var file = scripts[i].replace(/src\//, '');
      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');
  document.write('<script type="text/javascript" src="' + serverPath + '../angularFiles.js' + '" ' +
                 'onload="addScripts(angularFiles.angularSrc)"></script>');
  function onLoadListener() {
    // empty the cache to prevent mem leaks
    globalVars = {};
    bindJQuery();
    publishExternalAPI(window.angular);
    angularInit(document, angular.bootstrap);
  }
  if (window.addEventListener) {
    window.addEventListener('load', onLoadListener, false);
  } else if (window.attachEvent) {
    window.attachEvent('onload', onLoadListener);
  }
})(window, document);
 |