- let manifestURI = getURI("chrome.manifest");
- let manifest = httpGet(manifestURI)
- .responseText
- .replace(/#(resource)#/g, "$1")
- .replace(/^\s*|\s*$|#.*/g, "")
- .replace(/^\s*\n/gm, "");
-
- for each (let line in manifest.split("\n")) {
- let fields = line.split(/\s+/);
- switch (fields[0]) {
- case "category":
- categoryManager.addCategoryEntry(fields[1], fields[2], fields[3], false, true);
- categories.push([fields[1], fields[2]]);
- break;
- case "component":
- components[fields[1]] = new FactoryProxy(getURI(fields[2]).spec, fields[1]);
- break;
- case "contract":
- components[fields[2]].contractID = fields[1];
- break;
-
- case "resource":
- moduleName = moduleName || fields[1];
- resources.push(fields[1]);
- resourceProto.setSubstitution(fields[1], getURI(fields[2]));
- }
+ let manifest = JSON.parse(httpGet(getURI("config.json"))
+ .responseText);
+
+ if (!manifest.categories)
+ manifest.categories = [];
+
+ for (let [classID, { contract, path, categories }] of Iterator(manifest.components || {})) {
+ components[classID] = new FactoryProxy(getURI(path).spec, classID, contract);
+ if (categories)
+ for (let [category, id] in Iterator(categories))
+ manifest.categories.push([category, id, contract]);
+ }
+
+ for (let [category, id, value] of manifest.categories)
+ categoryManager.addCategoryEntry(category, id, value,
+ false, true);
+
+ for (let [pkg, path] in Iterator(manifest.resources || {})) {
+ moduleName = moduleName || pkg;
+ resourceProto.setSubstitution(pkg, getURI(path));