Полезная информация

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№952631-01-2016 23:43:14

Andrey_Krropotkin
Участник
 
Группа: Members
Зарегистрирован: 11-11-2011
Сообщений: 484
UA: Firefox 44.0

Re: Custom Buttons

Прошу Вас всех протестировать кнопки. Давно их делал. Сейчас нет времени этим заниматься и следить за всеми нововведениями в браузере. Если есть у кого возможность пожалуйста улучшите функционал. Могут некоторые функции в кнопках не работать.
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, "&amp;");
      out[i] = out[i].replace(/>/g, "&gt;");
      out[i] = out[i].replace(/</g, "&lt;");
      out[i] = out[i].replace(/"/g, "&quot;");
      out[i] = out[i].replace(/'/g, "&apos;");
    }
    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, "&amp;");
      out[i] = out[i].replace(/>/g, "&gt;");
      out[i] = out[i].replace(/</g, "&lt;");
      out[i] = out[i].replace(/"/g, "&quot;");
      out[i] = out[i].replace(/'/g, "&apos;");
    }
    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)

Отсутствует

 

№952701-02-2016 09:13:09

Retif
Участник
 
Группа: Members
Зарегистрирован: 14-09-2014
Сообщений: 111
UA: Firefox 43.0

Re: Custom Buttons

bunda1 пишет

Я проверил этот код на FF45 и у меня он не тормозит загрузку фаерфокса и по коду видно что он должен срабатывать только при перетаскивании разных объектов на странице и на интерфейсе браузера, то есть код ни как не может тормозить старт фаерфокса.

Гм, ну я использую официальные версии, может еще кто-нибудь проверить на официальной 44-й? У меня вот так, либо плагин вырубаешь, либо кнопку удаляешь и сразу все ок, загружается сразу.

Отредактировано Retif (01-02-2016 09:13:51)

Отсутствует

 

№952801-02-2016 13:05:39

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

Andrey_Krropotkin пишет

Прошу Вас всех протестировать кнопки. Давно их делал. Сейчас нет времени этим заниматься и следить за всеми нововведениями в браузере. Если есть у кого возможность пожалуйста улучшите функционал. Могут некоторые функции в кнопках не работать.

На FF24 текстовое поле, которое открывает кнопка, ни на что не реагирует.

Отсутствует

 

№952901-02-2016 23:51:17

nlBoOm
Участник
 
Группа: Members
Зарегистрирован: 18-12-2015
Сообщений: 13
UA: Firefox 44.0

Re: Custom Buttons

При включённом Custom Buttons Firefox 44 очень медленно стартует.

Отредактировано nlBoOm (01-02-2016 23:54:30)

Отсутствует

 

№953002-02-2016 00:10:51

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 47.0

Re: Custom Buttons

nlBoOm пишет

При включённом Custom Buttons Firefox 44 очень медленно стартует.

№8996 или №8

Отсутствует

 

№953102-02-2016 00:54:49

nlBoOm
Участник
 
Группа: Members
Зарегистрирован: 18-12-2015
Сообщений: 13
UA: Firefox 44.0

Re: Custom Buttons

voqabuhe пишет

№8996

chrome://custombuttons/content/overlay.js

Четно, так и не смог найти, где это.

voqabuhe пишет

№8

Спасибо, вроде помогло...

Отсутствует

 

№953202-02-2016 05:01:35

kolbasa559
Участник
 
Группа: Members
Зарегистрирован: 14-09-2015
Сообщений: 13
UA: Firefox 43.0

Re: Custom Buttons

Подскажите код, который закрывает все вкладки, кроме первой. Либо просто код, который открывает самую первую вкладку

Отсутствует

 

№953302-02-2016 11:10:20

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

kolbasa559 пишет

Подскажите код, который закрывает все вкладки, кроме первой.

Выделить код

Код:

[...gBrowser.tabs].forEach((tab,i)=> i>0 && gBrowser.removeTab(tab));

Отсутствует

 

№953402-02-2016 14:55:22

emlen
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 201
UA: unknown 0.0

Re: Custom Buttons

Подскажите пожалуйста код очистки истории закрытых вкладок.


SeaMonkey 2.39 forever

Отсутствует

 

№953502-02-2016 16:05:54

Retif
Участник
 
Группа: Members
Зарегистрирован: 14-09-2014
Сообщений: 111
UA: Firefox 43.0

Re: Custom Buttons

nlBoOm пишет

Четно, так и не смог найти, где это.

Аналогично.

Отсутствует

 

№953602-02-2016 16:16:48

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Custom Buttons

Infocatcher

Насчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора :(.
Может if (true) return; или ещё как-нибудь.

Отсутствует

 

№953702-02-2016 17:01:08

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1224
UA: Firefox 44.0

Re: Custom Buttons

nlBoOm, Retif
\extensions\custombuttons@xsms.org\chrome\custombuttons.jar\content\custombuttons\overlay.js
custombuttons.jar - это архив.

Отсутствует

 

№953802-02-2016 17:10:23

Retif
Участник
 
Группа: Members
Зарегистрирован: 14-09-2014
Сообщений: 111
UA: Firefox 43.0

Re: Custom Buttons

xrun1 пишет

\extensions\custombuttons@xsms.org\chrome\custombuttons.jar\content\custombuttons\overlay.js
custombuttons.jar - это архив.

Как только я это сделал, фаерфокс стал ругаться на неподписанный аддон. Я правильно понимаю, что нужно не дергаться и ждать обновления адддона?

Отсутствует

 

№953902-02-2016 17:18:52

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 47.0

Re: Custom Buttons

Retif пишет

Как только я это сделал, фаерфокс стал ругаться на неподписанный аддон. Я правильно понимаю, что нужно не дергаться и ждать обновления адддона?

Дык хозяин барин, если можешь обходится без кнопок, то не дёргайся, жди... А так xpinstall.signatures.required - false. :)

