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

Mozilla Россия — свежие версии программ Mozilla, а также масса полезной информации по каждому продукту.

№1390103-12-2019 19:26:24

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1734
UA: Firefox 52.0

Re: Custom Buttons

Вот тебе новая CB для 71

Спасибо! Dumby, возможно сделать что бы кнопка Bbcode работала в многопроцессорном режиме ?


Win7

Отсутствует

 

№1390203-12-2019 19:50:58

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 70.0

Re: Custom Buttons

Garalf

Garalf пишет

А у тебя есть рабочая кнопка Дв. клик по панели для 71

Не работает...И прокси от frigate тоже.. К чертям эту шнягу.

Отсутствует

 

№1390303-12-2019 20:12:52

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 72.0

Re: Custom Buttons

Dumby
И еще вопросик. Есть кнопка About:

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

Выделить код

Код:

// Настройка функций кликов мыши(Mouse Click settings) .......................................................
this.onclick = function(e) {
     if ( e.button == 0 ) gBrowser. selectedTab = gBrowser. addTrustedTab("about:config");  
     
     if ( e.button == 1 ) { 
          // запомнить текст из буфера обмена и скопировать текст на странице ....
          var clip = gClipboard.read();
          window.content.focus();
          goDoCommand("cmd_copy");            

          gBrowser.selectedTab = gBrowser.addTrustedTab( 'about:config' ); 
          
          // oбработчик ждет пока откроется "about:config", вставит текст из буфера обмена и удаляет себя ....
          gBrowser.addEventListener("pageshow", function(e) {               
               this.removeEventListener("pageshow", arguments.callee, true);
                
               content.document.getElementById("textbox").value = gClipboard.read(); 
               content.document.getElementById("textbox").doCommand();               
                                  
               if ( clip ) gClipboard.write( clip ); // вернуть текст в буфер обмена
          }, true);
          }   
};

 
// Создать меню ..............................................................................................
this.ss = [
     { label:"Все about:", value: 'about:about'},
     { label:"О плагинах", value: 'about:plugins'},
     { label:"Новая вкладка", value: 'about:newtab'},
     { label:"Настройки как таб", value: 'about:preferences'},
     { label:"Информация о кэше", value: 'about:cache'},   
     { label:"Восстановление сессии", value: 'about:sessionrestore'},
     { label:"Управление разрешениями", value: 'about:permissions'},
     { label:"Информация для решения проблем", value: 'about:support'},
     { label:"Показать исплъзование памяти подробно", value: 'about:memory'}
          ];
             
this.mObj = custombuttons.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.label = x.ss[i].label;
         if ( nItem.label == "separator" ) var nItem = document.createXULElement("menuseparator");
         var mItem = x.mObj.insertBefore(nItem, x.mObj.oMenu.lastChild);
         mItem.setAttribute('onclick', 'gBrowser.selectedTab = gBrowser.addTrustedTab("' + x.ss[i].value + '")');           
         };   
   x.mObj.getItem();
   nItem = x.mObj.getItem();
   this.separator = x.mObj.insertBefore( nItem , x.mObj.oMenu.lastChild);
};
this.init(this);

// Подсказка кнопки ............................................................................................
this.tooltipText = "Л: Открыть 'about:config'\nС: Открыть 'about:config' с настройкой ( выделенной или из буфера )\nП: Показать все about:";


В 71 перестала работать вставка параметра выделенного или из буфера по клику средней клавиши в about:config
Ну и если есть возможность, чтобы работала и в многопроцессорном режиме.


Ну и до кучи кн. Дв. клик по панели вкладок (закрывает все вкладки)

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

Выделить код

Код:

((trg, param, tab, lst = {
    handleEvent(e) {
        if (e.button || e.ctrlKey || e.shiftKey || e.altKey) return;
        this[e.type](e);
    },
    click: e => e.detail == 2 && tab && e.stopPropagation(),
    mouseup(e) {
        if (e.detail < 2) return tab = e.target;
        if (tab.nodeName == "tab" && (tab = e.target == tab))
            setTimeout(this.closeTabs, 50, gBrowser.selectedTab);
    },
    closeTabs(tab) {
        var hbuTabs = [];
        for(var t of gBrowser.visibleTabs.reverse()) if (//!t.pinned &&
            t != tab) gBrowser._hasBeforeUnload(t)
                ? hbuTabs.push(t) : gBrowser.removeTab(t, param);
        for(t of hbuTabs) gBrowser.removeTab(t, param);
    }
}) => ["mouseup", "click"].forEach(type => addEventListener(type, lst, true, trg)))(
    gBrowser.tabs[0].boxObject.parentBox, {animate: false}
);


В 70 еще работала.

Отредактировано Garalf (03-12-2019 20:26:16)

Отсутствует

 

№1390404-12-2019 12:36:14

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

network.proxy.proxy_over_tls - true
И прокси не работают , и Proxytube  аддон тоже...Изумительная дрянь эта 71

Отредактировано solombala (04-12-2019 12:38:07)

Отсутствует

 

№1390504-12-2019 12:43:43

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

Re: Custom Buttons

kokoss пишет

возможно сделать что бы кнопка Bbcode работала в многопроцессорном режиме ?

Ну как, там прямое действие. Берём код, и переставляем
из пустого в порожнее. (не под Fission, разумеется)
То есть, меняем this.handleClick как-нибудь типа так

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

Выделить код

Код:

this.handleClick = e => {
    var node = e.target;
    if (!node.matches("popupset :scope")) return;

    var v1 = node.getAttribute("value1");
    var v2 = node.getAttribute("value2");
    if (v2) v2 = "=" + v2.replace("%clipboard%", gClipboard.read());

    var bb1 = "[" + v1 + (v2 || "") + "]";
    var bb2 = "[/" + v1 + "]";

    var code = `((bb1, bb2, move) => {
        var box = Components.classes["@mozilla.org/focus-manager;1"]
            .getService(Components.interfaces.nsIFocusManager)
            .getFocusedElementForWindow(content, true, {});
        var ed = box && box.editor;
        if (!(ed && ed instanceof Components.interfaces.nsIEditor)) return;

        var txt = box.value;
        var s = box.selectionStart;
        var e = box.selectionEnd;

        var bef = txt.substring(0, s);
        var mid = txt.substring(s, e);
        var aft = txt.substring(e);

        var ins = bb1.replace(/%copy%|%move%/, mid) + (move ? "" : mid) + bb2;
        var val = bef + ins + aft;

        box.value = val;
        box.selectionStart = s;
        box.selectionEnd = s + ins.length;
        //    box.focus();
    })('${bb1}', '${bb2}', ${v2 == "=%move%"});`;

    gBrowser.selectedBrowser.messageManager.loadFrameScript(
        "data:," + encodeURIComponent(code), false
    );
}

Garalf пишет

В 71 перестала работать вставка параметра выделенного или из буфера по клику средней клавиши в about:config
Ну и если есть возможность, чтобы работала и в многопроцессорном режиме.

Так подойдёт?

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

Выделить код

Код:

/*
     if ( e.button == 1 ) { 
          // запомнить текст из буфера обмена и скопировать текст на странице ....
          var clip = gClipboard.read();
          window.content.focus();
          goDoCommand("cmd_copy");            

          gBrowser.selectedTab = gBrowser.addTrustedTab( 'about:config' ); 
          
          // oбработчик ждет пока откроется "about:config", вставит текст из буфера обмена и удаляет себя ....
          gBrowser.addEventListener("pageshow", function(e) {               
               this.removeEventListener("pageshow", arguments.callee, true);
                
               content.document.getElementById("textbox").value = gClipboard.read(); 
               content.document.getElementById("textbox").doCommand();               
                                  
               if ( clip ) gClipboard.write( clip ); // вернуть текст в буфер обмена
          }, true);
          }   
*/
    else if (e.button == 1) {
        var clip = gClipboard.read();
        gBrowser.selectedBrowser.messageManager.loadFrameScript('data:,docShell.doCommand("cmd_copy")', false);
        var br = (gBrowser.selectedTab = gBrowser.addTrustedTab("about:config")).linkedBrowser;
        var insert = () => {
            br.contentDocument.getElementById("about-config-search")
                .editor.paste(Ci.nsISelectionController.SELECTION_NORMAL);
            clip && gClipboard.write(clip);
        }
        br.addEventListener("pageshow", () => setTimeout(insert, 200), {once: true});
    }


А после «до кучи» у тебя два предложения.
В первом утверждается не то, что на самом деле,
а во втором то, чего не может быть.

Отсутствует

 

№1390604-12-2019 13:16:25

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1734
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

Ну как, там прямое действие. Берём код, и переставляем
из пустого в порожнее. (не под Fission, разумеется)
То есть, меняем this.handleClick как-нибудь типа так
скрытый текст

Чёто в CB 0.0.7.0.0.7 не работает...


Win7

Отсутствует

 

№1390704-12-2019 14:05:22

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Это не работает....Там много чего не работает, но это...

скрытый текст
// Дв.клик по панели вкладок............

(selectors => addEventListener("dblclick", e => {
    if (
        e.button || e.ctrlKey || e.shiftKey || e.altKey
        || !e.originalTarget.matches(selectors)
    )
        return;
    var hbuTabs = [], param = {animate: false};
    gBrowser.selectedTab = gBrowser.tabs[0];
    for(var tab of gBrowser.visibleTabs.reverse())
        //if (tab.pinned) break; else
        gBrowser._hasBeforeUnload(tab)
            ? hbuTabs.push(tab)
            : gBrowser.removeTab(tab, param);
    for(tab of hbuTabs)
        gBrowser.removeTab(tab, param);
}, false, document.getElementById("TabsToolbar") || 1))("" + [

    "#tabbrowser-tabs [class*=scrollbox]",
    "toolbarspring",
    "#TabsToolbar",
]);

Отсутствует

 

№1390804-12-2019 14:23:46

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 71.0

Re: Custom Buttons

Dumby

Dumby пишет

Так подойдёт?

