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

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

№590110-02-2013 22:58:49

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

Re: Custom Buttons

Andrey_Krropotkin пишет

Источник
Вот мой перевод с некотрыми дополнениями:

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

Выделить код

Код:

/*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=";
try { Cu.import("resource://custombuttons-modules/addons4.js", {}); } catch(ex) {}
 
var data = '<?xml version="1.0"?>' +
  '<?xml-stylesheet href="chrome://global/skin/" type="text/css"?>' +
  '<window id="addonGenList-popup" onload="self.load(this)" title="Extension List" width="550" height="650" style="background: #EEE;" buttons="accept,extra1,extra2,cancel" ' +
  'defaultButton="" windowtype="addonlist:gen" persist="screenX screenY width height sizemode" xmlns="' + xulns + '">' +
  '<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;"/>' +
  '<groupbox id="gb1" style="padding:0; -moz-appearance: none; background: none; border: none;">' + 
    '<hbox>' +
        '<checkbox id="editList" label="Редактировать список" onclick="self.check(id)"/>' +
        '<checkbox id="extBox" class="checkBox" label="Скрыть откл." onclick="self.check(id)"/>' +  
      '</hbox>' +
      '<hbox align="center">' +
          '<label id="label" value="Категории: "/>' +
        '<checkbox id="extensionsView" class="checkBox" label="Расширения" onclick="self.check(id)"/>' +
        '<checkbox id="themesView" class="checkBox" label="Темы" onclick="self.check(id)"/>' +
        '<checkbox id="pluginsView" class="checkBox" label="Плагины" onclick="self.check(id)"/>' +  
        '<checkbox id="stylesView" class="checkBox" label="Стили" onclick="self.check(id)"/>' +
        '<checkbox id="scriptView" class="checkBox" label="GM скрипты" onclick="self.check(id)"/>' +
        '<checkbox id="scriptsView" class="checkBox" label="Scriptish" onclick="self.check(id)"/>' +          
        '<checkbox id="custombuttonsView" class="checkBox" label="СВ кнопки" onclick="self.check(id)"/>' +
     '</hbox>' +
     '<hbox align="center">' +
        '<label id="label" value="Заголовок: "/>' +
        '<checkbox id="Tilebox" class="checkBox" label="О программе" onclick="self.check(id)"/>' +
        '<checkbox id="Tilebox1" class="checkBox" label="Дата" onclick="self.check(id)"/>' +
        '<checkbox id="Tilebox2" class="checkBox" label="Всего" onclick="self.check(id)"/>' +  
      '</hbox>' +   
     '<hbox align="center">' +
       '<label id="label" value="Свойства:   "/>' +   
        '<checkbox id="idextBox" class="checkBox" label="id" onclick="self.check(id)"/>' + 
        '<checkbox id="CompBox" class="checkBox" label="Совместимость" onclick="self.check(id)"/>' +          
        '<checkbox id="DateIbox" class="checkBox" label="Дата установки" onclick="self.check(id)"/>' +                        
        '<checkbox id="Datebox" class="checkBox" label="Дата обновления" onclick="self.check(id)"/>' +  
        '<checkbox id="Homebox" class="checkBox" label="Дом. страница" onclick="self.check(id)"/>' +
        '<checkbox id="Descriptbox" class="checkBox" label="Описание" onclick="self.check(id)"/>' +           
      '</hbox>' +
  '</groupbox>' +       
  '<hbox id="bntCont" style="margin-bottom: 4px">' +
    '<spacer flex="1"/>' +
    '<button dlgtype="accept" id="myAccept" image="' + icon2 + '" label="Создать TXT файл" oncommand="self.archiveTXT()"/>' +
    '<button dlgtype="extra1" id="HTMLBtn" image="' + icon1 + '" label="Создать HTML файл" oncommand="self.archiveHTML()"/>' +    
    '<button dlgtype="extra2" id="myExtra1" label="Копировать" oncommand="self.copy()"/>' +
    '<button dlgtype="cancel" id="myCancel" label="Закрыть" oncommand="close()"/>' +
  '</hbox>' +
'</window>';


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


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: true,
  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,
  Descriptbox: true,
  Homebox: true,
  extBox: true
}

// ===== Заносим настройки в about:config =====
let (branch = Services.prefs.getDefaultBranch(pref.root)) {
  for (let [key, val] in Iterator(pref.defaults)) {
    switch (typeof val) {
      case "boolean": branch.setBoolPref(key, val); break;
      case "number": branch.setIntPref(key, val); break;
      case "string": branch.setCharPref(key, val); 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 {classes: Cc, interfaces: Ci, utils: Cu} = Components;
let ios = Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService);
let sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.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 = Cc["@mozilla.org/file/directory_service;1"].getService(Ci.nsIProperties);
   var profd = rv.get("ProfD", Ci.nsIFile);
   var stream = Cc["@mozilla.org/network/file-input-stream;1"].createInstance(Ci.nsIFileInputStream);
   var dir = Cc["@mozilla.org/file/local;1"].createInstance(Ci.nsILocalFile);
   var current = "", relative = "d", line = {}, path = "";
   if(!reg) {return name;}
   stream.init(reg, 1, 0, 0);
   stream.QueryInterface(Ci.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 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;
          return 0;
          })
      
          exts.sort(function(a, b) {
          a = a.type.toLowerCase();
          b = b.type.toLowerCase();
          if (a == "custombuttons" || b == "extension") 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 = "", 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/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 = ""; 
// ===== тип стиля===   
               function ucFirst(str) {
               var firstLetter = str.slice(0, 1);
               return firstLetter.toUpperCase() + str.substring(1);
               }  
               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();
              if(xDate.indexOf("May") != -1) {
              var xA = xDate.substring(4, 10), xB = xDate.substring(11, 15);
              dateOf = "  (" + xA + ". " + xB + ")";
              } else {
              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();
             if(xDate.indexOf("May") != -1) {
             var xA = xDate.substring(4, 10), xB = xDate.substring(11, 15);
             dateOf = "  (" + xA + ". " + xB + ")";
             } else {
             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 = "";
// ===== Описание===  
             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 + 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) {
  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);})}
  try {
     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";
  }
   } catch(ex) {}
}

  
    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.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.archiveTXT = function() {
  var mrd = Services.wm.getMostRecentWindow("addonlist:gen");
  var lb = mrd.document.getElementById("listBox").value.replace(/\u2007/g, " ");
  var fp = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
  var stream = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(Ci.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();
 }

 this.check = function(id) {
  var enable = pref(id) != false ? false : true, mrd = Services.wm.getMostRecentWindow("addonlist:gen");
  gRoot.setBoolPref(id, enable);
  try {
    showExtensionList(mrd, Application.extensions.all);
  } catch(e) {AddonManager.getAllAddons(function(extensions) {showExtensionList(mrd, extensions);})}
 }


Посмотрите пожалуйста как можно оптимизировать код? Хотел обхватить много, а получилось много строк. Может есть, что лишнее убрать ? Или может что нехватает?

А чем не устраивает эта?

Отредактировано voqabuhe (10-02-2013 22:59:30)

Отсутствует

 

№590210-02-2013 23:04:23

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

Re: Custom Buttons

voqabuhe В этой мало функционала.

На форуме

 

№590311-02-2013 14:09:57

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

Re: Custom Buttons

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

Если в ремонтируемой кнопке встречается тэг (открывающий и закрывающий),
а где-то внутри него ещё один такой-же (с тем-же именем и тоже открывающий и закрывающий)
[...]

Ааа...
С этим сложно, в общем случае надо менять регулярные выражения на полноценный XML-парсер.

Что-то на полноценный парсер имеющегося свободного времени не хватает, так что приделал хитрую распорку.


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

Отсутствует

 

№590411-02-2013 17:01:51

serg00700
Участник
 
Группа: Members
Зарегистрирован: 27-10-2010
Сообщений: 74
UA: Firefox 18.0

Re: Custom Buttons

Вот переводяик гугл похож как в хроме только кнопку нужно нажимать.
Translate(Firefox 18 +)
Переводит страницы в новой активной вкладке сразу справа от текущей вкладки или в текущей вкладке.
Переводит страницы в сервисе Google Translate или в переводчике Microsoft.
https страници переводит в переводчике Microsoft.

Переводит выделенный текст или текст из буфера обмена с помощью сервиса Google Translate в новой активной вкладке сразу справа или в маленьком окошке который можно закрыть кликом на странице.
Переводит выделенный текст или текст из буфера обмена с помощью сервиса Google Translate в новой активной вкладке сразу справа или в маленьком окошке который можно закрыть кликом на странице.

Дает возможность закрывать вкладки двойным кликом на табе и переключиться на левую.Left    => Перевести страницу / выделенный текст.
Middle => Перевести текст, из буфера обмена.
Right   => Mеню кнопки + CB меню.

Выделить код

Код:

// Настройка функций кликов мыши для кнопки ...........................................................................
this.onclick = function(event) {
    // Действие при клике ЛКМ ....
    if ( event.button == 0 ) {
         // перевод выделенного текста если текст выделенн ....
         var str = getSelect();
         if ( str ) {
              custombuttons.getPrefs ("CB.Translate.TextInPopup")? translateTextInPopup(str): translateTextInGoogle(str);
              }
         // перевод страницы ....
         else { 
              custombuttons.getPrefs ("CB.Translate.PageInMicrosoft")? translatePageInMicrosoft(): translatePageInGoogle();    
              } 
         };
     
     // Действие при клике СКМ ....      
     if ( event.button == 1 ) {
          // перевод текста из буфера обмена ....
          var str = gClipboard.read();
          translateTextInGoogle(str);;
          };
};



// Объявляем переменные для этой вкладки ................................................................................
var prefs = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);


// Подсказка у нопки ....................................................................................................
this.tooltipText = "Translate" +"\n"+
                   "Л: Перевести страницу / выделенный текст" +"\n"+
                   "С: Перевести текст из буфера обмена" +"\n"+
                   "П: Меню + CB меню";
                   
                   
                   
                   
// Проверить наличие строк в about:config и создать если не существует ...................................................
if ( custombuttons.getPrefs("CB.Translate.version") !== '2') {

     prefs.setCharPref("CB.Translate.version", "2");
     prefs.setBoolPref("CB.Translate.nextPage", true);
     prefs.setBoolPref("CB.Translate.TextInPopup", true);
     prefs.setBoolPref("CB.Translate.PageInMicrosoft", false);
     prefs.setBoolPref("CB.Translate.DblclickCloseTab", false);
     
     // удалить настройки старой версии кнопки из'about:config' ....
     custombuttons.clearPrefs("Translate.next_page");
     custombuttons.clearPrefs("Translate.DblClick_close_Tab_focus_Left");
};                  


                   
// Функции которые запускаются из меню кнопки ............................................................................
this.CBlabel = function (mi, id) {

var c ='true';
var n = 'false';

// Перевод текста в маленьком окошке ....
if ( !id || id == "Popup" ) {
     var s = "CB.Translate.TextInPopup";
     togglePref(s);

     // изменить нужный пункт меню
     var cek = (custombuttons.getPrefs(s)? c : n);
     this.Pcek = cek;
     if ( mi ) mi.cek = cek;
};

// Перевод страницы в переводчике Microsoft ....
if ( !id || id == "Microsoft" ) {
     var s = "CB.Translate.PageInMicrosoft";
     togglePref(s);

     // изменить нужный пункт меню
     var cek = (custombuttons.getPrefs(s)? c : n);
     this.Mcek = cek;
     if ( mi ) mi.cek = cek;
};

// Перевод страницы в новой вкладке сразу справа ....
if ( !id || id == "Translate" ) {
     var s = "CB.Translate.nextPage";
     togglePref(s);
     
     // изменить нужный пункт меню
     var cek = (custombuttons.getPrefs(s)? c : n);
     this.Tcek = cek;
     if ( mi ) mi.cek = cek;
};

// Двойной клик закрывает вкладку и переключает на вкладку слева ....
if ( !id || id == "DblClick") {
     var s = "CB.Translate.DblclickCloseTab";
     togglePref(s);
     
     // изменить нужный пункт меню
     var cek = (custombuttons.getPrefs(s)? c : n);
     this.Dcek = cek;
     if ( mi ) mi.cek = cek;
};

/* Переключает настройки в 'about:config', 
   выбор настройки завысит от параметра 's' для функции ....*/