Отсутствует

 

№954002-02-2016 17:22:36

xrun1
Участник
 
Группа: Members
Зарегистрирован: 12-12-2013
Сообщений: 1224
UA: Firefox 44.0

Re: Custom Buttons

:offtopic:Любое изменение аддона... Меня это тоже бесит - заменил иконку или поправил адрес, как мне нужно с https на http, и аддон сразу неподписанный. Бред от мозиллы.:(

Отредактировано xrun1 (02-02-2016 17:22:55)

Отсутствует

 

№954102-02-2016 20:45:10

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 44.0

Re: Custom Buttons

Dumby пишет

Насчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора :(.
Может if (true) return; или ещё как-нибудь.

Угу, мусор я видел.
У меня сейчас мало отключенных, не успело достать. :)
Подправил, спасибо за идею: https://github.com/Infocatcher/Custom_B … d23461eb02


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№954203-02-2016 11:25:19

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 36.0
Веб-сайт

Re: Custom Buttons

Infocatcher пишет
Dumby пишет

Насчёт кнопки Custom Buttons: Disable Initialization.
Начиная с Firefox 40 решили подбросить в консоль мусора :(.
Может if (true) return; или ещё как-нибудь.

Угу, мусор я видел.
У меня сейчас мало отключенных, не успело достать. :)
Подправил, спасибо за идею: https://github.com/Infocatcher/Custom_B … d23461eb02

Имеется в виду, что просто return делает кнопку совсем не работающей, как будто ошибка компиляции?
Так это ещё лучше имхо.
Кстати, return(0) не даёт ошибки компиляции
--------------------------------------------------------------
Если же дело не в этом, то прошу прощения, что вмешиваюсь, у меня [firefox] 28, может это не релевантно...


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№954303-02-2016 13:06:29

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 44.0

Re: Custom Buttons

difabor пишет

Имеется в виду, что просто return делает кнопку совсем не работающей, как будто ошибка компиляции?

В новых версиях на код, который никогда не будет выполняться, выводится предупреждение в консоль, вот такое: «unreachable code after return statement». Мешает и отвлекает.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№954403-02-2016 16:24:04

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Custom Buttons

emlen пишет

Подскажите пожалуйста код очистки истории закрытых вкладок.

Ты что-то хитрое задумал, или просто

скрытый текст

Выделить код

Код:

var ss = Cc["@mozilla.org/suite/sessionstore;1"].getService(Ci.nsISessionStore);
var count = ss.getClosedTabCount(window);
while(count--) ss.forgetClosedTab(window, count);

difabor пишет

у меня [firefox] 28

Есть предложение

скрытый текст
попробовать включить лисий override-модуль юзерагентов для хостов,
чтобы каждый раз не объяснять, что у тебя 28, а не 36, ну, и, может, ещё где пригодится.
Правда, говорят, что он лису напрягает, но тут уж смотри сам.

Создай в 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", {}));

Потом зайди сюда и напиши что-нибудь, посмотрим получилось или нет.

Отсутствует

 

№954503-02-2016 17:00:38

emlen
Участник
 
Группа: Members
Зарегистрирован: 22-05-2015
Сообщений: 201
UA: unknown 0.0

Re: Custom Buttons

Dumby, оно самое, спасибо!!!!


SeaMonkey 2.39 forever

Отсутствует

 

№954603-02-2016 23:36:44

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

Вопрос знающим людям. Я добавил в FF45 на Панель меню в меню Закладки новый пункт меню:

Выделить код

Код:

(el=> {
   var menuitem = el.parentNode.insertBefore(document.createElement("menuitem"), el);
   menuitem.setAttribute("label", "Создать резервную копию закладок на рабочий стол");
   addDestructor(()=> menuitem.remove() );   
})(document.getElementById("organizeBookmarksSeparator"));

После старта, рестарта, настройки панели инструментов новый пункт меню добавляется, но если открыть редактор кнопки и нажать Ok или Save новый пункт меню из меню пропадает, а вот если из кода удалить:

Выделить код

Код:

addDestructor(()=> menuitem.remove() );

и сделать рестарт то новый пункт меню при ранее описанных действиях уже не пропадает, а дублируется. С другими меню на Панель меню всё нормально. В чём тут проблема и как её решить?

Отсутствует

 

№954704-02-2016 01:12:34

1fesFFFF
Участник
 
Группа: Members
Зарегистрирован: 22-01-2010
Сообщений: 252
UA: Firefox 44.0

Re: Custom Buttons

Установил исправленную версию для FF 44 с форума разработчика. После того, как на addons.mozilla.org выйдет новая версия - у меня в браузере сама обновится или нужно будет обновлять вручную?

Отсутствует

 

№954804-02-2016 02:36:20

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 47.0

Re: Custom Buttons

1fesFFFF пишет

Установил исправленную версию для FF 44 с форума разработчика.

Где дают?

Отсутствует

 

№954904-02-2016 10:45:12

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: Custom Buttons

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);

:blush: исправь пожалуйста.

Отсутствует

 

№955004-02-2016 11:27:04

Dumby
Участник
 
Группа: Members
Зарегистрирован: 12-08-2012
Сообщений: 2249
UA: Firefox 38.0

Re: Custom Buttons

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);

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]