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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№1255122-04-2018 12:36:34

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

Re: Custom Buttons

Dumby
Я исхожу из того же посыла, что вы декларировали выше - чтобы CB жили как можно дольше.
А так как 60 релиз станет ESR, то кнопки проживут еще какое-то время.
Конечно, заменить можно при желании расширениями.
Но хотелоссь бы пользоватся тем к чему привык. Опять же экономия ресурсов)...

Отредактировано Garalf (22-04-2018 16:58:27)

Отсутствует

 

№1255222-04-2018 20:22:22

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

Re: Custom Buttons

Ну вот, теперь ещё и это.
Впрочем, всё равно ошибка была.

Infocatcher
А в Toggle Restartless Add-ons теперь как-то так?

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

Выделить код

Код:

function getRestartlessAddons(addonTypes, callback, context) {
    if(!("AddonManager" in window))
        Components.utils.import("resource://gre/modules/AddonManager.jsm");
    if(!("Services" in window))
        Components.utils.import("resource://gre/modules/Services.jsm");
    var filter = function(addons) {
        var restartless = addons.filter(function(addon) {
            var ops = addon.operationsRequiringRestart;
            return !addon.appDisabled
                && !(ops & AddonManager.OP_NEEDS_RESTART_ENABLE || ops & AddonManager.OP_NEEDS_RESTART_DISABLE)
                && (
                    !addon.hidden
                    || options.showHidden > 0
                    || options.showHidden == -1 && !addon.userDisabled
                );
        });
        callback.call(context, restartless);
    }
    if(AddonManager.getAddonsByTypes.length == 1)
        AddonManager.getAddonsByTypes(addonTypes).then(filter, Cu.reportError);
    else
        AddonManager.getAddonsByTypes(addonTypes, filter);
}

Отсутствует

 

№1255323-04-2018 13:20:48

intersk
Участник
 
Группа: Members
Зарегистрирован: 20-06-2013
Сообщений: 104
UA: Firefox 52.0

Re: Custom Buttons

поправьте код или это возможно из-за нестандартного разрешения экрана? - панель VT чуть "съезжает"
помогает - нажать закрыть-открыть

скрытый текст
de197f7c29802fe1a3433f172233f0ae.jpeg