function togglePref(s){
  if ( !id ) return; // cтоп, при инициализации кнопки
  custombuttons.setPrefs(s, !custombuttons.getPrefs(s));
}
 };
this.CBlabel()


// Пункти меню ....
this.ss = [
  { cek: this.Pcek, label: "Перевод текста в маленьком окошке", cmd: 'document.popupNode.CBlabel(this, "Popup")', sItemId: '', type:'checkbox'},
  { cek: this.Mcek, label: "Перевод страницы  в переводчике Microsoft", cmd: 'document.popupNode.CBlabel(this, "Microsoft")', sItemId: '', type:'checkbox'},
  { label: "separator", sItemId: ''},
  { cek: this.Tcek, label: "Перевод страницы в новой вкладке сразу справа", cmd: 'document.popupNode.CBlabel(this, "Translate")', sItemId: '', type:'checkbox'},
  { cek: this.Dcek, label: "Двойной клик закрывает вкладку и переключает на вкладку слева", cmd: 'document.popupNode.CBlabel(this, "DblClick")', sItemId: '', type:'checkbox'}
          ];
  
 
// Our Initialization function for creating the context menu, setting up menuitems and telling
var Cb = custombuttons;
this.mObj = Cb.getCbContextObj(this);
this.init = function(x) {
  x.mObj.setSub();
  var nItem = {}, mItem = {};
  document.getElementById(CB2const.sCBCtxtMenu).setAttribute("oncommand", "event.stopPropagation()");
  for(var i in x.ss) {
    nItem = new x.mObj.getItem();
    nItem.id = 'Note';
    nItem.label = x.ss[i].label;
    if (nItem.label == "separator") {
        nItem = document.createElement("menuseparator");
      }
    nItem.value = String(i);
    mItem = x.mObj.insertBefore(nItem , x.mObj.oMenu.lastChild);
    this.ss[i].sItemId = mItem.id;
    mItem.setAttribute('oncommand',x.ss[i].cmd);
    if("type" in x.ss[i])
    mItem.setAttribute('type', x.ss[i].type);
    mItem.setAttribute('checked', x.ss[i].cek);
    mItem.setAttribute( 'autocheck', true);
   }
  x.mObj.getItem();
  nItem = x.mObj.getItem();
  nItem.id = 'Note';
  this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
}
this.init(this);



