View | Details | Raw Unified | Return to bug 17241
Collapse All | Expand All

(-)a/koha-tmpl/intranet-tmpl/lib/bower.json (-1 / +4 lines)
Lines 6-10 Link Here
6
  "description": "Koha Library Software",
6
  "description": "Koha Library Software",
7
  "main": "",
7
  "main": "",
8
  "license": "GPLv3",
8
  "license": "GPLv3",
9
  "homepage": "http://koha-community.org"
9
  "homepage": "http://koha-community.org",
10
  "dependencies": {
11
    "requirejs": "2.1.8"
12
  }
10
}
13
}
(-)a/koha-tmpl/intranet-tmpl/lib/require.js (-36 lines)
Lines 1-36 Link Here
1
/*
2
 RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
3
 Available via the MIT or new BSD license.
4
 see: http://github.com/jrburke/requirejs for details
5
*/
6
var requirejs,require,define;
7
(function(Z){function H(b){return"[object Function]"===L.call(b)}function I(b){return"[object Array]"===L.call(b)}function y(b,c){if(b){var d;for(d=0;d<b.length&&(!b[d]||!c(b[d],d,b));d+=1);}}function M(b,c){if(b){var d;for(d=b.length-1;-1<d&&(!b[d]||!c(b[d],d,b));d-=1);}}function s(b,c){return ga.call(b,c)}function l(b,c){return s(b,c)&&b[c]}function F(b,c){for(var d in b)if(s(b,d)&&c(b[d],d))break}function Q(b,c,d,h){c&&F(c,function(c,j){if(d||!s(b,j))h&&"string"!==typeof c?(b[j]||(b[j]={}),Q(b[j],
8
c,d,h)):b[j]=c});return b}function u(b,c){return function(){return c.apply(b,arguments)}}function aa(b){throw b;}function ba(b){if(!b)return b;var c=Z;y(b.split("."),function(b){c=c[b]});return c}function A(b,c,d,h){c=Error(c+"\nhttp://requirejs.org/docs/errors.html#"+b);c.requireType=b;c.requireModules=h;d&&(c.originalError=d);return c}function ha(b){function c(a,f,b){var e,m,c,g,d,h,j,i=f&&f.split("/");e=i;var n=k.map,p=n&&n["*"];if(a&&"."===a.charAt(0))if(f){e=l(k.pkgs,f)?i=[f]:i.slice(0,i.length-
9
1);f=a=e.concat(a.split("/"));for(e=0;f[e];e+=1)if(m=f[e],"."===m)f.splice(e,1),e-=1;else if(".."===m)if(1===e&&(".."===f[2]||".."===f[0]))break;else 0<e&&(f.splice(e-1,2),e-=2);e=l(k.pkgs,f=a[0]);a=a.join("/");e&&a===f+"/"+e.main&&(a=f)}else 0===a.indexOf("./")&&(a=a.substring(2));if(b&&n&&(i||p)){f=a.split("/");for(e=f.length;0<e;e-=1){c=f.slice(0,e).join("/");if(i)for(m=i.length;0<m;m-=1)if(b=l(n,i.slice(0,m).join("/")))if(b=l(b,c)){g=b;d=e;break}if(g)break;!h&&(p&&l(p,c))&&(h=l(p,c),j=e)}!g&&
10
h&&(g=h,d=j);g&&(f.splice(0,d,g),a=f.join("/"))}return a}function d(a){z&&y(document.getElementsByTagName("script"),function(f){if(f.getAttribute("data-requiremodule")===a&&f.getAttribute("data-requirecontext")===i.contextName)return f.parentNode.removeChild(f),!0})}function h(a){var f=l(k.paths,a);if(f&&I(f)&&1<f.length)return d(a),f.shift(),i.require.undef(a),i.require([a]),!0}function $(a){var f,b=a?a.indexOf("!"):-1;-1<b&&(f=a.substring(0,b),a=a.substring(b+1,a.length));return[f,a]}function n(a,
11
f,b,e){var m,B,g=null,d=f?f.name:null,h=a,j=!0,k="";a||(j=!1,a="_@r"+(L+=1));a=$(a);g=a[0];a=a[1];g&&(g=c(g,d,e),B=l(r,g));a&&(g?k=B&&B.normalize?B.normalize(a,function(a){return c(a,d,e)}):c(a,d,e):(k=c(a,d,e),a=$(k),g=a[0],k=a[1],b=!0,m=i.nameToUrl(k)));b=g&&!B&&!b?"_unnormalized"+(M+=1):"";return{prefix:g,name:k,parentMap:f,unnormalized:!!b,url:m,originalName:h,isDefine:j,id:(g?g+"!"+k:k)+b}}function q(a){var f=a.id,b=l(p,f);b||(b=p[f]=new i.Module(a));return b}function t(a,f,b){var e=a.id,m=l(p,
12
e);if(s(r,e)&&(!m||m.defineEmitComplete))"defined"===f&&b(r[e]);else if(m=q(a),m.error&&"error"===f)b(m.error);else m.on(f,b)}function v(a,f){var b=a.requireModules,e=!1;if(f)f(a);else if(y(b,function(f){if(f=l(p,f))f.error=a,f.events.error&&(e=!0,f.emit("error",a))}),!e)j.onError(a)}function w(){R.length&&(ia.apply(G,[G.length-1,0].concat(R)),R=[])}function x(a){delete p[a];delete T[a]}function E(a,f,b){var e=a.map.id;a.error?a.emit("error",a.error):(f[e]=!0,y(a.depMaps,function(e,c){var g=e.id,
13
d=l(p,g);d&&(!a.depMatched[c]&&!b[g])&&(l(f,g)?(a.defineDep(c,r[g]),a.check()):E(d,f,b))}),b[e]=!0)}function C(){var a,f,b,e,m=(b=1E3*k.waitSeconds)&&i.startTime+b<(new Date).getTime(),c=[],g=[],j=!1,l=!0;if(!U){U=!0;F(T,function(b){a=b.map;f=a.id;if(b.enabled&&(a.isDefine||g.push(b),!b.error))if(!b.inited&&m)h(f)?j=e=!0:(c.push(f),d(f));else if(!b.inited&&(b.fetched&&a.isDefine)&&(j=!0,!a.prefix))return l=!1});if(m&&c.length)return b=A("timeout","Load timeout for modules: "+c,null,c),b.contextName=
14
i.contextName,v(b);l&&y(g,function(a){E(a,{},{})});if((!m||e)&&j)if((z||da)&&!V)V=setTimeout(function(){V=0;C()},50);U=!1}}function D(a){s(r,a[0])||q(n(a[0],null,!0)).init(a[1],a[2])}function J(a){var a=a.currentTarget||a.srcElement,b=i.onScriptLoad;a.detachEvent&&!W?a.detachEvent("onreadystatechange",b):a.removeEventListener("load",b,!1);b=i.onScriptError;(!a.detachEvent||W)&&a.removeEventListener("error",b,!1);return{node:a,id:a&&a.getAttribute("data-requiremodule")}}function K(){var a;for(w();G.length;){a=
15
G.shift();if(null===a[0])return v(A("mismatch","Mismatched anonymous define() module: "+a[a.length-1]));D(a)}}var U,X,i,N,V,k={waitSeconds:7,baseUrl:"./",paths:{},pkgs:{},shim:{},config:{}},p={},T={},Y={},G=[],r={},S={},L=1,M=1;N={require:function(a){return a.require?a.require:a.require=i.makeRequire(a.map)},exports:function(a){a.usingExports=!0;if(a.map.isDefine)return a.exports?a.exports:a.exports=r[a.map.id]={}},module:function(a){return a.module?a.module:a.module={id:a.map.id,uri:a.map.url,config:function(){var b=
16
l(k.pkgs,a.map.id);return(b?l(k.config,a.map.id+"/"+b.main):l(k.config,a.map.id))||{}},exports:r[a.map.id]}}};X=function(a){this.events=l(Y,a.id)||{};this.map=a;this.shim=l(k.shim,a.id);this.depExports=[];this.depMaps=[];this.depMatched=[];this.pluginMaps={};this.depCount=0};X.prototype={init:function(a,b,c,e){e=e||{};if(!this.inited){this.factory=b;if(c)this.on("error",c);else this.events.error&&(c=u(this,function(a){this.emit("error",a)}));this.depMaps=a&&a.slice(0);this.errback=c;this.inited=!0;
17
this.ignore=e.ignore;e.enabled||this.enabled?this.enable():this.check()}},defineDep:function(a,b){this.depMatched[a]||(this.depMatched[a]=!0,this.depCount-=1,this.depExports[a]=b)},fetch:function(){if(!this.fetched){this.fetched=!0;i.startTime=(new Date).getTime();var a=this.map;if(this.shim)i.makeRequire(this.map,{enableBuildCallback:!0})(this.shim.deps||[],u(this,function(){return a.prefix?this.callPlugin():this.load()}));else return a.prefix?this.callPlugin():this.load()}},load:function(){var a=
18
this.map.url;S[a]||(S[a]=!0,i.load(this.map.id,a))},check:function(){if(this.enabled&&!this.enabling){var a,b,c=this.map.id;b=this.depExports;var e=this.exports,m=this.factory;if(this.inited)if(this.error)this.emit("error",this.error);else{if(!this.defining){this.defining=!0;if(1>this.depCount&&!this.defined){if(H(m)){if(this.events.error&&this.map.isDefine||j.onError!==aa)try{e=i.execCb(c,m,b,e)}catch(d){a=d}else e=i.execCb(c,m,b,e);this.map.isDefine&&((b=this.module)&&void 0!==b.exports&&b.exports!==
19
this.exports?e=b.exports:void 0===e&&this.usingExports&&(e=this.exports));if(a)return a.requireMap=this.map,a.requireModules=this.map.isDefine?[this.map.id]:null,a.requireType=this.map.isDefine?"define":"require",v(this.error=a)}else e=m;this.exports=e;if(this.map.isDefine&&!this.ignore&&(r[c]=e,j.onResourceLoad))j.onResourceLoad(i,this.map,this.depMaps);x(c);this.defined=!0}this.defining=!1;this.defined&&!this.defineEmitted&&(this.defineEmitted=!0,this.emit("defined",this.exports),this.defineEmitComplete=
20
!0)}}else this.fetch()}},callPlugin:function(){var a=this.map,b=a.id,d=n(a.prefix);this.depMaps.push(d);t(d,"defined",u(this,function(e){var m,d;d=this.map.name;var g=this.map.parentMap?this.map.parentMap.name:null,h=i.makeRequire(a.parentMap,{enableBuildCallback:!0});if(this.map.unnormalized){if(e.normalize&&(d=e.normalize(d,function(a){return c(a,g,!0)})||""),e=n(a.prefix+"!"+d,this.map.parentMap),t(e,"defined",u(this,function(a){this.init([],function(){return a},null,{enabled:!0,ignore:!0})})),
21
d=l(p,e.id)){this.depMaps.push(e);if(this.events.error)d.on("error",u(this,function(a){this.emit("error",a)}));d.enable()}}else m=u(this,function(a){this.init([],function(){return a},null,{enabled:!0})}),m.error=u(this,function(a){this.inited=!0;this.error=a;a.requireModules=[b];F(p,function(a){0===a.map.id.indexOf(b+"_unnormalized")&&x(a.map.id)});v(a)}),m.fromText=u(this,function(e,c){var d=a.name,g=n(d),B=O;c&&(e=c);B&&(O=!1);q(g);s(k.config,b)&&(k.config[d]=k.config[b]);try{j.exec(e)}catch(ca){return v(A("fromtexteval",
22
"fromText eval for "+b+" failed: "+ca,ca,[b]))}B&&(O=!0);this.depMaps.push(g);i.completeLoad(d);h([d],m)}),e.load(a.name,h,m,k)}));i.enable(d,this);this.pluginMaps[d.id]=d},enable:function(){T[this.map.id]=this;this.enabling=this.enabled=!0;y(this.depMaps,u(this,function(a,b){var c,e;if("string"===typeof a){a=n(a,this.map.isDefine?this.map:this.map.parentMap,!1,!this.skipMap);this.depMaps[b]=a;if(c=l(N,a.id)){this.depExports[b]=c(this);return}this.depCount+=1;t(a,"defined",u(this,function(a){this.defineDep(b,
23
a);this.check()}));this.errback&&t(a,"error",u(this,this.errback))}c=a.id;e=p[c];!s(N,c)&&(e&&!e.enabled)&&i.enable(a,this)}));F(this.pluginMaps,u(this,function(a){var b=l(p,a.id);b&&!b.enabled&&i.enable(a,this)}));this.enabling=!1;this.check()},on:function(a,b){var c=this.events[a];c||(c=this.events[a]=[]);c.push(b)},emit:function(a,b){y(this.events[a],function(a){a(b)});"error"===a&&delete this.events[a]}};i={config:k,contextName:b,registry:p,defined:r,urlFetched:S,defQueue:G,Module:X,makeModuleMap:n,
24
nextTick:j.nextTick,onError:v,configure:function(a){a.baseUrl&&"/"!==a.baseUrl.charAt(a.baseUrl.length-1)&&(a.baseUrl+="/");var b=k.pkgs,c=k.shim,e={paths:!0,config:!0,map:!0};F(a,function(a,b){e[b]?"map"===b?(k.map||(k.map={}),Q(k[b],a,!0,!0)):Q(k[b],a,!0):k[b]=a});a.shim&&(F(a.shim,function(a,b){I(a)&&(a={deps:a});if((a.exports||a.init)&&!a.exportsFn)a.exportsFn=i.makeShimExports(a);c[b]=a}),k.shim=c);a.packages&&(y(a.packages,function(a){a="string"===typeof a?{name:a}:a;b[a.name]={name:a.name,
25
location:a.location||a.name,main:(a.main||"main").replace(ja,"").replace(ea,"")}}),k.pkgs=b);F(p,function(a,b){!a.inited&&!a.map.unnormalized&&(a.map=n(b))});if(a.deps||a.callback)i.require(a.deps||[],a.callback)},makeShimExports:function(a){return function(){var b;a.init&&(b=a.init.apply(Z,arguments));return b||a.exports&&ba(a.exports)}},makeRequire:function(a,f){function d(e,c,h){var g,k;f.enableBuildCallback&&(c&&H(c))&&(c.__requireJsBuild=!0);if("string"===typeof e){if(H(c))return v(A("requireargs",
26
"Invalid require call"),h);if(a&&s(N,e))return N[e](p[a.id]);if(j.get)return j.get(i,e,a,d);g=n(e,a,!1,!0);g=g.id;return!s(r,g)?v(A("notloaded",'Module name "'+g+'" has not been loaded yet for context: '+b+(a?"":". Use require([])"))):r[g]}K();i.nextTick(function(){K();k=q(n(null,a));k.skipMap=f.skipMap;k.init(e,c,h,{enabled:!0});C()});return d}f=f||{};Q(d,{isBrowser:z,toUrl:function(b){var d,f=b.lastIndexOf("."),g=b.split("/")[0];if(-1!==f&&(!("."===g||".."===g)||1<f))d=b.substring(f,b.length),b=
27
b.substring(0,f);return i.nameToUrl(c(b,a&&a.id,!0),d,!0)},defined:function(b){return s(r,n(b,a,!1,!0).id)},specified:function(b){b=n(b,a,!1,!0).id;return s(r,b)||s(p,b)}});a||(d.undef=function(b){w();var c=n(b,a,!0),f=l(p,b);delete r[b];delete S[c.url];delete Y[b];f&&(f.events.defined&&(Y[b]=f.events),x(b))});return d},enable:function(a){l(p,a.id)&&q(a).enable()},completeLoad:function(a){var b,c,e=l(k.shim,a)||{},d=e.exports;for(w();G.length;){c=G.shift();if(null===c[0]){c[0]=a;if(b)break;b=!0}else c[0]===
28
a&&(b=!0);D(c)}c=l(p,a);if(!b&&!s(r,a)&&c&&!c.inited){if(k.enforceDefine&&(!d||!ba(d)))return h(a)?void 0:v(A("nodefine","No define call for "+a,null,[a]));D([a,e.deps||[],e.exportsFn])}C()},nameToUrl:function(a,b,c){var e,d,h,g,i,n;if(j.jsExtRegExp.test(a))g=a+(b||"");else{e=k.paths;d=k.pkgs;g=a.split("/");for(i=g.length;0<i;i-=1)if(n=g.slice(0,i).join("/"),h=l(d,n),n=l(e,n)){I(n)&&(n=n[0]);g.splice(0,i,n);break}else if(h){a=a===h.name?h.location+"/"+h.main:h.location;g.splice(0,i,a);break}g=g.join("/");
29
g+=b||(/\?/.test(g)||c?"":".js");g=("/"===g.charAt(0)||g.match(/^[\w\+\.\-]+:/)?"":k.baseUrl)+g}return k.urlArgs?g+((-1===g.indexOf("?")?"?":"&")+k.urlArgs):g},load:function(a,b){j.load(i,a,b)},execCb:function(a,b,c,e){return b.apply(e,c)},onScriptLoad:function(a){if("load"===a.type||ka.test((a.currentTarget||a.srcElement).readyState))P=null,a=J(a),i.completeLoad(a.id)},onScriptError:function(a){var b=J(a);if(!h(b.id))return v(A("scripterror","Script error for: "+b.id,a,[b.id]))}};i.require=i.makeRequire();
30
return i}var j,w,x,C,J,D,P,K,q,fa,la=/(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,ma=/[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,ea=/\.js$/,ja=/^\.\//;w=Object.prototype;var L=w.toString,ga=w.hasOwnProperty,ia=Array.prototype.splice,z=!!("undefined"!==typeof window&&navigator&&window.document),da=!z&&"undefined"!==typeof importScripts,ka=z&&"PLAYSTATION 3"===navigator.platform?/^complete$/:/^(complete|loaded)$/,W="undefined"!==typeof opera&&"[object Opera]"===opera.toString(),E={},t={},R=[],O=
31
!1;if("undefined"===typeof define){if("undefined"!==typeof requirejs){if(H(requirejs))return;t=requirejs;requirejs=void 0}"undefined"!==typeof require&&!H(require)&&(t=require,require=void 0);j=requirejs=function(b,c,d,h){var q,n="_";!I(b)&&"string"!==typeof b&&(q=b,I(c)?(b=c,c=d,d=h):b=[]);q&&q.context&&(n=q.context);(h=l(E,n))||(h=E[n]=j.s.newContext(n));q&&h.configure(q);return h.require(b,c,d)};j.config=function(b){return j(b)};j.nextTick="undefined"!==typeof setTimeout?function(b){setTimeout(b,
32
4)}:function(b){b()};require||(require=j);j.version="2.1.8";j.jsExtRegExp=/^\/|:|\?|\.js$/;j.isBrowser=z;w=j.s={contexts:E,newContext:ha};j({});y(["toUrl","undef","defined","specified"],function(b){j[b]=function(){var c=E._;return c.require[b].apply(c,arguments)}});if(z&&(x=w.head=document.getElementsByTagName("head")[0],C=document.getElementsByTagName("base")[0]))x=w.head=C.parentNode;j.onError=aa;j.createNode=function(b){var c=b.xhtml?document.createElementNS("http://www.w3.org/1999/xhtml","html:script"):
33
document.createElement("script");c.type=b.scriptType||"text/javascript";c.charset="utf-8";c.async=!0;return c};j.load=function(b,c,d){var h=b&&b.config||{};if(z)return h=j.createNode(h,c,d),h.setAttribute("data-requirecontext",b.contextName),h.setAttribute("data-requiremodule",c),h.attachEvent&&!(h.attachEvent.toString&&0>h.attachEvent.toString().indexOf("[native code"))&&!W?(O=!0,h.attachEvent("onreadystatechange",b.onScriptLoad)):(h.addEventListener("load",b.onScriptLoad,!1),h.addEventListener("error",
34
b.onScriptError,!1)),h.src=d,K=h,C?x.insertBefore(h,C):x.appendChild(h),K=null,h;if(da)try{importScripts(d),b.completeLoad(c)}catch(l){b.onError(A("importscripts","importScripts failed for "+c+" at "+d,l,[c]))}};z&&M(document.getElementsByTagName("script"),function(b){x||(x=b.parentNode);if(J=b.getAttribute("data-main"))return q=J,t.baseUrl||(D=q.split("/"),q=D.pop(),fa=D.length?D.join("/")+"/":"./",t.baseUrl=fa),q=q.replace(ea,""),j.jsExtRegExp.test(q)&&(q=J),t.deps=t.deps?t.deps.concat(q):[q],!0});
35
define=function(b,c,d){var h,j;"string"!==typeof b&&(d=c,c=b,b=null);I(c)||(d=c,c=null);!c&&H(d)&&(c=[],d.length&&(d.toString().replace(la,"").replace(ma,function(b,d){c.push(d)}),c=(1===d.length?["require"]:["require","exports","module"]).concat(c)));if(O){if(!(h=K))P&&"interactive"===P.readyState||M(document.getElementsByTagName("script"),function(b){if("interactive"===b.readyState)return P=b}),h=P;h&&(b||(b=h.getAttribute("data-requiremodule")),j=E[h.getAttribute("data-requirecontext")])}(j?j.defQueue:
36
R).push([b,c,d])};define.amd={jQuery:!0};j.exec=function(b){return eval(b)};j(t)}})(this);
(-)a/koha-tmpl/intranet-tmpl/lib/requirejs/.bower.json (+24 lines)
Line 0 Link Here
1
{
2
  "name": "requirejs",
3
  "version": "2.1.8",
4
  "homepage": "http://requirejs.org",
5
  "authors": [
6
    "jrburke.com"
7
  ],
8
  "description": "A file and module loader for JavaScript",
9
  "main": "require.js",
10
  "keywords": [
11
    "AMD"
12
  ],
13
  "license": "new BSD, and MIT",
14
  "_release": "2.1.8",
15
  "_resolution": {
16
    "type": "version",
17
    "tag": "2.1.8",
18
    "commit": "9349562f9efe3e53f1379578358c46d6423bddac"
19
  },
20
  "_source": "https://github.com/jrburke/requirejs-bower.git",
21
  "_target": "2.1.8",
22
  "_originalSource": "requirejs",
23
  "_direct": true
24
}
(-)a/koha-tmpl/intranet-tmpl/lib/requirejs/README.md (+3 lines)
Line 0 Link Here
1
# requirejs-bower
2
3
Bower packaging for [RequireJS](http://requirejs.org).
(-)a/koha-tmpl/intranet-tmpl/lib/requirejs/bower.json (+14 lines)
Line 0 Link Here
1
{
2
  "name": "requirejs",
3
  "version": "2.1.8",
4
  "homepage": "http://requirejs.org",
5
  "authors": [
6
    "jrburke.com"
7
  ],
8
  "description": "A file and module loader for JavaScript",
9
  "main": "require.js",
10
  "keywords": [
11
    "AMD"
12
  ],
13
  "license": "new BSD, and MIT"
14
}
(-)a/koha-tmpl/intranet-tmpl/lib/requirejs/require.js (+2053 lines)
Line 0 Link Here
1
/** vim: et:ts=4:sw=4:sts=4
2
 * @license RequireJS 2.1.8 Copyright (c) 2010-2012, The Dojo Foundation All Rights Reserved.
3
 * Available via the MIT or new BSD license.
4
 * see: http://github.com/jrburke/requirejs for details
5
 */
6
//Not using strict: uneven strict support in browsers, #392, and causes
7
//problems with requirejs.exec()/transpiler plugins that may not be strict.
8
/*jslint regexp: true, nomen: true, sloppy: true */
9
/*global window, navigator, document, importScripts, setTimeout, opera */
10
11
var requirejs, require, define;
12
(function (global) {
13
    var req, s, head, baseElement, dataMain, src,
14
        interactiveScript, currentlyAddingScript, mainScript, subPath,
15
        version = '2.1.8',
16
        commentRegExp = /(\/\*([\s\S]*?)\*\/|([^:]|^)\/\/(.*)$)/mg,
17
        cjsRequireRegExp = /[^.]\s*require\s*\(\s*["']([^'"\s]+)["']\s*\)/g,
18
        jsSuffixRegExp = /\.js$/,
19
        currDirRegExp = /^\.\//,
20
        op = Object.prototype,
21
        ostring = op.toString,
22
        hasOwn = op.hasOwnProperty,
23
        ap = Array.prototype,
24
        apsp = ap.splice,
25
        isBrowser = !!(typeof window !== 'undefined' && navigator && window.document),
26
        isWebWorker = !isBrowser && typeof importScripts !== 'undefined',
27
        //PS3 indicates loaded and complete, but need to wait for complete
28
        //specifically. Sequence is 'loading', 'loaded', execution,
29
        // then 'complete'. The UA check is unfortunate, but not sure how
30
        //to feature test w/o causing perf issues.
31
        readyRegExp = isBrowser && navigator.platform === 'PLAYSTATION 3' ?
32
                      /^complete$/ : /^(complete|loaded)$/,
33
        defContextName = '_',
34
        //Oh the tragedy, detecting opera. See the usage of isOpera for reason.
35
        isOpera = typeof opera !== 'undefined' && opera.toString() === '[object Opera]',
36
        contexts = {},
37
        cfg = {},
38
        globalDefQueue = [],
39
        useInteractive = false;
40
41
    function isFunction(it) {
42
        return ostring.call(it) === '[object Function]';
43
    }
44
45
    function isArray(it) {
46
        return ostring.call(it) === '[object Array]';
47
    }
48
49
    /**
50
     * Helper function for iterating over an array. If the func returns
51
     * a true value, it will break out of the loop.
52
     */
53
    function each(ary, func) {
54
        if (ary) {
55
            var i;
56
            for (i = 0; i < ary.length; i += 1) {
57
                if (ary[i] && func(ary[i], i, ary)) {
58
                    break;
59
                }
60
            }
61
        }
62
    }
63
64
    /**
65
     * Helper function for iterating over an array backwards. If the func
66
     * returns a true value, it will break out of the loop.
67
     */
68
    function eachReverse(ary, func) {
69
        if (ary) {
70
            var i;
71
            for (i = ary.length - 1; i > -1; i -= 1) {
72
                if (ary[i] && func(ary[i], i, ary)) {
73
                    break;
74
                }
75
            }
76
        }
77
    }
78
79
    function hasProp(obj, prop) {
80
        return hasOwn.call(obj, prop);
81
    }
82
83
    function getOwn(obj, prop) {
84
        return hasProp(obj, prop) && obj[prop];
85
    }
86
87
    /**
88
     * Cycles over properties in an object and calls a function for each
89
     * property value. If the function returns a truthy value, then the
90
     * iteration is stopped.
91
     */
92
    function eachProp(obj, func) {
93
        var prop;
94
        for (prop in obj) {
95
            if (hasProp(obj, prop)) {
96
                if (func(obj[prop], prop)) {
97
                    break;
98
                }
99
            }
100
        }
101
    }
102
103
    /**
104
     * Simple function to mix in properties from source into target,
105
     * but only if target does not already have a property of the same name.
106
     */
107
    function mixin(target, source, force, deepStringMixin) {
108
        if (source) {
109
            eachProp(source, function (value, prop) {
110
                if (force || !hasProp(target, prop)) {
111
                    if (deepStringMixin && typeof value !== 'string') {
112
                        if (!target[prop]) {
113
                            target[prop] = {};
114
                        }
115
                        mixin(target[prop], value, force, deepStringMixin);
116
                    } else {
117
                        target[prop] = value;
118
                    }
119
                }
120
            });
121
        }
122
        return target;
123
    }
124
125
    //Similar to Function.prototype.bind, but the 'this' object is specified
126
    //first, since it is easier to read/figure out what 'this' will be.
127
    function bind(obj, fn) {
128
        return function () {
129
            return fn.apply(obj, arguments);
130
        };
131
    }
132
133
    function scripts() {
134
        return document.getElementsByTagName('script');
135
    }
136
137
    function defaultOnError(err) {
138
        throw err;
139
    }
140
141
    //Allow getting a global that expressed in
142
    //dot notation, like 'a.b.c'.
143
    function getGlobal(value) {
144
        if (!value) {
145
            return value;
146
        }
147
        var g = global;
148
        each(value.split('.'), function (part) {
149
            g = g[part];
150
        });
151
        return g;
152
    }
153
154
    /**
155
     * Constructs an error with a pointer to an URL with more information.
156
     * @param {String} id the error ID that maps to an ID on a web page.
157
     * @param {String} message human readable error.
158
     * @param {Error} [err] the original error, if there is one.
159
     *
160
     * @returns {Error}
161
     */
162
    function makeError(id, msg, err, requireModules) {
163
        var e = new Error(msg + '\nhttp://requirejs.org/docs/errors.html#' + id);
164
        e.requireType = id;
165
        e.requireModules = requireModules;
166
        if (err) {
167
            e.originalError = err;
168
        }
169
        return e;
170
    }
171
172
    if (typeof define !== 'undefined') {
173
        //If a define is already in play via another AMD loader,
174
        //do not overwrite.
175
        return;
176
    }
177
178
    if (typeof requirejs !== 'undefined') {
179
        if (isFunction(requirejs)) {
180
            //Do not overwrite and existing requirejs instance.
181
            return;
182
        }
183
        cfg = requirejs;
184
        requirejs = undefined;
185
    }
186
187
    //Allow for a require config object
188
    if (typeof require !== 'undefined' && !isFunction(require)) {
189
        //assume it is a config object.
190
        cfg = require;
191
        require = undefined;
192
    }
193
194
    function newContext(contextName) {
195
        var inCheckLoaded, Module, context, handlers,
196
            checkLoadedTimeoutId,
197
            config = {
198
                //Defaults. Do not set a default for map
199
                //config to speed up normalize(), which
200
                //will run faster if there is no default.
201
                waitSeconds: 7,
202
                baseUrl: './',
203
                paths: {},
204
                pkgs: {},
205
                shim: {},
206
                config: {}
207
            },
208
            registry = {},
209
            //registry of just enabled modules, to speed
210
            //cycle breaking code when lots of modules
211
            //are registered, but not activated.
212
            enabledRegistry = {},
213
            undefEvents = {},
214
            defQueue = [],
215
            defined = {},
216
            urlFetched = {},
217
            requireCounter = 1,
218
            unnormalizedCounter = 1;
219
220
        /**
221
         * Trims the . and .. from an array of path segments.
222
         * It will keep a leading path segment if a .. will become
223
         * the first path segment, to help with module name lookups,
224
         * which act like paths, but can be remapped. But the end result,
225
         * all paths that use this function should look normalized.
226
         * NOTE: this method MODIFIES the input array.
227
         * @param {Array} ary the array of path segments.
228
         */
229
        function trimDots(ary) {
230
            var i, part;
231
            for (i = 0; ary[i]; i += 1) {
232
                part = ary[i];
233
                if (part === '.') {
234
                    ary.splice(i, 1);
235
                    i -= 1;
236
                } else if (part === '..') {
237
                    if (i === 1 && (ary[2] === '..' || ary[0] === '..')) {
238
                        //End of the line. Keep at least one non-dot
239
                        //path segment at the front so it can be mapped
240
                        //correctly to disk. Otherwise, there is likely
241
                        //no path mapping for a path starting with '..'.
242
                        //This can still fail, but catches the most reasonable
243
                        //uses of ..
244
                        break;
245
                    } else if (i > 0) {
246
                        ary.splice(i - 1, 2);
247
                        i -= 2;
248
                    }
249
                }
250
            }
251
        }
252
253
        /**
254
         * Given a relative module name, like ./something, normalize it to
255
         * a real name that can be mapped to a path.
256
         * @param {String} name the relative name
257
         * @param {String} baseName a real name that the name arg is relative
258
         * to.
259
         * @param {Boolean} applyMap apply the map config to the value. Should
260
         * only be done if this normalization is for a dependency ID.
261
         * @returns {String} normalized name
262
         */
263
        function normalize(name, baseName, applyMap) {
264
            var pkgName, pkgConfig, mapValue, nameParts, i, j, nameSegment,
265
                foundMap, foundI, foundStarMap, starI,
266
                baseParts = baseName && baseName.split('/'),
267
                normalizedBaseParts = baseParts,
268
                map = config.map,
269
                starMap = map && map['*'];
270
271
            //Adjust any relative paths.
272
            if (name && name.charAt(0) === '.') {
273
                //If have a base name, try to normalize against it,
274
                //otherwise, assume it is a top-level require that will
275
                //be relative to baseUrl in the end.
276
                if (baseName) {
277
                    if (getOwn(config.pkgs, baseName)) {
278
                        //If the baseName is a package name, then just treat it as one
279
                        //name to concat the name with.
280
                        normalizedBaseParts = baseParts = [baseName];
281
                    } else {
282
                        //Convert baseName to array, and lop off the last part,
283
                        //so that . matches that 'directory' and not name of the baseName's
284
                        //module. For instance, baseName of 'one/two/three', maps to
285
                        //'one/two/three.js', but we want the directory, 'one/two' for
286
                        //this normalization.
287
                        normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);
288
                    }
289
290
                    name = normalizedBaseParts.concat(name.split('/'));
291
                    trimDots(name);
292
293
                    //Some use of packages may use a . path to reference the
294
                    //'main' module name, so normalize for that.
295
                    pkgConfig = getOwn(config.pkgs, (pkgName = name[0]));
296
                    name = name.join('/');
297
                    if (pkgConfig && name === pkgName + '/' + pkgConfig.main) {
298
                        name = pkgName;
299
                    }
300
                } else if (name.indexOf('./') === 0) {
301
                    // No baseName, so this is ID is resolved relative
302
                    // to baseUrl, pull off the leading dot.
303
                    name = name.substring(2);
304
                }
305
            }
306
307
            //Apply map config if available.
308
            if (applyMap && map && (baseParts || starMap)) {
309
                nameParts = name.split('/');
310
311
                for (i = nameParts.length; i > 0; i -= 1) {
312
                    nameSegment = nameParts.slice(0, i).join('/');
313
314
                    if (baseParts) {
315
                        //Find the longest baseName segment match in the config.
316
                        //So, do joins on the biggest to smallest lengths of baseParts.
317
                        for (j = baseParts.length; j > 0; j -= 1) {
318
                            mapValue = getOwn(map, baseParts.slice(0, j).join('/'));
319
320
                            //baseName segment has config, find if it has one for
321
                            //this name.
322
                            if (mapValue) {
323
                                mapValue = getOwn(mapValue, nameSegment);
324
                                if (mapValue) {
325
                                    //Match, update name to the new value.
326
                                    foundMap = mapValue;
327
                                    foundI = i;
328
                                    break;
329
                                }
330
                            }
331
                        }
332
                    }
333
334
                    if (foundMap) {
335
                        break;
336
                    }
337
338
                    //Check for a star map match, but just hold on to it,
339
                    //if there is a shorter segment match later in a matching
340
                    //config, then favor over this star map.
341
                    if (!foundStarMap && starMap && getOwn(starMap, nameSegment)) {
342
                        foundStarMap = getOwn(starMap, nameSegment);
343
                        starI = i;
344
                    }
345
                }
346
347
                if (!foundMap && foundStarMap) {
348
                    foundMap = foundStarMap;
349
                    foundI = starI;
350
                }
351
352
                if (foundMap) {
353
                    nameParts.splice(0, foundI, foundMap);
354
                    name = nameParts.join('/');
355
                }
356
            }
357
358
            return name;
359
        }
360
361
        function removeScript(name) {
362
            if (isBrowser) {
363
                each(scripts(), function (scriptNode) {
364
                    if (scriptNode.getAttribute('data-requiremodule') === name &&
365
                            scriptNode.getAttribute('data-requirecontext') === context.contextName) {
366
                        scriptNode.parentNode.removeChild(scriptNode);
367
                        return true;
368
                    }
369
                });
370
            }
371
        }
372
373
        function hasPathFallback(id) {
374
            var pathConfig = getOwn(config.paths, id);
375
            if (pathConfig && isArray(pathConfig) && pathConfig.length > 1) {
376
                removeScript(id);
377
                //Pop off the first array value, since it failed, and
378
                //retry
379
                pathConfig.shift();
380
                context.require.undef(id);
381
                context.require([id]);
382
                return true;
383
            }
384
        }
385
386
        //Turns a plugin!resource to [plugin, resource]
387
        //with the plugin being undefined if the name
388
        //did not have a plugin prefix.
389
        function splitPrefix(name) {
390
            var prefix,
391
                index = name ? name.indexOf('!') : -1;
392
            if (index > -1) {
393
                prefix = name.substring(0, index);
394
                name = name.substring(index + 1, name.length);
395
            }
396
            return [prefix, name];
397
        }
398
399
        /**
400
         * Creates a module mapping that includes plugin prefix, module
401
         * name, and path. If parentModuleMap is provided it will
402
         * also normalize the name via require.normalize()
403
         *
404
         * @param {String} name the module name
405
         * @param {String} [parentModuleMap] parent module map
406
         * for the module name, used to resolve relative names.
407
         * @param {Boolean} isNormalized: is the ID already normalized.
408
         * This is true if this call is done for a define() module ID.
409
         * @param {Boolean} applyMap: apply the map config to the ID.
410
         * Should only be true if this map is for a dependency.
411
         *
412
         * @returns {Object}
413
         */
414
        function makeModuleMap(name, parentModuleMap, isNormalized, applyMap) {
415
            var url, pluginModule, suffix, nameParts,
416
                prefix = null,
417
                parentName = parentModuleMap ? parentModuleMap.name : null,
418
                originalName = name,
419
                isDefine = true,
420
                normalizedName = '';
421
422
            //If no name, then it means it is a require call, generate an
423
            //internal name.
424
            if (!name) {
425
                isDefine = false;
426
                name = '_@r' + (requireCounter += 1);
427
            }
428
429
            nameParts = splitPrefix(name);
430
            prefix = nameParts[0];
431
            name = nameParts[1];
432
433
            if (prefix) {
434
                prefix = normalize(prefix, parentName, applyMap);
435
                pluginModule = getOwn(defined, prefix);
436
            }
437
438
            //Account for relative paths if there is a base name.
439
            if (name) {
440
                if (prefix) {
441
                    if (pluginModule && pluginModule.normalize) {
442
                        //Plugin is loaded, use its normalize method.
443
                        normalizedName = pluginModule.normalize(name, function (name) {
444
                            return normalize(name, parentName, applyMap);
445
                        });
446
                    } else {
447
                        normalizedName = normalize(name, parentName, applyMap);
448
                    }
449
                } else {
450
                    //A regular module.
451
                    normalizedName = normalize(name, parentName, applyMap);
452
453
                    //Normalized name may be a plugin ID due to map config
454
                    //application in normalize. The map config values must
455
                    //already be normalized, so do not need to redo that part.
456
                    nameParts = splitPrefix(normalizedName);
457
                    prefix = nameParts[0];
458
                    normalizedName = nameParts[1];
459
                    isNormalized = true;
460
461
                    url = context.nameToUrl(normalizedName);
462
                }
463
            }
464
465
            //If the id is a plugin id that cannot be determined if it needs
466
            //normalization, stamp it with a unique ID so two matching relative
467
            //ids that may conflict can be separate.
468
            suffix = prefix && !pluginModule && !isNormalized ?
469
                     '_unnormalized' + (unnormalizedCounter += 1) :
470
                     '';
471
472
            return {
473
                prefix: prefix,
474
                name: normalizedName,
475
                parentMap: parentModuleMap,
476
                unnormalized: !!suffix,
477
                url: url,
478
                originalName: originalName,
479
                isDefine: isDefine,
480
                id: (prefix ?
481
                        prefix + '!' + normalizedName :
482
                        normalizedName) + suffix
483
            };
484
        }
485
486
        function getModule(depMap) {
487
            var id = depMap.id,
488
                mod = getOwn(registry, id);
489
490
            if (!mod) {
491
                mod = registry[id] = new context.Module(depMap);
492
            }
493
494
            return mod;
495
        }
496
497
        function on(depMap, name, fn) {
498
            var id = depMap.id,
499
                mod = getOwn(registry, id);
500
501
            if (hasProp(defined, id) &&
502
                    (!mod || mod.defineEmitComplete)) {
503
                if (name === 'defined') {
504
                    fn(defined[id]);
505
                }
506
            } else {
507
                mod = getModule(depMap);
508
                if (mod.error && name === 'error') {
509
                    fn(mod.error);
510
                } else {
511
                    mod.on(name, fn);
512
                }
513
            }
514
        }
515
516
        function onError(err, errback) {
517
            var ids = err.requireModules,
518
                notified = false;
519
520
            if (errback) {
521
                errback(err);
522
            } else {
523
                each(ids, function (id) {
524
                    var mod = getOwn(registry, id);
525
                    if (mod) {
526
                        //Set error on module, so it skips timeout checks.
527
                        mod.error = err;
528
                        if (mod.events.error) {
529
                            notified = true;
530
                            mod.emit('error', err);
531
                        }
532
                    }
533
                });
534
535
                if (!notified) {
536
                    req.onError(err);
537
                }
538
            }
539
        }
540
541
        /**
542
         * Internal method to transfer globalQueue items to this context's
543
         * defQueue.
544
         */
545
        function takeGlobalQueue() {
546
            //Push all the globalDefQueue items into the context's defQueue
547
            if (globalDefQueue.length) {
548
                //Array splice in the values since the context code has a
549
                //local var ref to defQueue, so cannot just reassign the one
550
                //on context.
551
                apsp.apply(defQueue,
552
                           [defQueue.length - 1, 0].concat(globalDefQueue));
553
                globalDefQueue = [];
554
            }
555
        }
556
557
        handlers = {
558
            'require': function (mod) {
559
                if (mod.require) {
560
                    return mod.require;
561
                } else {
562
                    return (mod.require = context.makeRequire(mod.map));
563
                }
564
            },
565
            'exports': function (mod) {
566
                mod.usingExports = true;
567
                if (mod.map.isDefine) {
568
                    if (mod.exports) {
569
                        return mod.exports;
570
                    } else {
571
                        return (mod.exports = defined[mod.map.id] = {});
572
                    }
573
                }
574
            },
575
            'module': function (mod) {
576
                if (mod.module) {
577
                    return mod.module;
578
                } else {
579
                    return (mod.module = {
580
                        id: mod.map.id,
581
                        uri: mod.map.url,
582
                        config: function () {
583
                            var c,
584
                                pkg = getOwn(config.pkgs, mod.map.id);
585
                            // For packages, only support config targeted
586
                            // at the main module.
587
                            c = pkg ? getOwn(config.config, mod.map.id + '/' + pkg.main) :
588
                                      getOwn(config.config, mod.map.id);
589
                            return  c || {};
590
                        },
591
                        exports: defined[mod.map.id]
592
                    });
593
                }
594
            }
595
        };
596
597
        function cleanRegistry(id) {
598
            //Clean up machinery used for waiting modules.
599
            delete registry[id];
600
            delete enabledRegistry[id];
601
        }
602
603
        function breakCycle(mod, traced, processed) {
604
            var id = mod.map.id;
605
606
            if (mod.error) {
607
                mod.emit('error', mod.error);
608
            } else {
609
                traced[id] = true;
610
                each(mod.depMaps, function (depMap, i) {
611
                    var depId = depMap.id,
612
                        dep = getOwn(registry, depId);
613
614
                    //Only force things that have not completed
615
                    //being defined, so still in the registry,
616
                    //and only if it has not been matched up
617
                    //in the module already.
618
                    if (dep && !mod.depMatched[i] && !processed[depId]) {
619
                        if (getOwn(traced, depId)) {
620
                            mod.defineDep(i, defined[depId]);
621
                            mod.check(); //pass false?
622
                        } else {
623
                            breakCycle(dep, traced, processed);
624
                        }
625
                    }
626
                });
627
                processed[id] = true;
628
            }
629
        }
630
631
        function checkLoaded() {
632
            var map, modId, err, usingPathFallback,
633
                waitInterval = config.waitSeconds * 1000,
634
                //It is possible to disable the wait interval by using waitSeconds of 0.
635
                expired = waitInterval && (context.startTime + waitInterval) < new Date().getTime(),
636
                noLoads = [],
637
                reqCalls = [],
638
                stillLoading = false,
639
                needCycleCheck = true;
640
641
            //Do not bother if this call was a result of a cycle break.
642
            if (inCheckLoaded) {
643
                return;
644
            }
645
646
            inCheckLoaded = true;
647
648
            //Figure out the state of all the modules.
649
            eachProp(enabledRegistry, function (mod) {
650
                map = mod.map;
651
                modId = map.id;
652
653
                //Skip things that are not enabled or in error state.
654
                if (!mod.enabled) {
655
                    return;
656
                }
657
658
                if (!map.isDefine) {
659
                    reqCalls.push(mod);
660
                }
661
662
                if (!mod.error) {
663
                    //If the module should be executed, and it has not
664
                    //been inited and time is up, remember it.
665
                    if (!mod.inited && expired) {
666
                        if (hasPathFallback(modId)) {
667
                            usingPathFallback = true;
668
                            stillLoading = true;
669
                        } else {
670
                            noLoads.push(modId);
671
                            removeScript(modId);
672
                        }
673
                    } else if (!mod.inited && mod.fetched && map.isDefine) {
674
                        stillLoading = true;
675
                        if (!map.prefix) {
676
                            //No reason to keep looking for unfinished
677
                            //loading. If the only stillLoading is a
678
                            //plugin resource though, keep going,
679
                            //because it may be that a plugin resource
680
                            //is waiting on a non-plugin cycle.
681
                            return (needCycleCheck = false);
682
                        }
683
                    }
684
                }
685
            });
686
687
            if (expired && noLoads.length) {
688
                //If wait time expired, throw error of unloaded modules.
689
                err = makeError('timeout', 'Load timeout for modules: ' + noLoads, null, noLoads);
690
                err.contextName = context.contextName;
691
                return onError(err);
692
            }
693
694
            //Not expired, check for a cycle.
695
            if (needCycleCheck) {
696
                each(reqCalls, function (mod) {
697
                    breakCycle(mod, {}, {});
698
                });
699
            }
700
701
            //If still waiting on loads, and the waiting load is something
702
            //other than a plugin resource, or there are still outstanding
703
            //scripts, then just try back later.
704
            if ((!expired || usingPathFallback) && stillLoading) {
705
                //Something is still waiting to load. Wait for it, but only
706
                //if a timeout is not already in effect.
707
                if ((isBrowser || isWebWorker) && !checkLoadedTimeoutId) {
708
                    checkLoadedTimeoutId = setTimeout(function () {
709
                        checkLoadedTimeoutId = 0;
710
                        checkLoaded();
711
                    }, 50);
712
                }
713
            }
714
715
            inCheckLoaded = false;
716
        }
717
718
        Module = function (map) {
719
            this.events = getOwn(undefEvents, map.id) || {};
720
            this.map = map;
721
            this.shim = getOwn(config.shim, map.id);
722
            this.depExports = [];
723
            this.depMaps = [];
724
            this.depMatched = [];
725
            this.pluginMaps = {};
726
            this.depCount = 0;
727
728
            /* this.exports this.factory
729
               this.depMaps = [],
730
               this.enabled, this.fetched
731
            */
732
        };
733
734
        Module.prototype = {
735
            init: function (depMaps, factory, errback, options) {
736
                options = options || {};
737
738
                //Do not do more inits if already done. Can happen if there
739
                //are multiple define calls for the same module. That is not
740
                //a normal, common case, but it is also not unexpected.
741
                if (this.inited) {
742
                    return;
743
                }
744
745
                this.factory = factory;
746
747
                if (errback) {
748
                    //Register for errors on this module.
749
                    this.on('error', errback);
750
                } else if (this.events.error) {
751
                    //If no errback already, but there are error listeners
752
                    //on this module, set up an errback to pass to the deps.
753
                    errback = bind(this, function (err) {
754
                        this.emit('error', err);
755
                    });
756
                }
757
758
                //Do a copy of the dependency array, so that
759
                //source inputs are not modified. For example
760
                //"shim" deps are passed in here directly, and
761
                //doing a direct modification of the depMaps array
762
                //would affect that config.
763
                this.depMaps = depMaps && depMaps.slice(0);
764
765
                this.errback = errback;
766
767
                //Indicate this module has be initialized
768
                this.inited = true;
769
770
                this.ignore = options.ignore;
771
772
                //Could have option to init this module in enabled mode,
773
                //or could have been previously marked as enabled. However,
774
                //the dependencies are not known until init is called. So
775
                //if enabled previously, now trigger dependencies as enabled.
776
                if (options.enabled || this.enabled) {
777
                    //Enable this module and dependencies.
778
                    //Will call this.check()
779
                    this.enable();
780
                } else {
781
                    this.check();
782
                }
783
            },
784
785
            defineDep: function (i, depExports) {
786
                //Because of cycles, defined callback for a given
787
                //export can be called more than once.
788
                if (!this.depMatched[i]) {
789
                    this.depMatched[i] = true;
790
                    this.depCount -= 1;
791
                    this.depExports[i] = depExports;
792
                }
793
            },
794
795
            fetch: function () {
796
                if (this.fetched) {
797
                    return;
798
                }
799
                this.fetched = true;
800
801
                context.startTime = (new Date()).getTime();
802
803
                var map = this.map;
804
805
                //If the manager is for a plugin managed resource,
806
                //ask the plugin to load it now.
807
                if (this.shim) {
808
                    context.makeRequire(this.map, {
809
                        enableBuildCallback: true
810
                    })(this.shim.deps || [], bind(this, function () {
811
                        return map.prefix ? this.callPlugin() : this.load();
812
                    }));
813
                } else {
814
                    //Regular dependency.
815
                    return map.prefix ? this.callPlugin() : this.load();
816
                }
817
            },
818
819
            load: function () {
820
                var url = this.map.url;
821
822
                //Regular dependency.
823
                if (!urlFetched[url]) {
824
                    urlFetched[url] = true;
825
                    context.load(this.map.id, url);
826
                }
827
            },
828
829
            /**
830
             * Checks if the module is ready to define itself, and if so,
831
             * define it.
832
             */
833
            check: function () {
834
                if (!this.enabled || this.enabling) {
835
                    return;
836
                }
837
838
                var err, cjsModule,
839
                    id = this.map.id,
840
                    depExports = this.depExports,
841
                    exports = this.exports,
842
                    factory = this.factory;
843
844
                if (!this.inited) {
845
                    this.fetch();
846
                } else if (this.error) {
847
                    this.emit('error', this.error);
848
                } else if (!this.defining) {
849
                    //The factory could trigger another require call
850
                    //that would result in checking this module to
851
                    //define itself again. If already in the process
852
                    //of doing that, skip this work.
853
                    this.defining = true;
854
855
                    if (this.depCount < 1 && !this.defined) {
856
                        if (isFunction(factory)) {
857
                            //If there is an error listener, favor passing
858
                            //to that instead of throwing an error. However,
859
                            //only do it for define()'d  modules. require
860
                            //errbacks should not be called for failures in
861
                            //their callbacks (#699). However if a global
862
                            //onError is set, use that.
863
                            if ((this.events.error && this.map.isDefine) ||
864
                                req.onError !== defaultOnError) {
865
                                try {
866
                                    exports = context.execCb(id, factory, depExports, exports);
867
                                } catch (e) {
868
                                    err = e;
869
                                }
870
                            } else {
871
                                exports = context.execCb(id, factory, depExports, exports);
872
                            }
873
874
                            if (this.map.isDefine) {
875
                                //If setting exports via 'module' is in play,
876
                                //favor that over return value and exports. After that,
877
                                //favor a non-undefined return value over exports use.
878
                                cjsModule = this.module;
879
                                if (cjsModule &&
880
                                        cjsModule.exports !== undefined &&
881
                                        //Make sure it is not already the exports value
882
                                        cjsModule.exports !== this.exports) {
883
                                    exports = cjsModule.exports;
884
                                } else if (exports === undefined && this.usingExports) {
885
                                    //exports already set the defined value.
886
                                    exports = this.exports;
887
                                }
888
                            }
889
890
                            if (err) {
891
                                err.requireMap = this.map;
892
                                err.requireModules = this.map.isDefine ? [this.map.id] : null;
893
                                err.requireType = this.map.isDefine ? 'define' : 'require';
894
                                return onError((this.error = err));
895
                            }
896
897
                        } else {
898
                            //Just a literal value
899
                            exports = factory;
900
                        }
901
902
                        this.exports = exports;
903
904
                        if (this.map.isDefine && !this.ignore) {
905
                            defined[id] = exports;
906
907
                            if (req.onResourceLoad) {
908
                                req.onResourceLoad(context, this.map, this.depMaps);
909
                            }
910
                        }
911
912
                        //Clean up
913
                        cleanRegistry(id);
914
915
                        this.defined = true;
916
                    }
917
918
                    //Finished the define stage. Allow calling check again
919
                    //to allow define notifications below in the case of a
920
                    //cycle.
921
                    this.defining = false;
922
923
                    if (this.defined && !this.defineEmitted) {
924
                        this.defineEmitted = true;
925
                        this.emit('defined', this.exports);
926
                        this.defineEmitComplete = true;
927
                    }
928
929
                }
930
            },
931
932
            callPlugin: function () {
933
                var map = this.map,
934
                    id = map.id,
935
                    //Map already normalized the prefix.
936
                    pluginMap = makeModuleMap(map.prefix);
937
938
                //Mark this as a dependency for this plugin, so it
939
                //can be traced for cycles.
940
                this.depMaps.push(pluginMap);
941
942
                on(pluginMap, 'defined', bind(this, function (plugin) {
943
                    var load, normalizedMap, normalizedMod,
944
                        name = this.map.name,
945
                        parentName = this.map.parentMap ? this.map.parentMap.name : null,
946
                        localRequire = context.makeRequire(map.parentMap, {
947
                            enableBuildCallback: true
948
                        });
949
950
                    //If current map is not normalized, wait for that
951
                    //normalized name to load instead of continuing.
952
                    if (this.map.unnormalized) {
953
                        //Normalize the ID if the plugin allows it.
954
                        if (plugin.normalize) {
955
                            name = plugin.normalize(name, function (name) {
956
                                return normalize(name, parentName, true);
957
                            }) || '';
958
                        }
959
960
                        //prefix and name should already be normalized, no need
961
                        //for applying map config again either.
962
                        normalizedMap = makeModuleMap(map.prefix + '!' + name,
963
                                                      this.map.parentMap);
964
                        on(normalizedMap,
965
                            'defined', bind(this, function (value) {
966
                                this.init([], function () { return value; }, null, {
967
                                    enabled: true,
968
                                    ignore: true
969
                                });
970
                            }));
971
972
                        normalizedMod = getOwn(registry, normalizedMap.id);
973
                        if (normalizedMod) {
974
                            //Mark this as a dependency for this plugin, so it
975
                            //can be traced for cycles.
976
                            this.depMaps.push(normalizedMap);
977
978
                            if (this.events.error) {
979
                                normalizedMod.on('error', bind(this, function (err) {
980
                                    this.emit('error', err);
981
                                }));
982
                            }
983
                            normalizedMod.enable();
984
                        }
985
986
                        return;
987
                    }
988
989
                    load = bind(this, function (value) {
990
                        this.init([], function () { return value; }, null, {
991
                            enabled: true
992
                        });
993
                    });
994
995
                    load.error = bind(this, function (err) {
996
                        this.inited = true;
997
                        this.error = err;
998
                        err.requireModules = [id];
999
1000
                        //Remove temp unnormalized modules for this module,
1001
                        //since they will never be resolved otherwise now.
1002
                        eachProp(registry, function (mod) {
1003
                            if (mod.map.id.indexOf(id + '_unnormalized') === 0) {
1004
                                cleanRegistry(mod.map.id);
1005
                            }
1006
                        });
1007
1008
                        onError(err);
1009
                    });
1010
1011
                    //Allow plugins to load other code without having to know the
1012
                    //context or how to 'complete' the load.
1013
                    load.fromText = bind(this, function (text, textAlt) {
1014
                        /*jslint evil: true */
1015
                        var moduleName = map.name,
1016
                            moduleMap = makeModuleMap(moduleName),
1017
                            hasInteractive = useInteractive;
1018
1019
                        //As of 2.1.0, support just passing the text, to reinforce
1020
                        //fromText only being called once per resource. Still
1021
                        //support old style of passing moduleName but discard
1022
                        //that moduleName in favor of the internal ref.
1023
                        if (textAlt) {
1024
                            text = textAlt;
1025
                        }
1026
1027
                        //Turn off interactive script matching for IE for any define
1028
                        //calls in the text, then turn it back on at the end.
1029
                        if (hasInteractive) {
1030
                            useInteractive = false;
1031
                        }
1032
1033
                        //Prime the system by creating a module instance for
1034
                        //it.
1035
                        getModule(moduleMap);
1036
1037
                        //Transfer any config to this other module.
1038
                        if (hasProp(config.config, id)) {
1039
                            config.config[moduleName] = config.config[id];
1040
                        }
1041
1042
                        try {
1043
                            req.exec(text);
1044
                        } catch (e) {
1045
                            return onError(makeError('fromtexteval',
1046
                                             'fromText eval for ' + id +
1047
                                            ' failed: ' + e,
1048
                                             e,
1049
                                             [id]));
1050
                        }
1051
1052
                        if (hasInteractive) {
1053
                            useInteractive = true;
1054
                        }
1055
1056
                        //Mark this as a dependency for the plugin
1057
                        //resource
1058
                        this.depMaps.push(moduleMap);
1059
1060
                        //Support anonymous modules.
1061
                        context.completeLoad(moduleName);
1062
1063
                        //Bind the value of that module to the value for this
1064
                        //resource ID.
1065
                        localRequire([moduleName], load);
1066
                    });
1067
1068
                    //Use parentName here since the plugin's name is not reliable,
1069
                    //could be some weird string with no path that actually wants to
1070
                    //reference the parentName's path.
1071
                    plugin.load(map.name, localRequire, load, config);
1072
                }));
1073
1074
                context.enable(pluginMap, this);
1075
                this.pluginMaps[pluginMap.id] = pluginMap;
1076
            },
1077
1078
            enable: function () {
1079
                enabledRegistry[this.map.id] = this;
1080
                this.enabled = true;
1081
1082
                //Set flag mentioning that the module is enabling,
1083
                //so that immediate calls to the defined callbacks
1084
                //for dependencies do not trigger inadvertent load
1085
                //with the depCount still being zero.
1086
                this.enabling = true;
1087
1088
                //Enable each dependency
1089
                each(this.depMaps, bind(this, function (depMap, i) {
1090
                    var id, mod, handler;
1091
1092
                    if (typeof depMap === 'string') {
1093
                        //Dependency needs to be converted to a depMap
1094
                        //and wired up to this module.
1095
                        depMap = makeModuleMap(depMap,
1096
                                               (this.map.isDefine ? this.map : this.map.parentMap),
1097
                                               false,
1098
                                               !this.skipMap);
1099
                        this.depMaps[i] = depMap;
1100
1101
                        handler = getOwn(handlers, depMap.id);
1102
1103
                        if (handler) {
1104
                            this.depExports[i] = handler(this);
1105
                            return;
1106
                        }
1107
1108
                        this.depCount += 1;
1109
1110
                        on(depMap, 'defined', bind(this, function (depExports) {
1111
                            this.defineDep(i, depExports);
1112
                            this.check();
1113
                        }));
1114
1115
                        if (this.errback) {
1116
                            on(depMap, 'error', bind(this, this.errback));
1117
                        }
1118
                    }
1119
1120
                    id = depMap.id;
1121
                    mod = registry[id];
1122
1123
                    //Skip special modules like 'require', 'exports', 'module'
1124
                    //Also, don't call enable if it is already enabled,
1125
                    //important in circular dependency cases.
1126
                    if (!hasProp(handlers, id) && mod && !mod.enabled) {
1127
                        context.enable(depMap, this);
1128
                    }
1129
                }));
1130
1131
                //Enable each plugin that is used in
1132
                //a dependency
1133
                eachProp(this.pluginMaps, bind(this, function (pluginMap) {
1134
                    var mod = getOwn(registry, pluginMap.id);
1135
                    if (mod && !mod.enabled) {
1136
                        context.enable(pluginMap, this);
1137
                    }
1138
                }));
1139
1140
                this.enabling = false;
1141
1142
                this.check();
1143
            },
1144
1145
            on: function (name, cb) {
1146
                var cbs = this.events[name];
1147
                if (!cbs) {
1148
                    cbs = this.events[name] = [];
1149
                }
1150
                cbs.push(cb);
1151
            },
1152
1153
            emit: function (name, evt) {
1154
                each(this.events[name], function (cb) {
1155
                    cb(evt);
1156
                });
1157
                if (name === 'error') {
1158
                    //Now that the error handler was triggered, remove
1159
                    //the listeners, since this broken Module instance
1160
                    //can stay around for a while in the registry.
1161
                    delete this.events[name];
1162
                }
1163
            }
1164
        };
1165
1166
        function callGetModule(args) {
1167
            //Skip modules already defined.
1168
            if (!hasProp(defined, args[0])) {
1169
                getModule(makeModuleMap(args[0], null, true)).init(args[1], args[2]);
1170
            }
1171
        }
1172
1173
        function removeListener(node, func, name, ieName) {
1174
            //Favor detachEvent because of IE9
1175
            //issue, see attachEvent/addEventListener comment elsewhere
1176
            //in this file.
1177
            if (node.detachEvent && !isOpera) {
1178
                //Probably IE. If not it will throw an error, which will be
1179
                //useful to know.
1180
                if (ieName) {
1181
                    node.detachEvent(ieName, func);
1182
                }
1183
            } else {
1184
                node.removeEventListener(name, func, false);
1185
            }
1186
        }
1187
1188
        /**
1189
         * Given an event from a script node, get the requirejs info from it,
1190
         * and then removes the event listeners on the node.
1191
         * @param {Event} evt
1192
         * @returns {Object}
1193
         */
1194
        function getScriptData(evt) {
1195
            //Using currentTarget instead of target for Firefox 2.0's sake. Not
1196
            //all old browsers will be supported, but this one was easy enough
1197
            //to support and still makes sense.
1198
            var node = evt.currentTarget || evt.srcElement;
1199
1200
            //Remove the listeners once here.
1201
            removeListener(node, context.onScriptLoad, 'load', 'onreadystatechange');
1202
            removeListener(node, context.onScriptError, 'error');
1203
1204
            return {
1205
                node: node,
1206
                id: node && node.getAttribute('data-requiremodule')
1207
            };
1208
        }
1209
1210
        function intakeDefines() {
1211
            var args;
1212
1213
            //Any defined modules in the global queue, intake them now.
1214
            takeGlobalQueue();
1215
1216
            //Make sure any remaining defQueue items get properly processed.
1217
            while (defQueue.length) {
1218
                args = defQueue.shift();
1219
                if (args[0] === null) {
1220
                    return onError(makeError('mismatch', 'Mismatched anonymous define() module: ' + args[args.length - 1]));
1221
                } else {
1222
                    //args are id, deps, factory. Should be normalized by the
1223
                    //define() function.
1224
                    callGetModule(args);
1225
                }
1226
            }
1227
        }
1228
1229
        context = {
1230
            config: config,
1231
            contextName: contextName,
1232
            registry: registry,
1233
            defined: defined,
1234
            urlFetched: urlFetched,
1235
            defQueue: defQueue,
1236
            Module: Module,
1237
            makeModuleMap: makeModuleMap,
1238
            nextTick: req.nextTick,
1239
            onError: onError,
1240
1241
            /**
1242
             * Set a configuration for the context.
1243
             * @param {Object} cfg config object to integrate.
1244
             */
1245
            configure: function (cfg) {
1246
                //Make sure the baseUrl ends in a slash.
1247
                if (cfg.baseUrl) {
1248
                    if (cfg.baseUrl.charAt(cfg.baseUrl.length - 1) !== '/') {
1249
                        cfg.baseUrl += '/';
1250
                    }
1251
                }
1252
1253
                //Save off the paths and packages since they require special processing,
1254
                //they are additive.
1255
                var pkgs = config.pkgs,
1256
                    shim = config.shim,
1257
                    objs = {
1258
                        paths: true,
1259
                        config: true,
1260
                        map: true
1261
                    };
1262
1263
                eachProp(cfg, function (value, prop) {
1264
                    if (objs[prop]) {
1265
                        if (prop === 'map') {
1266
                            if (!config.map) {
1267
                                config.map = {};
1268
                            }
1269
                            mixin(config[prop], value, true, true);
1270
                        } else {
1271
                            mixin(config[prop], value, true);
1272
                        }
1273
                    } else {
1274
                        config[prop] = value;
1275
                    }
1276
                });
1277
1278
                //Merge shim
1279
                if (cfg.shim) {
1280
                    eachProp(cfg.shim, function (value, id) {
1281
                        //Normalize the structure
1282
                        if (isArray(value)) {
1283
                            value = {
1284
                                deps: value
1285
                            };
1286
                        }
1287
                        if ((value.exports || value.init) && !value.exportsFn) {
1288
                            value.exportsFn = context.makeShimExports(value);
1289
                        }
1290
                        shim[id] = value;
1291
                    });
1292
                    config.shim = shim;
1293
                }
1294
1295
                //Adjust packages if necessary.
1296
                if (cfg.packages) {
1297
                    each(cfg.packages, function (pkgObj) {
1298
                        var location;
1299
1300
                        pkgObj = typeof pkgObj === 'string' ? { name: pkgObj } : pkgObj;
1301
                        location = pkgObj.location;
1302
1303
                        //Create a brand new object on pkgs, since currentPackages can
1304
                        //be passed in again, and config.pkgs is the internal transformed
1305
                        //state for all package configs.
1306
                        pkgs[pkgObj.name] = {
1307
                            name: pkgObj.name,
1308
                            location: location || pkgObj.name,
1309
                            //Remove leading dot in main, so main paths are normalized,
1310
                            //and remove any trailing .js, since different package
1311
                            //envs have different conventions: some use a module name,
1312
                            //some use a file name.
1313
                            main: (pkgObj.main || 'main')
1314
                                  .replace(currDirRegExp, '')
1315
                                  .replace(jsSuffixRegExp, '')
1316
                        };
1317
                    });
1318
1319
                    //Done with modifications, assing packages back to context config
1320
                    config.pkgs = pkgs;
1321
                }
1322
1323
                //If there are any "waiting to execute" modules in the registry,
1324
                //update the maps for them, since their info, like URLs to load,
1325
                //may have changed.
1326
                eachProp(registry, function (mod, id) {
1327
                    //If module already has init called, since it is too
1328
                    //late to modify them, and ignore unnormalized ones
1329
                    //since they are transient.
1330
                    if (!mod.inited && !mod.map.unnormalized) {
1331
                        mod.map = makeModuleMap(id);
1332
                    }
1333
                });
1334
1335
                //If a deps array or a config callback is specified, then call
1336
                //require with those args. This is useful when require is defined as a
1337
                //config object before require.js is loaded.
1338
                if (cfg.deps || cfg.callback) {
1339
                    context.require(cfg.deps || [], cfg.callback);
1340
                }
1341
            },
1342
1343
            makeShimExports: function (value) {
1344
                function fn() {
1345
                    var ret;
1346
                    if (value.init) {
1347
                        ret = value.init.apply(global, arguments);
1348
                    }
1349
                    return ret || (value.exports && getGlobal(value.exports));
1350
                }
1351
                return fn;
1352
            },
1353
1354
            makeRequire: function (relMap, options) {
1355
                options = options || {};
1356
1357
                function localRequire(deps, callback, errback) {
1358
                    var id, map, requireMod;
1359
1360
                    if (options.enableBuildCallback && callback && isFunction(callback)) {
1361
                        callback.__requireJsBuild = true;
1362
                    }
1363
1364
                    if (typeof deps === 'string') {
1365
                        if (isFunction(callback)) {
1366
                            //Invalid call
1367
                            return onError(makeError('requireargs', 'Invalid require call'), errback);
1368
                        }
1369
1370
                        //If require|exports|module are requested, get the
1371
                        //value for them from the special handlers. Caveat:
1372
                        //this only works while module is being defined.
1373
                        if (relMap && hasProp(handlers, deps)) {
1374
                            return handlers[deps](registry[relMap.id]);
1375
                        }
1376
1377
                        //Synchronous access to one module. If require.get is
1378
                        //available (as in the Node adapter), prefer that.
1379
                        if (req.get) {
1380
                            return req.get(context, deps, relMap, localRequire);
1381
                        }
1382
1383
                        //Normalize module name, if it contains . or ..
1384
                        map = makeModuleMap(deps, relMap, false, true);
1385
                        id = map.id;
1386
1387
                        if (!hasProp(defined, id)) {
1388
                            return onError(makeError('notloaded', 'Module name "' +
1389
                                        id +
1390
                                        '" has not been loaded yet for context: ' +
1391
                                        contextName +
1392
                                        (relMap ? '' : '. Use require([])')));
1393
                        }
1394
                        return defined[id];
1395
                    }
1396
1397
                    //Grab defines waiting in the global queue.
1398
                    intakeDefines();
1399
1400
                    //Mark all the dependencies as needing to be loaded.
1401
                    context.nextTick(function () {
1402
                        //Some defines could have been added since the
1403
                        //require call, collect them.
1404
                        intakeDefines();
1405
1406
                        requireMod = getModule(makeModuleMap(null, relMap));
1407
1408
                        //Store if map config should be applied to this require
1409
                        //call for dependencies.
1410
                        requireMod.skipMap = options.skipMap;
1411
1412
                        requireMod.init(deps, callback, errback, {
1413
                            enabled: true
1414
                        });
1415
1416
                        checkLoaded();
1417
                    });
1418
1419
                    return localRequire;
1420
                }
1421
1422
                mixin(localRequire, {
1423
                    isBrowser: isBrowser,
1424
1425
                    /**
1426
                     * Converts a module name + .extension into an URL path.
1427
                     * *Requires* the use of a module name. It does not support using
1428
                     * plain URLs like nameToUrl.
1429
                     */
1430
                    toUrl: function (moduleNamePlusExt) {
1431
                        var ext,
1432
                            index = moduleNamePlusExt.lastIndexOf('.'),
1433
                            segment = moduleNamePlusExt.split('/')[0],
1434
                            isRelative = segment === '.' || segment === '..';
1435
1436
                        //Have a file extension alias, and it is not the
1437
                        //dots from a relative path.
1438
                        if (index !== -1 && (!isRelative || index > 1)) {
1439
                            ext = moduleNamePlusExt.substring(index, moduleNamePlusExt.length);
1440
                            moduleNamePlusExt = moduleNamePlusExt.substring(0, index);
1441
                        }
1442
1443
                        return context.nameToUrl(normalize(moduleNamePlusExt,
1444
                                                relMap && relMap.id, true), ext,  true);
1445
                    },
1446
1447
                    defined: function (id) {
1448
                        return hasProp(defined, makeModuleMap(id, relMap, false, true).id);
1449
                    },
1450
1451
                    specified: function (id) {
1452
                        id = makeModuleMap(id, relMap, false, true).id;
1453
                        return hasProp(defined, id) || hasProp(registry, id);
1454
                    }
1455
                });
1456
1457
                //Only allow undef on top level require calls
1458
                if (!relMap) {
1459
                    localRequire.undef = function (id) {
1460
                        //Bind any waiting define() calls to this context,
1461
                        //fix for #408
1462
                        takeGlobalQueue();
1463
1464
                        var map = makeModuleMap(id, relMap, true),
1465
                            mod = getOwn(registry, id);
1466
1467
                        delete defined[id];
1468
                        delete urlFetched[map.url];
1469
                        delete undefEvents[id];
1470
1471
                        if (mod) {
1472
                            //Hold on to listeners in case the
1473
                            //module will be attempted to be reloaded
1474
                            //using a different config.
1475
                            if (mod.events.defined) {
1476
                                undefEvents[id] = mod.events;
1477
                            }
1478
1479
                            cleanRegistry(id);
1480
                        }
1481
                    };
1482
                }
1483
1484
                return localRequire;
1485
            },
1486
1487
            /**
1488
             * Called to enable a module if it is still in the registry
1489
             * awaiting enablement. A second arg, parent, the parent module,
1490
             * is passed in for context, when this method is overriden by
1491
             * the optimizer. Not shown here to keep code compact.
1492
             */
1493
            enable: function (depMap) {
1494
                var mod = getOwn(registry, depMap.id);
1495
                if (mod) {
1496
                    getModule(depMap).enable();
1497
                }
1498
            },
1499
1500
            /**
1501
             * Internal method used by environment adapters to complete a load event.
1502
             * A load event could be a script load or just a load pass from a synchronous
1503
             * load call.
1504
             * @param {String} moduleName the name of the module to potentially complete.
1505
             */
1506
            completeLoad: function (moduleName) {
1507
                var found, args, mod,
1508
                    shim = getOwn(config.shim, moduleName) || {},
1509
                    shExports = shim.exports;
1510
1511
                takeGlobalQueue();
1512
1513
                while (defQueue.length) {
1514
                    args = defQueue.shift();
1515
                    if (args[0] === null) {
1516
                        args[0] = moduleName;
1517
                        //If already found an anonymous module and bound it
1518
                        //to this name, then this is some other anon module
1519
                        //waiting for its completeLoad to fire.
1520
                        if (found) {
1521
                            break;
1522
                        }
1523
                        found = true;
1524
                    } else if (args[0] === moduleName) {
1525
                        //Found matching define call for this script!
1526
                        found = true;
1527
                    }
1528
1529
                    callGetModule(args);
1530
                }
1531
1532
                //Do this after the cycle of callGetModule in case the result
1533
                //of those calls/init calls changes the registry.
1534
                mod = getOwn(registry, moduleName);
1535
1536
                if (!found && !hasProp(defined, moduleName) && mod && !mod.inited) {
1537
                    if (config.enforceDefine && (!shExports || !getGlobal(shExports))) {
1538
                        if (hasPathFallback(moduleName)) {
1539
                            return;
1540
                        } else {
1541
                            return onError(makeError('nodefine',
1542
                                             'No define call for ' + moduleName,
1543
                                             null,
1544
                                             [moduleName]));
1545
                        }
1546
                    } else {
1547
                        //A script that does not call define(), so just simulate
1548
                        //the call for it.
1549
                        callGetModule([moduleName, (shim.deps || []), shim.exportsFn]);
1550
                    }
1551
                }
1552
1553
                checkLoaded();
1554
            },
1555
1556
            /**
1557
             * Converts a module name to a file path. Supports cases where
1558
             * moduleName may actually be just an URL.
1559
             * Note that it **does not** call normalize on the moduleName,
1560
             * it is assumed to have already been normalized. This is an
1561
             * internal API, not a public one. Use toUrl for the public API.
1562
             */
1563
            nameToUrl: function (moduleName, ext, skipExt) {
1564
                var paths, pkgs, pkg, pkgPath, syms, i, parentModule, url,
1565
                    parentPath;
1566
1567
                //If a colon is in the URL, it indicates a protocol is used and it is just
1568
                //an URL to a file, or if it starts with a slash, contains a query arg (i.e. ?)
1569
                //or ends with .js, then assume the user meant to use an url and not a module id.
1570
                //The slash is important for protocol-less URLs as well as full paths.
1571
                if (req.jsExtRegExp.test(moduleName)) {
1572
                    //Just a plain path, not module name lookup, so just return it.
1573
                    //Add extension if it is included. This is a bit wonky, only non-.js things pass
1574
                    //an extension, this method probably needs to be reworked.
1575
                    url = moduleName + (ext || '');
1576
                } else {
1577
                    //A module that needs to be converted to a path.
1578
                    paths = config.paths;
1579
                    pkgs = config.pkgs;
1580
1581
                    syms = moduleName.split('/');
1582
                    //For each module name segment, see if there is a path
1583
                    //registered for it. Start with most specific name
1584
                    //and work up from it.
1585
                    for (i = syms.length; i > 0; i -= 1) {
1586
                        parentModule = syms.slice(0, i).join('/');
1587
                        pkg = getOwn(pkgs, parentModule);
1588
                        parentPath = getOwn(paths, parentModule);
1589
                        if (parentPath) {
1590
                            //If an array, it means there are a few choices,
1591
                            //Choose the one that is desired
1592
                            if (isArray(parentPath)) {
1593
                                parentPath = parentPath[0];
1594
                            }
1595
                            syms.splice(0, i, parentPath);
1596
                            break;
1597
                        } else if (pkg) {
1598
                            //If module name is just the package name, then looking
1599
                            //for the main module.
1600
                            if (moduleName === pkg.name) {
1601
                                pkgPath = pkg.location + '/' + pkg.main;
1602
                            } else {
1603
                                pkgPath = pkg.location;
1604
                            }
1605
                            syms.splice(0, i, pkgPath);
1606
                            break;
1607
                        }
1608
                    }
1609
1610
                    //Join the path parts together, then figure out if baseUrl is needed.
1611
                    url = syms.join('/');
1612
                    url += (ext || (/\?/.test(url) || skipExt ? '' : '.js'));
1613
                    url = (url.charAt(0) === '/' || url.match(/^[\w\+\.\-]+:/) ? '' : config.baseUrl) + url;
1614
                }
1615
1616
                return config.urlArgs ? url +
1617
                                        ((url.indexOf('?') === -1 ? '?' : '&') +
1618
                                         config.urlArgs) : url;
1619
            },
1620
1621
            //Delegates to req.load. Broken out as a separate function to
1622
            //allow overriding in the optimizer.
1623
            load: function (id, url) {
1624
                req.load(context, id, url);
1625
            },
1626
1627
            /**
1628
             * Executes a module callback function. Broken out as a separate function
1629
             * solely to allow the build system to sequence the files in the built
1630
             * layer in the right sequence.
1631
             *
1632
             * @private
1633
             */
1634
            execCb: function (name, callback, args, exports) {
1635
                return callback.apply(exports, args);
1636
            },
1637
1638
            /**
1639
             * callback for script loads, used to check status of loading.
1640
             *
1641
             * @param {Event} evt the event from the browser for the script
1642
             * that was loaded.
1643
             */
1644
            onScriptLoad: function (evt) {
1645
                //Using currentTarget instead of target for Firefox 2.0's sake. Not
1646
                //all old browsers will be supported, but this one was easy enough
1647
                //to support and still makes sense.
1648
                if (evt.type === 'load' ||
1649
                        (readyRegExp.test((evt.currentTarget || evt.srcElement).readyState))) {
1650
                    //Reset interactive script so a script node is not held onto for
1651
                    //to long.
1652
                    interactiveScript = null;
1653
1654
                    //Pull out the name of the module and the context.
1655
                    var data = getScriptData(evt);
1656
                    context.completeLoad(data.id);
1657
                }
1658
            },
1659
1660
            /**
1661
             * Callback for script errors.
1662
             */
1663
            onScriptError: function (evt) {
1664
                var data = getScriptData(evt);
1665
                if (!hasPathFallback(data.id)) {
1666
                    return onError(makeError('scripterror', 'Script error for: ' + data.id, evt, [data.id]));
1667
                }
1668
            }
1669
        };
1670
1671
        context.require = context.makeRequire();
1672
        return context;
1673
    }
1674
1675
    /**
1676
     * Main entry point.
1677
     *
1678
     * If the only argument to require is a string, then the module that
1679
     * is represented by that string is fetched for the appropriate context.
1680
     *
1681
     * If the first argument is an array, then it will be treated as an array
1682
     * of dependency string names to fetch. An optional function callback can
1683
     * be specified to execute when all of those dependencies are available.
1684
     *
1685
     * Make a local req variable to help Caja compliance (it assumes things
1686
     * on a require that are not standardized), and to give a short
1687
     * name for minification/local scope use.
1688
     */
1689
    req = requirejs = function (deps, callback, errback, optional) {
1690
1691
        //Find the right context, use default
1692
        var context, config,
1693
            contextName = defContextName;
1694
1695
        // Determine if have config object in the call.
1696
        if (!isArray(deps) && typeof deps !== 'string') {
1697
            // deps is a config object
1698
            config = deps;
1699
            if (isArray(callback)) {
1700
                // Adjust args if there are dependencies
1701
                deps = callback;
1702
                callback = errback;
1703
                errback = optional;
1704
            } else {
1705
                deps = [];
1706
            }
1707
        }
1708
1709
        if (config && config.context) {
1710
            contextName = config.context;
1711
        }
1712
1713
        context = getOwn(contexts, contextName);
1714
        if (!context) {
1715
            context = contexts[contextName] = req.s.newContext(contextName);
1716
        }
1717
1718
        if (config) {
1719
            context.configure(config);
1720
        }
1721
1722
        return context.require(deps, callback, errback);
1723
    };
1724
1725
    /**
1726
     * Support require.config() to make it easier to cooperate with other
1727
     * AMD loaders on globally agreed names.
1728
     */
1729
    req.config = function (config) {
1730
        return req(config);
1731
    };
1732
1733
    /**
1734
     * Execute something after the current tick
1735
     * of the event loop. Override for other envs
1736
     * that have a better solution than setTimeout.
1737
     * @param  {Function} fn function to execute later.
1738
     */
1739
    req.nextTick = typeof setTimeout !== 'undefined' ? function (fn) {
1740
        setTimeout(fn, 4);
1741
    } : function (fn) { fn(); };
1742
1743
    /**
1744
     * Export require as a global, but only if it does not already exist.
1745
     */
1746
    if (!require) {
1747
        require = req;
1748
    }
1749
1750
    req.version = version;
1751
1752
    //Used to filter out dependencies that are already paths.
1753
    req.jsExtRegExp = /^\/|:|\?|\.js$/;
1754
    req.isBrowser = isBrowser;
1755
    s = req.s = {
1756
        contexts: contexts,
1757
        newContext: newContext
1758
    };
1759
1760
    //Create default context.
1761
    req({});
1762
1763
    //Exports some context-sensitive methods on global require.
1764
    each([
1765
        'toUrl',
1766
        'undef',
1767
        'defined',
1768
        'specified'
1769
    ], function (prop) {
1770
        //Reference from contexts instead of early binding to default context,
1771
        //so that during builds, the latest instance of the default context
1772
        //with its config gets used.
1773
        req[prop] = function () {
1774
            var ctx = contexts[defContextName];
1775
            return ctx.require[prop].apply(ctx, arguments);
1776
        };
1777
    });
1778
1779
    if (isBrowser) {
1780
        head = s.head = document.getElementsByTagName('head')[0];
1781
        //If BASE tag is in play, using appendChild is a problem for IE6.
1782
        //When that browser dies, this can be removed. Details in this jQuery bug:
1783
        //http://dev.jquery.com/ticket/2709
1784
        baseElement = document.getElementsByTagName('base')[0];
1785
        if (baseElement) {
1786
            head = s.head = baseElement.parentNode;
1787
        }
1788
    }
1789
1790
    /**
1791
     * Any errors that require explicitly generates will be passed to this
1792
     * function. Intercept/override it if you want custom error handling.
1793
     * @param {Error} err the error object.
1794
     */
1795
    req.onError = defaultOnError;
1796
1797
    /**
1798
     * Creates the node for the load command. Only used in browser envs.
1799
     */
1800
    req.createNode = function (config, moduleName, url) {
1801
        var node = config.xhtml ?
1802
                document.createElementNS('http://www.w3.org/1999/xhtml', 'html:script') :
1803
                document.createElement('script');
1804
        node.type = config.scriptType || 'text/javascript';
1805
        node.charset = 'utf-8';
1806
        node.async = true;
1807
        return node;
1808
    };
1809
1810
    /**
1811
     * Does the request to load a module for the browser case.
1812
     * Make this a separate function to allow other environments
1813
     * to override it.
1814
     *
1815
     * @param {Object} context the require context to find state.
1816
     * @param {String} moduleName the name of the module.
1817
     * @param {Object} url the URL to the module.
1818
     */
1819
    req.load = function (context, moduleName, url) {
1820
        var config = (context && context.config) || {},
1821
            node;
1822
        if (isBrowser) {
1823
            //In the browser so use a script tag
1824
            node = req.createNode(config, moduleName, url);
1825
1826
            node.setAttribute('data-requirecontext', context.contextName);
1827
            node.setAttribute('data-requiremodule', moduleName);
1828
1829
            //Set up load listener. Test attachEvent first because IE9 has
1830
            //a subtle issue in its addEventListener and script onload firings
1831
            //that do not match the behavior of all other browsers with
1832
            //addEventListener support, which fire the onload event for a
1833
            //script right after the script execution. See:
1834
            //https://connect.microsoft.com/IE/feedback/details/648057/script-onload-event-is-not-fired-immediately-after-script-execution
1835
            //UNFORTUNATELY Opera implements attachEvent but does not follow the script
1836
            //script execution mode.
1837
            if (node.attachEvent &&
1838
                    //Check if node.attachEvent is artificially added by custom script or
1839
                    //natively supported by browser
1840
                    //read https://github.com/jrburke/requirejs/issues/187
1841
                    //if we can NOT find [native code] then it must NOT natively supported.
1842
                    //in IE8, node.attachEvent does not have toString()
1843
                    //Note the test for "[native code" with no closing brace, see:
1844
                    //https://github.com/jrburke/requirejs/issues/273
1845
                    !(node.attachEvent.toString && node.attachEvent.toString().indexOf('[native code') < 0) &&
1846
                    !isOpera) {
1847
                //Probably IE. IE (at least 6-8) do not fire
1848
                //script onload right after executing the script, so
1849
                //we cannot tie the anonymous define call to a name.
1850
                //However, IE reports the script as being in 'interactive'
1851
                //readyState at the time of the define call.
1852
                useInteractive = true;
1853
1854
                node.attachEvent('onreadystatechange', context.onScriptLoad);
1855
                //It would be great to add an error handler here to catch
1856
                //404s in IE9+. However, onreadystatechange will fire before
1857
                //the error handler, so that does not help. If addEventListener
1858
                //is used, then IE will fire error before load, but we cannot
1859
                //use that pathway given the connect.microsoft.com issue
1860
                //mentioned above about not doing the 'script execute,
1861
                //then fire the script load event listener before execute
1862
                //next script' that other browsers do.
1863
                //Best hope: IE10 fixes the issues,
1864
                //and then destroys all installs of IE 6-9.
1865
                //node.attachEvent('onerror', context.onScriptError);
1866
            } else {
1867
                node.addEventListener('load', context.onScriptLoad, false);
1868
                node.addEventListener('error', context.onScriptError, false);
1869
            }
1870
            node.src = url;
1871
1872
            //For some cache cases in IE 6-8, the script executes before the end
1873
            //of the appendChild execution, so to tie an anonymous define
1874
            //call to the module name (which is stored on the node), hold on
1875
            //to a reference to this node, but clear after the DOM insertion.
1876
            currentlyAddingScript = node;
1877
            if (baseElement) {
1878
                head.insertBefore(node, baseElement);
1879
            } else {
1880
                head.appendChild(node);
1881
            }
1882
            currentlyAddingScript = null;
1883
1884
            return node;
1885
        } else if (isWebWorker) {
1886
            try {
1887
                //In a web worker, use importScripts. This is not a very
1888
                //efficient use of importScripts, importScripts will block until
1889
                //its script is downloaded and evaluated. However, if web workers
1890
                //are in play, the expectation that a build has been done so that
1891
                //only one script needs to be loaded anyway. This may need to be
1892
                //reevaluated if other use cases become common.
1893
                importScripts(url);
1894
1895
                //Account for anonymous modules
1896
                context.completeLoad(moduleName);
1897
            } catch (e) {
1898
                context.onError(makeError('importscripts',
1899
                                'importScripts failed for ' +
1900
                                    moduleName + ' at ' + url,
1901
                                e,
1902
                                [moduleName]));
1903
            }
1904
        }
1905
    };
1906
1907
    function getInteractiveScript() {
1908
        if (interactiveScript && interactiveScript.readyState === 'interactive') {
1909
            return interactiveScript;
1910
        }
1911
1912
        eachReverse(scripts(), function (script) {
1913
            if (script.readyState === 'interactive') {
1914
                return (interactiveScript = script);
1915
            }
1916
        });
1917
        return interactiveScript;
1918
    }
1919
1920
    //Look for a data-main script attribute, which could also adjust the baseUrl.
1921
    if (isBrowser) {
1922
        //Figure out baseUrl. Get it from the script tag with require.js in it.
1923
        eachReverse(scripts(), function (script) {
1924
            //Set the 'head' where we can append children by
1925
            //using the script's parent.
1926
            if (!head) {
1927
                head = script.parentNode;
1928
            }
1929
1930
            //Look for a data-main attribute to set main script for the page
1931
            //to load. If it is there, the path to data main becomes the
1932
            //baseUrl, if it is not already set.
1933
            dataMain = script.getAttribute('data-main');
1934
            if (dataMain) {
1935
                //Preserve dataMain in case it is a path (i.e. contains '?')
1936
                mainScript = dataMain;
1937
1938
                //Set final baseUrl if there is not already an explicit one.
1939
                if (!cfg.baseUrl) {
1940
                    //Pull off the directory of data-main for use as the
1941
                    //baseUrl.
1942
                    src = mainScript.split('/');
1943
                    mainScript = src.pop();
1944
                    subPath = src.length ? src.join('/')  + '/' : './';
1945
1946
                    cfg.baseUrl = subPath;
1947
                }
1948
1949
                //Strip off any trailing .js since mainScript is now
1950
                //like a module name.
1951
                mainScript = mainScript.replace(jsSuffixRegExp, '');
1952
1953
                 //If mainScript is still a path, fall back to dataMain
1954
                if (req.jsExtRegExp.test(mainScript)) {
1955
                    mainScript = dataMain;
1956
                }
1957
1958
                //Put the data-main script in the files to load.
1959
                cfg.deps = cfg.deps ? cfg.deps.concat(mainScript) : [mainScript];
1960
1961
                return true;
1962
            }
1963
        });
1964
    }
1965
1966
    /**
1967
     * The function that handles definitions of modules. Differs from
1968
     * require() in that a string for the module should be the first argument,
1969
     * and the function to execute after dependencies are loaded should
1970
     * return a value to define the module corresponding to the first argument's
1971
     * name.
1972
     */
1973
    define = function (name, deps, callback) {
1974
        var node, context;
1975
1976
        //Allow for anonymous modules
1977
        if (typeof name !== 'string') {
1978
            //Adjust args appropriately
1979
            callback = deps;
1980
            deps = name;
1981
            name = null;
1982
        }
1983
1984
        //This module may not have dependencies
1985
        if (!isArray(deps)) {
1986
            callback = deps;
1987
            deps = null;
1988
        }
1989
1990
        //If no name, and callback is a function, then figure out if it a
1991
        //CommonJS thing with dependencies.
1992
        if (!deps && isFunction(callback)) {
1993
            deps = [];
1994
            //Remove comments from the callback string,
1995
            //look for require calls, and pull them into the dependencies,
1996
            //but only if there are function args.
1997
            if (callback.length) {
1998
                callback
1999
                    .toString()
2000
                    .replace(commentRegExp, '')
2001
                    .replace(cjsRequireRegExp, function (match, dep) {
2002
                        deps.push(dep);
2003
                    });
2004
2005
                //May be a CommonJS thing even without require calls, but still
2006
                //could use exports, and module. Avoid doing exports and module
2007
                //work though if it just needs require.
2008
                //REQUIRES the function to expect the CommonJS variables in the
2009
                //order listed below.
2010
                deps = (callback.length === 1 ? ['require'] : ['require', 'exports', 'module']).concat(deps);
2011
            }
2012
        }
2013
2014
        //If in IE 6-8 and hit an anonymous define() call, do the interactive
2015
        //work.
2016
        if (useInteractive) {
2017
            node = currentlyAddingScript || getInteractiveScript();
2018
            if (node) {
2019
                if (!name) {
2020
                    name = node.getAttribute('data-requiremodule');
2021
                }
2022
                context = contexts[node.getAttribute('data-requirecontext')];
2023
            }
2024
        }
2025
2026
        //Always save off evaluating the def call until the script onload handler.
2027
        //This allows multiple modules to be in a file without prematurely
2028
        //tracing dependencies, and allows for anonymous module support,
2029
        //where the module name is not known until the script onload event
2030
        //occurs. If no context, use the global queue, and get it processed
2031
        //in the onscript load callback.
2032
        (context ? context.defQueue : globalDefQueue).push([name, deps, callback]);
2033
    };
2034
2035
    define.amd = {
2036
        jQuery: true
2037
    };
2038
2039
2040
    /**
2041
     * Executes the text. Normally just uses eval, but can be modified
2042
     * to use a better, environment-specific call. Only used for transpiling
2043
     * loader plugins, not for plain JS modules.
2044
     * @param {String} text the text to execute/evaluate.
2045
     */
2046
    req.exec = function (text) {
2047
        /*jslint evil: true */
2048
        return eval(text);
2049
    };
2050
2051
    //Set up with config info.
2052
    req(cfg);
2053
}(this));
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/cateditor-ui.inc (-2 / +1 lines)
Lines 1-7 Link Here
1
<script src="[% interface %]/lib/codemirror/codemirror-compressed.js"></script>
1
<script src="[% interface %]/lib/codemirror/codemirror-compressed.js"></script>
2
<script src="[% interface %]/lib/filesaver.js"></script>
2
<script src="[% interface %]/lib/filesaver.js"></script>
3
<script src="[% interface %]/lib/koha/cateditor/marc-mode.js"></script>
3
<script src="[% interface %]/lib/koha/cateditor/marc-mode.js"></script>
4
<script src="[% interface %]/lib/require.js"></script>
4
<script src="[% interface %]/lib/requirejs/require.js"></script>
5
<script>
5
<script>
6
require.config( {
6
require.config( {
7
    baseUrl: '[% interface %]/lib/koha/cateditor/',
7
    baseUrl: '[% interface %]/lib/koha/cateditor/',
8
- 

Return to bug 17241