код панель кнопки VT:
скрытый текст

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3EVT2%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/x-icon%3Bbase64%2CAAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAKP+AAIX/gAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/4AAFf+AABUAAAAAAAAAAAAAAAAAAAAA/4AAJP+AAP//gAD//4AA//+AACQAAAAAAAAAAAAAAAAAAAAA/4AAEv+AAP//gAD//4AAEgAAAAAAAAAA/4AAIP+AAP//gAD//4AA//+AAP//gAD//4AAJgAAAAAAAAAAAAAAAP+AABH/gAD//4AA//+AABEAAAAAAAAAAP+AAP//gAD//4AA//+AADb/gAD//4AA//+AAP//gAAQAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AACAAAAAA/4AAIP+AAP//gAD//4AAEQAAAAAAAAAA/4AAD/+AAP//gAD//4AADwAAAAAAAAAA/4AA//+AAP//gAAMAAAAAP+AAAz/gAD//4AA//+AAA8AAAAAAAAAAP+AAA//gAD//4AA//+AAA8AAAAAAAAAAP+AAP//gAD//4AADwAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAAP/4AA//+AAP//gAAPAAAAAAAAAAD/gAD//4AA//+AAA8AAAAA/4AAD/+AAP//gAD//4AADAAAAAAAAAAA/4AACv+AAP//gAD//4AACgAAAAAAAAAA/4AA//+AAP//gAAPAAAAAP+AAA//gAD//4AA//+AAAv/gAAL/4AADP+AACH/gAD//4AA//+AACH/gAAK/4AAD/+AAP//gAD//4AAEQAAAAD/gAAR/4AA//+AAP//gAAm/4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AA//+AABIAAAAA/4AAEv+AAP//gAD//4AAJ/+AAP//gAD//4AA//+AAP//gAD//4AA//+AAP//gAD//4AAEf+AABIAAAAAAAAAAAAAAAD/gAAV/4AAEgAAAAD/gAAQ/4AAEf+AAA//gAAP/4AAD/+AAA//gAAP/4AADwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA//+sQe//rEHH56xBg8OsQQHDrEEAw6xBEMOsQRDDrEEQw6xBEMOsQRAArEEQAKxBEACsQTkArEH//6xB//+sQQ%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5Bvar%20vto%20%3D%20%7B%0A%20%20%20%20distanceShow%3A%2022%2C%0A%20%20%20%20distanceHide%3A%2064%2C%0A%20%20%20%20showDelay%3A%20320%2C%0A%20%20%20%20color%3A%20%22lightlightgrey%22%2C%0A%20%20%20%20fringe%3A%20%22black%22%2C%0A%20%20%20%20padding%3A%203%2C%0A%20%20%20%20name%3A%20%22VT%22%2C%0A%0A%20%20%20%20btn%3A%20this%2C%0A%20%20%20%20tcm%3A%20document.getElementById%28%22toolbar-context-menu%22%29%2C%0A%20%20%20%20ctm%3A%20document.getElementById%28%22customization-toolbar-menu%22%29%2C%0A%20%20%20%20deck%3A%20document.getElementById%28%22content-deck%22%29%2C%0A%20%20%20%20id%3A%20%22cb-vt%22%2C%0A%0A%20%20%20%20get%20cust%28%29%20gBrowser.currentURI.spec%20%3D%3D%20%22about%3Acustomizing%22%2C%0A%20%20%20%20get%20xs%28%29%20%7B%0A%20%20%20%20%20%20%20%20delete%20this.xs%3B%0A%20%20%20%20%20%20%20%20return%20this.xs%20%3D%20Cc%5B%22@mozilla.org/xul/xulstore%3B1%22%5D.getService%28Ci.nsIXULStore%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20init%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28this.cust%20%7C%7C%20this.btn._destructors.length%29%20return%3B%0A%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.initVT%28%29%3B%0A%20%20%20%20%20%20%20%20var%20vto%20%3D%20this%3B%0A%0A%20%20%20%20%20%20%20%20this.btn.onclick%20%3D%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.button%20%7C%7C%20vto.toggleVT%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22popupshown%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.addEventListener%28%22resize%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.addEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.addEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20vto.toggleVT%28vt.hasOwnProperty%28%22on%22%29%20%3F%20vt.on%0A%20%20%20%20%20%20%20%20%20%20%20%20%3A%20%21this.xs.hasValue%28location%2C%20vto.id%2C%20%22collapsed%22%29%0A%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20this.resize%28%29%3B%0A%20%20%20%20%20%20%20%20vto.btn._destructors.push%28%7Bcontext%3A%20vto%2C%20destructor%3A%20vto.destroy%7D%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20destroy%3A%20function%28reason%29%20%7B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popupshown%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22popuphidden%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22resize%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.removeEventListener%28%22command%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.tcm.removeEventListener%28%22popupshowing%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.setCollapser%28false%29%3B%0A%0A%20%20%20%20%20%20%20%20if%20%28reason%20%3D%3D%20%22destructor%22%20%26%26%20this.cust%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20vto%20%3D%20this%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vto.resize%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.addEventListener%28%22customizationready%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.addListener%28vto%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20this.ctm.addEventListener%28%22command%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.ctm.addEventListener%28%22popupshowing%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20window.addEventListener%28%22resize%22%2C%20vto%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.addEventListener%28%22aftercustomization%22%2C%20function%20ac%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.removeEventListener%28%22aftercustomization%22%2C%20ac%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.removeEventListener%28%22customizationready%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.removeListener%28vto%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.ctm.removeEventListener%28%22command%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.ctm.removeEventListener%28%22popupshowing%22%2C%20vto%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20window.removeEventListener%28%22resize%22%2C%20vto%2C%20false%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28vto.btn.id%29%20%7C%7C%20vto.destroyVT%28%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28reason%20%3D%3D%20%22delete%22%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.removeWidgetFromArea%28this.btn.id%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20this.destroyVT%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20handleEvent%3A%20function%28e%29%20this%5Be.type%5D%28e%29%2C%0A%0A%20%20%20%20command%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28e.target.id%20%21%3D%20%22toggle_%22%20+%20this.id%29%20return%3B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20this.toggleVT%28%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20popupshowing%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20var%20menuitem%20%3D%20e.target.querySelector%28%22%23toggle_%22%20+%20this.id%29%3B%0A%20%20%20%20%20%20%20%20menuitem%20%26%26%20menuitem.setAttribute%28%22checked%22%2C%20this.vt.on%29%3B%0A%20%20%20%20%20%20%20%20if%20%28this.cust%20%7C%7C%20%21this.vt.contains%28e.target.triggerNode%29%29%20return%3B%0A%20%20%20%20%20%20%20%20for%28var%20selector%20of%20%5B%22.customize-context-moveToPanel%22%2C%20%22.customize-context-removeFromToolbar%22%5D%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20menuitem%20%3D%20e.target.querySelector%28selector%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20menuitem%20%26%26%20menuitem.removeAttribute%28%22disabled%22%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%0A%20%20%20%20mousemove%3A%20function%20collapser%28e%29%20%7B%0A%20%20%20%20%20%20%20%20var%20distance%20%3D%20collapser.distance%20%3D%20e.screenX%20-%20document.documentElement.boxObject.screenX%3B%0A%20%20%20%20%20%20%20%20if%20%28collapser.waiting%29%20return%3B%0A%20%20%20%20%20%20%20%20if%20%28distance%20%3C%3D%20this.distanceShow%20%26%26%20this.vt.collapsed%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28this.showDelay%20%3C%201%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20collapser.waiting%20%3D%20true%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20setTimeout%28function%28vto%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28collapser.distance%20%3E%3D%20vto.distanceShow%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collapser.waiting%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.vt.collapsed%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20collapser.waiting%20%3D%20false%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%2C%20this.showDelay%2C%20this%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20if%20%28distance%20%3E%3D%20this.distanceHide%20%26%26%20%21this.vt.collapsed%29%0A%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%3D%20true%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20setCollapser%3A%20function%28set%29%20%7B%0A%20%20%20%20%20%20%20%20set%0A%20%20%20%20%20%20%20%20%3F%20this.cust%20%7C%7C%20window.addEventListener%28%22mousemove%22%2C%20this%2C%20false%29%0A%20%20%20%20%20%20%20%20%3A%20window.removeEventListener%28%22mousemove%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20callCollapser%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20this.mousemove%28%7BscreenX%3A%20document.documentElement.boxObject.screenX%20+%20MousePosTracker._x%7D%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20customizationready%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20window.removeEventListener%28%22customizationready%22%2C%20this%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.vt.on%20%26%26%20this.insertBox%28true%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20resize%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20this.vt.style.maxHeight%20%3D%20this.deck.boxObject.height%20+%201%20+%20%22px%22%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20popupshown%3A%20function%28e%29%20this.handlePopup%28e%29%2C%0A%20%20%20%20popuphidden%3A%20function%28e%29%20this.handlePopup%28e%29%2C%0A%0A%20%20%20%20handlePopup%3A%20function%28e%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20this.vt.collapsed%20%7C%7C%20this.vt.on%0A%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28e.target.localName%20%21%3D%20%22menupopup%22%20%26%26%20e.target.localName%20%21%3D%20%22panel%22%29%0A%20%20%20%20%20%20%20%20%29%20return%3B%0A%20%20%20%20%20%20%20%20setTimeout%28function%28vto%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20hasPopup%20%3D%20Array.concat%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Array.slice%28document.getElementsByTagName%28%22menupopup%22%29%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Array.slice%28document.getElementsByTagName%28%22panel%22%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%29.some%28function%28popup%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22state%22%20in%20popup%20%26%26%20popup.state%20%3D%3D%20%22open%22%20%26%26%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.vt.contains%28popup%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28%22triggerNode%22%20in%20popup%20%26%26%20vto.vt.contains%28popup.triggerNode%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22anchorNode%22%20in%20popup%20%26%26%20popup.anchorNode%20%26%26%20%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20vto.vt.contains%28popup.anchorNode%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7C%7C%20vto.vt.contains%28document.getBindingParent%28popup.anchorNode%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vto.setCollapser%28%21hasPopup%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20hasPopup%20%7C%7C%20vto.callCollapser%28%29%3B%0A%20%20%20%20%20%20%20%20%7D%2C%20200%2C%20this%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20onWidgetAfterDOMChange%3A%20function%28...a%29%20%7B%0A%20%20%20%20%20%20%20%20if%20%28a%5B2%5D%20%3D%3D%20this.vt.box%29%20this.vt.hbox.style.minWidth%20%3D%20this.vt.boxObject.width%20+%20%22px%22%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20initVT%3A%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20var%20id%20%3D%20this.id%3B%0A%20%20%20%20%20%20%20%20var%20boxId%20%3D%20id%20+%20%22-customization-target%22%3B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%20%3D%0A%20%20%20%20%20%20%20%20%20%20%20%20document.getElementById%28id%29%20%7C%7C%0A%20%20%20%20%20%20%20%20%20%20%20%20document.createElement%28%22toolbar%22%29%3B%0A%20%20%20%20%20%20%20%20var%20attrs%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20id%3A%20id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20mode%3A%20%22icons%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20iconsize%3A%20%22small%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20orient%3A%20%22vertical%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20customizable%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20persist%3A%20%22collapsed%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20toolbarname%3A%20this.name%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20fullscreentoolbar%3A%20%22true%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20class%3A%20%22chromeclass-toolbar%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20context%3A%20%22toolbar-context-menu%22%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20style%3A%20%22-moz-appearance%3A%20none%3B%20display%3A%20-moz-box%3B%20height%3A%20100%25%3B%20position%3A%20fixed%3B%20min-width%3A%2020px%22%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20for%28var%20attr%20in%20attrs%29%20vt.setAttribute%28attr%2C%20attrs%5Battr%5D%29%3B%0A%20%20%20%20%20%20%20%20if%20%28%21vt.parentNode%29%20%7B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20box%20%3D%20vt.box%20%3D%20document.createElement%28%22vbox%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.appendChild%28box%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.id%20%3D%20boxId%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.style.cssText%20%3D%20%22height%3A%20100%25%3B%20width%3A%20100%25%3B%22%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.customizationTarget%20%3D%20box%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20gNavToolbox.appendChild%28vt%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20if%20%28CustomizableUI.areas.indexOf%28id%29%20%3D%3D%20-1%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20CustomizableUI.registerArea%28id%2C%20%7Blegacy%3A%20true%7D%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20box.removeAttribute%28%22class%22%29%3B%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20box.__defineGetter__%28%22localName%22%2C%20function%28%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20Components.stack.caller.toString%28%29.indexOf%28%22custombutton.buttonConstructor%22%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3D%3D%20-1%20%3F%20%22vbox%22%20%3A%20%22toolbar%22%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.hbox%20%3D%20document.createElement%28%22hbox%22%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20vt.hbox.id%20%3D%20id%20+%20%22-hbox%22%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20vt.box.style.padding%20%3D%20%220%20%22%20+%20this.padding%20+%20%22px%22%3B%0A%20%20%20%20%20%20%20%20vt.style.backgroundColor%20%3D%20this.color%3B%0A%20%20%20%20%20%20%20%20vt.style.borderRight%20%3D%20%221px%20solid%20%22%20+%20this.fringe%3B%0A%20%20%20%20%20%20%20%20return%20vt%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20destroyVT%3A%20function%28reason%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20CustomizableUI.unregisterArea%28vt.id%2C%20%7B%7D%29%3B%0A%20%20%20%20%20%20%20%20vt.hbox.parentNode%20%26%26%20vt.hbox.parentNode.removeChild%28vt.hbox%29%3B%0A%20%20%20%20%20%20%20%20vt.parentNode%20%26%26%20vt.parentNode.removeChild%28vt%29%3B%0A%0A%20%20%20%20%20%20%20%20this.xs.removeValue%28location%2C%20vto.id%2C%20%22collapsed%22%29%3B%0A%20%20%20%20%20%20%20%20this.xs.removeValue%28location%2C%20vto.id%2C%20%22currentset%22%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20insertBox%3A%20function%28ins%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20var%20box%20%3D%20vt.hbox%3B%0A%20%20%20%20%20%20%20%20if%20%28%21ins%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20box.parentNode%20%26%26%20box.parentNode.removeChild%28box%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20var%20id%20%3D%20this.cust%20%3F%20%22customization-palette-container%22%20%3A%20%22sidebar-box%22%3B%0A%20%20%20%20%20%20%20%20var%20point%20%3D%20document.getElementById%28id%29%3B%0A%20%20%20%20%20%20%20%20point.parentNode.insertBefore%28box%2C%20point%29%3B%0A%20%20%20%20%20%20%20%20var%20mw%20%3D%20function%28%29%20box.style.minWidth%20%3D%20vt.boxObject.width%20+%20%22px%22%3B%0A%20%20%20%20%20%20%20%20mw%28%29%3B%20setTimeout%28mw%2C%20100%29%3B%0A%20%20%20%20%7D%2C%0A%20%20%20%20toggleVT%3A%20function%28on%29%20%7B%0A%20%20%20%20%20%20%20%20var%20vt%20%3D%20this.vt%3B%0A%20%20%20%20%20%20%20%20if%20%28on%20%3D%3D%20undefined%29%20on%20%3D%20%21vt.on%3B%0A%20%20%20%20%20%20%20%20vt.on%20%3D%20on%3B%0A%20%20%20%20%20%20%20%20this.setCollapser%28%21on%29%3B%0A%20%20%20%20%20%20%20%20vt.collapsed%20%3D%20%21on%3B%0A%20%20%20%20%20%20%20%20this.insertBox%28on%29%3B%0A%20%20%20%20%7D%0A%7D%3B%0Avto.init%28%29%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1255423-04-2018 17:28:11