// Блокировать повторный запуск функций и обработчиков при открытии настройки панелей ................................
if ( this.hasAttribute("stop") ) return;



/* Oтдаст выделенный текст из страницы или текстового поля, 
   если текст не выделен отдаст 'false' .................................................................*/
function getSelect() {
// выделенный текст из страницы ....
var selection = document.commandDispatcher.focusedWindow.getSelection();
var anchor = (selection.anchorNode !== null)? selection.anchorNode: false;

// выделенный текст из 'PRE' ....
if ( anchor && anchor.parentNode.tagName == 'PRE' ) { 
     var node = selection.focusNode;
     var startPos = selection.anchorOffset;
     var endPos = selection.focusOffset;
     var selection = node.data.substring(startPos, endPos); 
     }
// выделенный текст из текстового поля ....
if ( selection.toString().length == 0 ) {
     var theBox = document.commandDispatcher.focusedElement;
     if ( theBox && (theBox.type == "text" || theBox.type == "textarea") ) { 
          var startPos = theBox.selectionStart;
      var endPos = theBox.selectionEnd;
      var selection = theBox.value.substring(startPos, endPos);  
          }
     }
// исправляем проблему с переносом текста новую строку в стандартном win блокноте ....
if ( selection.toString().length !== 0 ) {
     var selection = selection.toString();
     var selection = selection.replace(/\u000A/g, "\u000D\u000A");
     var selection = selection.replace(/\u000D\u000D\u000A/g, "\u000D\u000A");     
     }
return ( selection == '')? false: selection;
};