Че-то не пашет About(. Просто открывает about:config

Отредактировано Garalf (04-12-2019 15:11:12)

Отсутствует

 

№1390904-12-2019 15:52:54

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

Re: Custom Buttons

kokoss и Garalf пишет

не

У вас не работает. У меня работает.
STR нет. Цитат из консоли нет.
Самостоятельных попыток разобраться нет.
Что я могу поделать? Ничего. Премного изиняюсь, но увы.

solombala пишет

Это не работает

А если так?

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

Выделить код

Код:

/*
    if (
        e.button || e.ctrlKey || e.shiftKey || e.altKey
        || !e.originalTarget.matches(selectors)
    )
*/
    if (e.button || e.ctrlKey || e.shiftKey || e.altKey || !(
        e.target.className == "tabbrowser-arrowscrollbox"
        || e.originalTarget.matches(selectors)
    ))

Отсутствует

 

№1391004-12-2019 16:04:48

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 72.0

Re: Custom Buttons

Dumby
Спасибо, дошло... Разобрался, все работает.

Отредактировано Garalf (04-12-2019 16:05:33)

Отсутствует

 

№1391104-12-2019 16:18:58

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Круто...А, кто это писал? Тоже того...Доп пункты в about;addons

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

Выделить код

Код:

//Добавление на вкладке дополнения в меню расширений дополнительных пунктов
(function(){

        var iconURL = "";  

 

    if (window.AM_Helper) { 
        window.AM_Helper.uninit();
        delete window.AM_Helper;
    }
    

    Cu.import("resource://gre/modules/Services.jsm");
    Cu.import("resource://gre/modules/AddonManager.jsm");

   
    window.AM_Helper = {
        init: function() {
            document.addEventListener("DOMContentLoaded", this, false);
            this.platformVersion = parseFloat(Services.appinfo.platformVersion);
        },
        uninit: function() {
            document.removeEventListener("DOMContentLoaded", this, false);
        },
          handleEvent: function(event){
            switch(event.type){
                    case "DOMContentLoaded":
                    var doc = event.target;
                    var win = doc.defaultView;
                    
                    if (["about:addons","chrome://mozapps/content/extensions/extensions.xul"].indexOf(doc.URL) == -1)
                        return;
                    this.addPopupMenu(doc);

                    win.AM_Helper = AM_Helper;
                    this.win = win;

                    var observer = new MutationObserver(function(e) {
                        e = e[e.length-1];
                        if(e.attributeName == "loading") {
                            var doc = e.target.ownerDocument;
                        }
                    });
                    observer.observe(doc.getElementById("detail-view"), {attributes: true});
                    break;
                    case "popupshowing":
                    this.getAddon(this.win.document.popupNode.value,
                                  this.setItemsAttributes,
                                  event);
                    break;
            }
        },
        
        
        //Создаем меню
        addPopupMenu: function(doc) {
        
         var mainicon2="data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAQAABILAAASCwAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAwAAAP8AAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAD/AAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAA/wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAP8AAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAAAAAAD/AAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAA8wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAPAAAAD/AAAA/wAAAPAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAPAAAAAAAAAAAAAAAHsAAAD/AAAAkAAAAAAAAADwAAAA/wAAAP8AAADwAAAA/wAAAP8AAAD/AAAA/wAAAP8AAADwAAAAAAAAAIQAAAD/AAAAjQAAAAAAAAB1AAAA/wAAAP8AAAD/AAAA8AAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA8AAAAIoAAAD/AAAAigAAAAAAAABpAAAAAAAAAAAAAAB7AAAA/wAAAIcAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAigAAAAAAAAB7AAAA8AAAAAAAAACEAAAA/wAAAIcAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAhwAAAAAAAACBAAAA/wAAAPAAAACKAAAA/wAAAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEAAAA/wAAAP8AAAD/AAAA/wAAAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAIQAAAAAAAAAAAAAAAAAAAAAAB8AAAAfAAAAAAAAABAAAAAQAAAAEAAAABAAAAAQAAAAEAAAAxAAAAIgAAAAWAAAAJEAAAEDAAD+BwAA+A8AAA==";
        
        
            var ins = doc.getElementById("menuitem_uninstallItem");
            if (!ins) return;

            ins = ins.nextSibling;
            var popup = ins.parentNode;

            var menuitem = $C("menuseparator", {
                id: "AM-separator-1"
            });
            popup.insertBefore(menuitem, ins);


             menuitem = $C("menuitem", {
                id: "AM-browse-dir",
                label: "Папка установки",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.browseDir);"
            });
            popup.insertBefore(menuitem, ins);
            
            menuitem = $C("menuitem", {
                id: "AM-browse-Folder",
                label: "Файл установки",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.Folder);"
            });
            popup.insertBefore(menuitem, ins);

            menuitem = $C("menuitem", {
                id: "AM-open-url",
                label: "Страница на AMO",
                tooltiptext: null,
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.goAMO);"
            });
            popup.insertBefore(menuitem, ins);
            
            menuitem = $C("menuitem", {
                id: "AM-browse-support",
                label: "Страница поддержки",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.support);"
            });    
           popup.insertBefore(menuitem, ins);   
           
           menuitem = $C("menuitem", {
                id: "AM-browse-goHome",
                label: "Домашняя страница",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.goHome);"
            });
           popup.insertBefore(menuitem, ins);         

           var menu = $C("menu", {
                id: "AM-menu",
                class: "menu-iconic",
                image: mainicon2,
                label: "Копировать",
            });
            popup.insertBefore(menu, ins);
            var menuPopup = $C("menupopup", {
                id: "AM-menupopup",
            });
            menu.appendChild(menuPopup);

            menuitem = $C("menuitem", {
                id: "AM-copy-name",
                label: "Копировать имя",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.copyName);"
            });
            menuPopup.appendChild(menuitem);
            
             menuitem = $C("menuitem", {
                id: "AM-copy-version",
                label: "Копировать версию",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.copyVersion);"
            });
            menuPopup.appendChild(menuitem);
 
            menuitem = $C("menuitem", {
                id: "AM-copy-NameVersion",
                label: "Копировать имя и версию",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.copyNameVersion);"
            });
            menuPopup.appendChild(menuitem);
           
            menuitem = $C("menuitem", {
                id: "AM-copy-id",
                label: "Копировать id",
                oncommand: "AM_Helper.getAddon(AM_Helper.getPopupNode(this).value, AM_Helper.copyID);"
            });
            menuPopup.appendChild(menuitem);

            popup.addEventListener("popupshowing", this, true);
        },
        
        
        //Указываем где и когда показывать элементы меню
        setItemsAttributes: function(aAddon, event) {
            var popup = event.target;
            var doc = popup.ownerDocument;

            var
                isExtension = (aAddon.type == "extension"),
                isTheme = (aAddon.type == "theme"),
                isPlugin = (aAddon.type == "plugin"),
                isService = (aAddon.type == "service"),
                isCustomButton = (aAddon.type == "custombuttons"),
                menuitem
            ;

            menuitem = doc.getElementById("AM-browse-dir");
            menuitem.hidden = isService || isTheme || isCustomButton;
                        
            menuitem = doc.getElementById("AM-browse-Folder");
            menuitem.hidden = isService || isTheme || isCustomButton || isPlugin;

            menuitem = doc.getElementById("AM-copy-name");
            menuitem.tooltipText = aAddon.name;
            
            
            menuitem = doc.getElementById("AM-copy-version");
            menuitem.tooltipText = aAddon.version;
            menuitem.hidden = isCustomButton || isTheme;
            
            menuitem = doc.getElementById("AM-copy-NameVersion");
            menuitem.tooltipText = aAddon.name + " " + aAddon.version;
            menuitem.hidden = isCustomButton || isTheme;
            
            menuitem = doc.getElementById("AM-copy-id");
            menuitem.tooltipText = "ID: " + aAddon.id;
            

            menuitem = doc.getElementById("AM-open-url");
            var amoURL = aAddon.reviewURL
                 ? aAddon.reviewURL.replace(/\/reviews\//, "/")
                 : null;
            menuitem.tooltipText = amoURL;
            menuitem.hidden = !amoURL || /addons.mozilla.org/.test(aAddon.homepageURL);
            
            menuitem = doc.getElementById("AM-browse-support");
            menuitem.tooltipText = aAddon.supportURL;
            menuitem.hidden = !aAddon.supportURL;
            
            menuitem = doc.getElementById("AM-browse-goHome");
            menuitem.tooltipText = aAddon.homepageURL;
            menuitem.hidden = !aAddon.homepageURL;
           
        },

        getPopupNode: function (aNode) {
            var doc = aNode.ownerDocument;
            return "triggerNode" in aNode.parentNode ? aNode.parentNode.triggerNode : doc.popupNode;
        },
        getAddon: function (aId, aCallback, aEvent) {
            var self = this;
            if (this.win.gDetailView._addon) {
                aCallback.apply(this, [this.win.gDetailView._addon, aEvent]);
                return;
            }

            (self.platformVersion < 61.0?
                new Promise((resolve, reject) => AddonManager.getAllAddons(addons => resolve(addons))):
                AddonManager.getAllAddons()
            ).then(addons => {
                for (var i = 0; i < addons.length; i++) {
                    if (addons[i].id == aId) {
                        aCallback.apply(self, [addons[i], aEvent]);
                        return;
                    }
                }
            });
        },


     //Открыть папку установки
        browseDir: function (aAddon) {
            switch (aAddon.type) {
                case "plugin":
                    var pathes = aAddon.pluginFullpath;
                    for (var i = 0; i < pathes.length; i++) {
                        this.revealPath(pathes[i]);
                    }
                    return;
                case "userchromejs":
                    var file = aAddon._script.file;
                    if (file.exists())
                        file.reveal();
                    return;
            }

            // addon
            var gecko = parseInt(Services.appinfo.platformVersion);
            var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile",
                "initWithPath");

            var dir = Services.dirsvc.get("ProfD", Ci.nsIFile);
            dir.append("extensions");
            dir.append(aAddon.id);
            var fileOrDir = dir.path + (dir.exists() ? "" : ".xpi");
           
            try {
                (new nsLocalFile(fileOrDir)).reveal();
            } catch (ex) {
                var addonDir = /.xpi$/.test(fileOrDir) ? dir.parent : dir;
                try {
                    if (addonDir.exists()) {
                        addonDir.launch();
                    }
                } catch (ex) {
                    var uri = Services.io.newFileURI(addonDir);
                    var protSvc = Cc["@mozilla.org/uriloader/external-protocol-service;1"].
                    getService(Ci.nsIExternalProtocolService);
                    protSvc.loadUrl(uri);
                }
            }
        },



        //Копировать имя  
        copyName: function (aAddon) {
            this.copyToClipboard(aAddon.name);
        },
         //Копировать ID 
    copyID: function (aAddon) {
            this.copyToClipboard("ID: " + aAddon.id);
        },
    //Копировать версию 
    copyVersion: function (aAddon) {
            this.copyToClipboard(aAddon.version);
        },
    //Копировать имя и версию
    copyNameVersion: function (aAddon) {
           this.copyToClipboard(aAddon.name + " " + aAddon.version);
        },
       //Открыть файл установки    
    Folder: function (aAddon) {
            var gecko = parseInt(Services.appinfo.platformVersion);
            var nsLocalFile = Components.Constructor("@mozilla.org/file/local;1", (gecko >= 14) ? "nsIFile" : "nsILocalFile",
                "initWithPath");
            var dir = Services.dirsvc.get("ProfD", Ci.nsIFile); 
                        dir.append('extensions');
                        dir.append(aAddon.id);
                            if ( dir.exists() ) dir.launch();
 
                            var file = Components.classes['@mozilla.org/file/directory_service;1']
                                      .getService(Components.interfaces.nsIProperties)
                                     .get('ProfD', Components.interfaces.nsIFile);       
                            file.append('extensions');
                            file.append( aAddon.id + '.xpi' )             
                            if ( file.exists() ) file.launch(); 
                            return; 
          },     
         //Страница на АМО
       goAMO: function (aAddon) {
        var sourceTracker = "/?src=external-Add-ons_Manager_Context_Menu-extension";
    if (aAddon.reviewURL) {
      var amoURL = aAddon.reviewURL.replace(/\/reviews\//, "/")
                             .replace(/\/(firefox|seamonkey|thunderbird|android)/, "")
                             .replace(/\/\?src\=api/, sourceTracker);
    }
    if (/personas.mozilla.org$/.test(aAddon.id)) {
      amoURL = "https://addons.mozilla.org/addon/" + aAddon.id.match(/\d+/) + sourceTracker;
      }
       openURL(amoURL);
       },
       
        //Домашняя страница
     goHome: function (aAddon) {
        var url = aAddon.homepageURL;
        if (!url) {
        if (aAddon.reviewURL) {
        url = aAddon.reviewURL.replace(/\/reviews\/.*$/, "/");
        } else {
        url = "https://addons.mozilla.org/search/?q="
            + encodeURIComponent(aAddon.name);
         }
        }
       openURL(url);
       },
       
       //Страница поддержки
       support: function(aAddon) {
        openURL(aAddon.supportURL);
       },
       //Вспомогательные функции
        get getPath() {
            var url = this.win.gViewController.viewObjects.detail._addon;
            if (!url) return false;
            return url.pluginFullpath || false;
        },
       revealPath: function(path){
            var file = Cc['@mozilla.org/file/local;1'].createInstance(Ci.nsIFile);
            file.initWithPath(path);
            if(file.exists())
                file.reveal();
        },
        copyToClipboard: function (aString) {
            Cc["@mozilla.org/widget/clipboardhelper;1"].
                getService(Ci.nsIClipboardHelper).copyString(aString);
        }
    };

 
    AM_Helper.init();

 
    function $C(name, attr) {
        var el = document.createXULElement(name);
        if (attr) Object.keys(attr).forEach(function(n){ el.setAttribute(n, attr[n])});
        return el;
    }
})();
((id, g, iconizer) => addDestructor(r => r[5] == "e" && id in g && g[id].destroy()) + addEventListener("shown", {
    //------------------------------------------------------------------
    "Копировать имя_i": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "Копировать имя"(addon, hideOn) {
        if (hideOn) return false;

        gClipboard.write(addon.name);
    },
    //------------------------------------------------------------------
    "Копировать ID_i": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AMgA/wDIAP8AyAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "Копировать ID"(addon, hideOn) {
        if (hideOn) return false;

        gClipboard.write(addon.id);
    },
    //------------------------------------------------------------------
    "Копировать версию_i": "data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD/AACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQAArEEAAKxBAACsQQ==",
    "Копировать версию"(addon, hideOn) {
        if (hideOn) return ["custombuttons"];

        gClipboard.write(addon.version);
    },
    //------------------------------------------------------------------
    "Домашняя страница"(addon, hideOn) {
        if (hideOn) return !addon.homepageURL;

        alert(addon.homepageURL);
    },
    //------------------------------------------------------------------
    url: "chrome://mozapps/content/extensions/aboutaddons.html",
    handleEvent(e) {
        if (e.target.baseURI != this.url) return;
        var item = this.getItem(e.target.ownerDocument);
        var addon = item.addon = e.target.closest("addon-card").addon;
        
        for(var child of item.children) {
            var res = this[child.textContent](addon, true);
            child.hidden = Array.isArray(res)
                ? res.includes(addon.type) : res;
        }
        e.target.contains(item) || requestAnimationFrame(
            () => e.target.prepend(item)
        );
    },
    click(e) {
        e.stopPropagation();
        iconizer.item.parentNode.hide();
        this[e.target.textContent](iconizer.item.addon);
    },
    getItem(doc) {
        if (iconizer.item) {
            if (iconizer.item.ownerDocument == doc) return iconizer.item;
            iconizer.handleEvent();
        }
        var item = doc.createElement("div");
        item.id = id;
        for(var lab of this.labels) item.appendChild(
            doc.createElement("panel-item")
        ).append(lab);
        
        item.onclick = this.click;
        doc.ownerGlobal.addEventListener("unload", iconizer);
        return iconizer.item = item;
    },
    get labels() {
        delete this.labels;
        this.click = this.click.bind(this);
        if (id in g) return this.labels = (iconizer = g[id]).labs;

        g[id] = iconizer;
        var css = "", ind = 0, arr = [];
        var push = (ind, icon) => {
            var chromeImg = `chrome://custombuttons/content/${id + ind}`;
            arr.push(["override", chromeImg, icon]);
            return chromeImg;
        }
        var labs = iconizer.labs = Object.keys(this).filter(key => {
            var res = String(this[key]).startsWith('"');
            if (!res) return false;
            ind++;
            var icon = this[key + "_i"];
            if (icon) css += `\n\t#${
                id
            } > panel-item:nth-child(${ind}) {\n\t\t--icon: url(${
                push(ind, icon)
            }) !important;\n\t}`;
            return true;
        });
        var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup);
        var mUri = Services.io.getProtocolHandler("resource").getSubstitution("custombuttons-modules");
        iconizer.iconHelper = ams.registerChrome(mUri, arr);

        var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
        var md = "@-moz-document url(chrome://mozapps/content/extensions/aboutaddons.html) {";
        var uri = Services.io.newURI("data:text/css;charset=utf-8," + encodeURIComponent(md + css + "\n}"));
        var args = [uri, sss.USER_SHEET];
        sss.loadAndRegisterSheet(...args);

        iconizer.handleEvent = function() {
            if (!this.item) return;
            this.item.ownerGlobal.removeEventListener("unload", this);
            this.item.remove();
            this.item = null;
        }
        iconizer.destroy = function() {
            delete g[id];
            this.handleEvent();
            sss.unregisterSheet(...args);
            this.iconHelper.destruct();
        }
        return this.labels = labs;
    }
}, true, gBrowser.tabpanels || 1))("CBAddonsMenuExt", Cu.import("resource://gre/modules/Services.jsm", {}), {});