Gladius333
Забанен
 
Группа: Members
Зарегистрирован: 11-02-2017
Сообщений: 92
UA: unknown 0.0

Re: Custom Buttons

intersk пишет

поправьте код или это возможно из-за нестандарт...

Норм замена... forum.mozilla-russia.org/viewtopic.php? … 64#p756664

Отредактировано Gladius333 (23-04-2018 17:28:28)

Отсутствует

 

№1255523-04-2018 20:56:46

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

Re: Custom Buttons

Исправил кнопку Autocopy для Pale Moon и SeaMonkey.

Отсутствует

 

№1255623-04-2018 23:16:26

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

Re: Custom Buttons

Dumby пишет

AddonManager.getAddonsByTypes(addonTypes).then(filter, Cu.reportError);

Захотелось красивостей и окультуриться... но вышло, что утиная типизация проще:

Выделить код

Код:

var p = AddonManager.getAddonsByTypes(["extension"]);
Promise.resolve(p) === p; // false
p instanceof Promise; // false
Promise.resolve(p) instanceof Promise; // true
Cu.getGlobalForObject(AddonManager).Promise.resolve(p) === p; // true

Разврат стал чуть компактнее (и, наверное, надежнее):

Выделить код

Код:

var then, promise = AddonManager.getAddonsByTypes(addonTypes, then = function(addons) {
        …
    });
    promise && typeof promise.then == "function" && promise.then(then, Components.utils.reportError);