/* Переводит в переводчике Google страницы в новой активной вкладке сразу справа 
   или в текущей вкладке в зависимости от настроек в 'about:config' .....................................*/
function translatePageInGoogle() {                
   // если это https страница перевести в переводчике Microsoft ....
   var https = ( String(content.location).substring(0,6)== 'https:' )? true: false;
   if ( https ) { translatePageInMicrosoft(); return } ;
   // перевод страницы ....
   var url = "http://translate.google.com/translate?u=" + content.location + "&hl=ru&ie=UTF-8&sl=auto&tl=ru";
   if ( custombuttons.getPrefs ("CB.Translate.nextPage") ) {
        // в новой активной вкладке
        var x = gBrowser.mCurrentTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x);
        }
        else 
        {
        // в текущей вкладке
        loadURI(url);
        }
};



/* Переводит в переводчике Microsoft страницы в новой активной вкладке сразу справа от текущей вкладки
   или в текущей вкладке в зависимости от настроек в 'about:config' .....................................*/
function translatePageInMicrosoft() {                
   // Перевод страницы
   if ( custombuttons.getPrefs ("CB.Translate.nextPage") ) {
        // в новой активной вкладке
        var newTab = gBrowser.duplicateTab(gBrowser.mCurrentTab);
    ++gBrowser.tabContainer.selectedIndex;
        //...
    gBrowser.addEventListener("pageshow", function(event) {
    gBrowser.removeEventListener("pageshow", arguments.callee, true);
    // разрешить страницу для расширения NoScript ....
        if ( "noscriptUtil" in window ) {
              noscriptOverlay.allowPage();
              BrowserStop();
              }
    content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
    }, true);
        }
        else 
           {
           // разрешить страницу для расширения NoScript ....
           if ( "noscriptUtil" in window ) {
                 noscriptOverlay.allowPage();
                 setTimeout(function() { BrowserStop() }, 0);
                 }
           // в текущей вкладке
           content.document.location = "javascript:var s = content.document.createElement('script'); s.type = 'text/javascript'; s.src = 'http://labs.microsofttranslator.com/bookmarklet/default.aspx?f=js&to=ru'; content.document.body.insertBefore(s, document.body.firstChild); void(0);";
           }
};



/* Перевести текст в Google переводчике в новой активной вкладке 
   сразу справа от текущей вкладки ......................................................................*/
function translateTextInGoogle(str) {
   var x = gBrowser.mCurrentTab._tPos +1;
   var url = "http://translate.google.com/translate_t?hl=ru#auto|ru|" + str;
   gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addTab(url), x);

};