впрочем, нуее , прокси не пашут..SSL - отрихтовали...

Отредактировано solombala (04-12-2019 17:04:39)

Отсутствует

 

№1391204-12-2019 18:39:32

kokoss
Участник
 
Группа: Members
Зарегистрирован: 15-02-2018
Сообщений: 1734
UA: Firefox 52.0

Re: Custom Buttons

Dumby пишет

У вас не работает. У меня работает.

Взял эту кнопку: https://forum.mozilla-russia.org/viewto … 10#p775310, затем заменил этот код:

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

Выделить код

Код:

this.handleClick = function(evt) {

    var node = evt.target;
    if (node.nodeName != &quot;button&quot; || node.parentNode == hbox) return;

    var v1 = node.getAttribute(&quot;value1&quot;);
    var v2 = node.getAttribute(&quot;value2&quot;);
    if (v2) v2 = &quot;=&quot; + v2.replace(&quot;%clipboard%&quot;, gClipboard.read());

    var bb1 = &quot;[&quot; + v1 + (v2 || &quot;&quot;) + &quot;]&quot;;
    var bb2 = &quot;[/&quot; + v1 + &quot;]&quot;;

    var box = content.document.activeElement;
    var txt = box.value;

    var s = box.selectionStart;
    var e = box.selectionEnd;

    var bef = txt.substring(0, s);
    var mid = txt.substring(s, e);
    var aft = txt.substring(e);

    var ins = bb1.replace(/%copy%|%move%/, mid) + (v2 == &quot;=%move%&quot; ? &quot;&quot; : mid) + bb2;
    var val = bef + ins + aft;

    box.value = val;
    box.selectionStart = s;
    box.selectionEnd = s + ins.length;
//    box.focus();
}