Надо будет и в других кнопках править... -__-

Отредактировано Infocatcher (23-04-2018 23:17:06)


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

Отсутствует

 

№1255724-04-2018 16:22:48

ARG
Лисолюб
 
Группа: Members
Зарегистрирован: 22-06-2005
Сообщений: 387
UA: Firefox 59.0

Re: Custom Buttons

Народ, поясните , как ставить СВ на 59 версию? Перепробовал все что нашел на последних страницах, категорически не ставится. Неужто нельзя типа шапки создать, чтобы не задавать наверное уже надоевшие вопросы? :mad:
_____________
Разобрался. Но черт возьми, сколько же это требует усилий... FAQ какой бы создать.

Отредактировано ARG (24-04-2018 17:01:18)

Отсутствует

 

№1255824-04-2018 17:06:38

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

Re: Custom Buttons

ARG пишет

Разобрался. Но черт возьми, сколько же это требует усилий... FAQ какой бы создать.

Вот и напиши тут FAQ.

Отсутствует

 

№1255924-04-2018 18:26:45

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

Re: Custom Buttons

Сегодня конфигурационный код отвалился.
Предварительная новая версия.

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

Выделить код

Код:

//
try {(code => {
    var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
    var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try {
        return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {});
    } catch(ex) {}}
    if ((jsval = imp("AddonSettings"))) {
        jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true};
        try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;}
    }
    lockPref("extensions.allow-non-mpc-extensions", true);
    var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i);

    if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}});

    var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
    Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)]));
    jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}});

})(String.raw`((vzss, pckg) => {
    "AddonInternal" in this && Object.defineProperty(AddonInternal.prototype, "providesUpdatesSecurely", {value: true});
    this.isDisabledLegacy = () => false;
    if ("XPIDatabase" in this) this.XPIDatabase.isDisabledLegacy = () => false;
    try {SIGNED_TYPES.clear();} catch(ex) {};

    if (!vzss && !pckg) return;

    var re = /\x06\x03U\x04\x03\x14[\s\S](\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i;
    var getUUID = () => {
        var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
        return (getUUID = () => gen.generateUUID().toString())();
    }
    var getIdFromString = str => {
        var match = str && str.match(re);
        return match ? match[1] : getUUID();
    }
    var getState = arg => ({
        signedState: AddonManager.SIGNEDSTATE_NOT_REQUIRED,
        cert: typeof arg == "object" ? arg : {commonName: arg}
    });
    var checkAddon = addon => {
        if (addon.id || addon._installLocation.name == KEY_APP_TEMPORARY)
            return getState(null);
    }
    var getRoot = () =>
        !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)
            ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot;

    if (vzss) {
        var getURI = file => {
            var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {});
            return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file);
        }
        var getIdFromFile = file => {
            var str, is = {close() {}}, sis = {close() {}};
            try {
                is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open();
                sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
                sis.init(is);
                str = sis.readBytes(sis.available());
            } catch(ex) {}
            sis.close(); is.close();
            return getIdFromString(str);
        }
        this.verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) {
            var res = checkAddon(aAddon);
            return res ? Promise.resolve(res) : new Promise(resolve => {
                var callback = {openSignedAppFileFinished(rv, zipReader, cert) {
                    zipReader && zipReader.close();
                    resolve(getState(cert || getIdFromFile(aFile)));
                }};
                gCertDB.openSignedAppFileAsync(getRoot(), aFile, callback.wrappedJSObject = callback);
            });
        }
    }

    if (pckg) Package.prototype.verifySignedState = function verifySignedState(addon) {
        var res = checkAddon(addon);
        return res ? Promise.resolve(res) : new Promise(resolve =>
            this.verifySignedStateForRoot(addon, getRoot()).then(({cert}) => {
                if (cert)
                    resolve(getState(cert));
                else
                    this.readBinary("META-INF", "mozilla.rsa").then(
                        buffer => resolve(getState(
                            getIdFromString(String.fromCharCode(...new Uint8Array(buffer)))
                        )),
                        () => resolve(getState(getUUID()))
                    );
            }, Cu.reportError)
        );
    }
})(
    "verifyZipSignedState" in this, typeof Package == "function"
);`)} catch(err) {Components.utils.reportError(err);}