// Перевести текст в Google переводчике в маленьком окошке ..............................................
function translateTextInPopup(str) { 
   var t = str;
   trtext = t;
   var url1 = "http://translate.google.com/translate_t?prev=hp&hl=ru&js=y&text=";
   var url2 = "&file=&sl=en&tl=ru&history_state0=#";
   var urltr=url1+trtext+url2;
   var xmlhttp
   function gettransdata() {
    xmlhttp=GetXmlHttpObject();
    if ( xmlhttp==null ) {
         alert ("Your browser does not support AJAX!");
         return;
         };
    xmlhttp.onreadystatechange=stateChanged;
    xmlhttp.open("GET",urltr,true);
    xmlhttp.send(null);
    };
    
    function stateChanged() {
     if ( xmlhttp.readyState==4 ) {
          var trin=xmlhttp.responseText;
          var chkpoint='<span id=result_box';
          var arrayOfStrings = trin.split(chkpoint);
        
          var trouttmp=arrayOfStrings[1];
          var chkpoint='<div id=spell-place-holder';
          var arrayOfStrings = trouttmp.split(chkpoint);
        
          trouttmp1=arrayOfStrings[0];
          trouttmp2=trouttmp1.replace(/<span.+?">/g,"")
          trouttmp2=trouttmp2.replace(/<\/span>/g,"")
          trouttmp2=trouttmp2.replace(/class="long_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="short_text">/g,"")
          trouttmp2=trouttmp2.replace(/class="medium_text">/g,"")
          trouttmp2=trouttmp2.replace(/<br><\/div><\/div>/g,"")
        
          var jurl='data:text/html,<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN"><html><head><title></title><meta charset="utf-8"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>'+trouttmp2+'</body></html>';
        
          var sizex = screen.width/2.2
          var sizey = screen.height/2.2
          var posx=screen.width-sizex;
          var posy=screen.height-sizey;
          qwertywnd = window.open(jurl, this.name, "width="+(sizex-30)+",height="+(sizey-87)+",screenX="+posx+",screenY="+posy+",status=no,scrollbars=yes,resizable=yes");
          if ( qwertywnd.focus ) { qwertywnd.focus() };
          }
     };
        
     function GetXmlHttpObject() {
     if ( window.XMLHttpRequest ) { return new XMLHttpRequest() }
     if ( window.ActiveXObject ) { return new ActiveXObject("Microsoft.XMLHTTP") }
     return null;
     };
     
     gettransdata();
     // закрыть окно перевода левым кликом на странице ....
     gBrowser.addEventListener("click", function(event) {
          // закрыть окно перевода
          qwertywnd.close();
          // удалить обработчик
          gBrowser.removeEventListener("click", arguments.callee, true);
     }, true);
};



// Закрыть вкладку двойным щелчком мыши и фокус на левую вкладку ........................................
function TabClose(event) {
    if ( event.button == 0 && custombuttons.getPrefs("CB.Translate.DblclickCloseTab") ) {
         event.preventDefault();
         event.stopPropagation();
        
         var tab = gBrowser.mCurrentTab;
     if ( tab.previousSibling )
          gBrowser.mTabContainer.selectedIndex--;
          gBrowser.removeTab(tab);
              };
};
addEventListener("dblclick", TabClose, false, gBrowser.mTabContainer);



// устанавливаем флаг, чтобы функции и обработчики не исполнялась дважды  
this.setAttribute("stop","true");

Нажимаем на кнопку переводится вся страница, а при выделение текста и нажатии кнопку переводится выделенное.

Добавлено 11-02-2013 17:11:32
куда-то мой пост делся. Напишу ещё раз.

bunda1 пишет

serg00700 пишет: А как объединить строку поиска с адресной?Я не знаю как объединить строку поиска с адресной используя Custom Buttons. Но можно скрыть строку поиска через userChrome.css

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

Выделить код

Код:

#search-container:not([show = "true"]) { display: none !important; }И потом открывать сочетанием клавиш Snift + Z, а после поиска панель поиска сама закроется.Выделить кодКод:const searchbar = document.getElementById("searchbar");
const searchContainer = document.getElementById("search-container");

// Открывать панель поиска сочетанием клавиш Snift + Z .......................................
function handleKeydown(e) { 
  if ( (e.shiftKey) && (!e.altKey) && (!e.ctrlKey) && (e.keyCode == 90) ) {
       e.preventDefault();
       searchContainer.setAttribute('show', true ); 
       searchbar.focus();
       };  
}
window.addEventListener('keydown', handleKeydown, false);
this.onDestroy = function(reason) {
   window.removeEventListener('keydown', handleKeydown, false);
};

// Автоматически закрыть панель поиска после запуска поиска ................................
(function() {
    var func = BrowserSearch.searchBar.handleSearchCommand.toString()
                   .replace(/^\s*function.+{/, '').replace(/}\s*$/, '');
    
    var code = ['document.getElementById("search-container").setAttribute("show", false);',
                'textBox.value="";'
               ].join('');

    func += code;
    BrowserSearch.searchBar.handleSearchCommand = new Function('aEvent', func);
})();
                    Отредактировано bunda1 (09-02-2013 14:47:43)


Спасибо, но это не то. Круто.

Добавлено 11-02-2013 17:17:33
Как значок в этом изображении уменьшить по ширине чтобы как у всех было? При добавлении на боковую панель её немного видно становится.

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAQCAYAAAAWGF8bAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAt1JREFUeNp8VD1PFUEUPTM7y4OACn5F/IqflVE7G6lptKQwwcTCGC3USqnsNWplLKBQQ5TE30CsrK1ojYqAQYPPPHDZ3bc7M+u5s/uEwrjZmbs7M/fce869uwo3ZsZgzDgAhd619bR1VapZr3j7Zo3PSoUlKF3BunmDoYE5XDx79EysYBvfchuOr7bsitYYKzNMdJZw5/oE5qbfYPLWVbydfo2Hu05h4cOnawYDfcOPTx/CaL+Go5Onp2uCe4aumFkVUqtQqAi7s3Vc/vgZ7sUMwW4iffUSV6IUy6MjmBpoDRt6+W9pQbAYlig9UN+AOk7rtsKGc/heaRzf3MS5pRWcn7qHxefPcOz2Xaw9uI+FfYlk4I3QyUuLr783UBZlkMo1NBPn8dM6tKnFqvfBaldAD57Awaez8G4HqiezKA5cwHvfL5nAiDhpnuLSQBejR0bgXC24zJbIBQugUWsf6kH6mT6MUuuwEHF3da2NboceTgCFJjM8uTfCsf3D6DoL7QPhuiAcGrWetVX0c6jobHlOcJfXc+xxEX5w34hDu7AEUtjsdgnuWBQf9KunXocwW2vJyjdtUq9rpSmZR1HqsB4of8ksIxrSdYxKONKsmn7xAkRtC+5prWA4FEF0yBeIGuA0BKpqyhEjW75bsaX9m5EtS6RSKDkTRSyYgGjqtq35Ka7m/mBZyxQoe8nMqgAoWUrbZKSfd3OeZ1YBTIUMxUmAjZKvhOCRritGZlJJExqWFAXIEVB0ytMcSZYRgI4mgg9gHthGU+koBNMEFDzrexnS9rNxDSPEXMjzDFmSBFqGXwbd0CcZEavVBGgZgziOoQjWx+e1WKMl7eYFkOomdHq3vIGRX0VNmUOoCMVY11bRKhEuNKRi1s0/gnZtPUGnGgolNyhtZ7md7HwkuypFaCwZytfOyvcap24XeRW9quaP4XvnEqlqx6BbTmJxdbwJ/e9f1/+uatvk3PwfAQYAbM2miWXUYiwAAAAASUVORK5CYII=

Отредактировано serg00700 (11-02-2013 17:20:24)


Mozilla  Firefox -  Просто "мега бомба"

Отсутствует

 

№590511-02-2013 18:05:42

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 19.0

Re: Custom Buttons

serg00700
К чему было написано про кнопку-переводчик?

Отсутствует

 

№590611-02-2013 18:49:36

serg00700
Участник
 
Группа: Members
Зарегистрирован: 27-10-2010
Сообщений: 74
UA: Firefox 18.0

Re: Custom Buttons

Kamui пишет

serg00700К чему было написано про кнопку-переводчик?

тут вроде про переводчик писали что и как . Не понадобилось ну и ладно. А как кнопку сузить? Много цифр и ничего не понятно


Mozilla  Firefox -  Просто "мега бомба"

Отсутствует

 

№590711-02-2013 20:31:48

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 19.0

Re: Custom Buttons

serg00700 пишет

тут вроде про переводчик писали что и как . Не понадобилось ну и ладно. А как кнопку сузить? Много цифр и ничего не понятно

По описанию, это та же самая кнопка, которую мы обсуждали :)
Кнопку, сузить можно открыв data:image... через адресную строку и сохранить изображение, потом в редакторе каком-нибудь изменить размеры, а после опять закодировать в base64

Отсутствует

 

№590811-02-2013 20:57:10

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

Re: Custom Buttons

Infocatcher пишет

так что приделал хитрую распорку

Спасибо. Беру.

bunda1
Попробовал сделать, чтобы кнопка Save+ сохраняла ярлыки с favicon'ами, которые не .ico
В оффлайне вроде работает...   test

Отсутствует

 

№590911-02-2013 21:59:04

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 19.0

Re: Custom Buttons

Dumby пишет

Попробовал сделать, чтобы кнопка Save+ сохраняла ярлыки с favicon'ами, которые не .ico
В оффлайне вроде работает...   test

С этого сайта http://cameleo.ru/ почему то вообще не хочет сохранять ярлык, а так да, начал сохранять иконки где раньше не сохранялось.


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№591011-02-2013 22:30:04

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

Re: Custom Buttons

serg00700 пишет

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

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAACXBIWXMAAAsSAAALEgHS3X78AAACX0lEQVQ4jW2TvapWVxCGn5m19tmfiomC6AGNNgEDB1JILERsAiEkTXILphDBPlfgVViYLlUgWEZBjohgGQsjEeFEDMpR8Yfvb++9Zs2kWJyA4FTTvM8w874jXLr2HSldAAwQhA8rBAQIBwIiQCRAMjXuZo4evn747OnNE1QGhLqni6ZbBJSUuPhqh5+/OcOjv//hy5PHuHz7Ib/txsW8+cm+g1e/OMFGVIqDAx7gEYDgwCSJr+UFx7Zvcuj7H+h//YUrn3/FrcV4MBcLf7Yq9ARTgHv8D5kXZ9cqb7Rj8+lztr49z+sHf3L83Dke3nvEilOeEXi7XLN6957atsQCXpnxogT/mvOmwtQd5cmN+wxWmalw+7MtpievyaM5n5YFPx7vkX6Gu+MBY3WCQKVRJznCWrdAlW4YuLO7gmJkq85+KltHDmH7DkCZQNrRmyGBIFg41QxD2UiVPxgggmwevC+VoRRMJswmGiEAcHcmM8KDICAlZqMxlgCHbOa8HCtSnVINr7XZDUxTYTQjJyGpIiggJIExAsLJeEA1zA0rBrUSEayHkVIrKSVCE4ogAiEtWDPztgIReK2UYlQqtRjL9Qozo8uZEEFQAkgCqCCa2pE8yBBM7g0iheV8znoc6bqMu5OSE02HqCJJSUla0CLIVOit0uHEODAuF2RVcgidKBsi9Kr0XabPGZ3N6Cn0EVCDTBbdWVd+/+s5RRNuRs7aIEnbVAREW0IRtIw8Xihk1cwwzbdfjge2vUBKoArioAF72XTAfe9JWp86mMZ5Zrn6iZ3hAoh95Jk/XkFAZNzv/geBRm5JUhdRSAAAAABJRU5ErkJggg==

или

Выделить код

Код:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAACXBIWXMAAAsSAAALEgHS3X78AAACpElEQVQ4jW2UwYpdRRCGv+ruk3szSSZjFIS4uEZJBI0IbtwaxRcQX8FVBF/A13DhWtxm7ypZiMssBlyIZEhkNMwYRmfmnrnnnO6q38W5LkQLGmpTRf///3Ubn3/zseV8T9AAw/h3CcwMIZBAARgIkVLB42Hhxu7Xy/dvr26imACf52Db5xDHKXNr7PliseGj9+7w9Okhq1f2uP/jk/TDUf2sXN/dWX317q3lLkGVCCAEgQglEmKwzF7d8OlPj3j1N+PO3XdYPPiOL9/+kMf9H6tCaPIaS+9MDSN8XoSMJli34Bi4cXZBa41443WmF0csbr/JycGBVdubioDDfuDibG01gjAhwdqD4xoc1uC5g48D7bTjre8f05/3XNtZ8ODKa9RpTWkh8tDzweVKt1jgEQjYuHHuRiUzSDRd5WXd5a9xwHLhZBx5nq7BkxNKa8FVTXxy8wrd9ZfwacQMIsAQGSgGRuLUEoNAKcHpnzw6OGU/RAmJyZ2cDDPDthGbzXkLYxNOi0p2ZyecSJk09FyuDQSlOfw+OlOtMIzUWpHmkCVRm9M8MLZ8mJFyIjucOxBQcGddnRSiekPuGBASw1RprUEyulIoZmAJS0bOYBEgpwBkb0zRCPf5RDAMA6M7JRdyKoC2OAeWCmAsWsxykKju1NrwruFTpd9smGqllEzCSMlQGJEh2+wdZjgBEmXGM+gkJKe/6Bk3A7lkComSoMtGVxLLrpByJi8WMHakEIQoyMhNTOOoUYn+7HxOB4EBCawZZglZwjBsKzuFbJZTuHQwim9/fmHRFeROzomcjC7NJs7bDAkcIRkxDfxysYRslwrD+Gz/uF/tewtSY2v7P6DMb1pzlITPvccMU/bEOD4rXIz3+fXonmHtP7+Jtpf4v5KkGZGHfwMM8J30YIQefAAAAABJRU5ErkJggg==

P.S. Пожалуйста отвечай не вставляя в свой ответ весь текст моих сообщений и все коды. Это можно сделать по короче, например: Хочу спросить насчёт http://forum.mozilla-russia.org/viewtop … 96#p600996

Отсутствует

 

№591111-02-2013 22:43:02

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 19.0

Re: Custom Buttons

villa7 пишет

С этого сайта http://cameleo.ru/ почему то вообще не хочет сохранять ярлык, а так да, начал сохранять иконки где раньше не сохранялось.

Наверно потому что на этом сайте нет иконки

Отсутствует

 

№591211-02-2013 22:53:51

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

Re: Custom Buttons

Dumby пишет

bunda1
Попробовал сделать, чтобы кнопка Save+ сохраняла ярлыки с favicon'ами, которые не .ico
В оффлайне вроде работает...   test

Это просто супер, не знал что можно так перекодировать или что там происходит ?
Большое спасибо :) :) :)