на ваш. Вроде сделал как вы подсказали ?

Отредактировано kokoss (04-12-2019 18:42:38)


Win7

Отсутствует

 

№1391304-12-2019 21:57:38

Eugene20212021
Участник
 
Группа: Members
Зарегистрирован: 04-12-2019
Сообщений: 1
UA: Firefox 71.0

Re: Custom Buttons

Зашел по ссылке http://custombuttons.mozdev.org/installation.html
Последняя версия от 2011 на мой свежий Firefox не ставится.
А тут люди вроде используют, обсуждают.
Люди добрые! Как мне получить работающую версию этого замечательного плагина?

Отредактировано Eugene20212021 (04-12-2019 21:57:53)

Отсутствует

 

№1391404-12-2019 22:39:29

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

Re: Custom Buttons

kokoss пишет

Вроде сделал как вы подсказали ?

Ну, почти что.
Не упомянуто, что была произведена замена slice на from
Array generics удалили в Firefox 71

Отсутствует

 

№1391505-12-2019 12:07:30

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Нельзя глянуть? FindBar в 71 блекнет в ini , приходится в код вставлять и жмакать пару раз , что ни есть гуд.

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

Выделить код

Код:

/*Initialization Code*/

((bar, button = true, insertAtTop = true, ctrlFcloseFinbar = false) => ({
    init(parent) {
        var has = bar = parent.querySelector("#appcontent > findbar");
        has || this.initFinbar(parent);
        var lo = bar.linkedObject;
        lo.listenCtrlF = ctrlFcloseFinbar
            ? listen => listen
                ? addEventListener("keydown", lo, true)
                : removeEventListener("keydown", lo, true)
            : () => {};
        has && !bar.hidden && lo.listenCtrlF(true);
        if (button) self._handleClick = () => bar.hidden
            ? bar.startFind(bar.FIND_NORMAL)
            : bar.collapsed || bar.close();
        addDestructor(lo.destroy, lo);
    },
    destroy(reason) {
        if (reason[5] != "e") return;
        bar.close();
        bar._browser = {};
        bar.remove();
        this.setProgressListener(false);
        for(var key of ["gFindBar", "gFindBarInitialized"])
            Object.defineProperty(window, key, this[key]);
        gBrowser[this.gBrKey] = this[this.gBrKey];
        Services.ppmm.removeDelayedProcessScript(this.url);
        Services.ppmm.loadProcessScript("data:," + encodeURIComponent(`
            Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT
            && Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_CONTENT
            || (nsvo => {
                var proto = nsvo.Finder.prototype;
                if ("_requestMatchesCount" in proto) {
                    proto.requestMatchesCount = proto._requestMatchesCount;
                    delete proto._requestMatchesCount;
                }
            })(Cu.import("resource://gre/modules/Finder.jsm", {}));`
        ) , false);
    },
    initFinbar(parent) {
        for(var tab of gBrowser.tabs) {
            if (!tab._findBar) continue;
            tab._findBar.browser = null;
            tab._findBar._browser = {};
            tab._findBar.remove();
            delete tab._findBar;
        }
        bar = document.createXULElement("findbar");
        var p = new Proxy({}, {get: () => () => {}});
        bar._browser = {finder: p, messageManager: p};
        parent.insertBefore(bar, insertAtTop ? parent.firstChild : null);
        bar.linkedObject = this;

        ["gFindBar", "gFindBarInitialized"].forEach((key, ind) => {
            this[key] = Object.getOwnPropertyDescriptor(window, key);
            delete window[key];
            window[key] = ind ? true : bar;
        });
        var key = "getCachedFindBar" in gBrowser ? "getCachedFindBar" : "getFindBar";
        this[this.gBrKey = key] = gBrowser[key];
        gBrowser[key] = () => bar;
        [
            "close", "startFind", "onMatchesCountResult",
            "_updateMatchesCount", "_onBrowserKeypress", "receiveMessage"

        ].forEach((key, ind) => {
            var func = bar[key].bind(bar);
            bar[key] = ind
                ? (...args) => this[key](...args) || func(...args)
                : (...args) => func(...args) || this[key](...args);
        });
        this.url = "data:," + encodeURIComponent(`
            Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_DEFAULT
            && Services.appinfo.processType != Services.appinfo.PROCESS_TYPE_CONTENT
            || (nsvo => {
                var proto = nsvo.Finder.prototype;
                if ("_requestMatchesCount" in proto) return;
                proto._requestMatchesCount = proto.requestMatchesCount;
                proto.requestMatchesCount = ${
                    this.newRequestMatchesCount
                }
            })(Cu.import("resource://gre/modules/Finder.jsm", {}));`
        );
        delete this.newRequestMatchesCount;
        Services.ppmm.loadProcessScript(this.url, true);
    },
    newRequestMatchesCount: async function requestMatchesCount(aWord, aLinksOnly) {
        if (typeof aLinksOnly != "boolean") {

            var {linksOnly, data} = aLinksOnly;
            aLinksOnly = linksOnly;

            this.entireWord = data.entireWord;
            this.caseSensitive = data.caseSensitive;
            this.onModalHighlightChange(data.useModalHighlight);
            this.onHighlightAllChange(data.highlightAll);
            data.highlightAll && await this.highlighter.highlight(true, aWord, linksOnly);
            this._iterator && this._iterator.reset();
            var obj;
            Object.defineProperty(this, "_currentMatchesCountResult", {
                configurable: true, enumerable: true,
                get: (val = obj) => {
                    if (val) {
                        if (!val.total) val.total = new Number(0);
                        val.currentFound = val._currentFound;
                    }
                    return obj = val;
                },
                set: val => {
                    if (val) return obj = val;
                    delete this._currentMatchesCountResult;
                    return obj = this._currentMatchesCountResult = val;
                }
            });
            var lfr = this._lastFindResult;
            lfr !== null && lfr != Ci.nsITypeAheadFind.FIND_NOTFOUND
            || Object.defineProperty(this, "_lastFindResult", {
                configurable: true, enumerable: true, get: () => null,
                set: val => {
                    if (val == Ci.nsITypeAheadFind.FIND_WRAPPED)
                        val = Ci.nsITypeAheadFind.FIND_FOUND;
                    delete this._lastFindResult;
                    return this._lastFindResult = val;
                }
            });
        }
        this._requestMatchesCount(aWord, aLinksOnly);
    },

    close() {
        bar.collaped = false;
        this.setProgressListener(false);
        this.setBrowser(null, null);
    },
    startFind() {
        if (this.maybeCollapse(gBrowser.selectedBrowser))
            return true;
        if (bar.hidden)
            this.setBrowser(300),
            this.setProgressListener(true);
        else if (!ctrlFcloseFinbar)
            setTimeout(() => this.updateMatchesCount(), 100);
    },
    onMatchesCountResult(res) {
        if (!("currentFound" in res) || res.total == -1 || res.currentFound)
            return;

        bar._foundMatches.value = `${+res.total || "Нет"} совпадени${
            bar.pluralForm.get(res.total, "е;я;й")
        }.`;
        bar._foundMatches.hidden = false;
        return true;
    },
    _updateMatchesCount() {
        return true;
    },
    _onBrowserKeypress(e) {
        if (!bar.hidden) return;
        if (!e.charCode) return true;
        this.setBrowser(300);
        this.setProgressListener(true);
    },
    receiveMessage(msg) {
        msg.target = bar._browser;
    },

    progressListenerAdded: false,
    setProgressListener(add) {
        if (add) {
            if (this.progressListenerAdded) return;
            this.progressListenerAdded = true;
            gBrowser.addProgressListener(this);
            this.listenCtrlF(true);
        } else {
            if (!this.progressListenerAdded) return;
            this.progressListenerAdded = false;
            gBrowser.removeProgressListener(this);
            this.listenCtrlF(false);
        }
    },
    handleEvent(e) {
        if (
            e.ctrlKey && e.code == "KeyF"
            && !e.shiftKey && !e.altKey && !bar.collapsed
        )
            e.preventDefault(),
            e.stopPropagation(),
            bar.close();
    },
    updateMatchesCount() {
        var str = bar._findField.value;
        if (!str) return;
        var data = {
            entireWord: bar._entireWord,
            caseSensitive: bar._typeAheadCaseSensitive,
            highlightAll: bar._highlightAll,
            useModalHighlight: bar._useModalHighlight
        };
        bar.browser.finder.requestMatchesCount(
            bar._findField.value,
            {linksOnly: bar._findMode == bar.FIND_LINKS, data}
                );
    },
    maybeCollapse(br) {
        return br.isSyntheticDocument ||
            br.documentContentType == "application/vnd.mozilla.xul+xml";
    },
    setBrowser(updateDelay, br = gBrowser.selectedBrowser) {
        if (bar._browser != br) {
            var b = bar._browser;
            if (b) {
                b.messageManager.removeMessageListener("Findbar:Mouseup", bar);
                b.finder.removeResultListener(bar);
                bar._highlightAll && b.finder.highlight(false);
            }
            if (br) {
                br.messageManager.addMessageListener("Findbar:Mouseup", bar);
                bar._updateBrowserWithState();
            }
            bar._browser = br;
        }
        if (!br) return;
        bar._updateStatusUI();
        bar._foundMatches.value = "";
        br.finder.addResultListener(bar);
        if (
            !(bar.collapsed = this.maybeCollapse(br))
            && br.currentURI.spec != "about:blank"
            && updateDelay !== null
        )
            updateDelay
                ? setTimeout(this.updateMatchesCount, updateDelay)
                : this.updateMatchesCount();
    },
    onStateChange(wpr, req, state) {
        state & Ci.nsIWebProgressListener.STATE_STOP && this.setBrowser();
        },
    onLocationChange(wpr, req) {
        req || Components.stack.formattedStack.includes("SessionStore.jsm")
        || this.setBrowser();
    }
}).init(document.getElementById("appcontent")))();

