Прошу Вас всех протестировать кнопки. Давно их делал. Сейчас нет времени этим заниматься и следить за всеми нововведениями в браузере. Если есть у кого возможность пожалуйста улучшите функционал. Могут некоторые функции в кнопках не работать.
1 кнопка Список расширений:
/*Code*/ var icon1 = "data:application/file;base64,AAABAAEAEBAAAAAAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAD///8BAAAAFwAAAGkAAABzAAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAAHUAAAB1AAAAdQAAADkAAAAP////AQAAAIdgZmj/YWlt/2FobP9haGz/YGhr/2Boa/9fZ2v/X2dr/15mav9dZWn/XGRo/0ZNUP8AAACdAAAAFf///wEAAACr2tzc/9ve4P/a3t//1dnZ/7S2tf+foJz/m5ya/6apqP/O0tP/09fZ/9DV1v+hqq//AAAAuQAAABX///8BAAAAq+3u7//e4eL/ub29/2hnXv9oVUX/U0As/zgxGf83Lx3/YWBX/7a5uv/S1tj/o6yx/wAAALkAAAAV////AQAAAKv29/f/19na/1dUQf9jXDv/dmtJ/4FoSP9VQiL/V0Ek/008Iv9HQTP/yc3P/6Wus/8AAAC5AAAAFf///wEAAACr+Pj4/5uamP9tY0L/g31b/6GLa/+McVH/eFY5/4xwUv9yXkD/RTki/4uMiv+nsLT/AAAAuQAAABX///8BAAAAq/n6+v+FfXL/waSM/8qznf/DrZP/ooFi/7WfhP+qh2//blk9/1A+Iv9aWlH/pK2x/wAAALkAAAAV////AQAAAKv6+/v/d3Rr/9zCsP/RxbH/z8Wu/9fJt//Qvab/qItv/5iOb/9tYUH/VVJK/6Wtsf8AAAC5AAAAFf///wEAAACr+/z8/4mHff+3pI//3NK//+HXxf/m3Mz/5trJ/9rMuf+bgWT/d14//2hnYP+osbX/AAAAuQAAABX///8BAAAAq/z9/f/FxL7/j4l+//Xw5f/29ez/8/Dl/+DMuv/VuaP/poZn/2dFKv+srav/oamt/wAAALkAAAAV////AQAAAKv+/v7/+/z8/5iZjf+5uqr/6+PW/+3i1P/kzL3/vZR+/4NhSf+Qh3z/z9HS/4qQkv8AAAC1AAAAFf///wEAAACr/v7+//7+/v/u7u3/tbiv/5WSgP+DfGj/e25Z/29gTv+sppz/vr6+/5aYmP90eHr/AAAApwAAABP///8BAAAAq/////////////////7+/v/9/f3//f39//v8/P/5+fn/1dXV/2pqav9TU1P/QUFB/wEBAYkAAAAJ////AQAAAKv7+/v//////////////////v7+//7+/v/+/v7/+vr6/9fY2P/V1tb/7Ozs/4KCgv8EBAQrAAAAA////wEAAACFlJSU/6ioqP+qqqr/qqqq/6qqqv+qqqr/qKio/6anp/2kpaX9o6Oj/4qKitUZGRk9////Af///wH///8BAAAAFQAAAFUAAABVAAAAVQAAAFUAAABVAAAAVQAAAFUAAABTBAQEUx8fH1dfX18z////Af///wH///8BAAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//w=="; var icon2 = "data:image/ico;base64,AAABAAEAFBQAAAEAIAC4BgAAFgAAACgAAAAUAAAAKAAAAAEAIAAAAAAAQAYAABILAAASCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADMzMxkzMzMZMzMzIDMzMzMzMzMzMzMzMzMzMzMzMzMgMzMzGTMzMxkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAzMzMZMzMzQCsrK2MhISGCHBwcjBwcHIwcHByMHBwcjBwcHIwcHByMHBwcjBwcHIwcHByMHBwcjCEhIYIrKytjMzMzQDMzMxkAAAAAAAAAADMzMyYzMzNAHR0dbv7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+/x0dHW4zMzNAMzMzJgAAAAAAAAAAAAAAAAAAAAAAAAA//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz//Pz8//z8/P/8/Pz/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAzHMA/8xzAP/McwD/zHMA/8xzAP/McwD/zHMA/8xzAP/McwD/zHMA/8xzAP/McwD/zHMA/8xzAP/McwD/zHMA/wAAAAAAAAAAAAAAAAAAAADMcwD/5bV3/+W1d///////5bV3/+W1d///////5bV3/+W1d///////5bV3/+W1d///////5bV3/+W1d//McwD/AAAAAAAAAAAAAAAAAAAAAMxzAP/ou4D/4KRV///////gpFX/4KRV/+CkVf///////////+CkVf/gpFX/4KRV///////gpFX/6LuA/8xzAP8AAAAAAAAAAAAAAAAAAAAAzHMA/+vAif/kq2H//////+SrYf/kq2H/5Kth////////////5Kth/+SrYf/kq2H//////+SrYf/rwIn/zHMA/wAAAAAAAAAAAAAAAAAAAADMcwD/7saS/+izbf//////6LNt/+izbf/os23////////////os23/6LNt/+izbf//////6LNt/+7Gkv/McwD/AAAAAAAAAAAAAAAAAAAAAMxzAP/xy5v/////////////////8cub///////xy5v/8cub///////xy5v/////////////////8cub/8xzAP8AAAAAAAAAAAAAAAAAAAAAzHMA/8pzAf/KcwH/ynMB/8pzAf/KcwH/ynMB/8pzAf/KcwH/ynMB/8pzAf/KcwH/ynMB/8pzAf/KcwH/zHMA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP/Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx//Hx8f/x8fH/8fHx/wAAAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/8PDw//Dw8P/w8PD/AAAAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/v7+//7+/v/+/v7//v7+//7+/v/+/v7//v7+//4eHh/8PDw/+0tLT/urq6/7q6uv8AAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP+3t7f/t7e3/7e3t/+3t7f/t7e3/7e3t/+3t7f/BwcH//////////////////////wAAACQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/7Ozs/+zs7P/s7Oz/7Ozs/+zs7P/s7Oz/7Ozs/7Kysv////////////////8wMDBOAAAACwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/q6ur/6urq/+rq6v/q6ur/6urq/+rq6v/q6ur/tra2////////////LCwsVgAAABAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAL+np6f/p6en/6enp/+np6f/p6en/6enp/+np6f+2trb//////2BgYHQAAAAUAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAAAALwAAAD8AAAA/AAAAPwAAAD8AAAA/AAAAPwAAAEUAAAAwAAAAFAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AHwAIAAEACAABAA4ABwAMAAMADAADAAwAAwAMAAMADAADAAwAAwAMAAMADgAHAA4ABwAOAAcADgAHAA4ABwAOAAcADgAPAA4AHwAP//8AA="; var icon3 = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAA2pJREFUOMtd01toWwUAxvH/OSdpTtKkSZpL00s6nbWdvbmr02qds06qiEhFRCclKEMEh3tcVeqL4ouIsIE4EUSr0BdR9rDOMepsVLau7Wpvq8XZy9qmSZZkSc/J7Vx88IL4e/vzPX8CQEeos61sCJnr8el1AHnPW9WiXuwzJNsBgFpvJtHhHs80urJHfluSZqKXGVSNORVAAPjy7chEU0tr3ckzS63z+aqPHu+093c3yyyUwqQr64knbpNZvMK5l0dNt1MShs47NgZObb20rsyOCgDRU28kdz+wxyfGziGIVgqBPj4ZyyC37EbwhdAMUIoaNZcHOXbfAjoWLk5I2aPvpA5JO7z7vM92yScaA3m7oacoS20YsatcGr3ARMxGvmYnimZSMmDV383SzCZdtSs0hQ3byM+aIfX3tL7X/6T70bIaQ4uvoacS6FKYg807GBrfYsrZyua2hlLSKWoGV9RGnq74nko72E0xbPFKubvN1Aq6YEHPKoiaQZW8yelJkWiwDy1dwCqV2LAK+BxW8orBH3GRoM/kkXZLwHJL0SU9mcawglYwid1QGRxJ8YtzH/ouD2gaZUMkrQkUyzra0hzJJh3aLXw7XSGJynLGpyXSGKqKqkhIVgv3um4hO6v4ZvMYb14fwL0whm7oWG48hSsxzxPNJthlKmt0xOW4ZTW3nINsFqfThveuBl4/YOXHO7/mQe8WJ8K/sjc7iffmM7z4Qg/l0FeIO51QaUPZkhAX88IXs3MaekLFYsRxmkkEPc/I1W2OjrYTnjvOdN1FAFRPDIDAx9cwivDh2dtnBUDqdTckPmiLe333yzga7sDIrBPL+xiYrCcanuKVVx+jZM+RMtbxWIMIWQdDn0bJDlV3SoC5IbcU6tYSvSFFQXeUkP0VOK0FnvOrHK+QiUTn6eiuxhosoNmyCK4Ssz+ksHXmX5MAysWN2Qn3/h7/aqqhdjFHPqZi6AKiLGBYNU6rGr3dXZSDK1hMiXJe5549AerDTiT+ohXyN7+LBh9qniradslr2zCjkhzfJv27wnCTTPt+D58NLjJ9IUfb3ir8iUMMD4/xXyLgEx11vRWhwz+5Qoe3a4IPm/6Ix3w/fcQ8Mz9oWoIHTwKN71573vRHPOa/b/wfGfADAcDlj3gu/TMkP89UAYo/4tH/buFPGOaETqnWnyIAAAAASUVORK5CYII="; try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {} // ===== Вывод даты===== function aDate() { var t=new Date(); var y=1900+t.getYear(); var min=t.getMinutes(); if (min<10){min="0"+min}; var h=t.getHours(); var m=t.getMonth();switch(m){case 0: m="января";break;case 1: m="февраля";break;case 2: m="марта";break;case 3: m="апреля";break;case 4: m="мая";break;case 5: m="июня";break;case 6: m="июля";break;case 7: m="августа";break;case 8: m="сентября";break;case 9: m="октября";break;case 10: m="ноября";break;default: m="декабря";} var d=t.getDate(); var curdate=y+"г."+" "+d+" "+m+" "+h+":"+min; var myfilename=curdate; return myfilename; } var data = '<?xml version="1.0"?>'; data += '<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>'; data += '<window id="addonGenList-popup" onload="self.load(this)" title="Extension List" width="475" height="600" style="background: #EEE;" buttons="accept,extra1,extra2,cancel" '; data += 'defaultButton="" windowtype="addonlist:gen" persist="screenX screenY" xmlns="' + xulns + '">'; data += '<keyset>'; data += '<key keycode="VK_ESCAPE" oncommand="close()"/>'; data += '</keyset>'; data += '<textbox id="listBox" flex="1" multiline="true" style=" -moz-appearance: none; background: #FFF; border: 1px solid #999; border-radius: 8px 8px 8px 8px; box-shadow: 3px 3px 3px #444; padding-top: 4px;"/>'; data += '<groupbox id="gb1" style="padding:0; -moz-appearance: none; background: none; border: none;">'; data += '<hbox>'; data += '<checkbox id="editList" label="Редактировать" onclick="self.check(this)"/>'; data += '<checkbox id="jump" class="checkBox" label="Вкладка Дополнения" onclick="self.check(this)"/>'; data += '<checkbox id="extBox" class="checkBox" label="Скрыть отключено" onclick="self.check(this)"/>'; data += '<checkbox id="hideNotes" class="checkBox" label="Скрыть дополнительно" onclick="self.check(this)"/>'; data += '</hbox>'; data += '<vbox id="all-notes">'; data += '<hbox align="center">'; data += '<label id="label" value="Категории: "/>'; data += '<checkbox id="extensionsView" class="checkBox" label="Расширения" onclick="self.check(this)"/>'; data += '<checkbox id="themesView" class="checkBox" label="Темы" onclick="self.check(this)"/>'; data += '<checkbox id="pluginsView" class="checkBox" label="Плагины" onclick="self.check(this)"/>'; data += '<checkbox id="stylesView" class="checkBox" label="Стили" onclick="self.check(this)"/>'; data += '<checkbox id="scriptView" class="checkBox" label="GM скрипты" onclick="self.check(this)"/>'; data += '<checkbox id="scriptsView" class="checkBox" label="Scriptish" onclick="self.check(this)"/>'; data += '<checkbox id="custombuttonsView" class="checkBox" label="СВ кнопки" onclick="self.check(this)"/>'; data += '</hbox>'; data += '<hbox align="center">'; data += '<label id="label" value="Заголовок: "/>'; data += '<checkbox id="Tilebox" class="checkBox" label="О программе" onclick="self.check(this)"/>'; data += '<checkbox id="Tilebox1" class="checkBox" label="Дата" onclick="self.check(this)"/>'; data += '<checkbox id="Tilebox2" class="checkBox" label="Всего" onclick="self.check(this)"/>'; data += '</hbox>'; data += '<hbox align="center">'; data += '<label id="label" value="Свойства: "/>'; data += '<checkbox id="idextBox" class="checkBox" label="id" onclick="self.check(this)"/>'; data += '<checkbox id="CompBox" class="checkBox" label="Совместимость" onclick="self.check(this)"/>'; data += '<checkbox id="DateIbox" class="checkBox" label="Дата установки" onclick="self.check(this)"/>'; data += '<checkbox id="Datebox" class="checkBox" label="Дата обновления" onclick="self.check(this)"/>'; data += '<checkbox id="Descriptbox" class="checkBox" label="Описание" onclick="self.check(this)"/>'; data += '</hbox>'; data += '<hbox align="center">'; data += '<label id="label" value="Страницы: "/>'; data += '<checkbox id="Homebox" class="checkBox" label="Домашняя" onclick="self.check(this)"/>'; data += '<checkbox id="AMObox" class="checkBox" label="На AMO" onclick="self.check(this)"/>'; data += '<checkbox id="supportbox" class="checkBox" label="Поддержка" onclick="self.check(this)"/>'; data += '</hbox>'; data += '</vbox>'; data += '</groupbox>'; data += '<hbox>'; data += '<button image="' + icon3 + '" label="Списки c расширенным описанием во вкладках" oncommand="self.AMProperties()"/>'; data += '<button image="' + icon3 + '" label="Списки во вкладках" oncommand="self.AMProperties1()"/>'; data += '</hbox>'; data += '<hbox id="bntCont" style="margin-bottom: 4px">'; data += '<hbox>'; data += '<spacer flex="1"/>'; data += '<button dlgtype="accept" id="myAccept" image="' + icon2 + '" label="Создать TXT файл" oncommand="self.archiveTXT()"/>'; data += '<button dlgtype="extra1" id="HTMLBtn" image="' + icon1 + '" label="Создать HTML файл" oncommand="self.archiveHTML()"/>'; data += '<button dlgtype="extra2" id="myExtra1" label="Копировать" oncommand="self.copy()"/>'; data += '<button dlgtype="cancel" id="myCancel" label="Закрыть" oncommand="close()"/>'; data += '</hbox>'; data += '</hbox>'; data += '</window>'; //----Копирование списка----------- this.copy = function () { var mrd = Services.wm.getMostRecentWindow("addonlist:gen"); var lb = mrd.document.getElementById("listBox").value.replace(/\u2007/g, " "); if(navigator.platform.indexOf("Win")) gClipboard.write(lb); else gClipboard.write(lb.replace(/\n/g, "\r\n")); } //----Сохранить в текстовый файл----------- this.archiveTXT = function() { var mrd = Services.wm.getMostRecentWindow("addonlist:gen"); var lb = mrd.document.getElementById("listBox").value.replace(/\u2007/g, " "); var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(Components.interfaces.nsIFilePicker); var stream = Components.classes["@mozilla.org/network/file-output-stream;1"].createInstance(Components.interfaces.nsIFileOutputStream); var converter = Components.classes["@mozilla.org/intl/converter-output-stream;1"].createInstance(Components.interfaces.nsIConverterOutputStream); fp.appendFilters(fp.filterText); fp.defaultExtension = ".txt"; fp.init(window, "Сохранить как Text", 1); fp.defaultString = "Addons " + aDate().replace(/:/g, "."); if(fp.show() != fp.returnCancel) { if(fp.file.exists()) fp.file.remove(true); fp.file.create(Ci.nsIFile.NORMAL_FILE_TYPE, 420); stream.init(fp.file, 0x02|0x08|0x20, 0x1B6, 0); converter.init(stream, "UTF-8", 0, 0x0000); converter.writeString(lb, lb.length); converter.close(); stream.close(); } else { aWin.focus(); return; } mrd.close(); } //----Сохранить в файл HTML----------- this.archiveHTML = function() { var mrd = Services.wm.getMostRecentWindow("addonlist:gen"); var lb = mrd.document.getElementById("listBox").value.replace(/\u2007/g, " "); var uc = Components. classes ["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance (Components. interfaces. nsIScriptableUnicodeConverter); uc. charset = "utf-8"; lb = uc. ConvertFromUnicode (lb); var head = "<html>\n<head>\n<meta http-equiv='Content-Type' content='text/html; charset=utf-8'>\n</head>\n<body>\n<pre>\n"; var fileend = "\n</pre>\n</body>\n</html>" var htmlSource = head + lb + fileend; var stream = Components.classes['@mozilla.org/network/file-output-stream;1'].createInstance(Components.interfaces.nsIFileOutputStream); var nsIFilePicker = Components.interfaces.nsIFilePicker; var fp = Components.classes["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker); fp.appendFilters(fp.filterHTML); fp.appendFilters(fp.filterAll); fp.defaultExtension = ".html"; fp.init(window, "", fp.modeSave); fp.defaultString = "Addons " + aDate().replace(/:/g, "."); if(fp.show() != fp.returnCancel){ stream.init(fp.file, 0x02|0x20|0x08, 0x1B6, 0); stream.write(htmlSource, htmlSource.length); stream.close();} else {aWin.focus(); return;} mrd.close(); } this.AMProperties1 = function(){ function caseInsensitive(a, b) { a = a.toLowerCase(); b = b.toLowerCase(); if (a < b) return -1; if (a > b) return 1; return 0; } function openTab(aType) { AddonManager.getAddonsByTypes([aType], function(aAddons) { var list = new Array(); aAddons.forEach(function(aAddon) { list.push(aAddon); }); // if (list.length == 0) return; var out = new Array(); for (var i = 0; i < list.length; i++) { out.push("* " + list[i].name + " " + list[i].version); } out.sort(caseInsensitive); out.unshift(aType.toUpperCase() + " (" + list.length + ")", ""); out.unshift(appInfo.name + " " + appInfo.version + " Gecko " + appInfo.platformVersion, ""); var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance(Components.interfaces.nsIScriptableUnicodeConverter); converter.charset = "UTF-8"; for (var i = 0; i < out.length; i++) { out[i] = converter.ConvertFromUnicode(out[i]); out[i] = out[i].replace(/&/g, "&"); out[i] = out[i].replace(/>/g, ">"); out[i] = out[i].replace(/</g, "<"); out[i] = out[i].replace(/"/g, """); out[i] = out[i].replace(/'/g, "'"); } var data = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">'; data += "<html><head><title>" + aType + "</title>"; data += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'; data += "</head><body><pre>" + out.join("\n") + "</pre></body></html>"; if (appInfo.name == "Firefox" || appInfo.name == "SeaMonkey") { gBrowser.addTab("data:text/html;charset=utf-8;base64," + btoa(data)); } if (appInfo.name == "Thunderbird") { var tabmail = document.getElementById("tabmail"); if (!tabmail) { var win = Components.classes["@mozilla.org/appshell/window-mediator;1"]. getService(Components.interfaces.nsIWindowMediator). getMostRecentWindow("mail:3pane"); if (win) { tabmail = win.document.getElementById("tabmail"); win.focus(); } } if (tabmail) { tabmail.openTab("contentTab", { contentPage: "data:text/html;charset=utf-8;base64," + btoa(data), background: true}); } } }); } Components.utils.import("resource://gre/modules/AddonManager.jsm"); var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]. getService(Components.interfaces.nsIXULAppInfo); // ["extension", "theme", "plugin"].forEach(openTab); for (var type in AddonManager.addonTypes) openTab(type); } //----------Addon Manager Properties------------ this.AMProperties = function(){ // save without links: file > save page as // save with links: dom inspector, file > save dom as function linkifyText(aEvent) { var re = RegExp("\\bhttps?://[^\\s]+", "gi"); var doc = aEvent.originalTarget; var node = doc.getElementsByTagName("pre")[0].firstChild; var text = node.nodeValue; if (re.test(text)) { // create a span to hold the new text with links in it var span = doc.createElement("span"); var m, p = 0; re.lastIndex = 0; node.parentNode.replaceChild(span, node); while ((m = re.exec(text))) { // create a link and put it in the span var a = doc.createElement("a"); a.target = "_blank"; a.style.color = "#006620"; a.style.backgroundColor = "#fff9ab"; a.href = m[0]; a.appendChild(doc.createTextNode(m[0])); // put in text up to the link span.appendChild(doc.createTextNode(text.substring(p, m.index))); span.appendChild(a); // track insertion point p = re.lastIndex; } // put in text after the last link span.appendChild(doc.createTextNode(text.substring(p))); span.normalize(); } } function openTab(aType) { AddonManager.getAddonsByTypes([aType], function(aAddons) { var list = new Array(); aAddons.forEach(function(aAddon) { list.push(aAddon); }); // commonly empty for dictionary and locale addon types if (list.length == 0) return; var out = new Array(); out.push(navigator.userAgent, ""); out.push(appInfo.name + " " + appInfo.version + " Gecko " + appInfo.platformVersion, ""); out.push(aType.toUpperCase() + " (" + list.length + ")", ""); for (var i = 0; i < list.length; i++) { // width + 2 is the column number for the ":" character var widthArr = new Array(); for (var j in list[i]) widthArr.push(j); var width = widthArr.reduce(function(a, b) { return a.length > b.length ? a : b; }).length; out.push("* " + list[i].name, ""); for (var j in list[i]) { try { if (typeof(list[i][j]) == "function") { out.push(Array(width + 2 - j.length).join(" ") + j + ": function [omitted]"); } else if ((list[i][j] && j == "fullDescription") || (list[i][j] && j == "developerComments")) { out.push(Array(width + 2 - j.length).join(" ") + j + ": [omitted]"); } else if (list[i][j] && j == "sourceURI") { out.push(Array(width + 2 - j.length).join(" ") + j + ": " + list[i][j].spec); } else if ((list[i][j] && j == "developers") || (list[i][j] && j == "translators") || (list[i][j] && j == "contributors") || (list[i][j] && j == "screenshots")) { for (var k = 0; k < list[i][j].length; k++) { out.push(Array(width + 2 - j.length).join(" ") + j + ": " + list[i][j][k]); } } else { out.push(Array(width + 2 - j.length).join(" ") + j + ": " + list[i][j]); } } catch(e) { // // Custom Buttons, sourceURI // Components.utils.reportError(list[i].name + ", " + j); } } out.push(""); } var converter = Components.classes["@mozilla.org/intl/scriptableunicodeconverter"]. createInstance(Components.interfaces.nsIScriptableUnicodeConverter); converter.charset = "UTF-8"; for (var i = 0; i < out.length; i++) { // necessary to read cyrillic characters for example out[i] = converter.ConvertFromUnicode(out[i]); // reserved characters in html // http://www.w3schools.com/tags/ref_entities.asp out[i] = out[i].replace(/&/g, "&"); out[i] = out[i].replace(/>/g, ">"); out[i] = out[i].replace(/</g, "<"); out[i] = out[i].replace(/"/g, """); out[i] = out[i].replace(/'/g, "'"); } var data = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">'; data += "<html><head><title>" + aType + "</title>"; data += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">'; data += "<!-- unix time " + new Date().valueOf() + " -->"; data += "</head><body><pre>" + out.join("\n") + "</pre></body></html>"; if (appInfo.name == "Firefox" || appInfo.name == "SeaMonkey") { // unfortunately getBrowserForTab is not available in other applications var browser = gBrowser.getBrowserForTab( gBrowser.addTab("data:text/html;charset=utf-8;base64," + btoa(data))); // greasemonkey linkification is not worth doing if (aType == "user-script") return; browser.addEventListener("load", function(aEvent) { browser.removeEventListener("load", arguments.callee, true); linkifyText(aEvent); }, true); } if (appInfo.name == "Thunderbird") { var tabmail = document.getElementById("tabmail"); if (!tabmail) { var win = Components.classes["@mozilla.org/appshell/window-mediator;1"]. getService(Components.interfaces.nsIWindowMediator). getMostRecentWindow("mail:3pane"); if (win) { tabmail = win.document.getElementById("tabmail"); win.focus(); } } if (tabmail) { // tab is undefined when a particular data url has already been opened // bypass with the unix time workaround var tab = tabmail.openTab("contentTab", { contentPage: "data:text/html;charset=utf-8;base64," + btoa(data), background: true}); // greasemonkey linkification is not worth doing if (aType == "user-script") return; if (tab) { // see getBrowserForSelectedTab and getBrowserForDocument // http://mxr.mozilla.org/comm-release/source/mail/base/content/tabmail.xml var browserFunc = tab.mode.getBrowser || tab.mode.tabType.getBrowser; if (browserFunc) { var browser = browserFunc.call(tab.mode.tabType, tab); browser.addEventListener("load", function(aEvent) { browser.removeEventListener("load", arguments.callee, true); linkifyText(aEvent); }, true); } } } } }); } Components.utils.import("resource://gre/modules/AddonManager.jsm"); var appInfo = Components.classes["@mozilla.org/xre/app-info;1"]. getService(Components.interfaces.nsIXULAppInfo); // openTab("extension"); // ["extension", "theme", "plugin"].forEach(openTab); for (var type in AddonManager.addonTypes) openTab(type); } data = data.replace(/self/g, "opener.document.getElementById('" + this.id + "')"); var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(data); //dialog = window.openDialog(url, 'extlist', 'chrome, centerscreen, dialog=no, resizable=yes').focus(); //dialog = window.openDialog(url, 'extlist', 'chrome, centerscreen, resizable=yes, alwaysRaised').focus(); dialog = window.openDialog(url, "_blank", "chrome,centerscreen,dialog=no,resizable=yes"); var ww = Cc["@mozilla.org/embedcomp/window-watcher;1"].getService(Ci.nsIWindowWatcher); var em = ww.getWindowEnumerator(); var winName = "extlist"; var index = 1; while (em.hasMoreElements()) { var win = em.getNext(); if (win.name == winName) { win.focus(); return; } index++ } var matId = Components.utils.import("resource://gre/modules/AddonManager.jsm"); if(!matId) opener.document.getElementById("' + this.id + '").close();
/*Initialization Code*/ // ===== Определяем настройки по умолчанию в about:config ===== pref.root = "extensions.custombuttons.addonlistgen."; pref.defaults = { editList: false, jump: false, themesView: true, scriptView: true, stylesView: true, pluginsView: true, scriptsView: true, custombuttonsView: true, extensionsView: true, Tilebox: true, Tilebox1: true, Tilebox2: true, DateIbox: true, Datebox: true, idextBox: true, CompBox: true, AMObox: true, supportbox: true, Descriptbox: true, Homebox: true, hideNotes: false, extBox: true } // ===== Заносим настройки в about:config ===== for (let key in pref.defaults) { if (pref.defaults.hasOwnProperty(key)) { let val = pref.defaults[key]; switch (typeof val) { case "boolean": Services.prefs.getDefaultBranch(pref.root).setBoolPref(key, val); break; case "number": Services.prefs.getDefaultBranch(pref.root).setIntPref(key, val); break; case "string": let str = Cc["@mozilla.org/supports-string;1"].createInstance(Ci.nsISupportsString); str.data = val; Services.prefs.getDefaultBranch(pref.root).setComplexValue((key), Ci.nsISupportsString, str); break; } } } // ===== Заносим изменения настроек в about:config ===== pref.observe = function(prefs, callback) { let {root} = pref; function observe(subject, topic, data) { if (topic !== "nsPref:changed") return; let pref = data.slice(root.length); if (prefs.indexOf(pref) === -1) return; callback(pref); } Services.prefs.addObserver(root, observe, false); unload(function() Services.prefs.removeObserver(root, observe)); } // ===== Считываем настройки из about:config ===== function pref(key) { let {branch, defaults} = pref; if (branch == null) branch = Services.prefs.getBranch(pref.root); switch (typeof defaults[key]) { case "boolean": return branch.getBoolPref(key); case "number": return branch.getIntPref(key); case "string": return branch.getCharPref(key); } return null; } let ios = Components.classes["@mozilla.org/network/io-service;1"].getService(Components.interfaces.nsIIOService); let sss = Components.classes["@mozilla.org/content/style-sheet-service;1"].getService(Components.interfaces.nsIStyleSheetService); let nSpace = "@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul);"; let gRoot = Services.prefs.getBranch(pref.root), u = "url(", v = ")"; let appInfo = Cc["@mozilla.org/xre/app-info;1"].getService(Ci.nsIXULAppInfo); let app_info2 = Components.classes["@mozilla.org/xre/app-info;1"].getService(Components.interfaces.nsIXULRuntime); let mrw = Services.wm.getMostRecentWindow("navigator:browser"); // ===== Определение имени профиля===== function getProfileRegistry() { var rv = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties); try {var dir = rv.get("DefProfRt", Ci.nsIFile); while(dir) { var myFile = dir.clone(); myFile.append("profiles.ini"); if(myFile.exists()) return myFile; dir = dir.parent; } } catch(ex) {} return null; } function getProfileName() { var name = "", reg = getProfileRegistry(); var rv = Components.classes["@mozilla.org/file/directory_service;1"].getService(Components.interfaces.nsIProperties); var profd = rv.get("ProfD", Ci.nsIFile); var stream = Components.classes["@mozilla.org/network/file-input-stream;1"].createInstance(Components.interfaces.nsIFileInputStream); var dir = Components.classes["@mozilla.org/file/local;1"].createInstance(Components.interfaces.nsILocalFile); var current = "", relative = "d", line = {}, path = ""; if(!reg) {return name;} stream.init(reg, 1, 0, 0); stream.QueryInterface(Components.interfaces.nsILineInputStream); while(stream.readLine(line)) { if(line.value.substring(0, 5) == "Name=") current = line.value.substring(5); if(line.value.substring(0, 11) == "IsRelative=") relative = line.value.substring(11); if(line.value.substring(0, 5) == "Path=") { path = line.value.substring(5); if(relative == "1") dir.setRelativeDescriptor(reg.parent, path); else dir.persistentDescriptor = path; if(dir.path == profd.path) {name = current; break;} } } stream.close(); if(name == "") name = "No Profile"; return name; } // ===== Вывод даты===== function aDate() { var t=new Date(); var y=1900+t.getYear(); var min=t.getMinutes(); if (min<10){min="0"+min}; var h=t.getHours(); var m=t.getMonth();switch(m){case 0: m="января";break;case 1: m="февраля";break;case 2: m="марта";break;case 3: m="апреля";break;case 4: m="мая";break;case 5: m="июня";break;case 6: m="июля";break;case 7: m="августа";break;case 8: m="сентября";break;case 9: m="октября";break;case 10: m="ноября";break;default: m="декабря";} var d=t.getDate(); var curdate=y+"г."+" "+d+" "+m+" "+h+":"+min; var myfilename=curdate; return myfilename; } function ucFirst(str) { var firstLetter = str.slice(0, 1); return firstLetter.toUpperCase() + str.substring(1); } // ===== Создание списка============================================================= function showExtensionList(aWin, aExt) { var exts = aExt, cnt = exts.length; var cntExt = 0, cntPlug = 0, cntTheme = 0, cntGm = 0, cntScript = 0, cntCustombuttons = 0, cntStyle = 0; var cntdisabled1 = 0, cntdisabled2 = 0, cntdisabled3 = 0,cntdisabled4 = 0, cntdisabled5 = 0, cntdisabled6 = 0, cntdisabled7 = 0; var cntenabled1 = 0, cntenabled2 = 0, cntenabled3 = 0,cntenabled4 = 0, cntenabled5 = 0, cntenabled6 = 0,cntenabled7 = 0; var ckExt = 0, ckPlug = 0, ckTheme = 0, ckGm = 0, ckScript = 0, ckCustombuttons = 0, ckStyle = 0; var ckdisabled1 = 0, ckdisabled2 = 0, ckdisabled3 = 0, ckdisabled4 = 0, ckdisabled5 = 0, ckdisabled6 = 0, ckdisabled7 = 0; var ckenabled1 = 0, ckenabled2 = 0, ckenabled3 = 0, ckenabled4 = 0, ckenabled5 = 0, ckenabled6 = 0, ckenabled7 = 0; for(var i = 0; i < cnt; i++) { if(exts[i].type == "extension") cntExt++; if(exts[i].type == "plugin") cntPlug++; if(exts[i].type == "theme") cntTheme++ ; if(exts[i].type == "greasemonkey-user-script") cntGm++; if(exts[i].type == "userscript") cntScript++; if(exts[i].type == "userstyle") cntStyle++; if(exts[i].type == "custombuttons") cntCustombuttons++; if(exts[i].type == "extension") {if (exts [i]. userDisabled) cntdisabled1++; else cntenabled1++;} if(exts[i].type == "plugin") {if (exts [i]. userDisabled) cntdisabled2++; else cntenabled2++;} if(exts[i].type == "theme"){if (exts [i]. userDisabled) cntdisabled3++; else cntenabled3++;} if(exts[i].type == "greasemonkey-user-script"){if (exts [i]. userDisabled) cntdisabled4++; else cntenabled4++;} if(exts[i].type == "userscript"){if (exts [i]. userDisabled) cntdisabled5++; else cntenabled5++;} if(exts[i].type == "userstyle"){if (exts [i]. userDisabled) cntdisabled6++; else cntenabled6++;} if(exts[i].type == "custombuttons"){ var str = exts[i].id; var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length); var button = document.getElementById(id); if (!button == false)cntenabled7++; else cntdisabled7++;} } // ===== Не показывать типы расширений, если их нет в about:addons=== if(cntExt == 0) aWin.document.getElementById("extensionsView").style.display = "none"; if(cntTheme == 0) aWin.document.getElementById("themesView").style.display = "none"; if(cntPlug == 0) aWin.document.getElementById("pluginsView").style.display = "none"; if(cntGm == 0) aWin.document.getElementById("scriptView").style.display = "none"; if(cntScript == 0) aWin.document.getElementById("scriptsView").style.display = "none"; if(cntStyle == 0) aWin.document.getElementById("stylesView").style.display = "none"; if(cntCustombuttons == 0) aWin.document.getElementById("custombuttonsView").style.display = "none"; // ===== Подсчет всех и отключенных=== if(aWin.document.getElementById("extensionsView").checked) ckExt = cntExt, ckdisabled1 = cntdisabled1, ckenabled1 = cntenabled1; else ckExt = 0, ckdisabled1 = 0, ckenabled1 = 0; if(aWin.document.getElementById("pluginsView").checked) ckPlug = cntPlug, ckdisabled2 = cntdisabled2, ckenabled2 = cntenabled2; else ckPlug = 0, ckdisabled2 = 0, ckenabled2 = 0; if(aWin.document.getElementById("themesView").checked) ckTheme = cntTheme, ckdisabled3 = cntdisabled3, ckenabled3 = cntenabled3; else ckTheme = 0, ckdisabled3 = 0, ckenabled3 = 0; if(aWin.document.getElementById("scriptView").checked) ckGm = cntGm, ckdisabled4 = cntdisabled4, ckenabled4 = cntenabled4; else ckGm = 0, ckdisabled4 = 0, ckenabled4 = 0; if(aWin.document.getElementById("scriptsView").checked) ckScript = cntScript, ckdisabled5 = cntdisabled5, ckenabled5 = cntenabled5; else ckScript = 0, ckdisabled5 = 0, ckenabled5 = 0; if(aWin.document.getElementById("custombuttonsView").checked) ckCustombuttons = cntCustombuttons, ckdisabled7 = cntdisabled7, ckenabled7 = cntenabled7; else ckCustombuttons = 0, ckdisabled7 = 0, ckenabled7 = 0; if(aWin.document.getElementById("stylesView").checked) ckStyle = cntStyle, ckdisabled6 = cntdisabled6, ckenabled6 = cntenabled6; else ckStyle = 0, ckdisabled6 = 0, ckenabled6 = 0; var totalCnt = ckExt + ckTheme + ckPlug + ckGm + ckScript + ckCustombuttons + ckStyle; var totaldisabled = ckdisabled1 + ckdisabled2 + ckdisabled3 + ckdisabled4 + ckdisabled5 + ckdisabled6 + ckdisabled7; var totalenabled = ckenabled1 + ckenabled2 + ckenabled3 + ckenabled4 + ckenabled5 + ckenabled6 + ckenabled7; // ===== Заголовок=== var str0 = "Приложение" + ": " + appInfo.vendor + " " + appInfo.name + " " + appInfo.version + " (" + appInfo.appBuildID ; var str1 = "Операционная система" + ": " + navigator.oscpu + " (" + app_info2.XPCOMABI + ")"; var str2 = "Профиль: " + getProfileName(); if(aWin.document.getElementById("Tilebox2").checked){ var str3 = "Всего : " + totalCnt + "\u2007\u2007" + "Включено: " + totalenabled + "\u2007\u2007" + "Отключено: " + totaldisabled + "\n"; } else var str3 = ""; if(aWin.document.getElementById("Tilebox1").checked){ var str4 = "Создан: " + aDate()+ "\n"; } else var str4 = ""; if(aWin.document.getElementById("Tilebox").checked){ var str = str0 + ")\n" + str1 + "\n" + str2 + "\n"; } else var str = ""; var extList = str + str3 + str4; // == Сортировка по имени и типу===== exts.sort(function(a, b) { a = a.name.toLowerCase(); b = b.name.toLowerCase(); if (a < b) return -1; if (a > b) return 1; return 0; }) exts.sort(function(a, b) { a = a.type.toLowerCase(); b = b.type.toLowerCase(); if (a < b) return -1; if (a > b) return 1; if (a == "custombuttons") return 1; return 0; }) exts.sort(function(a, b) { a = a.type.toLowerCase(); b = b.type.toLowerCase(); if (a == "custombuttons") return 1; return 0; }) var typeExt = 0, typePlug = 0, typeTheme = 0, typeGm = 0, typeScript = 0, typeCustombuttons = 0, typeStyle = 0; for(var i = 0; i < cnt; i++) { // ===== Обявление переменных для свойств=== var nameOf = "", verOf = "", typeOf = "", idOf = "", CompOf = "", dateOf = "", homepageURLOf = "", AMOURLOf = "", supportURLOf = "", descriptionOf = "", dateIOf = ""; // ===== Имя и версия=== if(exts[i].name && exts[i].version) { nameOf = '"' + exts[i].name + " "; verOf = exts[i].version + '"'; } if(exts[i].name && !exts[i].version) nameOf = '"' + exts[i].name + '"'; // ===== Совместимость=== if(aWin.document.getElementById("CompBox").checked){ var XPIProvider = Components.utils.import("resource://gre/modules/addons/XPIProvider.jsm") var addons_db = XPIProvider.XPIDatabase.getAddons(); CompOf = Array(); var db_found = false; var tmp_addon = null; for (var tmp_i=0; (!db_found && tmp_i<addons_db.length); tmp_i++) { if (addons_db[tmp_i].id == exts[i].id) { tmp_addon = addons_db[tmp_i]; db_found = true; } } if (tmp_addon != null) { var target_app; for (var j=0; j<tmp_addon.targetApplications.length; j++) { target_app = tmp_addon.targetApplications[j]; } CompOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Совместимость с Firefox:" + "\u2007" + target_app.minVersion + " \u2013" + target_app.maxVersion + "\n"; } } else var CompOf = ""; // ===== id === if(aWin.document.getElementById("idextBox").checked){ if(exts[i].id) idOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "id" + ":" + " " + exts[i].id + "\n"; } else var idOf = ""; // ===== тип стиля=== if(exts[i].styleTypes) typeOf = " (стиль " + ucFirst(exts[i].styleTypes) + ")"; // ===== дата обновления=== if(aWin.document.getElementById("Datebox").checked){ if(exts[i].updateDate) { var xDate = exts[i].updateDate.toString(); var xA = xDate.substring(4, 7), xB = xDate.substring(8, 10), xC = xDate.substring(11, 15); dateOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Дата обновления " + ":" + "\u2007" + xB + " " + xA + " " + xC + "\n"; } } else var dateOf = ""; // ===== Дата установки=== if(aWin.document.getElementById("DateIbox").checked){ if(exts[i].installDate) { var xDate = exts[i].installDate.toString(); var xA = xDate.substring(4, 7), xB = xDate.substring(8, 10), xC = xDate.substring(11, 15); dateIOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Дата установки " + ":" + "\u2007\u2007\u2007" + xB + " " + xA + " " + xC + "\n"; } } else var dateIOf = ""; // ===== Домашняя страница=== if(aWin.document.getElementById("Homebox").checked){ if(exts[i].homepageURL) homepageURLOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Дом. страница" + ":" + " " + exts[i].homepageURL + "\n"; } else var homepageURLOf = ""; // ===== Cтраница на AMO=== if(aWin.document.getElementById("AMObox").checked){ if(exts[i].reviewURL) AMOURLOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Cтраница на AMO" + ":" + " " + exts[i].reviewURL.replace(/\/reviews\/\?src=api/, "/") + "\n"; } else var AMOURLOf = ""; // ===== Страница поддержки=== if(aWin.document.getElementById("supportbox").checked){ if(exts[i].supportURL) supportURLOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Страница поддержки" + ":" + " " + exts[i].supportURL + "\n"; } else var supportURLOf = ""; // ===== Описание=== if(aWin.document.getElementById("Descriptbox").checked){ if(exts[i].description) descriptionOf = "\u2007\u2007\u2007\u2007\u2007\u2007" + "Описание" + ":" + " " + exts[i].description + "\n"; } else var descriptionOf = ""; // ===== отключено=== var xx = exts[i].userDisabled; if(xx == true) var ud = " :: (отключено)"; else var ud = ""; // ===== СВ кнопка не вытащена(не активна)=== if(exts[i].type == "custombuttons"){ var str = exts[i].id; var id = str.substring(str.lastIndexOf("custombuttons-button"), str.length); var button = document.getElementById(id); if (!button) { var SD = " :: (не активна)"; } else var SD = ""; } else var SD = ""; // ===== общий лист=== listStr = ". " + nameOf + verOf + typeOf + ud + SD + "\n" + idOf + CompOf + dateIOf + dateOf + homepageURLOf + AMOURLOf + supportURLOf + descriptionOf; listStr = listStr.replace(/Jan/gi,'января').replace(/Feb/gi,'февраля').replace(/Mar/gi,'марта').replace(/Apr/gi,'апреля').replace(/May/gi,'мая').replace(/Jun/gi,'июня').replace(/Jul/gi,'июля').replace(/Aug/gi,'августа').replace(/Sep/gi,'сентября').replace(/Oct/gi,'октября').replace(/Nov/gi,'ноября').replace(/Dec/gi,'декабря').replace(/Global/gi,'глобальный').replace(/App/gi,'приложения').replace(/Site/gi,'для сайта'); // ===== Скрыть отключенные расширения=== if(pref("extBox") == true ){ if(exts[i].type == "extension" && exts[i].userDisabled == false) typeExt++; if(aWin.document.getElementById("extensionsView").checked) { if(typeExt != typeExt-1 && exts[i].type == "extension" && exts[i].userDisabled == false) { if(typeExt == 1) extList += "\nРАСШИРЕНИЯ: " + "Всего: " + cntExt + "\u2007" + "Включено: " + cntenabled1 + "\u2007" + "Отключено: " + cntdisabled1 + "\n" + "\u2007\u2007" + typeExt + listStr; if(typeExt > 1 && typeExt < 10) extList += "\u2007\u2007" + typeExt + listStr; if(typeExt >= 10) extList += "\u2007" + typeExt + listStr; } } if(exts[i].type == "plugin" && exts[i].userDisabled == false) typePlug++; if(aWin.document.getElementById("pluginsView").checked) { if(typePlug != typePlug-1 && exts[i].type == "plugin" && exts[i].userDisabled == false) { if(typePlug == 1) extList += "\nПЛАГИНЫ: " + "Всего: " + cntPlug + "\u2007" + "Включено: " + cntenabled2 + "\u2007" + "Отключено: " + cntdisabled2 + "\n" + "\u2007\u2007" + typePlug + listStr; if(typePlug > 1 && typePlug < 10) extList += "\u2007\u2007" + typePlug + listStr; if(typePlug >= 10) extList += "\u2007" + typePlug + listStr; } } if(exts[i].type == "theme" && exts[i].userDisabled == false) typeTheme++; if(aWin.document.getElementById("themesView").checked) { if(typeTheme != typeTheme-1 && exts[i].type == "theme" && exts[i].userDisabled == false) { if(typeTheme == 1) extList += "\nТЕМЫ: " + "Всего: " + cntTheme + "\u2007" + "Включено: " + cntenabled3 + "\u2007" + "Отключено: " + cntdisabled3 + "\n" + "\u2007\u2007" + typeTheme + listStr; if(typeTheme > 1 && typeTheme < 10) extList += "\u2007\u2007" + typeTheme + listStr; if(typeTheme >= 10) extList += "\u2007" + typeTheme + listStr; } } if(exts[i].type == "greasemonkey-user-script" && exts[i].userDisabled == false) typeGm++; if(aWin.document.getElementById("scriptView").checked) { if(typeGm != typeGm-1 && exts[i].type == "greasemonkey-user-script" && exts[i].userDisabled == false) { if(typeGm == 1) var extList3 = "\nGM СРИПТЫ: " + "Всего: " + cntGm + "\u2007" + "Включено: " + cntenabled4 + "\u2007" + "Отключено: " + cntdisabled4 + "\n" + "\u2007\u2007" + typeGm + listStr; if(typeGm > 1 && typeGm < 10) var extList3 = "\u2007\u2007" + typeGm + listStr; if(typeGm >= 10) var extList3 = "\u2007" + typeGm + listStr; extList +=extList3 } } if(exts[i].type == "userscript" && exts[i].userDisabled == false) typeScript++; if(aWin.document.getElementById("scriptsView").checked) { if(typeScript != typeScript-1 && exts[i].type == "userscript" && exts[i].userDisabled == false) { if(typeScript == 1) extList += "\nSCRIPTISH СКРИПТЫ: " + "Всего: " + cntScript + "\u2007" + "Включено: " + cntenabled5 + "\u2007" + "Отключено: " + cntdisabled5 + "\n" + "\u2007\u2007" + typeScript + listStr; if(typeScript > 1 && typeScript < 10) extList += "\u2007\u2007" + typeScript + listStr; if(typeScript >= 10) extList += "\u2007" + typeScript + listStr; } } if(exts[i].type == "userstyle" && exts[i].userDisabled == false) typeStyle++; if(aWin.document.getElementById("stylesView").checked) { if(typeStyle != typeStyle-1 && exts[i].type == "userstyle" && exts[i].userDisabled == false) { if(typeStyle == 1) extList += "\nСТИЛИ: " + "Всего: " + cntStyle + "\u2007" + "Включено: " + cntenabled6 + "\u2007" + "Отключено: " + cntdisabled6 + "\n" + "\u2007\u2007" + typeStyle + listStr; if(typeStyle > 1 && typeStyle < 10) extList += "\u2007\u2007" + typeStyle + listStr; if(typeStyle >= 10) extList += "\u2007" + typeStyle + listStr; } } if(exts[i].type == "custombuttons" && !button == false) typeCustombuttons++; if(aWin.document.getElementById("custombuttonsView").checked) { if(typeCustombuttons != typeCustombuttons-1 && exts[i].type == "custombuttons" && !button == false) { if(typeCustombuttons == 1) extList += "\nСВ кнопки: " + "Всего: " + cntCustombuttons + "\u2007" + "Включено: " + cntenabled7 + "\u2007" + "Отключено: " + cntdisabled7 + "\n" + "\u2007\u2007" + typeCustombuttons + listStr; if(typeCustombuttons > 1 && typeCustombuttons < 10) extList += "\u2007\u2007" + typeCustombuttons + listStr; if(typeCustombuttons >= 10) extList += "\u2007" + typeCustombuttons + listStr; } } } // ===== Показывать все (в т.ч. отключенные) расширения=== if(pref("extBox") == false ){ if(exts[i].type == "extension") typeExt++; if(aWin.document.getElementById("extensionsView").checked) { if(typeExt != typeExt-1 && exts[i].type == "extension") { if(typeExt == 1) extList += "\nРАСШИРЕНИЯ: " + "Всего: " + cntExt + "\u2007" + "Включено: " + cntenabled1 + "\u2007" + "Отключено: " + cntdisabled1 + "\n" + "\u2007\u2007" + typeExt + listStr; if(typeExt > 1 && typeExt < 10) extList += "\u2007\u2007" + typeExt + listStr; if(typeExt >= 10) extList += "\u2007" + typeExt + listStr; } } if(exts[i].type == "plugin") typePlug++; if(aWin.document.getElementById("pluginsView").checked) { if(typePlug != typePlug-1 && exts[i].type == "plugin") { if(typePlug == 1) extList += "\nПЛАГИНЫ: " + "Всего: " + cntPlug + "\u2007" + "Включено: " + cntenabled2 + "\u2007" + "Отключено: " + cntdisabled2 + "\n" + "\u2007\u2007" + typePlug + listStr; if(typePlug > 1 && typePlug < 10) extList += "\u2007\u2007" + typePlug + listStr; if(typePlug >= 10) extList += "\u2007" + typePlug + listStr; } } if(exts[i].type == "theme") typeTheme++; if(aWin.document.getElementById("themesView").checked) { if(typeTheme != typeTheme-1 && exts[i].type == "theme") { if(typeTheme == 1) extList += "\nТЕМЫ: " + "Всего: " + cntTheme + "\u2007" + "Включено: " + cntenabled3 + "\u2007" + "Отключено: " + cntdisabled3 + "\n" + "\u2007\u2007" + typeTheme + listStr; if(typeTheme > 1 && typeTheme < 10) extList += "\u2007\u2007" + typeTheme + listStr; if(typeTheme >= 10) extList += "\u2007" + typeTheme + listStr; } } if(exts[i].type == "greasemonkey-user-script") typeGm++; if(aWin.document.getElementById("scriptView").checked) { if(typeGm != typeGm-1 && exts[i].type == "greasemonkey-user-script") { if(typeGm == 1) extList += "\nGM СРИПТЫ: " + "Всего: " + cntGm + "\u2007" + "Включено: " + cntenabled4 + "\u2007" + "Отключено: " + cntdisabled4 + "\n" + "\u2007\u2007" + typeGm + listStr; if(typeGm > 1 && typeGm < 10) extList += "\u2007\u2007" + typeGm + listStr; if(typeGm >= 10) extList += "\u2007" + typeGm + listStr; } } if(exts[i].type == "userscript") typeScript++; if(aWin.document.getElementById("scriptsView").checked) { if(typeScript != typeScript-1 && exts[i].type == "userscript") { if(typeScript == 1) extList += "\nSCRIPTISH СКРИПТЫ: " + "Всего: " + cntScript + "\u2007" + "Включено: " + cntenabled5 + "\u2007" + "Отключено: " + cntdisabled5 + "\n" + "\u2007\u2007" + typeScript + listStr; if(typeScript > 1 && typeScript < 10) extList += "\u2007\u2007" + typeScript + listStr; if(typeScript >= 10) extList += "\u2007" + typeScript + listStr; } } if(exts[i].type == "userstyle") typeStyle++; if(aWin.document.getElementById("stylesView").checked) { if(typeStyle != typeStyle-1 && exts[i].type == "userstyle") { if(typeStyle == 1) extList += "\nСТИЛИ: " + "Всего: " + cntStyle + "\u2007" + "Включено: " + cntenabled6 + "\u2007" + "Отключено: " + cntdisabled6 + "\n" + "\u2007\u2007" + typeStyle + listStr; if(typeStyle > 1 && typeStyle < 10) extList += "\u2007\u2007" + typeStyle + listStr; if(typeStyle >= 10) extList += "\u2007" + typeStyle + listStr; } } if(exts[i].type == "custombuttons") typeCustombuttons++; if(aWin.document.getElementById("custombuttonsView").checked) { if(typeCustombuttons != typeCustombuttons-1 && exts[i].type == "custombuttons") { if(typeCustombuttons == 1) extList += "\nСВ кнопки: " + "Всего: " + cntCustombuttons + "\u2007" + "Включено: " + cntenabled7 + "\u2007" + "Отключено: " + cntdisabled7 + "\n" + "\u2007\u2007" + typeCustombuttons + listStr; if(typeCustombuttons > 1 && typeCustombuttons < 10) extList += "\u2007\u2007" + typeCustombuttons + listStr; if(typeCustombuttons >= 10) extList += "\u2007" + typeCustombuttons + listStr; } } } } aWin.document.title = "Addon List Genenerator"; var textbox = aWin.document.getElementById("listBox"); textbox.value = extList; textbox.selectionStart = 0; textbox.selectionEnd = 0; var mrd = Services.wm.getMostRecentWindow("addonlist:gen"); if(aWin.document.getElementById("editList").checked) { mrd.document.getElementById("listBox").style.MozUserInput = ""; mrd.document.getElementById("listBox").style.MozUserSelect = ""; mrd.document.getElementById("listBox").style.MozUserFocus = ""; } else { mrd.document.getElementById("listBox").style.MozUserInput = "none"; mrd.document.getElementById("listBox").style.MozUserSelect = "none"; mrd.document.getElementById("listBox").style.MozUserFocus = "ignore"; } } this.load = function(aWin) { aWin.document.getElementById("editList").checked = !pref("editList"); try { var aView = aWin.document.getElementsByClassName("checkBox"); for(var i = 0; i < aView.length; i++) aView[i].checked = pref(aView[i].id); showExtensionList(aWin, Application.extensions.all); } catch(e) {AddonManager.getAllAddons(function(extensions) {showExtensionList(aWin, extensions);})} if(pref("editList")) { aWin.document.getElementById("listBox").style.MozUserInput = ""; aWin.document.getElementById("listBox").style.MozUserSelect = ""; aWin.document.getElementById("listBox").style.MozUserFocus = ""; } else { aWin.document.getElementById("listBox").style.MozUserInput = "none"; aWin.document.getElementById("listBox").style.MozUserSelect = "none"; aWin.document.getElementById("listBox").style.MozUserFocus = "ignore"; } if(pref("hideNotes")) { aWin.document.getElementById("all-notes").collapsed = pref("hideNotes"); let size = aWin.document.getElementById("addonGenList-popup").getAttribute("sizemode"); aWin.sizeToContent(); } if(pref("jump")) { var aaa = gBrowser.mTabContainer.childNodes, uri = "about:addons", addatab = true; for (var i = 0; i < aaa.length; i++) { if (aaa[i].linkedBrowser.currentURI.spec == uri) { gBrowser.selectedTab = aaa[i]; addatab = false; } } if (addatab) gBrowser.selectedTab = gBrowser.addTab(uri); } } this.check = function(e) { var enable = pref(e.id) != false ? false : true, mrd = Services.wm.getMostRecentWindow("addonlist:gen"); gRoot.setBoolPref(e.id, enable); try { showExtensionList(mrd, Application.extensions.all); } catch(e) {AddonManager.getAllAddons(function(extensions) {showExtensionList(mrd, extensions);})} mrd.document.getElementById("all-notes").collapsed = pref("hideNotes"); var size = mrd.document.getElementById("addonGenList-popup").getAttribute("sizemode"); mrd.sizeToContent(); }
Отредактировано Andrey_Krropotkin (01-02-2016 00:07:28)
Отсутствует
Я проверил этот код на FF45 и у меня он не тормозит загрузку фаерфокса и по коду видно что он должен срабатывать только при перетаскивании разных объектов на странице и на интерфейсе браузера, то есть код ни как не может тормозить старт фаерфокса.
Гм, ну я использую официальные версии, может еще кто-нибудь проверить на официальной 44-й? У меня вот так, либо плагин вырубаешь, либо кнопку удаляешь и сразу все ок, загружается сразу.
Отредактировано Retif (01-02-2016 09:13:51)
Отсутствует
Прошу Вас всех протестировать кнопки. Давно их делал. Сейчас нет времени этим заниматься и следить за всеми нововведениями в браузере. Если есть у кого возможность пожалуйста улучшите функционал. Могут некоторые функции в кнопках не работать.
На FF24 текстовое поле, которое открывает кнопка, ни на что не реагирует.
Отсутствует
Подскажите код, который закрывает все вкладки, кроме первой. Либо просто код, который открывает самую первую вкладку
Отсутствует
Подскажите код, который закрывает все вкладки, кроме первой.
Отсутствует
Infocatcher
Насчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора .
Может if (true) return; или ещё как-нибудь.
Отсутствует
\extensions\custombuttons@xsms.org\chrome\custombuttons.jar\content\custombuttons\overlay.js
custombuttons.jar - это архив.
Как только я это сделал, фаерфокс стал ругаться на неподписанный аддон. Я правильно понимаю, что нужно не дергаться и ждать обновления адддона?
Отсутствует
Как только я это сделал, фаерфокс стал ругаться на неподписанный аддон. Я правильно понимаю, что нужно не дергаться и ждать обновления адддона?
Дык хозяин барин, если можешь обходится без кнопок, то не дёргайся, жди... А так xpinstall.signatures.required - false.
Отсутствует
Любое изменение аддона... Меня это тоже бесит - заменил иконку или поправил адрес, как мне нужно с https на http, и аддон сразу неподписанный. Бред от мозиллы.
Отредактировано xrun1 (02-02-2016 17:22:55)
Отсутствует
Насчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора .
Может if (true) return; или ещё как-нибудь.
Угу, мусор я видел.
У меня сейчас мало отключенных, не успело достать.
Подправил, спасибо за идею: https://github.com/Infocatcher/Custom_B … d23461eb02
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Dumby пишетНасчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора .
Может if (true) return; или ещё как-нибудь.Угу, мусор я видел.
У меня сейчас мало отключенных, не успело достать.
Подправил, спасибо за идею: https://github.com/Infocatcher/Custom_B … d23461eb02
Имеется в виду, что просто return делает кнопку совсем не работающей, как будто ошибка компиляции?
Так это ещё лучше имхо.
Кстати, return(0) не даёт ошибки компиляции
--------------------------------------------------------------
Если же дело не в этом, то прошу прощения, что вмешиваюсь, у меня 28, может это не релевантно...
Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©
Отсутствует
Имеется в виду, что просто return делает кнопку совсем не работающей, как будто ошибка компиляции?
В новых версиях на код, который никогда не будет выполняться, выводится предупреждение в консоль, вот такое: «unreachable code after return statement». Мешает и отвлекает.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Подскажите пожалуйста код очистки истории закрытых вкладок.
Ты что-то хитрое задумал, или просто
var ss = Cc["@mozilla.org/suite/sessionstore;1"].getService(Ci.nsISessionStore); var count = ss.getClosedTabCount(window); while(count--) ss.forgetClosedTab(window, count);
у меня 28
Есть предложение
Создай в about:config строковую настройку с именем
general.useragent.override.forum.mozilla-russia.org
Присвой этой настройке значение желаемого юзерагента,
в данном случае настоящего, что-то типа
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:28.0) Gecko/20100101 Firefox/28.0
Код для Инициализации, активирующий override-модуль:
(global => { var {UserAgentOverrides} = global; var topic = "quit-application-granted"; var observer = global[_id]; if (!observer) { observer = global[_id] = { init: function() { UserAgentOverrides.init(); Services.obs.addObserver(observer, topic, false); }, observe: function() { if (!global.gInitialized) return; UserAgentOverrides.uninit(); Services.obs.removeObserver(observer, topic); delete global[_id]; } }; observer.init(); } addDestructor(reason => reason[5] == "e" && observer.observe()); })(Cu.import("resource://gre/modules/UserAgentOverrides.jsm", {}));
Потом зайди сюда и напиши что-нибудь, посмотрим получилось или нет.
Отсутствует
Вопрос знающим людям. Я добавил в FF45 на Панель меню в меню Закладки новый пункт меню:
(el=> { var menuitem = el.parentNode.insertBefore(document.createElement("menuitem"), el); menuitem.setAttribute("label", "Создать резервную копию закладок на рабочий стол"); addDestructor(()=> menuitem.remove() ); })(document.getElementById("organizeBookmarksSeparator"));
После старта, рестарта, настройки панели инструментов новый пункт меню добавляется, но если открыть редактор кнопки и нажать Ok или Save новый пункт меню из меню пропадает, а вот если из кода удалить:
и сделать рестарт то новый пункт меню при ранее описанных действиях уже не пропадает, а дублируется. С другими меню на Панель меню всё нормально. В чём тут проблема и как её решить?
Отсутствует
Установил исправленную версию для FF 44 с форума разработчика. После того, как на addons.mozilla.org выйдет новая версия - у меня в браузере сама обновится или нужно будет обновлять вручную?
Отсутствует
Dumby
Твой код который показывает заполненность FF кеша в подсказке у кнопки уже не работает на FF44:
// Всплывающая подсказка у счётчика отображает заполнение дискового кеша .... var title = "Л: Очистить кэш и удалить Flash-куки\nС: Минимизировать использование памяти\n\n"; var data = { memory: "Memory Cache: ", disk: "Disk Cache: ", offline: "Offline Cache: " }; function getSize(size) { if (!size) return size === 0 ? "0" : "?"; for(var count = -1; size >= 1024; size /= 1024, count++); return size.toFixed(2).replace(/0+$/, "").replace(/\.$/, "") + " " + ("KMGT"[count] || "") + "B"; } function setInf(tot, max, type, i) { var inf = getSize(tot) + " / " + getSize(max); var key = "browser.cache." + type + ".enable"; if (!Services.prefs.getBoolPref(key)) inf += " (disabled)"; memoryDisplay.tooltipText = memoryDisplay.tooltipText.replace(zws(i), inf); } function zws(ind) "\u200B\u200B\u200B".slice(0, ++ind); var types = Object.keys(data); var ttt = title + types.map(function(key, i) data[key] + zws(i)).join("\n"); memoryDisplay.onmouseenter = function() { memoryDisplay.tooltipText = ttt; try { var entries = {}; Services.cache.visitEntries({ visitDevice: function(device, info) entries[device] = info, visitEntry: function() {} }); types.forEach(function(type, i) { var info = entries[type]; setInf(info && info.totalSize, info && info.maximumSize, type, i) }); } catch(ex) { Services.cache2 && types.forEach(function(type, i) { var func = function(aEntryCount, aConsumption, aCapacity, aDiskDirectory) setInf(aConsumption, aCapacity, type, i); var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null); try { storage.asyncVisitStorage({onCacheStorageInfo: func}, false) } catch(ex) {}; }); } };
Консоль показывает ошибку в:
var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null);
исправь пожалуйста.
Отсутствует
bunda1
Может так
var context = Cu.import("resource://gre/modules/LoadContextInfo.jsm", {}).LoadContextInfo.default; memoryDisplay.onmouseenter = function() { ... //var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"]({}, null); var storage = Services.cache2[(type == "offline" ? "app" : type) + "CacheStorage"](context, null);
Отсутствует