Отсутствует

 

№591311-02-2013 23:08:43

serg00700
Участник
 
Группа: Members
Зарегистрирован: 27-10-2010
Сообщений: 74
UA: Firefox 18.0

Re: Custom Buttons

Kamui пишет

serg00700 пишет: тут вроде про переводчик писали что и как . Не понадобилось ну и ладно. А как кнопку сузить? Много цифр и ничего не понятноПо описанию, это та же самая кнопка, которую мы обсуждали Кнопку, сузить можно открыв data:image... через адресную строку и сохранить изображение, потом в редакторе каком-нибудь изменить размеры, а после опять закодировать в base64

Всё получилось. Я просто раньше так делал что-то не совсем понимал, а вы направил на верный путь. Спасибо.
bunda1 чуть уменьшилась. Я сам подредактировал.
Спасибо за труд.

Отредактировано serg00700 (11-02-2013 23:17:18)


Mozilla  Firefox -  Просто "мега бомба"

Отсутствует

 

№591411-02-2013 23:10:06

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: Firefox 19.0

Re: Custom Buttons

Kamui пишет

Наверно потому что на этом сайте нет иконки

Да, но кнопка  от bunda1 пусть без иконки сайта но сохраняет ярлык который потом можно открыть, а здесь ничего не сохраняет.
http://forum.mozilla-russia.org/viewtopic.php?pid=588991#p588991

