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

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.provide("dojo.widget.html.loader");
  9. dojo.require("dojo.widget.HtmlWidget");
  10. dojo.require("dojo.io.*");
  11. dojo.require("dojo.lang.common");
  12. dojo.require("dojo.lang.extras");
  13. dojo.require("dojo.experimental");
  14. dojo.experimental("dojo.widget.html.loader");
  15. dojo.widget.html.loader = new (function () {
  16. this.toString = function () {
  17. return "dojo.widget.html.loader";
  18. };
  19. var _loader = this;
  20. dojo.addOnLoad(function () {
  21. dojo.experimental(_loader.toString());
  22. var undo = dojo.evalObjPath("dojo.undo.browser");
  23. if (djConfig["preventBackButtonFix"] && undo && !undo.initialState) {
  24. undo.setInitialState(new trackerObj);
  25. }
  26. });
  27. var logger = {};
  28. var trackerObj = function (id, data) {
  29. this.id = id;
  30. this.data = data;
  31. };
  32. trackerObj.prototype.handle = function (type) {
  33. if (typeof dojo == "undefined") {
  34. return;
  35. }
  36. var wg = dojo.widget.byId(this.id);
  37. if (wg) {
  38. wg.setContent(this.data, true);
  39. }
  40. };
  41. this._log = function (widget, data) {
  42. if (widget.trackHistory) {
  43. if (!logger[widget.widgetId]) {
  44. logger[widget.widgetId] = {childrenIds:[], stack:[data]};
  45. }
  46. var children = logger[widget.widgetId].childrenIds;
  47. while (children && children.length) {
  48. delete logger[children.pop()];
  49. }
  50. for (var child in widget.children) {
  51. logger[widget.widgetId].childrenIds = child.widgetId;
  52. }
  53. dojo.undo.browser.addToHistory(new trackerObj(widget.widgetId, dojo.lang.shallowCopy(data, true)));
  54. }
  55. };
  56. var undef = dojo.lang.isUndefined;
  57. var isFunc = dojo.lang.isFunction;
  58. function handleDefaults(e, handler, useAlert) {
  59. if (!handler) {
  60. handler = "onContentError";
  61. }
  62. if (dojo.lang.isString(e)) {
  63. e = {_text:e};
  64. }
  65. if (!e._text) {
  66. e._text = e.toString();
  67. }
  68. e.toString = function () {
  69. return this._text;
  70. };
  71. if (typeof e.returnValue != "boolean") {
  72. e.returnValue = true;
  73. }
  74. if (typeof e.preventDefault != "function") {
  75. e.preventDefault = function () {
  76. this.returnValue = false;
  77. };
  78. }
  79. this[handler](e);
  80. if (e.returnValue) {
  81. if (useAlert) {
  82. alert(e.toString());
  83. } else {
  84. this.loader.callOnUnLoad.call(this, false);
  85. this.onSetContent(e.toString());
  86. }
  87. }
  88. }
  89. function downloader(bindArgs) {
  90. for (var x in this.bindArgs) {
  91. bindArgs[x] = (undef(bindArgs[x]) ? this.bindArgs[x] : undefined);
  92. }
  93. var cache = this.cacheContent;
  94. if (undef(bindArgs.useCache)) {
  95. bindArgs.useCache = cache;
  96. }
  97. if (undef(bindArgs.preventCache)) {
  98. bindArgs.preventCache = !cache;
  99. }
  100. if (undef(bindArgs.mimetype)) {
  101. bindArgs.mimetype = "text/html";
  102. }
  103. this.loader.bindObj = dojo.io.bind(bindArgs);
  104. }
  105. function stackRunner(st) {
  106. var err = "", func = null;
  107. var scope = this.scriptScope || dojo.global();
  108. while (st.length) {
  109. func = st.shift();
  110. try {
  111. func.call(scope);
  112. }
  113. catch (e) {
  114. err += "n" + func + " failed: " + e;
  115. }
  116. }
  117. if (err.length) {
  118. var name = (st == this.loader.addOnLoads) ? "addOnLoad" : "addOnUnLoad";
  119. handleDefaults.call(this, name + " failuren " + err, "onExecError", true);
  120. }
  121. }
  122. function stackPusher(st, obj, func) {
  123. if (typeof func == "undefined") {
  124. st.push(obj);
  125. } else {
  126. st.push(function () {
  127. obj[func]();
  128. });
  129. }
  130. }
  131. function refreshed() {
  132. this.onResized();
  133. this.onLoad();
  134. this.isLoaded = true;
  135. }
  136. function asyncParse(data) {
  137. if (this.executeScripts) {
  138. this.onExecScript.call(this, data.scripts);
  139. }
  140. if (this.parseContent) {
  141. this.onContentParse.call(this);
  142. }
  143. refreshed.call(this);
  144. }
  145. function runHandler() {
  146. if (dojo.lang.isFunction(this.handler)) {
  147. this.handler(this, this.containerNode || this.domNode);
  148. refreshed.call(this);
  149. return false;
  150. }
  151. return true;
  152. }
  153. this.htmlContentBasicFix = function (s, url) {
  154. var titles = [], styles = [];
  155. var regex = /<title[^>]*>([sS]*?)</title>/i;
  156. var match, attr;
  157. while (match = regex.exec(s)) {
  158. titles.push(match[1]);
  159. s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
  160. }
  161. regex = /(?:<(style)[^>]*>([sS]*?)</style>|<link ([^>]*rel=['"]?stylesheet['"]?[^>]*)>)/i;
  162. while (match = regex.exec(s)) {
  163. if (match[1] && match[1].toLowerCase() == "style") {
  164. styles.push(dojo.html.fixPathsInCssText(match[2], url));
  165. } else {
  166. if (attr = match[3].match(/href=(['"]?)([^'">]*)1/i)) {
  167. styles.push({path:attr[2]});
  168. }
  169. }
  170. s = s.substring(0, match.index) + s.substr(match.index + match[0].length);
  171. }
  172. return {"s":s, "titles":titles, "styles":styles};
  173. };
  174. this.htmlContentAdjustPaths = function (s, url) {
  175. var tag = "", str = "", tagFix = "", path = "";
  176. var attr = [], origPath = "", fix = "";
  177. var regexFindTag = /<[a-z][a-z0-9]*[^>]*s(?:(?:src|href|style)=[^>])+[^>]*>/i;
  178. var regexFindAttr = /s(src|href|style)=(['"]?)([w()[]/.,\'"-:;#=&?s@]+?)2/i;
  179. var regexProtocols = /^(?:[#]|(?:(?:https?|ftps?|file|javascript|mailto|news):))/;
  180. while (tag = regexFindTag.exec(s)) {
  181. str += s.substring(0, tag.index);
  182. s = s.substring((tag.index + tag[0].length), s.length);
  183. tag = tag[0];
  184. tagFix = "";
  185. while (attr = regexFindAttr.exec(tag)) {
  186. path = "";
  187. origPath = attr[3];
  188. switch (attr[1].toLowerCase()) {
  189.   case "src":
  190.   case "href":
  191. if (regexProtocols.exec(origPath)) {
  192. path = origPath;
  193. } else {
  194. path = (new dojo.uri.Uri(url, origPath).toString());
  195. }
  196. break;
  197.   case "style":
  198. path = dojo.html.fixPathsInCssText(origPath, url);
  199. break;
  200.   default:
  201. path = origPath;
  202. }
  203. fix = " " + attr[1] + "=" + attr[2] + path + attr[2];
  204. tagFix += tag.substring(0, attr.index) + fix;
  205. tag = tag.substring((attr.index + attr[0].length), tag.length);
  206. }
  207. str += tagFix + tag;
  208. }
  209. return str + s;
  210. };
  211. this.htmlContentScripts = function (s, collectScripts) {
  212. var scripts = [], requires = [], match = [];
  213. var attr = "", tmp = null, tag = "", sc = "", str = "";
  214. var regex = /<script([^>]*)>([sS]*?)</script>/i;
  215. var regexSrc = /src=(['"]?)([^"']*)1/i;
  216. var regexDojoJs = /.*(bdojob.js(?:.uncompressed.js)?)$/;
  217. var regexInvalid = /(?:var )?bdjConfigb(?:[s]*=[s]*{[^}]+}|.[w]*[s]*=[s]*[^;n]*)?;?|dojo.hostenv.writeIncludes(s*);?/g;
  218. var regexRequires = /dojo.(?:(?:require(?:After)?(?:If)?)|(?:widget.(?:manager.)?registerWidgetPackage)|(?:(?:hostenv.)?setModulePrefix)|defineNamespace)((['"]).*?1)s*;?/;
  219. while (match = regex.exec(s)) {
  220. if (this.executeScripts && match[1]) {
  221. if (attr = regexSrc.exec(match[1])) {
  222. if (regexDojoJs.exec(attr[2])) {
  223. dojo.debug("Security note! inhibit:" + attr[2] + " from  beeing loaded again.");
  224. } else {
  225. scripts.push({path:attr[2]});
  226. }
  227. }
  228. }
  229. if (match[2]) {
  230. sc = match[2].replace(regexInvalid, "");
  231. if (!sc) {
  232. continue;
  233. }
  234. while (tmp = regexRequires.exec(sc)) {
  235. requires.push(tmp[0]);
  236. sc = sc.substring(0, tmp.index) + sc.substr(tmp.index + tmp[0].length);
  237. }
  238. if (collectScripts) {
  239. scripts.push(sc);
  240. }
  241. }
  242. s = s.substr(0, match.index) + s.substr(match.index + match[0].length);
  243. }
  244. if (collectScripts) {
  245. var regex = /(<[a-zA-Z][a-zA-Z0-9]*s[^>]*S=(['"])[^>]*[^.]])scriptScope([^>]*>)/;
  246. str = "";
  247. while (tag = regex.exec(s)) {
  248. tmp = ((tag[2] == "'") ? """ : "'");
  249. str += s.substring(0, tag.index);
  250. s = s.substr(tag.index).replace(regex, "$1dojo.widget.byId(" + tmp + this.widgetId + tmp + ").scriptScope$3");
  251. }
  252. s = str + s;
  253. }
  254. return {"s":s, "requires":requires, "scripts":scripts};
  255. };
  256. this.splitAndFixPaths = function (args) {
  257. if (!args.url) {
  258. args.url = "./";
  259. }
  260. url = new dojo.uri.Uri(location, args.url).toString();
  261. var ret = {"xml":"", "styles":[], "titles":[], "requires":[], "scripts":[], "url":url};
  262. if (args.content) {
  263. var tmp = null, content = args.content;
  264. if (args.adjustPaths) {
  265. content = _loader.htmlContentAdjustPaths.call(this, content, url);
  266. }
  267. tmp = _loader.htmlContentBasicFix.call(this, content, url);
  268. content = tmp.s;
  269. ret.styles = tmp.styles;
  270. ret.titles = tmp.titles;
  271. if (args.collectRequires || args.collectScripts) {
  272. tmp = _loader.htmlContentScripts.call(this, content, args.collectScripts);
  273. content = tmp.s;
  274. ret.requires = tmp.requires;
  275. ret.scripts = tmp.scripts;
  276. }
  277. var match = [];
  278. if (args.bodyExtract) {
  279. match = content.match(/<body[^>]*>s*([sS]+)s*</body>/im);
  280. if (match) {
  281. content = match[1];
  282. }
  283. }
  284. ret.xml = content;
  285. }
  286. return ret;
  287. };
  288. this.hookUp = function (args) {
  289. var widget = args.widget;
  290. if (dojo.lang.isString(widget)) {
  291. if (args.mixin) {
  292. dojo.raise(this.toString() + ", cant use mixin when widget is a string");
  293. }
  294. widget = dojo.evalObjPath(widget);
  295. }
  296. if (!widget || !(widget instanceof dojo.widget.HtmlWidget)) {
  297. dojo.raise(this.toString() + " Widget isn't defined or isn't a HtmlWidget instance");
  298. }
  299. if (widget.loader && widget.setUrl) {
  300. return;
  301. }
  302. var widgetProto = (args.mixin) ? widget : widget.constructor.prototype;
  303. widget.loader = {isLoaded:false, styleNodes:[], addOnLoads:[], addOnUnLoads:[], callOnUnLoad:(function (canCall) {
  304. return function (after) {
  305. this.abort();
  306. if (canCall) {
  307. this.onUnLoad();
  308. }
  309. canCall = after;
  310. };
  311. })(false), bindObj:null, unHook:(function (w, wg) {
  312. var oldProps = {isContainer:w.isContainer, adjustPats:w.adjustPaths, href:w.href, extractContent:w.extractContent, parseContent:w.parseContent, cacheContent:w.cacheContent, bindArgs:w.bindArgs, preload:w.preload, refreshOnShow:w.refreshOnShow, handler:w.handler, trackHistory:w.trackHistory, executeScripts:w.executeScripts, scriptScope:w.scriptScope, postCreate:w.postCreate, show:w.show, refresh:w.refresh, loadContents:w.loadContents, abort:w.abort, destroy:w.destroy, onLoad:w.onLoad, onUnLoad:w.onUnLoad, addOnLoad:w.addOnLoad, addOnUnLoad:w.addOnUnLoad, onDownloadStart:w.onDownloadStart, onDownloadEnd:w.onDownloadEnd, onDownloadError:w.onDownloadError, onContentError:w.onContentError, onExecError:w.onExecError, onSetContent:w.onSetContent, setUrl:w.setUrl, setContent:w.setContent, onContentParse:w.onContentParse, onExecScript:w.onExecScript, setHandler:w.setHandler};
  313. return function () {
  314. if (wg.abort) {
  315. wg.abort();
  316. }
  317. if ((w != wg) && (dojo.widget.byType(wg.widgetType).length > 1)) {
  318. return;
  319. }
  320. for (var x in oldProps) {
  321. if (oldProps[x] === undefined) {
  322. delete w[x];
  323. continue;
  324. }
  325. w[x] = oldProps[x];
  326. }
  327. delete wg._loader_defined;
  328. delete wg.loader;
  329. };
  330. })(widgetProto, widget)};
  331. if (widgetProto._loader_defined || widget._loader_defined) {
  332. return;
  333. }
  334. dojo.mixin(widgetProto, {isContainer:true, adjustPaths:undef(widgetProto.adjustPaths) ? true : widgetProto.adjustPaths, href:undef(widgetProto.href) ? "" : widgetProto.href, extractContent:undef(widgetProto.extractContent) ? true : widgetProto.extractContent, parseContent:undef(widgetProto.parseContent) ? true : widgetProto.parseContent, cacheContent:undef(widgetProto.cacheContent) ? true : widgetProto.cacheContent, bindArgs:undef(widgetProto.bindArgs) ? {} : widgetProto.bindArgs, preload:undef(widgetProto.preload) ? false : widgetProto.preload, refreshOnShow:undef(widgetProto.refreshOnShow) ? false : widgetProto.refreshOnShow, handler:undef(widgetProto.handler) ? "" : widgetProto.handler, executeScripts:undef(widgetProto.executeScripts) ? false : widgetProto.executeScripts, trackHistory:undef(widgetProto.tracHistory) ? false : widgetProto.trackHistory, scriptScope:null});
  335. widgetProto.postCreate = (function (postCreate) {
  336. return function () {
  337. if (widgetProto.constructor.superclass.postCreate != postCreate) {
  338. postCreate.apply(this, arguments);
  339. } else {
  340. widgetProto.constructor.superclass.postCreate.apply(this, arguments);
  341. }
  342. if (this.handler !== "") {
  343. this.setHandler(this.handler);
  344. }
  345. if (this.isShowing() || this.preload) {
  346. this.loadContents();
  347. if (!this.href) {
  348. _loader._log(this, (this.domNode || this.containerNode).innerHTML);
  349. }
  350. }
  351. };
  352. })(widgetProto.postCreate);
  353. widgetProto.show = (function (show) {
  354. return function () {
  355. if (this.refreshOnShow) {
  356. this.refresh();
  357. } else {
  358. this.loadContents();
  359. }
  360. if ((widgetProto.constructor.superclass.show == show) || !isFunc(show)) {
  361. widgetProto.constructor.superclass.show.apply(this, arguments);
  362. } else {
  363. show.apply(this, arguments);
  364. }
  365. };
  366. })(widgetProto.show);
  367. widgetProto.destroy = (function (destroy) {
  368. return function (destroy) {
  369. this.onUnLoad();
  370. this.abort();
  371. this.loader.unHook();
  372. if ((widgetProto.constructor.superclass.destroy != destroy) && isFunc(destroy)) {
  373. destroy.apply(this, arguments);
  374. } else {
  375. widgetProto.constructor.superclass.destroy.apply(this, arguments);
  376. }
  377. };
  378. })(widgetProto.destroy);
  379. if (!widgetProto.refresh) {
  380. widgetProto.refresh = function () {
  381. this.loader.isLoaded = false;
  382. this.loadContents();
  383. };
  384. }
  385. if (!widgetProto.loadContents) {
  386. widgetProto.loadContents = function () {
  387. if (this.loader.isLoaded) {
  388. return;
  389. }
  390. if (isFunc(this.handler)) {
  391. runHandler.call(this);
  392. } else {
  393. if (this.href !== "") {
  394. handleDefaults.call(this, "Loading...", "onDownloadStart");
  395. var self = this, url = this.href;
  396. downloader.call(this, {url:url, load:function (type, data, xhr) {
  397. self.onDownloadEnd.call(self, url, data);
  398. }, error:function (type, err, xhr) {
  399. var e = {responseText:xhr.responseText, status:xhr.status, statusText:xhr.statusText, responseHeaders:(xhr.getAllResponseHeaders) ? xhr.getAllResponseHeaders() : [], _text:"Error loading '" + url + "' (" + xhr.status + " " + xhr.statusText + ")"};
  400. handleDefaults.call(self, e, "onDownloadError");
  401. self.onLoad();
  402. }});
  403. }
  404. }
  405. };
  406. }
  407. if (!widgetProto.abort) {
  408. widgetProto.abort = function () {
  409. if (!this.loader || !this.loader.bindObj || !this.loader.bindObj.abort) {
  410. return;
  411. }
  412. this.loader.bindObj.abort();
  413. this.loader.bindObj = null;
  414. };
  415. }
  416. if (!widgetProto.onLoad) {
  417. widgetProto.onLoad = function () {
  418. stackRunner.call(this, this.loader.addOnLoads);
  419. this.loader.isLoaded = true;
  420. };
  421. }
  422. if (!widgetProto.onUnLoad) {
  423. widgetProto.onUnLoad = function () {
  424. stackRunner.call(this, this.loader.addOnUnLoads);
  425. delete this.scriptScope;
  426. };
  427. }
  428. if (!widgetProto.addOnLoad) {
  429. widgetProto.addOnLoad = function (obj, func) {
  430. stackPusher.call(this, this.loader.addOnLoads, obj, func);
  431. };
  432. }
  433. if (!widgetProto.addOnUnLoad) {
  434. widgetProto.addOnUnLoad = function (obj, func) {
  435. stackPusher.call(this, this.loader.addOnUnLoads, obj, func);
  436. };
  437. }
  438. if (!widgetProto.onExecError) {
  439. widgetProto.onExecError = function () {
  440. };
  441. }
  442. if (!widgetProto.onContentError) {
  443. widgetProto.onContentError = function () {
  444. };
  445. }
  446. if (!widgetProto.onDownloadError) {
  447. widgetProto.onDownloadError = function () {
  448. };
  449. }
  450. if (!widgetProto.onDownloadStart) {
  451. widgetProto.onDownloadStart = function (onDownloadStart) {
  452. };
  453. }
  454. if (!widgetProto.onDownloadEnd) {
  455. widgetProto.onDownloadEnd = function (url, data) {
  456. var args = {content:data, url:url, adjustPaths:this.adjustPaths, collectScripts:this.executeScripts, collectRequires:this.parseContent, bodyExtract:this.extractContent};
  457. data = _loader.splitAndFixPaths.call(this, args);
  458. this.setContent(data);
  459. };
  460. }
  461. if (!widgetProto.onSetContent) {
  462. widgetProto.onSetContent = function (cont) {
  463. this.destroyChildren();
  464. var styleNodes = this.loader.styleNodes;
  465. while (styleNodes.length) {
  466. var st = styleNodes.pop();
  467. if (st && st.parentNode) {
  468. st.parentNode.removeChild(st);
  469. }
  470. }
  471. var node = this.containerNode || this.domNode;
  472. while (node.firstChild) {
  473. try {
  474. dojo.event.browser.clean(node.firstChild);
  475. }
  476. catch (e) {
  477. }
  478. node.removeChild(node.firstChild);
  479. }
  480. try {
  481. if (typeof cont != "string") {
  482. node.appendChild(cont);
  483. } else {
  484. try {
  485. node.innerHTML = cont;
  486. }
  487. catch (e) {
  488. var tmp;
  489. (tmp = dojo.doc().createElement("div")).innerHTML = cont;
  490. while (tmp.firstChild) {
  491. node.appendChild(tmp.removeChild(tmp.firstChild));
  492. }
  493. }
  494. }
  495. }
  496. catch (e) {
  497. e._text = "Could'nt load content: " + e;
  498. var useAlert = (this.loader._onSetContent_err == e._text);
  499. this.loader._onSetContent_err = e._text;
  500. handleDefaults.call(this, e, "onContentError", useAlert);
  501. }
  502. };
  503. }
  504. if (!widgetProto.setUrl) {
  505. widgetProto.setUrl = function (url) {
  506. this.href = url;
  507. this.loader.isLoaded = false;
  508. if (this.preload || this.isShowing()) {
  509. this.loadContents();
  510. }
  511. };
  512. }
  513. if (!widgetProto.setContent) {
  514. widgetProto.setContent = function (data, dontLog) {
  515. this.loader.callOnUnLoad.call(this, true);
  516. if (!data || dojo.html.isNode(data)) {
  517. this.onSetContent(data);
  518. refreshed.call(this);
  519. } else {
  520. if (typeof data.xml != "string") {
  521. this.href = "";
  522. var args = {content:data, url:this.href, adjustPaths:this.adjustPaths, collectScripts:this.executeScripts, collectRequires:this.parseContent, bodyExtract:this.extractContent};
  523. data = _loader.splitAndFixPaths.call(this, args);
  524. } else {
  525. if (data.url != "./") {
  526. this.url = data.url;
  527. }
  528. }
  529. this.onSetContent(data.xml);
  530. for (var i = 0, styles = data.styles; i < styles.length; i++) {
  531. if (styles[i].path) {
  532. this.loader.styleNodes.push(dojo.html.insertCssFile(styles[i].path));
  533. } else {
  534. this.loader.styleNodes.push(dojo.html.insertCssText(styles[i]));
  535. }
  536. }
  537. if (this.parseContent) {
  538. for (var i = 0, requires = data.requires; i < requires.length; i++) {
  539. try {
  540. eval(requires[i]);
  541. }
  542. catch (e) {
  543. e._text = "dojo.widget.html.loader.hookUp: error in package loading calls, " + (e.description || e);
  544. handleDefaults.call(this, e, "onContentError", true);
  545. }
  546. }
  547. }
  548. if (dojo.hostenv.isXDomain && data.requires.length) {
  549. dojo.addOnLoad(function () {
  550. asyncParse.call(this, data);
  551. if (!dontLog) {
  552. _loader._log(this, data);
  553. }
  554. });
  555. dontLog = true;
  556. } else {
  557. asyncParse.call(this, data);
  558. }
  559. }
  560. if (!dontLog) {
  561. }
  562. };
  563. }
  564. if (!widgetProto.onContentParse) {
  565. widgetProto.onContentParse = function () {
  566. var node = this.containerNode || this.domNode;
  567. var parser = new dojo.xml.Parse();
  568. var frag = parser.parseElement(node, null, true);
  569. dojo.widget.getParser().createSubComponents(frag, this);
  570. };
  571. }
  572. if (!widgetProto.onExecScript) {
  573. widgetProto.onExecScript = function (scripts) {
  574. var self = this, tmp = "", code = "";
  575. for (var i = 0; i < scripts.length; i++) {
  576. if (scripts[i].path) {
  577. var url = scripts[i].path;
  578. downloader.call(this, {"url":url, "load":function (type, scriptStr) {
  579. (function () {
  580. tmp = scriptStr;
  581. scripts[i] = scriptStr;
  582. }).call(self);
  583. }, "error":function (type, error) {
  584. error._text = type + " downloading remote script";
  585. handleDefaults.call(self, error, "onExecError", true);
  586. }, "mimetype":"text/plain", "sync":true});
  587. code += tmp;
  588. } else {
  589. code += scripts[i];
  590. }
  591. }
  592. try {
  593. delete this.scriptScope;
  594. this.scriptScope = new (new Function("_container_", code + "; return this;"))(self);
  595. }
  596. catch (e) {
  597. e._text = "Error running scripts from content:n" + (e.description || e.toString());
  598. handleDefaults.call(this, e, "onExecError", true);
  599. }
  600. };
  601. }
  602. if (!widgetProto.setHandler) {
  603. widgetProto.setHandler = function (handler) {
  604. var fcn = dojo.lang.isFunction(handler) ? handler : window[handler];
  605. if (!isFunc(fcn)) {
  606. handleDefaults.call(this, "Unable to set handler, '" + handler + "' not a function.", "onExecError", true);
  607. return;
  608. }
  609. this.handler = function () {
  610. return fcn.apply(this, arguments);
  611. };
  612. };
  613. }
  614. widgetProto._loader_defined = true;
  615. };
  616. })();