Mercurial > browser-couch
changeset 26:fd8f4c369dc4
Added a more robust module loader.
author | Atul Varma <varmaa@toolness.com> |
---|---|
date | Mon, 13 Apr 2009 15:29:56 -0700 |
parents | 58ef69894c96 |
children | 95a1e6ad3f57 |
files | browser-couch.js |
diffstat | 1 files changed, 52 insertions(+), 20 deletions(-) [+] |
line wrap: on
line diff
--- a/browser-couch.js Mon Apr 13 15:14:57 2009 -0700 +++ b/browser-couch.js Mon Apr 13 15:29:56 2009 -0700 @@ -34,6 +34,56 @@ * * ***** END LICENSE BLOCK ***** */ +var ModuleLoader = { + LIBS: {JSON: "json2.js"}, + + require: function ML_require(libs, cb) { + var self = this; + var i = 0; + var lastLib = ""; + + if (libs.constructor.name != "Array") + libs = [libs]; + + function loadNextLib() { + if (lastLib && !window[lastLib]) + throw new Error("Failed to load library: " + lastLib); + if (i == libs.length) + cb(); + else { + var libName = libs[i]; + i += 1; + if (window.libName) + loadNextLib(); + else { + var libUrl = self.LIBS[libName]; + if (!libUrl) + throw new Error("Unknown lib: " + libName); + lastLib = libName; + self._loadScript(libUrl, window, loadNextLib); + } + } + } + + loadNextLib(); + }, + + _loadScript: function ML__loadScript(url, window, cb) { + var doc = window.document; + var script = doc.createElement("script"); + script.setAttribute("src", url); + script.addEventListener( + "load", + function onLoad() { + script.removeEventListener("load", onLoad, false); + cb(); + }, + false + ); + doc.body.appendChild(script); + } +}; + var BrowserCouch = { USE_EVAL_FOR_JSON_PARSING: true, @@ -54,12 +104,9 @@ JSON = window.JSON; createDb(); } else - self._loadScript( - "json2.js", - window, + ModuleLoader.require( + "JSON", function() { - if (!window.JSON) - throw new Error('JSON library failed to load'); JSON = window.JSON; if (BrowserCouch.USE_EVAL_FOR_JSON_PARSING) JSON.parse = function JSON_parse(string) { @@ -75,21 +122,6 @@ createDb(); }, - _loadScript: function BC__loadScript(url, window, cb) { - var doc = window.document; - var script = doc.createElement("script"); - script.setAttribute("src", url); - script.addEventListener( - "load", - function onLoad() { - script.removeEventListener("load", onLoad, false); - cb(); - }, - false - ); - doc.body.appendChild(script); - }, - _Dictionary: function BC__Dictionary(JSON) { var dict = {}; var keys = [];