Отсутствует

 

№1391605-12-2019 22:13:15

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 71.0

Re: Custom Buttons

Что делает эта кнопка? // Дв.клик по панели вкладок........... ||| Понять не могу, какая панель?
Насчет BBCode, тоже все сделал как надо заменил и подставил в конец, не пашет.

Отредактировано func4ptch4 (05-12-2019 22:17:26)

Отсутствует

 

№1391705-12-2019 22:47:36

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 313
UA: Firefox 73.0

Re: Custom Buttons

func4ptch4
Здесь обе эти кнопки. Работают даже в 73.
Дв.клик по вкладке&Дв. клик по панели вкладок - двойной клик по панели вкладок закрывает все вкладки, а двойной клик по вкладке закрывает другие открытые вкладки. Проверь у себя - у меня все работает, как в однопроцессорном режиме, так и многопроцессорном.

Отредактировано Garalf (05-12-2019 22:49:33)

Отсутствует

 

№1391805-12-2019 23:01:38

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

Dumby
Больше не знаю к кому обратиться. В 71 прокси frigate https приказали долго жить.(TLS1.1) Кое-что я рихтанул в свойственной мне манере. процесс пошел, но не для гугла с его ютюбом. Короче, Socks 5 применил , но как proxy.pac применить ? Кнопки есть , а Pac как заделать с socks5 ? привожу примеры: Это для Http , к сожалению
Снят вопрос , все сделал.