Отредактировано villa7 (11-02-2013 23:11:43)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№591511-02-2013 23:34:16

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

Re: Custom Buttons

villa7 пишет

Да, но кнопка  от bunda1 пусть без иконки сайта но сохраняет ярлык который потом можно открыть, а здесь ничего не сохраняет.

Да подтверждаю, буду исправлять :)

Отредактировано bunda1 (11-02-2013 23:34:52)

Отсутствует

 

№591611-02-2013 23:46:36

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 19.0

Re: Custom Buttons

villa7 пишет

Да, но кнопка  от bunda1 пусть без иконки сайта но сохраняет ярлык который потом можно открыть, а здесь ничего не сохраняет.

Я грешным делом подумал что вы про фавиконку, потому что перед этим проверил сохранение ярлыка и у меня сохраняет, а вот фавиконку нет (ну ее собственно и нет на сайте :))

Отсутствует

 

№591712-02-2013 19:54:20

serg00700
Участник
 
Группа: Members
Зарегистрирован: 27-10-2010
Сообщений: 74
UA: Firefox 18.0

Re: Custom Buttons

dell . Извините не туда.

Отредактировано serg00700 (12-02-2013 20:14:51)


Mozilla  Firefox -  Просто "мега бомба"

Отсутствует

 

№591812-02-2013 20:00:31

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

Re: Custom Buttons

serg00700
Тут обсуждают Custom Buttons кнопки и коды, тебе надо спрашивать тут Настройка внешнего вида Firefox в userChrome.css | Форум Mozilla Россия или Stylish | Форум Mozilla Россия

Отсутствует

 

№591912-02-2013 23:46:40

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

Re: Custom Buttons

Dumby
VT ( Firefox10+ ) по цвету отличается от стандартных панелей и с некоторыми темами оформления это сильно бросается в глаза. Не мог бы ты это поправить :blush:

Отредактировано bunda1 (13-02-2013 00:07:21)

Отсутствует

 

№592013-02-2013 20:57:17

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