Отсутствует

 

№1256024-04-2018 19:27:38

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

Re: Custom Buttons

Что то с этим Custom Buttons кнопки не хотят работать, или есть другая версия.

http://custombuttons.sourceforge.net/forum/viewtopic.php?f=2&t=35985


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

Отсутствует

 

№1256124-04-2018 22:03:24

Gladius333
Забанен
 
Группа: Members
Зарегистрирован: 11-02-2017
Сообщений: 92
UA: unknown 0.0

Re: Custom Buttons

Dumby
Эта в какой версий отвалился? у меня старый еще пашет в 59.0.2, может вы про "nightly"?
Отсюда forum.mozilla-russia.org/viewtopic.php?id=70326, просто почему я спрашиваю, надо ли мне код менять? вроде они одинаковы.
А нет проверил, у твоего больше строк.

Вот старый код "config.js"

Выделить код

Код:

//
try {(code => {
    var {classes: Cc, interfaces: Ci, utils: Cu} = Components;
    var jsval, evl = true, re = e => Cu.reportError(e), imp = name => {try {
        return Cu.import(`resource://gre/modules/addons/${name}.jsm`, {});
    } catch(ex) {}}
    if ((jsval = imp("AddonSettings"))) {
        jsval.AddonSettings = {ADDON_SIGNING: false, REQUIRE_SIGNING: false, ALLOW_LEGACY_EXTENSIONS: true};
        try {evl = jsval.eval("this") === jsval;} catch(ex) {evl = false;}
    }
    lockPref("extensions.allow-non-mpc-extensions", true);
    var jsvals = ["XPIProvider", "XPIInstall"].map(imp).filter(i => i);

    if (evl) return jsvals.forEach(jsval => {try {jsval.eval(code);} catch(ex) {re(ex);}});

    var sl = Cc["@mozilla.org/moz/jssubscript-loader;1"].getService(Ci.mozIJSSubScriptLoader);
    Cu.importGlobalProperties(["URL", "Blob"]); var url = URL.createObjectURL(new Blob([(code)]));
    jsvals.forEach(jsval => {try {sl.loadSubScript(url, jsval);} catch(ex) {re(ex);}});

})(String.raw`
    try {SIGNED_TYPES.clear();} catch(ex) {};
    "verifyZipSignedState" in this && (signedState => {
        var re = /\x06\x03U\x04\x03\x14[\s\S](\{[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\}|[a-z0-9-\._]*\@[a-z0-9-\._]+)0\x82\x02"0\r\x06\t/i;
        var getUUID = () => {
            var gen = Cc["@mozilla.org/uuid-generator;1"].getService(Ci.nsIUUIDGenerator);
            return (getUUID = () => gen.generateUUID().toString())();
        }
        var getURI = file => {
            var jsval = Cu.import("resource://gre/modules/addons/XPIProvider.jsm", {});
            return (getURI = file => jsval.getURIForResourceInFile(file, "META-INF/mozilla.rsa"))(file);
        }
        var getId = file => {
            var result, is = {close() {}}, sis = {close() {}};
            try {
                is = Services.io.newChannelFromURIWithLoadInfo(getURI(file), null).open();
                sis = Cc["@mozilla.org/scriptableinputstream;1"].createInstance(Ci.nsIScriptableInputStream);
                sis.init(is); var str = sis.readBytes(sis.available());
                var match = str.match(re); if (match) result = match[1];
            } catch(ex) {}
            sis.close(); is.close();
            return result || getUUID();
        }
        verifyZipSignedState = function verifyZipSignedState(aFile, aAddon) {
            if (aAddon.id || aAddon._installLocation.name == KEY_APP_TEMPORARY)
                return Promise.resolve({signedState, cert: null});
            var root = !AppConstants.MOZ_REQUIRE_SIGNING && Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)
                ? Ci.nsIX509CertDB.AddonsStageRoot : Ci.nsIX509CertDB.AddonsPublicRoot;
            return new Promise(resolve => {
                var callback = {openSignedAppFileFinished(rv, zipReader, cert) {
                    zipReader && zipReader.close();
                    resolve({signedState, cert: cert || {commonName: getId(aFile)}});
                }};
                gCertDB.openSignedAppFileAsync(root, aFile, callback.wrappedJSObject = callback);
            });
        }
    })(AddonManager.SIGNEDSTATE_NOT_REQUIRED);
`)} catch(err) {Components.utils.reportError(err);}