Отредактировано solombala (06-12-2019 01:51:11)

Отсутствует

 

№1391905-12-2019 23:48:50

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

Re: Custom Buttons

Dumby мда, не долго музыка играла

Выделить код

Код:

var {label} = gBrowser.selectedTab;
var re = /(.+) (\(.+\)) \[(\d{4})[^\]]+\] (.+) (.+) (.+)/;
re.test(label) && gClipboard.write(
    label.replace(re, "$1 $2 ($4) ($3)").replace(/ \/ /g, " - ")
);

только я привык к этой кнопке, бац и обновления 71, СВ установлен, но кнопка исчезла из панели, в меню больше нет под ПКМ пункта про кнопку, что делать???

Отсутствует

 

№1392006-12-2019 06:35:37

func4ptch4
Участник
 
Группа: Members
Зарегистрирован: 03-05-2018
Сообщений: 220
UA: Firefox 71.0

Re: Custom Buttons

Garalf
Проверил, и это удобно? у меня по привычке то что по стандарту.
И по привычке тыкаю а там все окна бах и нет..) мда ну эту кнопку, да и 2-клик по вкладке тоже мне легче выборочно.
BBCode работает, вот бы еще меню вылазил по автопопапу, а так все норм.)

solombala, как решил? интересно.
Вроде сокс видел, а вот с авторизацией .pac не сделать.

