{ "prefbar:info": { "formatversion": 3 }, "prefbar:menu:enabled": { "items": [ "prefbar:button:sminfolist" ] }, "prefbar:button:sminfolist": { "type": "button", "label": "InfoList", "onclick": "// PrefBar InfoList button\n// Copyright (C) Manuel Reimer \n// This program is free software; you can redistribute it and/or\n// modify it under the terms of the GNU General Public License\n// version 3 as published by the Free Software Foundation\n\nfunction main() {\n if (getExtMgrExts()) return;\n if (getExtMgr2Exts()) return;\n alert(\"Failed to get extensions.\");\n}\n\n// Firefox up to 3.6, SeaMonkey 2.0\nfunction getExtMgrExts() {\n if (!(\"@mozilla.org/extensions/manager;1\" in Components.classes)) return false;\n var RDF = goPrefBar.RDF.RDFService;\n\n var RDisabledPref = RDF.GetResource(\"http://www.mozilla.org/2004/em-rdf#isDisabled\");\n var RURLPref = RDF.GetResource(\"http://www.mozilla.org/2004/em-rdf#homepageURL\");\n\n var extMgr = Components.classes[\"@mozilla.org/extensions/manager;1\"]\n .getService(Components.interfaces.nsIExtensionManager);\n var appInfo = Components.classes[\"@mozilla.org/xre/app-info;1\"]\n .getService(Components.interfaces.nsIXULAppInfo);\n\n var ds = extMgr.datasource;\n\n var ditems;\n try {\n ditems = extMgr.getIncompatibleItemList(appInfo.ID, appInfo.version, appInfo.platformVersion, 2, true, {});\n } catch(e) {\n ditems = extMgr.getIncompatibleItemList(appInfo.version, appInfo.platformVersion, 2, true, {});\n }\n var extdisabled = {};\n for (var i = 0; i < ditems.length; i++)\n extdisabled[ditems[i].id] = true;\n\n var arrout = new Array();\n\n var items = extMgr.getItemList(2, {});\n for (var j = 0; j < items.length; j++) {\n var item = items[j];\n\n var Ritem = RDF.GetResource(\"urn:mozilla:item:\" + item.id);\n\n var obj = {'name':item.name,\n 'version':item.version,\n 'isActive':!extdisabled[item.id],\n 'homepageURL':''};\n\n if (obj.isActive) {\n var Ldisabled = ds.GetTarget(Ritem, RDisabledPref, true);\n if (Ldisabled) {\n var dvalue = Ldisabled.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;\n obj.isActive = (dvalue != \"true\");\n }\n }\n\n var Lurl = ds.GetTarget(Ritem, RURLPref, true);\n if (Lurl) obj.homepageURL = Lurl.QueryInterface(Components.interfaces.nsIRDFLiteral).Value;\n\n arrout.push(obj);\n }\n\n printInfo(arrout);\n\n return true;\n}\n\n// Firefox 3.7, SeaMonkey 2.1?\nfunction getExtMgr2Exts() {\n var extMgr = {};\n try {\n Components.utils.import(\"resource://gre/modules/AddonManager.jsm\", extMgr);\n } catch(e) { return false; }\n extMgr.AddonManager.getAddonsByTypes([\"extension\"], printInfo);\n return true;\n}\n\nfunction printInfo(aData) {\n var output = \"\";\n\n var date = new Date();\n output += \"Last updated: \" + date.toString() + \"\\n\";\n output += \"User Agent: \" + navigator.userAgent + \"\\n\";\n output += \"\\n\";\n\n var enabledcount = 0;\n var arrout = new Array();\n for (var index in aData) {\n var addon = aData[index];\n var line = \"* \" + addon.name + \" \" + addon.version;\n if (addon.homepageURL) line += \" (\" + addon.homepageURL + \")\";\n if (addon.isActive)\n enabledcount++;\n else\n line += \" (disabled)\";\n arrout.push(line);\n }\n\n arrout.sort();\n\n output += \"Extensions (enabled: \" + enabledcount + \")\\n\";\n output += arrout.join(\"\\n\");\n\n var tb = document.getElementById(\"content\");\n var tres = tb.addTab(\"data:text/plain,\" + escape(output));\n tb.selectedTab = tres;\n}\n\nmain();" } }