Отредактировано Gladius333 (24-04-2018 22:07:39)

Отсутствует

 

№1256224-04-2018 22:44:03

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

Re: Custom Buttons

Gladius333
Я думаю, имеется ввиду 61 релиз.

Отсутствует

 

№1256325-04-2018 12:13:49

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

Re: Custom Buttons

Gladius333 пишет

Эта в какой версий отвалился? у меня старый еще пашет в 59.0.2, может вы про "nightly"?

Да, я про Nightly 61.0a1 (2018-04-24).
Отвалился (не в точности, но в принципе) этот.

Gladius333 пишет

Отсюда forum.mozilla-russia.org/viewtopic.php?id=70326, просто почему я спрашиваю, надо ли мне код менять?

Попробовал проверить этот код «отсюда» на бете 60.0b15
Как и ожидалось, Legacy раширения с ним не устанавливаются.

А когда переключил extensions.legacy.enabled в true,
так они не только не начали устанавливаться,
но сразу выключились даже уже установленные.

Напомню: релиз Firefox 60 ожидается через две недели.

Отредактировано Dumby (25-04-2018 12:14:40)

Отсутствует

 

№1256425-04-2018 14:00:29

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

Re: Custom Buttons

Dumby
А смысл всего этого, если

Dumby пишет

Всё. Custom Buttons мёртв

Отсутствует

 

№1256525-04-2018 14:24:41

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

Re: Custom Buttons

Garalf
Да вот тоже наблюдаю за героической борьбой светлых и тёмных сил, увы тёмные силы рано или поздно победят, вопрос времени. Жалко, ребята столько сделали, столько сил приложили чтобы можно было удобнее пользоваться этой рыжей стервой, а она вон чё удумала сволочь, всё выпилить. Ну стерва, что с неё взять.


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

Отсутствует

 

№1256625-04-2018 20:13:43

Gladius333
Забанен
 
Группа: Members
Зарегистрирован: 11-02-2017
Сообщений: 92
UA: unknown 0.0

Re: Custom Buttons

Dumby
Спасибо сохраню код, проверим с обновой)

Отсутствует

 

№1256725-04-2018 20:40:44

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

Re: Custom Buttons

Garalf пишет

А смысл всего этого, если

Dumby пишет

Всё. Custom Buttons мёртв

Повнимательней. :)

Dumby пишет

Всё. Custom Buttons мёртв.
В смысле мёртв как оверлейное расширение.

Как такое расширение у меня, пока, работает.
Такое не в смысле, что рестарт не нужен, а в смысле ограничений для манифеста.

Ну, и ещё, надеюсь, исправлено то, что опять
не устанавливались WebExtensions, у которых id не указан.

Отсутствует

 

№1256830-04-2018 17:21:25

Gladius333
Забанен
 
Группа: Members
Зарегистрирован: 11-02-2017
Сообщений: 92
UA: unknown 0.0

Re: Custom Buttons

У меня вопрос по поводу кнопки. Можно-ли в этот код добавить, чтобы он патчил иконку с .ехе
Как у кода с низу, может создать атрибут типа "icon" и с этим атрибутом он патчил бы кнопку добавляя иконку.
В общем надо чтобы где "Everything 1.3.4.exe" он добавлял иконку, как в коде с низу.
Я думал вытащить саму иконку+прописать путь, и еще можно потом в base64.. но как по мне эта долго нудно) а тут бах и запатчил, знал бы js... Версия фф 59.0.2

Open Firefox folders and files

Выделить код

Код:

this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");
// Создать меню ..................
var array = [////{label: "Profile",image: "chrome://mozapps/skin/profile/profileicon.png",value: "ProfD"},
////{label: "Firefox",image: "chrome://branding/content/icon16.png",value: "CurProcD"},
////{label: "Download",image: "chrome://mozapps/skin/downloads/downloadIcon.png",value: "DfltDwnld"},
////{separator:''},
////{label: "Extensions",image: "chrome://mozapps/skin/extensions/extensionGeneric-16.png",value: "ProfD,extensions"},
////{label: "Custom buttons",image: "chrome://custombuttons/skin/cbicon.png",value: "ProfD,custombuttons"},
////{label: "Bookmark backups",image: "chrome://custombuttons/skin/button.png",value: "ProfD,bookmarkbackups"},
////{label: "Search plugins(default)",style: "chrome://global/skin/icons/Search-glass.png",value: "CurProcD,searchplugins"},
////{label: "Search plugins(user-defined)",style: "chrome://global/skin/icons/Search-glass.png",value: "UsrSrchPlugns"},
////{separator:''},
{label: "Chrome",image: "chrome://global/skin/dirListing/folder.png",value: "UChrm"},
{label: "my_userChrome.css",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,chrome,my_userChrome.css"},
{label: "my_userContent.css",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,chrome,my_userContent.css"},
{label: "userChrome.css",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,chrome,userChrome.css"},
{label: "userContent.css",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,chrome,userContent.css"},
{label: "user.js",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,user.js"},
{label: "prefs.js",style: "chrome://global/skin/icons/folder-item.png",value: "ProfD,prefs.js"},
{label:"- - -  Utilities  - - -"},
////{label:"KeePass Password Safe",value:"ProfD,%Soft,KeePass2Portable.exe",image:"data:image/x-icon;base64,AAABAAEAEBAAAAAAAABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQMAAAAJcNDAvZNjAu+TYwLfkNDAvZAAAAlxAQEDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADx8fEJV1dXmkM9O/23pp/+883A/vG4pP/xtaD/8ce4/ragmf5COjf9V1dXmvHx8QkAAAAAAAAAAAAAAADx8fEJOjo5wZqOiv720cT+7aOJ/+mLa//ohWL/5n5a/+V4Uv/oiGb/8r2r/piGf/46OTnB8fHxCQAAAAAAAAAAV1dXmpqRjf71y7z/7aOJ/+ybf//qlHX/6Yxs/+iGY//mf1v/5XlT/+V0Tf/upo3/mIaA/ldXV5oAAAAAEBAQMENAP/354Nf+8LSf/yEXFP8gFhP/IBUR/yAUEP8gEw//IBIN/yARDP8gEQz/5XVO//K+rP5COjf9EBAQMAAAAJe5sq/+9c2///K9q/9UPzf/VDw0/1Q5MP+zdmH/qGxW/1IxJv9SLyP/bTwr/+Z7Vv/pimn/tqGZ/gAAAJcODQ3Z+Ozn/vXOwP/0xrb/IBEM/yARDP8gEQz/tH1q/1M4L/8gEQz/IBEM/yARDP/ngl//5nxX//LIuv4NDAvZNzY1+fvs5//318v/9s/C/1ZGQf9VQz3/VUE6/5VsXv9TOC//Uzgv/1M2K/9uRDX/6Ypo/+eDYP/xuKT/NjAu+Tc2Nvn88Oz/+N/W//fYzf8gEQz/IBEM/yARDP8gEQz/IBEM/yARDP8gEQz/IBEM/+qSc//pi2r/8ryp/zYwLvkODg7Z+vTy/vrm3//54Nf/s56W/25ENf/zybr/88Kx//K6p//jqZT/bkQ1/8WGcP/smn7/6pN0//PQxP4NDAzZAAAAl7q5uP787+v/+ufh/+bQyP8kIB7/wqWb//XLvP/zw7L/pIBz/y4iHv/rqZH/7aOJ/++qkv+3p6L+AAAAlxAQEDBEREP9/fn3/vvu6v/66OL/Zl1a/1ZMSP/00cX/7MW3/0E0MP99YVf/8bSf/++tlf/31sr+Qz48/RAQEDAAAAAAV1dXmpycm/799/X//O/r/+DRy/83MjH/SkE+/0A3NP9EOTX/5rur//K+q//20cT/mpCN/ldXV5oAAAAAAAAAAPHx8Qk6OjrBnZyb/v35+P788e7/49TP/5SIhP+YiIL/6Mm+//fVyf/55d3+m5OQ/jo6OcHx8fEJAAAAAAAAAAAAAAAA8fHxCVdXV5pERET9urm5/vr29P788/D//PDs//nv6/66tLH+REFA/VdXV5rx8fEJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQMAAAAJcODg7ZNzY2+Tc2NvkODQ3ZAAAAlxAQEDAAAAAAAAAAAAAAAAAAAAAA8A8AAMADAACAAQAAgAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAEAAIABAADAAwAA8A8AAA==",},
{label:"QTranslate 6.4",value:"ProfD,%Soft,_QTranslate 6.4.exe",},
{label:"Everything 1.3.4",value:"ProfD,%Soft,_Everything 1.3.4.exe",},];

var version = parseInt(Services.appinfo.version);
var menuPopup = self.appendChild(document.createElement("menupopup"));
array.forEach(m=> {if ( "separator" in m ) { menuPopup.appendChild(document.createElement("menuseparator")); return }; LOG(m.label.slice(0,6))
if ( version > 40 && m.label.startsWith("Search") ) return;
var mItem = menuPopup.appendChild(document.createElement("menuitem"));
mItem.setAttribute("label", m.label);
mItem.setAttribute("value", m.value);
mItem.setAttribute("class", "menuitem-iconic");
/////////////
("image" in m) && mItem.setAttribute("image", m.image);
("style" in m) && mItem.setAttribute("style", "list-style-image: url('"+ m.style +"'); -moz-image-region: rect(0, 16px, 16px, 0)");});
menuPopup.addEventListener("click", e=> openFirefoxFolders(e.target.value));
//функция открывает папки и файлы Firefox, выбор завысит от аргумента 'value' ...................toString().startsWith("Search")
function openFirefoxFolders(value) {var array = value.split(","),directory = array[0], folders = array[1], file = array[2];
var dir = Services.dirsvc.get(directory, Ci.nsIFile);folders && dir.append(folders);file && (dir.append(file), dir.launch());dir.exists() && !file && dir.reveal();};



// === StartPort [Fix!] ====/*Initialization Code*/
// var app = "Everything 1.3.4";
// var file = Services.dirsvc.get('ProfD', Ci.nsIFile);
// file.initWithPath(file.path + "\\%Soft\\" + "_Everything 1.3.4" + ".exe");
/////// document.getAnonymousNodes(self)[0].src = "moz-icon://file://" + file.path;
// self.tooltipText = "Л: Запустить " + app + "\nП: CB Меню";
// this._handleClick =()=> {
// var arg = []; // gClipboard.read()  content.location.href  document.commandDispatcher.focusedWindow.getSelection()
// var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess);
// process.init(file);
// process.run(false, arg, (arg.length));};
// =========================

Отредактировано Gladius333 (30-04-2018 17:34:21)

Отсутствует

 

№1256930-04-2018 17:35:35

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

Re: Custom Buttons

Gladius333 пишет

У меня вопрос по поводу кнопки. Можно-ли в этот код добавить, чтобы он патчил иконку с .ехе

Пример:

Выделить код

Код:

this._handleClick =()=> menuPopup.showPopup(this, -1, -1, "popup", "bottomleft", "topleft");

var array = [
   ["IE", "c:\\Program files\\Internet Explorer\\iexplore.exe"],
   ["Explorer", "c:\\windows\\explorer.exe"],
   ["separator"],
   ["Cmd Prompt", "C:\\windows/system32\\cmd.exe"],
   ["Media Player", "C:\\Program Files\\Windows Media Player\\wmplayer.exe"],
   ["Task Manager", "C:\\windows\\system32\\taskmgr.exe"], 
   ["Control Panel", "C:\\windows\\system32\\control.exe"],
   ["separator"],
   ["Notepad", "c:\\windows\\notepad.exe"],
   ["Calculator", "C:\\windows\\system32\\calc.exe"],
   ["Virtual Keyboard", "C:\\windows\\system32\\OSK.exe"],
   ["Character table", "C:\\windows\\system32\\charmap.exe"]
            ];
            
var menuPopup = self.appendChild( document.createElement("menupopup") );
array.forEach((m)=> {
   if (m == "separator") { menuPopup.appendChild( document.createElement("menuseparator") ); return };
   var mItem = document.createElement("menuitem");
   mItem.setAttribute("label", m[0]);     
   mItem.setAttribute("class", "menuitem-iconic");
   mItem.setAttribute("image", "moz-icon://file://" + m[1]);
   mItem.onclick =e=> Components.Constructor("@mozilla.org/file/local;1", "nsIFile", "initWithPath")(m[1]).launch();
   menuPopup.appendChild(mItem);
});

Отсутствует

 

№1257011-05-2018 19:07:40

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

Добрый день! Вопрос и просьба к специалистам. Возможно написать код , добавляющее новую функцию выделения текста. При выделении любого текста на странице и сдвиге его (выделения) на любое место на странице, посходит автоматический поиск (с открытием и переходом на новую вкладку) выделения в поисковике установленным по умолчанию, по типу" Искать в Яндекс" в контекстном меню  . Такой функционал реализован в браузере "Maxthon" , по моему очень удобно, без лишних движений производить поиск. Код хочу подсунуть в любую готовую кнопку. Заранее спасибо.

Отсутствует

 

№1257111-05-2018 20:52:22

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

Re: Custom Buttons

Duche пишет

При выделении любого текста на странице и сдвиге его (выделения) на любое место на странице, посходит автоматический поиск (с открытием и переходом на новую вкладку) выделения в поисковике установленным по умолчанию, по типу" Искать в Яндекс" в контекстном меню

CB drag and go

Отсутствует

 

№1257212-05-2018 07:32:24

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

bunda1:  Спасибо , просмотрел, то что нужно . Подскажите , есть команда заменяющие направление перетаскивания, L налево, R направо, U верх, D вниз , на команду  "перетащить выделение в произвольное место". Можно положить этот код в готовую кнопку.

Отредактировано Duche (12-05-2018 07:39:02)

Отсутствует

 

№1257312-05-2018 09:27:46

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

Re: Custom Buttons

Duche пишет

bunda1:  Спасибо , просмотрел, то что нужно . Подскажите , есть команда заменяющие направление перетаскивания, L налево, R направо, U верх, D вниз , на команду  "перетащить выделение в произвольное место". Можно положить этот код в готовую кнопку.

Да, можно сделать команду  "перетащить выделение в произвольное место". Да, можно положить этот код в готовую кнопку.

Отсутствует

 

№1257412-05-2018 10:23:52

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: Custom Buttons

bunda1 пишет

Да, можно сделать команду  "перетащить выделение в произвольное место"

bunda1: Подправите пожалуйста код для перетаскивания только выделенного текста и ссылок в произвольном направлении. Заранее спасибо.

Отсутствует

 

№1257512-05-2018 11:41:44

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

Re: Custom Buttons

Duche пишет

bunda1: Подправите пожалуйста код для перетаскивания только выделенного текста и ссылок в произвольном направлении. Заранее спасибо.

А там не надо ничего править. Просто поставь для выделенного текста и ссылок одинаковые команды для всех жестов U:  D:  L:  R:, а сложные жесты типа UD: и RLR: просто удали.

Отсутствует

 

Board footer

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