您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
For Scriptish only. Generate list of enabled extensions from Add-ons Manager to HTML, Markdown, BBCode or plain text output.
当前为
- // ==UserScript==
- // @id extension-list-generator@loucypher
- // @name Extension List Generator
- // @description For Scriptish only. Generate list of enabled extensions from Add-ons Manager to HTML, Markdown, BBCode or plain text output.
- // @namespace https://greasyfork.org/scripts/13
- // @version 1.20140221232908
- // @author LouCypher
- // @license MPL 2.0
- // @screenshot https://lh3.googleusercontent.com/-T1PPKIZoT1M/UW7tiMF0rWI/AAAAAAAADfY/XWzdfEDgtD4/s0/extension-list-generator.png
- // @icon https://addons.cdn.mozilla.net/media/img/addon-icons/default-32.png
- // @icon64URL https://addons.cdn.mozilla.net/media/img/addon-icons/default-64.png
- // @contributionURL http://loucypher.github.io/userscripts/donate.html?Extensions+List+Generator
- // @homepageURL https://greasyfork.org/scripts/13
- // @supportURL https://greasyfork.org/scripts/13
- // @updateURL https://greasyfork.org/scripts/13/code.meta.js
- // @downloadURL https://greasyfork.org/scripts/13/code.user.js
- // @resource options https://raw.github.com/LouCypher/userscripts/master/scriptish/extension-list-generator/options.xul
- // @resource CHANGELOG https://raw.github.com/LouCypher/userscripts/master/scriptish/extension-list-generator/changelog.txt
- // @resource LICENSE https://raw.github.com/LouCypher/userscripts/master/licenses/MPL/LICENSE.txt
- // @include about:addons
- // @include chrome://mozapps/content/extensions/extensions.xul
- // ==/UserScript==
- /*
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, you can obtain one at http://mozilla.org/MPL/2.0/.
- *
- */
- var utilsMenu = document.getElementById("utils-menu");
- utilsMenu.appendChild(document.createElement("menuseparator"));
- var menu = utilsMenu.appendChild(document.createElement("menu"));
- menu.setAttribute("label", "Generate extension list");
- var menupopup = menu.appendChild(document.createElement("menupopup"));
- ["HTML", "Markdown", "BBCode", "Plain text"].forEach(function(format) {
- var menuitem = menupopup.appendChild(document.createElement("menuitem"));
- menuitem.setAttribute("label", format);
- })
- menupopup.appendChild(document.createElement("menuseparator"));
- var optionsMenu = menupopup.appendChild(document.createElement("menuitem"));
- optionsMenu.setAttribute("label", "Options");
- optionsMenu.addEventListener("command", openOptions, false);
- menupopup.addEventListener("command", generate, false);
- var rptCurrentDate, rptAddonsURLs, rptAddonsDescs, rptThemeScreenshot,
- rptInsideSpoiler;
- initPrefs();
- function generate(aEvent) {
- if (aEvent.target.getAttribute("label") == "Options") return;
- initPrefs();
- AddonManager.getAddonsByTypes(["theme", "extension"], function(addons) {
- var theme;
- var extArray = [];
- addons.forEach(function(addon) {
- if (addon.isActive) {
- if (addon.type == "theme") theme = addon;
- else extArray.push(addon);
- }
- })
- extArray.sort(function(a, b) {
- a = a.name.toLowerCase();
- b = b.name.toLowerCase();
- if (a < b) return -1;
- if (a > b) return 1;
- return 0;
- })
- var title = "My " + Application.name + " information";
- switch (aEvent.target.getAttribute("label")) {
- case "HTML": generateHTML(title, theme, extArray); break;
- case "Markdown": generateMarkdown(title, theme, extArray); break;
- case "BBCode": generateBBCode(title, theme, extArray); break;
- case "Plain text": generateText(title, theme, extArray);
- }
- })
- }
- function generateHTML(aTitle, aTheme, aArray) {
- var extensions = '<!doctype html><html itemscope="itemscope"'
- + ' itemtype="http://schema.org/WebPage"><head>'
- + '<meta charset="utf-8"><meta itemprop="description"'
- + ' content="' + aTitle + '"><meta name="description"'
- + ' content="' + aTitle + '"><title>' + aTitle + '</title>'
- + '</head><body><h1>' + aTitle + '</h1>'
- + (rptCurrentDate ? "<p>Last updated: " + (new Date()) + "</p>" : "")
- + "<h2>User agent</h2><p>" + navigator.userAgent
- + "</p><h2>Theme</h2><p>"
- + (rptAddonsURLs && !isDefaultTheme(aTheme)
- ? '<a href="' + getThemeURL(aTheme) + '">' + aTheme.name + '</a>'
- : aTheme.name)
- + "</p>"
- + (rptThemeScreenshot && !isDefaultTheme(aTheme) &&
- aTheme.screenshots && !/getpersonas/.test(aTheme.screenshots)
- ? '<p><img src="' + aTheme.screenshots[0].url +
- '" alt="' + aTheme.name + '"/></p>'
- : "")
- + "<h2>Extensions</h2>"
- + '<ol style="width:900px">';
- aArray.forEach(function(addon) {
- extensions += '<li style="margin-bottom:1em">'
- + (rptAddonsURLs
- ? ((addon.reviewURL
- ? '<a href="' + getAMOPage(addon.reviewURL) + '">'
- : addon.homepageURL
- ? '<a href="' + addon.homepageURL + '">'
- : '<a href="http://www.google.com/search?q="' +
- encodeURIComponent(addon.name + " extension") +
- '">')
- + addon.name + '</a>')
- : addon.name)
- + (addon.version ? " " + addon.version : "")
- + (rptAddonsDescs ? "<br/>" + addon.description : "")
- + "</li>";
- })
- extensions += "</ol></body></html>";
- doSomething(extensions, "text/html");
- }
- function generateMarkdown(aTitle, aTheme, aArray) {
- var idx = 0;
- var extensions = "# " + aTitle
- + (rptCurrentDate ? "\n\nLast updated: " + (new Date()) : "")
- + "\n\n## User agent\n\n" + navigator.userAgent
- + "\n\n## Theme\n\n"
- + (rptAddonsURLs && !isDefaultTheme(aTheme)
- ? "[" + aTheme.name + "](" + getThemeURL(aTheme) + ")"
- : aTheme.name)
- + (rptThemeScreenshot && !isDefaultTheme(aTheme) &&
- aTheme.screenshots && !/getpersonas/.test(aTheme.screenshots)
- ? "\n\n"
- : "")
- + "\n\n## Extensions";
- aArray.forEach(function(addon) {
- idx++;
- extensions += "\n\n" + idx + ". "
- + (rptAddonsURLs
- ? ((addon.reviewURL
- ? "[" + addon.name + "](" + getAMOPage(addon.reviewURL)
- : addon.homepageURL
- ? "[" + addon.name + "](" + addon.homepageURL
- : "[" + addon.name + "](" +
- "http://www.google.com/search?q=" +
- encodeURIComponent(addon.name + " extension"))
- + ")")
- : addon.name)
- + (addon.version ? " " + addon.version : "")
- + (rptAddonsDescs ? " \n" + addon.description : "")
- })
- doSomething(extensions, "text/plain", "%0A%0A.md");
- }
- function generateBBCode(aTitle, aTheme, aArray) {
- var extensions = (rptInsideSpoiler ? "[spoiler=" + aTitle + "]" : "")
- + (rptCurrentDate ? "[b]Last updated: [/b]" + (new Date()) : "")
- + "\n\n[b]User agent:[/b] " + navigator.userAgent
- + "\n\n[b]Theme:[/b] "
- + (rptAddonsURLs && !isDefaultTheme(aTheme)
- ? "[url=" + getThemeURL(aTheme) + "]" + aTheme.name + "[/url]"
- : aTheme.name)
- + (rptThemeScreenshot && !isDefaultTheme(aTheme) &&
- aTheme.screenshots && !/getpersonas/.test(aTheme.screenshots)
- ? "\n[img]" + aTheme.screenshots[0].url + "[/img]"
- : "")
- + "\n\n[b]Extensions:[/b]\n[list=1]"
- aArray.forEach(function(addon) {
- extensions += "[*]"
- + (rptAddonsURLs
- ? ((addon.reviewURL
- ? "[url=" + getAMOPage(addon.reviewURL)
- : addon.homepageURL
- ? "[url=" + addon.homepageURL
- : "[url=http://www.google.com/search?q=" +
- encodeURIComponent(addon.name + " extension"))
- + "]" + addon.name + "[/url]")
- : addon.name)
- + (addon.version ? " " + addon.version : "")
- + (rptAddonsDescs ? "\n" + addon.description : "");
- })
- extensions += rptInsideSpoiler ? "[/list][/spoiler]" : "[/list]";
- doSomething(extensions, "text/plain");
- }
- function generateText(aTitle, aTheme, aArray) {
- var idx = 0;
- var extensions = aTitle + "\n"
- for (var i = 0; i < aTitle.length; i++) {
- extensions += "=";
- }
- extensions += (rptCurrentDate ? "\n\nLast updated: " + (new Date()) : "")
- + "\n\nUser agent: " + navigator.userAgent
- + "\n\nTheme: " + aTheme.name + "\n\nExtensions\n----------";
- aArray.forEach(function(addon) {
- idx++;
- extensions += "\n" + idx + ". " + addon.name
- + (addon.version ? " " + addon.version : "")
- + (rptAddonsDescs ? "\n" + addon.description : "")
- + (rptAddonsURLs
- ? "\n" + (addon.reviewURL ? getAMOPage(addon.reviewURL)
- : addon.homepageURL
- ? addon.homepageURL
- : "")
- : "")
- + (rptAddonsDescs || rptAddonsURLs ? "\n" : "");
- })
- doSomething(extensions, "text/plain");
- }
- function isDefaultTheme(aTheme) {
- return aTheme.id == "{972ce4c6-7e08-4474-a285-3208198ce6fd}" ||
- aTheme.id == "modern@themes.mozilla.org";
- }
- function getAMOPage(aReviewURL) {
- var url = aReviewURL.replace(/\/reviews\/.*$/, "/")
- .replace(/mozilla.org\/.*\/addon\//, "mozilla.org/addon/");
- url += "?src=external-extension-list-generator";
- return url;
- }
- function getThemeURL(aAddon) {
- var url;
- if (aAddon.reviewURL) {
- return getAMOPage(aAddon.reviewURL);
- } else {
- var id = aAddon.id.match(/\d+/).toString();
- if (/getpersonas/.test(aAddon.screenshots[0].url)) {
- url = "http://getpersonas.com/persona/" + id;
- } else {
- url = "http://addons.mozilla.org/addon/" + id;
- }
- }
- url += "/?src=external-extension-list-generator";
- return url;
- }
- function doSomething(aString, aContentType, aExt) {
- var prompts = Services.prompt;
- var flags = prompts.BUTTON_POS_0 * prompts.BUTTON_TITLE_IS_STRING +
- prompts.BUTTON_POS_1 * prompts.BUTTON_TITLE_CANCEL +
- prompts.BUTTON_POS_2 * prompts.BUTTON_TITLE_IS_STRING;
- var doWhat = prompts.confirmEx(null, "Extension List Generator",
- "Extension list has been generated.", flags,
- "Copy", "", "View", null, {value:false});
- switch (doWhat) {
- case 0: // Copy
- Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper)
- .copyString(aString);
- Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService).
- showAlertNotification("chrome://mozapps/skin/xpinstall/xpinstallItemGeneric.png",
- "Extension List Generator", "Copied to clipboard!",
- false, "", null);
- break;
- case 2: // View
- openOptionsInTab("data:" + aContentType + ";charset=utf-8," +
- encodeURIComponent(aString) + (aExt ? aExt : ""));
- default: // Cancel
- }
- }
- function getBoolPref(aPrefName, aDefVal) {
- var prefRoot = "extensions.scriptish.scriptvals.extension-list-generator@loucypher.report.";
- var prefBranch = Services.prefs.getBranch(prefRoot);
- try {
- return prefBranch.getBoolPref(aPrefName);
- } catch(ex) {
- prefBranch.setBoolPref(aPrefName, aDefVal);
- return aDefVal;
- }
- }
- function initPrefs() {
- rptCurrentDate = getBoolPref("currentDate", true);
- rptAddonsURLs = getBoolPref("addonsURLs", true);
- rptAddonsDescs = getBoolPref("addonsDescriptions", false);
- rptThemeScreenshot = getBoolPref("themeScreenshot", true);
- rptInsideSpoiler = getBoolPref("insideSpoiler", false);
- }
- function openOptions() {
- var em = Services.ww.getWindowEnumerator();
- var winName = "extension-list-generator-options";
- var index = 1;
- while (em.hasMoreElements()) {
- let win = em.getNext();
- if(win.name == winName) {
- win.focus();
- return;
- }
- index++
- }
- openDialog(GM_getResourceURL("options"), winName,
- "chrome, dialog, centerscreen, close");
- }