Re: Custom Buttons

bunda1 пишет

VT ( Firefox10+ ) по цвету отличается от стандартных панелей и с некоторыми темами оформления это сильно бросается в глаза.

Ну, я темами не пользуюсь вообще, и какой цвет, в зависимости от темы, нужен для VT - мне не ясно.
Но могу какую-нибудь глупость предложить, типа:  среднеее от всех пикселей :)
Попробуй положить в onDestroy первой строчкой observer.destroy();
а перед onDestroy вот это...

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

Выделить код

Код:

var observer = {
    get obs() {
        return Cc["@mozilla.org/observer-service;1"].getService(Ci.nsIObserverService);
    },
    init: function() {
        this.obs.addObserver(this, "lightweight-theme-styling-update", false);
        this.observe();
    },
    destroy: function() {
        try {
            this.obs.removeObserver(this, "lightweight-theme-styling-update");
        } catch(ex) {}
    },
    observe: function(subject, topc, data) {
        setTimeout(function() {

            var win = document.getElementById("main-window");
            var bgi = window.getComputedStyle(win).backgroundImage;
            if (bgi == "none") {
                var bgc = window.getComputedStyle(win).backgroundColor;
                toolbar.style.backgroundColor = bgc;
            
                var brc = bgc;
                bgc.match(/\d+/g).forEach(function(color, i) {
                    if (i > 2) return;
                    brc = brc.replace(color, Math.round(color/1.5));
                });
                toolbar.style.borderRightColor = brc;
                return;
            }
            var url = bgi.replace('url("', "").replace('")', "");

            const xhtml = "http://www.w3.org/1999/xhtml";
            var img = document.createElementNS(xhtml, "img");
            var canvas = document.createElementNS(xhtml, "canvas");
            img.src = url;
            img.onload = function() {

                var width = canvas.width = img.width;
                var height = canvas.height = img.height;
                var context = canvas.getContext("2d");
                context.drawImage(img, 0, 0);
                var arr = context.getImageData(0, 0, width, height).data;

                var r = 0, g = 0, b = 0;
                var len = arr.length;
                for (var i = 0; i < len; i += 4) {
                    r += arr[i];
                    g += arr[i + 1];
                    b += arr[i + 2];
                }
                var colors = [r, g, b], borderRightColors = [];
                colors.forEach(function(color, i) {
                    var clr = Math.round(4 * color / len);
                    colors[i] = clr;
                    borderRightColors.push(Math.round(clr /1.5));
                });
                var rgb = "rgb(" + colors.join(", ") + ")";
                var rgbBrc = "rgb(" + borderRightColors.join(", ") + ")";

                toolbar.style.backgroundColor = rgb;
                toolbar.style.borderRightColor = rgbBrc;
            }
        }, 200);
    }
};
observer.init();

Отсутствует

 

№592113-02-2013 21:41:45

Kamui
Участник
 
Группа: Members
Зарегистрирован: 31-03-2011
Сообщений: 1796
UA: Firefox 19.0

Re: Custom Buttons

Dumby пишет

Ну, я темами не пользуюсь вообще, и какой цвет, в зависимости от темы, нужен для VT - мне не ясно.

Попробуй сделать цвет -moz-dialog, на стандартной теме [windows] и [firefox] у меня работает.

Отсутствует

 

№592213-02-2013 22:03:23

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

Re: Custom Buttons

Dumby пишет

Ну, я темами не пользуюсь вообще, и какой цвет, в зависимости от темы, нужен для VT - мне не ясно.
Но могу какую-нибудь глупость предложить, типа:  среднеее от всех пикселей :)

Ну просто супер :), я попробовал несколько тем для FF - Themes :: Add-ons for Firefox - Mozilla Firefox и для Windows XP и вроде все отлично. Протестирую и потом обновлю VT ( Firefox10+ )

Добавлено 13-02-2013 22:04:10
Спасибо !

Добавлено 13-02-2013 22:08:12
Для некоторых тем для Windows XP нужен рестарт FF, но это мелочь.

Отредактировано bunda1 (13-02-2013 22:08:43)

Отсутствует

 

№592316-02-2013 19:23:23

villa7
Участник
 
Группа: Members
Зарегистрирован: 21-07-2012
Сообщений: 2235
UA: unknown 0.0

Re: Custom Buttons

bunda1
Не знаю к кому обратиться, автор вроде как здесь не появляется, есть такая кнопка Context Search(Firefox 4+)

скрытый текст
http://forum.mozilla-russia.org/viewtopic.php?pid=533572#p533572

можно как то настроить, или жестко привязать, окно поисковиков, по горизонтали, относительно контекстного меню, а то оно скачет в разные положения, неудобно.
скрытый текст
http://i023.radikal.ru/1302/b7/10100800e346.jpg
http://s018.radikal.ru/i510/1302/9a/960d8a831ae1.jpg

Отредактировано villa7 (16-02-2013 19:28:23)


Лучше спросить у знающих - чем лезть не зная.

Отсутствует

 

№592416-02-2013 21:48:07

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

Re: Custom Buttons

villa7
Попробую :/

Отсутствует

 

№592516-02-2013 21:51:54

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

Re: Custom Buttons

villa7

Попробуй после
this.popup = this.menu.appendChild(document.createElement('menupopup'));

дописать
this.popup.setAttribute("position", "start_before");

Отсутствует

 

Board footer

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