loader_xd.js
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:12k
源码类别:

OA系统

开发平台:

Java

  1. /*
  2. Copyright (c) 2004-2006, The Dojo Foundation
  3. All Rights Reserved.
  4. Licensed under the Academic Free License version 2.1 or above OR the
  5. modified BSD license. For more information on Dojo licensing, see:
  6. http://dojotoolkit.org/community/licensing.shtml
  7. */
  8. dojo.hostenv.resetXd = function () {
  9. this.isXDomain = djConfig.useXDomain || false;
  10. this.xdTimer = 0;
  11. this.xdInFlight = {};
  12. this.xdOrderedReqs = [];
  13. this.xdDepMap = {};
  14. this.xdContents = [];
  15. this.xdDefList = [];
  16. };
  17. dojo.hostenv.resetXd();
  18. dojo.hostenv.createXdPackage = function (contents, resourceName, resourcePath) {
  19. var deps = [];
  20. var depRegExp = /dojo.(requireLocalization|require|requireIf|requireAll|provide|requireAfterIf|requireAfter|kwCompoundRequire|conditionalRequire|hostenv.conditionalLoadModule|.hostenv.loadModule|hostenv.moduleLoaded)(([wW]*?))/mg;
  21. var match;
  22. while ((match = depRegExp.exec(contents)) != null) {
  23. if (match[1] == "requireLocalization") {
  24. eval(match[0]);
  25. } else {
  26. deps.push(""" + match[1] + "", " + match[2]);
  27. }
  28. }
  29. var output = [];
  30. output.push("dojo.hostenv.packageLoaded({n");
  31. if (deps.length > 0) {
  32. output.push("depends: [");
  33. for (var i = 0; i < deps.length; i++) {
  34. if (i > 0) {
  35. output.push(",n");
  36. }
  37. output.push("[" + deps[i] + "]");
  38. }
  39. output.push("],");
  40. }
  41. output.push("ndefinePackage: function(dojo){");
  42. output.push(contents);
  43. output.push("n}, resourceName: '" + resourceName + "', resourcePath: '" + resourcePath + "'});");
  44. return output.join("");
  45. };
  46. dojo.hostenv.loadPath = function (relpath, module, cb) {
  47. var colonIndex = relpath.indexOf(":");
  48. var slashIndex = relpath.indexOf("/");
  49. var uri;
  50. var currentIsXDomain = false;
  51. if (colonIndex > 0 && colonIndex < slashIndex) {
  52. uri = relpath;
  53. this.isXDomain = currentIsXDomain = true;
  54. } else {
  55. uri = this.getBaseScriptUri() + relpath;
  56. colonIndex = uri.indexOf(":");
  57. slashIndex = uri.indexOf("/");
  58. if (colonIndex > 0 && colonIndex < slashIndex && (!location.host || uri.indexOf("http://" + location.host) != 0)) {
  59. this.isXDomain = currentIsXDomain = true;
  60. }
  61. }
  62. if (djConfig.cacheBust && dojo.render.html.capable) {
  63. uri += "?" + String(djConfig.cacheBust).replace(/W+/g, "");
  64. }
  65. try {
  66. return ((!module || this.isXDomain) ? this.loadUri(uri, cb, currentIsXDomain, module) : this.loadUriAndCheck(uri, module, cb));
  67. }
  68. catch (e) {
  69. dojo.debug(e);
  70. return false;
  71. }
  72. };
  73. dojo.hostenv.loadUri = function (uri, cb, currentIsXDomain, module) {
  74. if (this.loadedUris[uri]) {
  75. return 1;
  76. }
  77. if (this.isXDomain && module) {
  78. if (uri.indexOf("__package__") != -1) {
  79. module += ".*";
  80. }
  81. this.xdOrderedReqs.push(module);
  82. if (currentIsXDomain || uri.indexOf("/nls/") == -1) {
  83. this.xdInFlight[module] = true;
  84. this.inFlightCount++;
  85. }
  86. if (!this.xdTimer) {
  87. this.xdTimer = setInterval("dojo.hostenv.watchInFlightXDomain();", 100);
  88. }
  89. this.xdStartTime = (new Date()).getTime();
  90. }
  91. if (currentIsXDomain) {
  92. var lastIndex = uri.lastIndexOf(".");
  93. if (lastIndex <= 0) {
  94. lastIndex = uri.length - 1;
  95. }
  96. var xdUri = uri.substring(0, lastIndex) + ".xd";
  97. if (lastIndex != uri.length - 1) {
  98. xdUri += uri.substring(lastIndex, uri.length);
  99. }
  100. var element = document.createElement("script");
  101. element.type = "text/javascript";
  102. element.src = xdUri;
  103. if (!this.headElement) {
  104. this.headElement = document.getElementsByTagName("head")[0];
  105. if (!this.headElement) {
  106. this.headElement = document.getElementsByTagName("html")[0];
  107. }
  108. }
  109. this.headElement.appendChild(element);
  110. } else {
  111. var contents = this.getText(uri, null, true);
  112. if (contents == null) {
  113. return 0;
  114. }
  115. if (this.isXDomain && uri.indexOf("/nls/") == -1) {
  116. var pkg = this.createXdPackage(contents, module, uri);
  117. dj_eval(pkg);
  118. } else {
  119. if (cb) {
  120. contents = "(" + contents + ")";
  121. }
  122. var value = dj_eval(contents);
  123. if (cb) {
  124. cb(value);
  125. }
  126. }
  127. }
  128. this.loadedUris[uri] = true;
  129. return 1;
  130. };
  131. dojo.hostenv.packageLoaded = function (pkg) {
  132. var deps = pkg.depends;
  133. var requireList = null;
  134. var requireAfterList = null;
  135. var provideList = [];
  136. if (deps && deps.length > 0) {
  137. var dep = null;
  138. var insertHint = 0;
  139. var attachedPackage = false;
  140. for (var i = 0; i < deps.length; i++) {
  141. dep = deps[i];
  142. if (dep[0] == "provide" || dep[0] == "hostenv.moduleLoaded") {
  143. provideList.push(dep[1]);
  144. } else {
  145. if (!requireList) {
  146. requireList = [];
  147. }
  148. if (!requireAfterList) {
  149. requireAfterList = [];
  150. }
  151. var unpackedDeps = this.unpackXdDependency(dep);
  152. if (unpackedDeps.requires) {
  153. requireList = requireList.concat(unpackedDeps.requires);
  154. }
  155. if (unpackedDeps.requiresAfter) {
  156. requireAfterList = requireAfterList.concat(unpackedDeps.requiresAfter);
  157. }
  158. }
  159. var depType = dep[0];
  160. var objPath = depType.split(".");
  161. if (objPath.length == 2) {
  162. dojo[objPath[0]][objPath[1]].apply(dojo[objPath[0]], dep.slice(1));
  163. } else {
  164. dojo[depType].apply(dojo, dep.slice(1));
  165. }
  166. }
  167. var contentIndex = this.xdContents.push({content:pkg.definePackage, resourceName:pkg["resourceName"], resourcePath:pkg["resourcePath"], isDefined:false}) - 1;
  168. for (var i = 0; i < provideList.length; i++) {
  169. this.xdDepMap[provideList[i]] = {requires:requireList, requiresAfter:requireAfterList, contentIndex:contentIndex};
  170. }
  171. for (var i = 0; i < provideList.length; i++) {
  172. this.xdInFlight[provideList[i]] = false;
  173. }
  174. }
  175. };
  176. dojo.hostenv.xdLoadFlattenedBundle = function (moduleName, bundleName, locale, bundleData) {
  177. locale = locale || "root";
  178. var jsLoc = dojo.hostenv.normalizeLocale(locale).replace("-", "_");
  179. var bundlePackage = [moduleName, "nls", bundleName].join(".");
  180. var bundle = dojo.hostenv.startPackage(bundlePackage);
  181. bundle[jsLoc] = bundleData;
  182. var mapName = [moduleName, jsLoc, bundleName].join(".");
  183. var bundleMap = dojo.hostenv.xdBundleMap[mapName];
  184. if (bundleMap) {
  185. for (var param in bundleMap) {
  186. bundle[param] = bundleData;
  187. }
  188. }
  189. };
  190. dojo.hostenv.xdBundleMap = {};
  191. dojo.xdRequireLocalization = function (moduleName, bundleName, locale, availableFlatLocales) {
  192. var locales = availableFlatLocales.split(",");
  193. var jsLoc = dojo.hostenv.normalizeLocale(locale);
  194. var bestLocale = "";
  195. for (var i = 0; i < locales.length; i++) {
  196. if (jsLoc.indexOf(locales[i]) == 0) {
  197. if (locales[i].length > bestLocale.length) {
  198. bestLocale = locales[i];
  199. }
  200. }
  201. }
  202. var fixedBestLocale = bestLocale.replace("-", "_");
  203. var bundlePackage = dojo.evalObjPath([moduleName, "nls", bundleName].join("."));
  204. if (bundlePackage && bundlePackage[fixedBestLocale]) {
  205. bundle[jsLoc.replace("-", "_")] = bundlePackage[fixedBestLocale];
  206. } else {
  207. var mapName = [moduleName, (fixedBestLocale || "root"), bundleName].join(".");
  208. var bundleMap = dojo.hostenv.xdBundleMap[mapName];
  209. if (!bundleMap) {
  210. bundleMap = dojo.hostenv.xdBundleMap[mapName] = {};
  211. }
  212. bundleMap[jsLoc.replace("-", "_")] = true;
  213. dojo.require(moduleName + ".nls" + (bestLocale ? "." + bestLocale : "") + "." + bundleName);
  214. }
  215. };
  216. (function () {
  217. var extra = djConfig.extraLocale;
  218. if (extra) {
  219. if (!extra instanceof Array) {
  220. extra = [extra];
  221. }
  222. dojo._xdReqLoc = dojo.xdRequireLocalization;
  223. dojo.xdRequireLocalization = function (m, b, locale, fLocales) {
  224. dojo._xdReqLoc(m, b, locale, fLocales);
  225. if (locale) {
  226. return;
  227. }
  228. for (var i = 0; i < extra.length; i++) {
  229. dojo._xdReqLoc(m, b, extra[i], fLocales);
  230. }
  231. };
  232. }
  233. })();
  234. dojo.hostenv.unpackXdDependency = function (dep) {
  235. var newDeps = null;
  236. var newAfterDeps = null;
  237. switch (dep[0]) {
  238.   case "requireIf":
  239.   case "requireAfterIf":
  240.   case "conditionalRequire":
  241. if ((dep[1] === true) || (dep[1] == "common") || (dep[1] && dojo.render[dep[1]].capable)) {
  242. newDeps = [{name:dep[2], content:null}];
  243. }
  244. break;
  245.   case "requireAll":
  246. dep.shift();
  247. newDeps = dep;
  248. dojo.hostenv.flattenRequireArray(newDeps);
  249. break;
  250.   case "kwCompoundRequire":
  251.   case "hostenv.conditionalLoadModule":
  252. var modMap = dep[1];
  253. var common = modMap["common"] || [];
  254. var newDeps = (modMap[dojo.hostenv.name_]) ? common.concat(modMap[dojo.hostenv.name_] || []) : common.concat(modMap["default"] || []);
  255. dojo.hostenv.flattenRequireArray(newDeps);
  256. break;
  257.   case "require":
  258.   case "requireAfter":
  259.   case "hostenv.loadModule":
  260. newDeps = [{name:dep[1], content:null}];
  261. break;
  262. }
  263. if (dep[0] == "requireAfterIf" || dep[0] == "requireIf") {
  264. newAfterDeps = newDeps;
  265. newDeps = null;
  266. }
  267. return {requires:newDeps, requiresAfter:newAfterDeps};
  268. };
  269. dojo.hostenv.xdWalkReqs = function () {
  270. var reqChain = null;
  271. var req;
  272. for (var i = 0; i < this.xdOrderedReqs.length; i++) {
  273. req = this.xdOrderedReqs[i];
  274. if (this.xdDepMap[req]) {
  275. reqChain = [req];
  276. reqChain[req] = true;
  277. this.xdEvalReqs(reqChain);
  278. }
  279. }
  280. };
  281. dojo.hostenv.xdEvalReqs = function (reqChain) {
  282. while (reqChain.length > 0) {
  283. var req = reqChain[reqChain.length - 1];
  284. var pkg = this.xdDepMap[req];
  285. if (pkg) {
  286. var reqs = pkg.requires;
  287. if (reqs && reqs.length > 0) {
  288. var nextReq;
  289. for (var i = 0; i < reqs.length; i++) {
  290. nextReq = reqs[i].name;
  291. if (nextReq && !reqChain[nextReq]) {
  292. reqChain.push(nextReq);
  293. reqChain[nextReq] = true;
  294. this.xdEvalReqs(reqChain);
  295. }
  296. }
  297. }
  298. var contents = this.xdContents[pkg.contentIndex];
  299. if (!contents.isDefined) {
  300. var content = contents.content;
  301. content["resourceName"] = contents["resourceName"];
  302. content["resourcePath"] = contents["resourcePath"];
  303. this.xdDefList.push(content);
  304. contents.isDefined = true;
  305. }
  306. this.xdDepMap[req] = null;
  307. var reqs = pkg.requiresAfter;
  308. if (reqs && reqs.length > 0) {
  309. var nextReq;
  310. for (var i = 0; i < reqs.length; i++) {
  311. nextReq = reqs[i].name;
  312. if (nextReq && !reqChain[nextReq]) {
  313. reqChain.push(nextReq);
  314. reqChain[nextReq] = true;
  315. this.xdEvalReqs(reqChain);
  316. }
  317. }
  318. }
  319. }
  320. reqChain.pop();
  321. }
  322. };
  323. dojo.hostenv.clearXdInterval = function () {
  324. clearInterval(this.xdTimer);
  325. this.xdTimer = 0;
  326. };
  327. dojo.hostenv.watchInFlightXDomain = function () {
  328. var waitInterval = (djConfig.xdWaitSeconds || 15) * 1000;
  329. if (this.xdStartTime + waitInterval < (new Date()).getTime()) {
  330. this.clearXdInterval();
  331. var noLoads = "";
  332. for (var param in this.xdInFlight) {
  333. if (this.xdInFlight[param]) {
  334. noLoads += param + " ";
  335. }
  336. }
  337. dojo.raise("Could not load cross-domain packages: " + noLoads);
  338. }
  339. for (var param in this.xdInFlight) {
  340. if (this.xdInFlight[param]) {
  341. return;
  342. }
  343. }
  344. this.clearXdInterval();
  345. this.xdWalkReqs();
  346. var defLength = this.xdDefList.length;
  347. for (var i = 0; i < defLength; i++) {
  348. var content = dojo.hostenv.xdDefList[i];
  349. if (djConfig["debugAtAllCosts"] && content["resourceName"]) {
  350. if (!this["xdDebugQueue"]) {
  351. this.xdDebugQueue = [];
  352. }
  353. this.xdDebugQueue.push({resourceName:content.resourceName, resourcePath:content.resourcePath});
  354. } else {
  355. content(dojo);
  356. }
  357. }
  358. for (var i = 0; i < this.xdContents.length; i++) {
  359. var current = this.xdContents[i];
  360. if (current.content && !current.isDefined) {
  361. current.content(dojo);
  362. }
  363. }
  364. this.resetXd();
  365. if (this["xdDebugQueue"] && this.xdDebugQueue.length > 0) {
  366. this.xdDebugFileLoaded();
  367. } else {
  368. this.xdNotifyLoaded();
  369. }
  370. };
  371. dojo.hostenv.xdNotifyLoaded = function () {
  372. this.inFlightCount = 0;
  373. if (this._djInitFired && !this.loadNotifying) {
  374. this.callLoaded();
  375. }
  376. };
  377. dojo.hostenv.flattenRequireArray = function (target) {
  378. if (target) {
  379. for (var i = 0; i < target.length; i++) {
  380. if (target[i] instanceof Array) {
  381. target[i] = {name:target[i][0], content:null};
  382. } else {
  383. target[i] = {name:target[i], content:null};
  384. }
  385. }
  386. }
  387. };
  388. dojo.hostenv.xdHasCalledPreload = false;
  389. dojo.hostenv.xdRealCallLoaded = dojo.hostenv.callLoaded;
  390. dojo.hostenv.callLoaded = function () {
  391. if (this.xdHasCalledPreload || dojo.hostenv.getModulePrefix("dojo") == "src" || !this.localesGenerated) {
  392. this.xdRealCallLoaded();
  393. } else {
  394. if (this.localesGenerated) {
  395. this.registerNlsPrefix = function () {
  396. dojo.registerModulePath("nls", dojo.hostenv.getModulePrefix("dojo") + "/../nls");
  397. };
  398. this.preloadLocalizations();
  399. }
  400. }
  401. this.xdHasCalledPreload = true;
  402. };