Отредактировано func4ptch4 (06-12-2019 06:54:52)

Отсутствует

 

№1392106-12-2019 09:09:00

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

func4ptch4
Прокси нормальный нужен .  Пример (сам прокси от фонаря, сам ищи )

скрытый текст
function FindProxyForURL(url, host) 
{
var proxy_server = 'SOCKS 162.168.161.141:8888; DIRECT'; 

var no_proxy = 'DIRECT';
{
var proxy_list = new Array(
'whoer.net',
'yandex.ua',
'yandex.ru',
'rutube.ru',
'ren.tv',
'yadi.sk',
'yandex.net',
'yandex.sx',
'naydex.net',         
'youtube.com',
'static.yandex.sx',
'ok.ru',
'vk.com',
'hdrezka.ag',
'mail.ru',
'kinopoisk.ru',
'yastatic.net',
'yandex.sx',
'youtube.com',
'ya.ru',
'2ip.ru',                                   
             
);
for (var i = 0; i < proxy_list.length; i++){
var value = proxy_list[i];
if (dnsDomainIs(host, '.' + value) || host === value) {
return proxy_server;
}
}
return no_proxy;
}
return no_proxy;
}


Кстати это нельзя к профилю привязать, а не к диску? file:///D:/proxy/Proxy1.pac

Отредактировано solombala (06-12-2019 12:19:29)

Отсутствует

 

№1392206-12-2019 15:56:54

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 574
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

Кстати это нельзя к профилю привязать, а не к диску? file:///D:/proxy/Proxy1.pac

У меня есть вот такая кнопка, если не ошибаюсь от Dumby:

Выделить код

Код:

(()=> {
// Задать путь к файлу в папке chrome. ..........
(({io, dirsvc, prefs}) => {

    var substitution = "chrome", dir = "UChrm";

    var rph = io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler);
    addDestructor(reason => reason[5] == "e" && rph.hasSubstitution(substitution) && rph.setSubstitution(substitution, null));
    if (rph.hasSubstitution(substitution)) return;

    rph.setSubstitution(substitution, io.newFileURI(dirsvc.get(dir, Ci.nsIFile)));

})(Services);
})();

Далее в папку chrome в профиле я положил файл proxy.pac и в настройках прокси указал resource://chrome/proxy.pac.
untitled-2.png
У меня это работает в [firefox] 68 ESR. Сработает ли в более новых версиях, я не знаю.

Отредактировано unter_officer (06-12-2019 15:57:55)


«The Truth Is Out There»

Отсутствует

 

№1392306-12-2019 17:40:43

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

unter_officer
В 68  тоже не работает ...

Отсутствует

 

№1392406-12-2019 18:02:27

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 574
UA: Firefox 52.0

Re: Custom Buttons

solombala пишет

unter_officer
В 68  тоже не работает ...

Ну, не знаю. У меня работает.

Отредактировано unter_officer (06-12-2019 18:02:50)


«The Truth Is Out There»

Отсутствует

 

№1392506-12-2019 18:10:46

solombala
Забанен
 
Группа: Members
Зарегистрирован: 20-07-2019
Сообщений: 652
UA: Firefox 71.0

Re: Custom Buttons

unter_officer
Профиль где? В системе? У меня портабл и профиль в каталоге .

Отсутствует

 

Board footer

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