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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№1375116-09-2019 18:50:13

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

Re: Custom Buttons

Andrey_Krropotkin
Наоборот. происходило, а надо нет.  Подставляю doc.getElementById(wId).closeWin() и не фига...

Отсутствует

 

№1375216-09-2019 19:06:02

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

Re: Custom Buttons

Andrey_Krropotkin пишет

появились однотипные ошибки на 69

Ого, вижу. Получается это и туда засунули что ли.
chrome:// адреса должны работать, destruct() здесь, наверно, не нужен,
оно, вроде, само рассасывается.

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

Выделить код

Код:

var url = "data:application/vnd.mozilla.xul+xml;text/plain," + encodeURIComponent(intf(drives, count));
if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) {
    var chromeURL = `chrome://custombuttons/content/cbdialog${Date.now()}.xul`;
    Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup).registerChrome(
        Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)), [["override", chromeURL, url]]
    );
    url = chromeURL;
}


А в боковой панели, ну что ж, пусть будет электролизисно.
скрытый текст

Выделить код

Код:

//var load = async url => {
    var e10sFox69 = Services.appinfo.browserTabsRemoteAutostart
        && parseInt(Services.appinfo.platformVersion) >= 69;
    var load = async url => {
        if (e10sFox69) {
            config.uri = url;
            config.extension.remote = E10SUtils.getRemoteTypeForURI(url, true) != E10SUtils.NOT_REMOTE;
        }


И убери функцию handleCommand1 совсем,
а после создания mItem допиши
    mItem.handleCommand1= () => loadURL(
        TabContextMenu.contextTab.linkedBrowser.currentURI.spec
    );

Stkvsky
Хорошо, попробую

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

Выделить код

Код:

((hide, btns) => addEventListener("command", e => {
    if (e.target.id != "editBookmarkPanelRemoveButton" || StarUI._isNewBookmark) return;

    e.stopPropagation();
    var [guid] = StarUI._itemGuids;
    StarUI._removeBookmarksOnPopupHidden = true;

    PlacesUtils.bookmarks.fetch(guid).then(res => {
        PlacesUtils.bookmarks.fetch({
            parentGuid: res.parentGuid, index: res.index + 1
        }).then(next => {
            hide();
            next && openTrustedLinkIn(next.url.href, "current");
        }, hide);
    }, hide);
}, true, btns || 1))(
    () => StarUI.panel.hidePopup(),
    document.getElementById("editBookmarkPanelBottomButtons")
);

solombala пишет

многопроцессорная кнопка текст не выделяет

Там, где var cnt, в строку стиля можно добавить
-moz-user-focus:normal;-moz-user-select:text;

Отсутствует

 

№1375316-09-2019 20:16:21

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

Re: Custom Buttons

Dumby
От теперь лепо, хвала! Перевод

Выделить код

Код:

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%3E%u041F%u0435%u0440%u0435%u0432%u043E%u0434%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADKElEQVR42p2TX2hTdxTHPzfJTW6T3qQmapvWabUbog+udp3kYeLQ4f6wiZQNtjlXHyZaBYe6TekYVGRQYexFscOtuD7UdWxzMtAXEbZStKIbDsaUCbVj9o8mTW+aNrlJbu5vJ8Ex2OMO/Lj87jnne873nO9PSyTV3tkAfYi5NhQ1MB1Ijc3ijN+D7CQh28YK+GHDMyxpjlJTkmAdQi5dWvOsUrYkGB5QC5Kcg/aFBxxqqycmcY38a/1yTqYgMw8ByfFKjtZ4V6myCeW8IApyfOw2155fw1DG4dOJJK1r45x5BPDUpZuMr2uXSuAvgBMQgOitjLJNn7iDSJP0rIJ35dt19TeGoi0Es1MMP72KFvm3+88phuYM3HCd3ObQizpa/cW7Kh020E0Tz1yOUxvjdIr7o6t/cLpkEJqZp7s5zN62ZewfnWLQ9VIIBqodBdI5tIbBG8oKhSAaJZDN8tpSP5+3L8eVgLbeAdKal7NH3mKL3FcOXCfV1ITjc7FLFrWZIlpt/4+qEA7hLRrCwk/RusOXu7ax8xHvGTkVgi/89As/T8ia9EUyghKOWSaYyqNx8oIiuEgcshetsooceibJinvTfNH1DpseD3LHSZE4eprs6k24NQaevI1fF8q5FJqv9xvlmFLdkKZlhb77E8TdIlFD54OOl3mzdXm1k+sP0jzbdwF7cRhsj8ysAWYnpYPeQfXPnn3JJG8/sZT+PW8gkuDbkWEiRh3b29dV/edujNE5dB4nHJSCUrQsTdP9mUKrCKHA5piHK+918quVp/VoD9W9uhGejNRx6+N9VZAmoTJZmhbK4vR7BGDPCQEQ/qU8R15aT2/Hi/R8PcyxyyMyVBmaXwIfPiTVf5yYHiF28ARpOyuqk3nJ4DV2HFc4SamUZ3vrGr7vPlitFNraQc4SzZZt6ptWMv3DAOdGrrGj7yvR+2KYr5A0BeCVAwqvBQuyMG+MTzp3cvj15/ivfXfzNq++/yFEIlD7GFjZ6uPRaE4oGuNQI68jIINJu0QbTFoadIJlL7lSgb8sxbSVEb8geUUVtkh55r50MY5Wec6jibV9/A9LjP7e9TdFQScjW9P1XAAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%20%20%0Avar%20lc%20%3D%20navigator.lastClick%20%3D%20%7B%7D%3B%0AaddEventListener%28%22mouseup%22%2C%20e%20%3D%3E%20%7B%0A%20%20%20%20if%20%28e.button%29%20return%3B%0A%20%20%20%20lc.X%20%3D%20e.screenX%20-%20mozInnerScreenX%3B%0A%20%20%20%20lc.Y%20%3D%20e.screenY%20-%20mozInnerScreenY%3B%0A%7D%2C%20false%2C%20gBrowser.tabpanels%20%7C%7C%201%29%3B%0A%0Avar%20createWindow%20%3D%20function%28text%2C%20status%2C%20title%2C%20id%2C%20pos%2C%20size%29%7B%0Avar%20win%20%3D%20window%2C%20doc%20%3D%20win.document%2C%20wId%20%3D%20%27ujs_window%27+%28id%20%7C%7C%20%27%27%29%2C%20w%20%3D%20doc.getElementById%28wId%29%3B%0A%20%20%20%20var%20keyDown%20%3D%20function%28e%29%7Bif%28%21e.shiftKey%20%26%26%20%21e.ctrlKey%20%26%26%20%21e.altKey%20%26%26%20e.keyCode%20%3D%3D%2027%29doc.getElementById%28wId%29.closeWin%28%29%7D%3B%0A%20%20%20%20if%28w%29w.closeWin%28%29%3B%0A%20%20%20%20w%20%3D%20doc.createElementNS%28xhtmlns%2C%20%27div%27%29%3B%0A%20%20%20%20%20w.setAttribute%28%27style%27%2C%20%27position%3Afixed%3Bdisplay%3Ablock%3Bvisibility%3Ahidden%3Bleft%3A0%3Btop%3A0%3Bwidth%3Aauto%3Bheight%3Aauto%3Bborder%3A1px%20solid%20gray%3Bpadding%3A2px%3Bmargin%3A0%3Bz-index%3A99999%3Boverflow%3Ahidden%3Bcursor%3Amove%3B%27+%28typeof%20w.style.borderRadius%20%3D%3D%3D%20%27string%27%20%3F%20%27background-color%3A%23eaeaea%3Bpadding-top%3A0px%3Bborder-radius%3A4px%3Bbox-shadow%3A0%200%2015px%20rgba%280%2C0%2C0%2C.4%29%3B%27%20%3A%20%27background%3A-o-skin%28%22Window%20Skin%22%29%3B%27%29%29%3B%0A%20%20%20%20w.id%20%3D%20wId%3B%0A%20%20%20%20w.closeWin%20%3D%20function%28%29%7B%0A%20%20%20%20%20%20%20%20doc.removeEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20this.parentNode.removeChild%28this%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20w.addEle%20%3D%20function%28str%2C%20style%29%7B%0A%20%20%20%20%20%20%20%20var%20ele%20%3D%20doc.createElementNS%28xhtmlns%2C%20%27div%27%29%3B%0A%20%20%20%20%20%20%20%20ele.setAttribute%28%27style%27%2C%20style%29%3B%0A%20%20%20%20%20%20%20%20if%28str%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20ele.innerHTML%20%3D%20str%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20el%2C%20all%20%3D%20ele.getElementsByTagName%28%27*%27%29%2C%20i%20%3D%20all.length%3B%20i--%3B%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el%20%3D%20all%5Bi%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28/%5E%28script%7Cframe%7Ciframe%7Capplet%7Cembed%7Cobject%29%24/i.test%28el.nodeName%29%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20el.parentNode.removeChild%28el%29%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%20else%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20att%20%3D%20el.attributes%2C%20j%20%3D%20att.length%3B%20j--%3B%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28/%5Eon%5Ba-z%5D+%24/i.test%28att%5Bj%5D.name%29%29att%5Bj%5D.value%20%3D%20%27%27%3B%0A%20%20%20%20%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%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20return%20this.appendChild%28ele%29%3B%0A%20%20%20%20%7D%3B%0A%20%20%20%20var%20img%20%3D%20doc.createElement%28%27div%27%29%3B%0A%20%20%20%20img.setAttribute%28%27style%27%2C%20%27display%3Ablock%3Bfloat%3Aright%3Bwidth%3A16px%3Bheight%3A16px%3Bpadding%3A0%3Bmargin-top%3A2px%3Bmargin-right%3A1px%3Bborder%3Anone%3Bcursor%3Apointer%3Bbackground-image%3Aurl%28%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQUlEQVR4Xm2SPUhbURTHfzfNJ4nU0Axx7CJCN2kQtIgVCtq6OdQuBUftWIQqFNsKDo6iHTqIqN3a0kklUKTS2AZrcOjioFtRjFWUfH+803cS9GHwB4dzcu75/+8L9xgaSEDbLXhaASzAyXAMn5/DHxwwjeJgKLRxd3Q0atxuLhGgWqmQmp9PJ7LZJ5Ow3WhQFweDG20LC1FfRwc3kUsm+T48fPIzl3s8VTdxxLt+/2FhdlZkc1MkmdR8Pba2ajlrz3z1+9OvIOaIfb7DwsSEyNKSyM6OSLksEo/rbw2ttadntV7Gnv3k86VfqskvmDzv7hZ580Zkelrk4kJqFIsii4satVrRs+rYmBQHBuRvS4u8g/fuCmDOz+HgAIWpKRgfh3AYhoZQ8Hqxjo4o9PdT3d1FcQEl8KoBnJ7C/j6KZkZGYG4OIhEUFed7erD29q69jGrd1qVBqcQVKgwEuMSEQhjtXRk4JvW/kM1i2WGMga4uzMoKBIOIfbNiolEC6+uU+/qQRALFA1QBlwVYxmBcLmhuxqytQSgEKu7t1dBavwKvbeINh/Has2IMqnXpem4bky6qWLdvZgaOj2FwEHNyoqG19vRMZ8jZs1+NOfsNcZS3EFvzeNL51laRe/dEYrFadsLpZeyZDx7P6QN4Btwx1OE1xO4HAquP2tsjAZ+Pm8gWi3xMpc6W8/kXPyAO/DM4oOsZa2pafdjZGXF7PAgOpXKZL4nE2XImcyUGMDSg63kbhgvgtYCq8+akIL4J3y7Fyn+DokZOnLlMyQAAAABJRU5ErkJggg%3D%3D%22%29%3Bbackground%3A-o-skin%28%22Caption%20Close%20Button%20Skin%22%29%3B%27%29%3B%0A%20%20%20%20img.title%20%3D%20%28win.navigator.language.indexOf%28%27ru%27%29%20%3D%3D%200%29%20%3F%20%27%5Cu0417%5Cu0430%5Cu043A%5Cu0440%5Cu044B%5Cu0442%5Cu044C%27%20%3A%20%27Close%27%3B%0A%20%20%20%20img.addEventListener%28%27click%27%2C%20function%28%29%7Bthis.parentNode.closeWin%28%29%7D%2C%20false%29%3B%0A%20%20%20%20w.appendChild%28img%29%3B%0A%20%20%20%20var%20title%20%3D%20w.addEle%28title%2C%20%27display%3Atable%3Bcolor%3A%23000%3Bfont%3A17px%20Times%20New%20Roman%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding%3A0%3Bmargin%3A0%202px%3Bcursor%3Atext%3B%27%29%3B%0A%20%20%20%20%20%20%20%20title.onclick%20%3D%20e%20%3D%3E%20%7B%0A%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20e.target.href%3B%0A%20%20%20%20%20%20%20%20//%20%u0417%u0434%u0435%u0441%u044C%20%u043E%u0442%u043A%u0440%u044B%u0432%u0430%u0435%u043C%20url%20%u043A%u0430%u043A%20%u0445%u043E%u0442%u0438%u043C.%0A%20%20%20%20%20%20%20%20var%20ctabpos%20%3D%20gBrowser.selectedTab._tPos%20+1%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addWebTab%28url%29%2C%20ctabpos%29%3B%0A%20%20%20%20%7D%0A%20%20%20%20var%20cnt%20%3D%20w.addEle%28text%2C%20%27display%3Ablock%3Bborder%3A1px%20solid%20%23aaa%3Bpadding-bottom%3A3px%3Bpadding-left%3A3px%3Bbackground-color%3A%23fafcfe%3Bcolor%3A%23000%3Bfont%3A17px%20Times%20New%20Roman%3Bwidth%3A310px%3Bheight%3A160px%3Boverflow%3Aauto%3Bcursor%3Atext%3B-moz-user-focus%3Anormal%3B-moz-user-select%3Atext%3B%27%29%3B%0A%20%20%20%20w.addEle%28status%2C%20%27display%3Atable%3Bfont%3A12px%20Times%20New%20Roman%3Bfont-weight%3Abold%3Bcolor%3Ablue%3Bwidth%3Aauto%3Bheight%3Aauto%3Bpadding-top%3A2px%3Bmargin%3A0%203px%3Bcursor%3Apointer%3B%27%29%3B%0A%20%20%20%20w.addEventListener%28%27mousedown%27%2C%20function%28e%29%7B%0A%20%20%20%20%20%20%20%20if%28e.target%20%3D%3D%20w%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20e.preventDefault%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20grabX%20%3D%20e.clientX%2C%20grabY%20%3D%20e.clientY%2C%20origX%20%3D%20parseInt%28w.style.left%29%2C%20origY%20%3D%20parseInt%28w.style.top%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20mouseMove%20%3D%20function%28ev%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20w.style.left%20%3D%20origX+ev.clientX-grabX+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20w.style.top%20%3D%20origY+ev.clientY-grabY+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc.addEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20doc.addEventListener%28%27mouseup%27%2C%20function%28%29%7Bdoc.removeEventListener%28%27mousemove%27%2C%20mouseMove%2C%20false%29%7D%2C%20false%29%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%2C%20false%29%3B%0A%20%20%20%20doc.documentElement.appendChild%28w%29%3B%0A%20%20%0A%20%20%20%20if%28size%29%7B%0A%20%20%20%20%20%20%20%20cnt.style.height%20%3D%20size.height%3B%0A%20%20%20%20%20%20%20%20cnt.style.width%20%3D%20size.width%3B%0A%20%20%20%20%7D%0A%20%20%20%20else%7B%0A%20%20%20%20%20%20%20%20for%28var%20i%20%3D%203%3B%20i%20%3C%2010%3B%20i++%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20if%28cnt.scrollHeight%20%3E%20cnt.offsetHeight%20%7C%7C%20cnt.scrollWidth%20%3E%20cnt.offsetWidth%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cnt.style.height%20%3D%2080*i+%27px%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20cnt.style.width%20%3D%20160*i+%27px%27%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%20else%20break%3B%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%3B%0A%0A%20%20%20%20var%20docEle%20%3D%20%28doc.compatMode%20%3D%3D%20%27CSS1Compat%27%20%26%26%20win.postMessage%29%20%3F%20doc.documentElement%20%3A%20doc.body%3B%0A%20%20%20%20var%20mX%20%3D%20docEle.clientWidth-w.offsetWidth%2C%20mY%20%3D%20docEle.clientHeight-w.offsetHeight%3B%0A%20%20%20%20if%28mX%20%3C%200%29%7Bcnt.style.width%20%3D%20parseInt%28cnt.style.width%29+mX+%27px%27%3B%20mX%20%3D%200%7D%3B%0A%20%20%20%20if%28mY%20%3C%200%29%7Bcnt.style.height%20%3D%20parseInt%28cnt.style.height%29+mY+%27px%27%3B%20mY%20%3D0%7D%3B%0A%20%20%20%20var%20hW%20%3D%20parseInt%28w.offsetWidth/2%29%3B%0A%20%20%20%20w.style.left%20%3D%20%28pos%20%26%26%20pos.X%20%3C%20mX+hW%20%3F%20%28pos.X%20%3E%20hW%20%3F%20pos.X-hW%20%3A%200%29%20%3A%20mX%29+%27px%27%3B%0A%20%20%20%20w.style.top%20%3D%20%28pos%20%26%26%20pos.Y+10%20%3C%20mY%20%3F%20pos.Y+10%20%3A%20mY%29+%27px%27%3B%0A%20%20%20%20w.style.visibility%20%3D%20%27visible%27%3B%0A%20%20%20%20doc.addEventListener%28%27keydown%27%2C%20keyDown%2C%20false%29%3B%0A%20%20%20%20return%20w%3B%0A%7D%3B%0A%0Avar%20getHash%20%3D%20function%20%28txt%29%20%7B%0A%20%20%20%20TKK%3Deval%28%27%28%28function%28%29%7Bvar%20a%5Cx3d817046147%3Bvar%20b%5Cx3d-335196159%3Breturn%20410049+%5Cx27.%5Cx27+%28a+b%29%7D%29%28%29%29%27%29%3B%0A%20%20%20%20function%20sM%28a%29%20%7B%0A%20%20%20%20%20%20%20%20var%20b%3B%0A%20%20%20%20%20%20%20%20if%20%28null%20%21%3D%3D%20yr%29%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20yr%3B%0A%20%20%20%20%20%20%20%20else%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20wr%28String.fromCharCode%2884%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20c%20%3D%20wr%28String.fromCharCode%2875%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20%5Bb%28%29%2C%20b%28%29%5D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%5B1%5D%20%3D%20c%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20b%20%3D%20%28yr%20%3D%20window%5Bb.join%28c%28%29%29%5D%20%7C%7C%20%22%22%29%20%7C%7C%20%22%22%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20var%20d%20%3D%20wr%28String.fromCharCode%28116%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2C%20c%20%3D%20wr%28String.fromCharCode%28107%29%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%5Bd%28%29%2C%20d%28%29%5D%3B%0A%20%20%20%20%20%20%20%20d%5B1%5D%20%3D%20c%28%29%3B%0A%20%20%20%20%20%20%20%20c%20%3D%20%22%26%22%20+%20d.join%28%22%22%29%20+%20%22%3D%22%3B%0A%20%20%20%20%20%20%20%20d%20%3D%20b.split%28%22.%22%29%3B%0A%20%20%20%20%20%20%20%20b%20%3D%20Number%28d%5B0%5D%29%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%20for%20%28var%20e%20%3D%20%5B%5D%2C%20f%20%3D%200%2C%20g%20%3D%200%3B%20g%20%3C%20a.length%3B%20g++%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20l%20%3D%20a.charCodeAt%28g%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20128%20%3E%20l%20%3F%20e%5Bf++%5D%20%3D%20l%20%3A%20%282048%20%3E%20l%20%3F%20e%5Bf++%5D%20%3D%20l%20%3E%3E%206%20%7C%20192%20%3A%20%2855296%20%3D%3D%20%28l%20%26%2064512%29%20%26%26%20g%20+%201%20%3C%20a.length%20%26%26%2056320%20%3D%3D%20%28a.charCodeAt%28g%20+%201%29%20%26%2064512%29%20%3F%20%28l%20%3D%2065536%20+%20%28%28l%20%26%201023%29%20%3C%3C%2010%29%20+%20%28a.charCodeAt%28++g%29%20%26%201023%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2018%20%7C%20240%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2012%20%26%2063%20%7C%20128%29%20%3A%20e%5Bf++%5D%20%3D%20l%20%3E%3E%2012%20%7C%20224%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%3E%3E%206%20%26%2063%20%7C%20128%29%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20e%5Bf++%5D%20%3D%20l%20%26%2063%20%7C%20128%29%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20a%20%3D%20b%3B%0A%20%20%20%20%20%20%20%20for%20%28f%20%3D%200%3B%20f%20%3C%20e.length%3B%20f++%29%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20+%3D%20e%5Bf%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%20xr%28a%2C%20%22+-a%5E+6%22%29%3B%0A%20%20%20%20%20%20%20%20a%20%3D%20xr%28a%2C%20%22+-3%5E+b+-f%22%29%3B%0A%20%20%20%20%20%20%20%20a%20%5E%3D%20Number%28d%5B1%5D%29%20%7C%7C%200%3B%0A%20%20%20%20%20%20%20%200%20%3E%20a%20%26%26%20%28a%20%3D%20%28a%20%26%202147483647%29%20+%202147483648%29%3B%0A%20%20%20%20%20%20%20%20a%20%25%3D%201E6%3B%0A%20%20%20%20%20%20%20%20return%20c%20+%20%28a.toString%28%29%20+%20%22.%22%20+%20%28a%20%5E%20b%29%29%0A%20%20%20%20%7D%0A%0A%20%20%20%20var%20yr%20%3D%20null%3B%0A%20%20%20%20var%20wr%20%3D%20function%28a%29%20%7B%0A%20%20%20%20%20%20%20%20return%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20a%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%2C%20xr%20%3D%20function%28a%2C%20b%29%20%7B%0A%20%20%20%20%20%20%20%20for%20%28var%20c%20%3D%200%3B%20c%20%3C%20b.length%20-%202%3B%20c%20+%3D%203%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20var%20d%20%3D%20b.charAt%28c%20+%202%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%22a%22%20%3C%3D%20d%20%3F%20d.charCodeAt%280%29%20-%2087%20%3A%20Number%28d%29%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%2C%20d%20%3D%20%22+%22%20%3D%3D%20b.charAt%28c%20+%201%29%20%3F%20a%20%3E%3E%3E%20d%20%3A%20a%20%3C%3C%20d%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20a%20%3D%20%22+%22%20%3D%3D%20b.charAt%28c%29%20%3F%20a%20+%20d%20%26%204294967295%20%3A%20a%20%5E%20d%0A%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20return%20a%0A%20%20%20%20%7D%3B%20%0A%0A%20%20%20%20return%20sM%28txt%29%3B%0A%7D%3B%20%0A%20%0A%20%20%0A%20%0Avar%20ujs_google_translate%20%3D%20function%20%28dir%29%7B%0A%20%20%20%20var%20lng%20%3D%20window.navigator.language.slice%280%2C%202%29%2C%20txt%20%3D%20gContextMenuContentData.selectionInfo.fullText%2C%20l%20%3D%20dir.split%28%27%7C%27%29%3B%0A%20%20%20%20var%20encTxt%20%3D%20encodeURIComponent%28txt%29%3B%0A%20%20%20%20var%20winWait%20%3D%20function%28lng%29%7BcreateWindow%28%27%27%2C%20%28lng%20%3D%3D%20%27ru%27%20%3F%20%27%5Cu041F%5Cu0435%5Cu0440%5Cu0435%5Cu0432%5Cu043E%5Cu0434%5Cu0438%5Cu043C%27%20%3A%20%27Translating%27%29+%27%5Cu2026%27%2C%20%27Google%20Translate%27%2C%20%27_gt%27%2C%20window.navigator.lastClick%29%7D%3B%0A%20%20%20%20%0A%20%20%20%20if%20%28txt%29%20%7B%0A%20%20%20%0A%20%20%20%20%20%20%20%20winWait%28lng%29%3B%0A%20%20%20%20%0A%20%20%20%20%20%20%20%20var%20xhr%20%3D%20new%20XMLHttpRequest%28%29%3B%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%27https%3A//translate.google.com/translate_a/single%3Fclient%3Dt%26sl%3D%27%20+%20l%5B0%5D%20+%20%27%26tl%3D%27%20+%20l%5B1%5D%20+%20%27%26hl%3D%27%20+%20lng%20+%20%27%26eotf%3D0%26dt%3Dat%26dt%3Dbd%26dt%3Dex%26dt%3Dld%26dt%3Dmd%26dt%3Dqca%26dt%3Drw%26dt%3Drm%26dt%3Dss%26dt%3Dt%27%20+%20getHash%28txt%29%3B%0A%20%20%20%20%20%20%20%20var%20urle%20%3D%20%22http%3A//translate.google.com/translate_t%3Ftext%3D%22+encTxt+%22%26sl%3D%27%20+%20l%5B0%5D%20+%20%27%26tl%3D%27%20+%20l%5B1%5D%20+%20%27%26hl%3D%27%20+%20lng%20+%20%27%26eotf%3D0%26ujs%3Dgtt%22%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%20%20%20%20%20%20xhr.open%28%27POST%27%2C%20url%2C%20true%29%3B%0A%20%20%20%20%20%20%20%20xhr.setRequestHeader%28%27Content-Type%27%2C%20%27application/x-www-form-urlencoded%3Bcharset%3Dutf-8%27%29%3B%0A%20%20%20%20%20%20%20%20xhr.onreadystatechange%20%3D%20function%28%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20try%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%20%28xhr.readyState%20%3D%3D%204%20%26%26%20xhr.status%20%3D%3D%20200%29%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20var%20result%20%3D%20%27%27%2C%20status%20%3D%20%27%27%2C%20tmp%20%3D%20JSON.parse%28xhr.responseText.replace%28/%5C%5B%28%3F%3D%2C%29/g%2C%20%27%5B0%27%29.replace%28/%2C%28%3F%3D%2C%7C%5C%5D%29/g%2C%20%27%2C0%27%29%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20for%28var%20i%20%3D%200%2C%20n%3B%20n%20%3D%20tmp%5B0%5D%5Bi%5D%3B%20i++%29%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20if%28n%5B0%5D%29result%20+%3D%20n%5B0%5D.toString%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20result%20%3D%20%27%3Cspan%20style%3D%22background-color%3Ainherit%3Bcolor%3Ainherit%3Bfont-size%3Ainherit%3Bfont-family%3ATimes%2Cserif%3B%22%3E%27%20+%20result%20+%20%27%3C/span%3E%27%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20status%20%3D%20tmp%5B8%5D%5B0%5D%5B0%5D.toUpperCase%28%29%20+%20%27%20-%5Cu203A%20%27%20+%20l%5B1%5D.toUpperCase%28%29%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20createWindow%28result%2C%20status%2C%20%27%3Ca%20href%3D%22%27+urle.replace%28/%26/g%2C%27%26amp%3B%27%29+%27%22%20%20style%3D%22display%3Ainline%3Bpadding%3A0%3Bmargin%3A0%3Btext-decoration%3Anone%3Bborder%3Anone%3Bcolor%3Ablue%3Bfont%3A17px%20Times%20New%20Roman%3B%22%3EGoogle%20Translate%3C/a%3E%27%2C%20%27_gt%27%2C%20window.navigator.lastClick%29%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%7D%20catch%20%28x%29%7BLOG%28x%29%7D%3B%0A%20%20%20%20%20%20%20%20%7D%3B%0A%20%20%20%20%20%20%20%20xhr.send%28%27q%3D%27%20+%20encodeURIComponent%28txt%29%29%3B%0A%20%20%20%20%7D%20else%20%7B%0A%20%20%20%20%20%20%20%20var%20urlt%20%3D%20gBrowser.currentURI.spec%3B%20%20%0A%20%20%20%20%20%20%20%20var%20url%20%3D%20%22http%3A//translate.google.com/translate%3Fu%3D%22+encodeURIComponent%28urlt%29+%22%26hl%3D%22+lng+%22%26langpair%3D%22+dir+%22%26tbb%3D1%22%3B%0A%20%20%20%20%20%20%20%20var%20ctabpos%20%3D%20gBrowser.selectedTab._tPos%20+1%3B%0A%20%20%20%20%20%20%20%20gBrowser.moveTabTo%28gBrowser.selectedTab%20%3D%20gBrowser.addWebTab%28url%29%2C%20ctabpos%29%3B%0A%20%20%20%20%7D%3B%0A%7D%3B%0A%0A%0A%0A%0Avar%20contextMenu%20%3D%20document.getElementById%28%22contentAreaContextMenu%22%29%3B%0Avar%20nextEleMenu%20%3D%20document.getElementById%28%22context-inspect%22%29%3B%0A%0Avar%20menuId%20%3D%20%22context-ext-google-translate%22%3B%0Avar%20menuItem%20%3D%20document.getElementById%28menuId%29%3B%0Aif%20%28menuItem%29%20%7B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem.nextElementSibling%29%3B%0A%20%20%20%20contextMenu.removeChild%28menuItem%29%3B%0A%7D%3B%0A%0AmenuItem%20%3D%20document.createXULElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22id%22%2C%20menuId%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0440%u0443%u0441%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cru%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AmenuItem%20%3D%20document.createXULElement%28%22menuitem%22%29%3B%0AmenuItem.setAttribute%28%22label%22%2C%20%22%u041F%u0435%u0440%u0435%u0432%u0435%u0441%u0442%u0438%20%u043D%u0430%20%u0430%u043D%u0433%u043B%u0438%u0439%u0441%u043A%u0438%u0439%22%29%3B%0AmenuItem.setAttribute%28%22class%22%2C%20%22menuitem-iconic%22%29%3B%0AmenuItem.setAttribute%28%22image%22%2C%20%22data%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII%3D%22%29%3B%0AmenuItem.addEventListener%28%22command%22%2C%20function%28%29%7Bujs_google_translate%28%27auto%7Cen%27%29%7D%2C%20false%29%3B%0AcontextMenu.insertBefore%28menuItem%2C%20nextEleMenu%29%3B%0A%0AcontextMenu.insertBefore%28document.createXULElement%28%22menuseparator%22%29%2C%20nextEleMenu%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%20%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

Отредактировано solombala (16-09-2019 20:22:53)

Отсутствует

 

№1375416-09-2019 21:12:57

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 56.0

Re: Custom Buttons

Dumby пишет

Хорошо, попробую

Невероятно) Доволен как слон:) Спасибо большое)

Отсутствует

 

№1375516-09-2019 21:52:35

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

Re: Custom Buttons

Dumby помоги разобраться с еще одной для многопроцессорного-
var defaultURL = gBrowser.currentURI.spec; загружает что попало

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

Выделить код

Код:

/*Initialization Code*/
// Добавить новый пункт "Открыть в нижней панели" в контекстное меню вкладки ..............................................................................................
(function () {
    gCBNote = this; // global obj
    var label = "Сайт";
    var icon  ="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABKUlEQVQ4T6WS24qDMBRF/f9fHCi1ijHkQi7kRqJ7jpYZYSxMi8J6CezlyT7p6MNFXh5+wsvDT+hQ2opcn6TyJG7kJ4HwcYXxDcoWCJXhXD4E67r+y7IsKKUipYwQElpO7wtaW5BzRYwF3idYG5FCfE9w/PknHKC1R3D+EEi6j3LlhLQZs04YRcBjdrhPFrdB46tXuI/qEFykg0vUbqi/SF8hqG1utgkyJhUxyogHD+hnjzvz0MoegtPdqbRaGhKVFjytzG4BB8EtZqYx0fh8kmfBsqyote2Nh1CosARjAqR04BSeJoNhUOh7iWkQZ0Gtx7q2h2JMhFJ+DzO2hfUevt0Ehp7/FSxEo/ELVnokNSYkWlWwDk4ZaKEhGY0+crCBQ7H5EFwCuAK6b7kpsLGbUcTpAAAAAElFTkSuQmCC";
    var defaultURL = gBrowser.currentURI.spec;
  
 
 
    function $(aId) {
  return document.getElementById(aId);
}

this.togglePanel = function() {
  this.panel = !this.panel;
  $("SNote-splitter").hidden = !this.panel;
  $("SNote-panel").hidden = !this.panel;
  $("SNote-iframe").setAttribute("src", this.panel ? defaultURL : "");
}
 
function makeXML(aXMLString) {
  return (new DOMParser).parseFromString(aXMLString, "application/xml")
                        .documentElement;
}

function $xml(aNode, aId, aXML) {
  var node = $(aId);
  
 node && node.parentNode.removeChild(node);
 aNode && aNode.appendChild(makeXML(aXML))
 
}

$xml($("appcontent"),
     "SNote-splitter",
     '<splitter xmlns="' + xulns + '" id="SNote-splitter"'
   + ' orient="vertical" hidden="true">'
   + '<grippy oncommand="this.parentNode.nextSibling.collapsed ='
   + ' !this.parentNode.nextSibling.collapsed;"/></splitter>');

$xml($("appcontent"),
     "SNote-panel",
     '<vbox xmlns="' + xulns + '" id="SNote-panel"'
   + ' height="300" hidden="true">'
   + '<toolbox><toolbar align="center">'
   + '<label value=" " flex="1" crop="end"/>'
   + '<toolbarbutton class="tabs-closebutton"'
   + ' image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII="'   
   + ' oncommand="gCBNote.togglePanel();"/>'
   + '</toolbar></toolbox>'
   + '<iframe id="SNote-iframe" src="" flex="1"/>'
   + '</vbox>');

   
   if ( document.getElementById("TabSNote") ) return;
 
   var tabContext = document.getElementById("tabContextMenu");
   var menuItem = document.createXULElement("menuitem");                 
   menuItem.setAttribute("id", "TabSNote");
   menuItem.setAttribute("label", "Открыть в нижней панели");
   menuItem.setAttribute("class", "menuitem-iconic");
   menuItem.setAttribute("image", icon);
   menuItem.setAttribute("oncommand", "gCBNote.togglePanel();" );
   tabContext.insertBefore( menuItem, tabContext.firstChild.nextSibling ); // как первый пункт 
   
})();


и еще вот перестала правильно работать
скрытый текст

Выделить код

Код:

// Добавить нумерацию вкладок ..........................................................................................................................
(function (x) {
    gBrowser.addEventListener("load", x, true);
    window.addEventListener("TabMove", x, false);
    window.addEventListener("TabClose", x, false);
})(function () {
    setTimeout(function () {
        Array.map(gBrowser.visibleTabs || gBrowser.mTabs, function (tab, num) {
            tab.label = (num + 1) + "  \u202D" + tab.label.match(/(?:^\d+  \u202D)?(.+)/)[1];
        })
    }, 5);
});

Отредактировано Andrey_Krropotkin (16-09-2019 22:38:37)

Отсутствует

 

№1375617-09-2019 07:38:52

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

Re: Custom Buttons

solombala пишет

От теперь лепо, хвала! Перевод

текст выделяется и что контекстное меню для переведенного текста есть? У меня почему нет.
А вот так есть

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

Выделить код

Код:

/*Initialization Code*/
  
var lc = navigator.lastClick = {};
addEventListener("mouseup", e => {
    if (e.button) return;
    lc.X = e.screenX - mozInnerScreenX;
    lc.Y = e.screenY - mozInnerScreenY;
}, false, gBrowser.tabpanels || 1);

var createWindow = function(text, status, title, id, pos, size){
var win = window, doc = win.document, wId = 'ujs_window'+(id || ''), w = doc.getElementById(wId);
    var keyDown = function(e){if(!e.shiftKey && !e.ctrlKey && !e.altKey && e.keyCode == 27)doc.getElementById(wId).closeWin()};
    if(w)w.closeWin();
    w = doc.createElementNS(xhtmlns, 'div');
     w.setAttribute('style', 'position:fixed;display:block;visibility:hidden;left:0;top:0;width:auto;height:auto;border:1px solid gray;padding:2px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#eaeaea;padding-top:0px;border-radius:4px;box-shadow:0 0 15px rgba(0,0,0,.4);' : 'background:-o-skin("Window Skin");'));
    w.id = wId;
    w.closeWin = function(){
        doc.removeEventListener('keydown', keyDown, false);
        this.parentNode.removeChild(this);
    };
    w.addEle = function(str, style){
        var ele = doc.createElementNS(xhtmlns, 'div');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }
                else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    w.addEle1 = function(str, style){
        var ele = doc.createElementNS(xhtmlns, 'textarea');
        ele.setAttribute('style', style);
        if(str){
            ele.innerHTML = str;
            for(var el, all = ele.getElementsByTagName('*'), i = all.length; i--;){
                el = all[i];
                if(/^(script|frame|iframe|applet|embed|object)$/i.test(el.nodeName)){
                    el.parentNode.removeChild(el);
                }else{
                    for(var att = el.attributes, j = att.length; j--;){
                        if(/^on[a-z]+$/i.test(att[j].name))att[j].value = '';
                    }
                }
            }
        };
        return this.appendChild(ele);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:16px;height:16px;padding:0;margin-top:2px;margin-right:1px;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACQUlEQVR4Xm2SPUhbURTHfzfNJ4nU0Axx7CJCN2kQtIgVCtq6OdQuBUftWIQqFNsKDo6iHTqIqN3a0kklUKTS2AZrcOjioFtRjFWUfH+803cS9GHwB4dzcu75/+8L9xgaSEDbLXhaASzAyXAMn5/DHxwwjeJgKLRxd3Q0atxuLhGgWqmQmp9PJ7LZJ5Ow3WhQFweDG20LC1FfRwc3kUsm+T48fPIzl3s8VTdxxLt+/2FhdlZkc1MkmdR8Pba2ajlrz3z1+9OvIOaIfb7DwsSEyNKSyM6OSLksEo/rbw2ttadntV7Gnv3k86VfqskvmDzv7hZ580Zkelrk4kJqFIsii4satVrRs+rYmBQHBuRvS4u8g/fuCmDOz+HgAIWpKRgfh3AYhoZQ8Hqxjo4o9PdT3d1FcQEl8KoBnJ7C/j6KZkZGYG4OIhEUFed7erD29q69jGrd1qVBqcQVKgwEuMSEQhjtXRk4JvW/kM1i2WGMga4uzMoKBIOIfbNiolEC6+uU+/qQRALFA1QBlwVYxmBcLmhuxqytQSgEKu7t1dBavwKvbeINh/Has2IMqnXpem4bky6qWLdvZgaOj2FwEHNyoqG19vRMZ8jZs1+NOfsNcZS3EFvzeNL51laRe/dEYrFadsLpZeyZDx7P6QN4Btwx1OE1xO4HAquP2tsjAZ+Pm8gWi3xMpc6W8/kXPyAO/DM4oOsZa2pafdjZGXF7PAgOpXKZL4nE2XImcyUGMDSg63kbhgvgtYCq8+akIL4J3y7Fyn+DokZOnLlMyQAAAABJRU5ErkJggg==");background:-o-skin("Caption Close Button Skin");');
    img.title = (win.navigator.language.indexOf('ru') == 0) ? '\u0417\u0430\u043A\u0440\u044B\u0442\u044C' : 'Close';
    img.addEventListener('click', function(){this.parentNode.closeWin()}, false);
    w.appendChild(img);
    var title = w.addEle(title, 'display:table;color:#000;font:17px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
        title.onclick = e => {
        e.preventDefault();
        var url = e.target.href;
        // Здесь открываем url как хотим.
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
       doc.getElementById(wId).closeWin(); 
    }
    var cnt = w.addEle1(text, 'display:block;border:1px solid #aaa;padding-bottom:3px;padding-left:3px;background-color:#fafcfe;color:#000;font:17px Times New Roman;width:310px;height:160px;overflow:auto;cursor:text;-moz-user-focus:normal;-moz-user-select:text;');
    cnt.contentEditable="true";
    cnt.context="contentAreaContextMenu";    w.addEle(status, 'display:table;font:12px Times New Roman;font-weight:bold;color:blue;width:auto;height:auto;padding-top:2px;margin:0 3px;cursor:pointer;');
    w.addEventListener('mousedown', function(e){
        if(e.target == w){
            e.preventDefault();
            var grabX = e.clientX, grabY = e.clientY, origX = parseInt(w.style.left), origY = parseInt(w.style.top);
            var mouseMove = function(ev){
                w.style.left = origX+ev.clientX-grabX+'px';
                w.style.top = origY+ev.clientY-grabY+'px';
            };
            doc.addEventListener('mousemove', mouseMove, false);
            doc.addEventListener('mouseup', function(){doc.removeEventListener('mousemove', mouseMove, false)}, false);
        }
    }, false);
    doc.documentElement.appendChild(w);
  
    if(size){
        cnt.style.height = size.height;
        cnt.style.width = size.width;
    }
    else{
        for(var i = 3; i < 10; i++){
            if(cnt.scrollHeight > cnt.offsetHeight || cnt.scrollWidth > cnt.offsetWidth){
                cnt.style.height = 80*i+'px';
                cnt.style.width = 160*i+'px';
            }
            else break;
        }
    };

    var docEle = (doc.compatMode == 'CSS1Compat' && win.postMessage) ? doc.documentElement : doc.body;
    var mX = docEle.clientWidth-w.offsetWidth, mY = docEle.clientHeight-w.offsetHeight;
    if(mX < 0){cnt.style.width = parseInt(cnt.style.width)+mX+'px'; mX = 0};
    if(mY < 0){cnt.style.height = parseInt(cnt.style.height)+mY+'px'; mY =0};
    var hW = parseInt(w.offsetWidth/2);
    w.style.left = (pos && pos.X < mX+hW ? (pos.X > hW ? pos.X-hW : 0) : mX)+'px';
    w.style.top = (pos && pos.Y+10 < mY ? pos.Y+10 : mY)+'px';
    w.style.visibility = 'visible';
    doc.addEventListener('keydown', keyDown, false);
    return w;
};

var getHash = function (txt) {
    TKK=eval('((function(){var a\x3d817046147;var b\x3d-335196159;return 410049+\x27.\x27+(a+b)})())');
    function sM(a) {
        var b;
        if (null !== yr)
            b = yr;
        else {
            b = wr(String.fromCharCode(84));
            var c = wr(String.fromCharCode(75));
            b = [b(), b()];
            b[1] = c();
            b = (yr = window[b.join(c())] || "") || ""
        }
        var d = wr(String.fromCharCode(116))
            , c = wr(String.fromCharCode(107))
            , d = [d(), d()];
        d[1] = c();
        c = "&" + d.join("") + "=";
        d = b.split(".");
        b = Number(d[0]) || 0;
        for (var e = [], f = 0, g = 0; g < a.length; g++) {
            var l = a.charCodeAt(g);
            128 > l ? e[f++] = l : (2048 > l ? e[f++] = l >> 6 | 192 : (55296 == (l & 64512) && g + 1 < a.length && 56320 == (a.charCodeAt(g + 1) & 64512) ? (l = 65536 + ((l & 1023) << 10) + (a.charCodeAt(++g) & 1023),
                e[f++] = l >> 18 | 240,
                e[f++] = l >> 12 & 63 | 128) : e[f++] = l >> 12 | 224,
                e[f++] = l >> 6 & 63 | 128),
                e[f++] = l & 63 | 128)
        }
        a = b;
        for (f = 0; f < e.length; f++)
            a += e[f],
                a = xr(a, "+-a^+6");
        a = xr(a, "+-3^+b+-f");
        a ^= Number(d[1]) || 0;
        0 > a && (a = (a & 2147483647) + 2147483648);
        a %= 1E6;
        return c + (a.toString() + "." + (a ^ b))
    }

    var yr = null;
    var wr = function(a) {
        return function() {
            return a
        }
    }
        , xr = function(a, b) {
        for (var c = 0; c < b.length - 2; c += 3) {
            var d = b.charAt(c + 2)
                , d = "a" <= d ? d.charCodeAt(0) - 87 : Number(d)
                , d = "+" == b.charAt(c + 1) ? a >>> d : a << d;
            a = "+" == b.charAt(c) ? a + d & 4294967295 : a ^ d
        }
        return a
    }; 

    return sM(txt);
}; 
 
  
 
var ujs_google_translate = function (dir){
    var lng = window.navigator.language.slice(0, 2), txt = gContextMenuContentData.selectionInfo.fullText, l = dir.split('|');
    var encTxt = encodeURIComponent(txt);
    var winWait = function(lng){createWindow('', (lng == 'ru' ? '\u041F\u0435\u0440\u0435\u0432\u043E\u0434\u0438\u043C' : 'Translating')+'\u2026', 'Google Translate', '_gt', window.navigator.lastClick)};
    
    if (txt) {
   
        winWait(lng);
    
        var xhr = new XMLHttpRequest();
        var url = 'https://translate.google.com/translate_a/single?client=t&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&dt=at&dt=bd&dt=ex&dt=ld&dt=md&dt=qca&dt=rw&dt=rm&dt=ss&dt=t' + getHash(txt);
        var urle = "http://translate.google.com/translate_t?text="+encTxt+"&sl=' + l[0] + '&tl=' + l[1] + '&hl=' + lng + '&eotf=0&ujs=gtt";
                  
        xhr.open('POST', url, true);
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded;charset=utf-8');
        xhr.onreadystatechange = function() {
            try{
                if (xhr.readyState == 4 && xhr.status == 200) {
                    var result = '', status = '', tmp = JSON.parse(xhr.responseText.replace(/\[(?=,)/g, '[0').replace(/,(?=,|\])/g, ',0'));
                    for(var i = 0, n; n = tmp[0][i]; i++){
                        if(n[0])result += n[0].toString();
                    };
                    //result = '<span style="background-color:inherit;color:inherit;font-size:inherit;font-family:Times,serif;">' + result + '</span>';
                    status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
                    createWindow(result, status, '<a href="'+urle.replace(/&/g,'&amp;')+'"  style="display:inline;padding:0;margin:0;text-decoration:none;border:none;color:blue;font:17px Times New Roman;">Google Translate</a>', '_gt', window.navigator.lastClick);
                }
            } catch (x){LOG(x)};
        };
        xhr.send('q=' + encodeURIComponent(txt));
    } else {
        var urlt = gBrowser.currentURI.spec;  
        var url = "http://translate.google.com/translate?u="+encodeURIComponent(urlt)+"&hl="+lng+"&langpair="+dir+"&tbb=1";
        var ctabpos = gBrowser.selectedTab._tPos +1;
        gBrowser.moveTabTo(gBrowser.selectedTab = gBrowser.addWebTab(url), ctabpos);
    };
};




var contextMenu = document.getElementById("contentAreaContextMenu");
var nextEleMenu = document.getElementById("context-inspect");

var menuId = "context-ext-google-translate";
var menuItem = document.getElementById(menuId);
if (menuItem) {
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem.nextElementSibling);
    contextMenu.removeChild(menuItem);
};

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("id", menuId);
menuItem.setAttribute("label", "Перевести на русский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAABBUlEQVR4Ac2RMU4DMRREB2MqihQpAkUaqnAduuQw4Sx03CGcJYIiDYqQ0lCsZ77535ZFcgAkRuPvV7zd/dLiz3N1PFb8hmRckrfELZrF9ONQ1B6Yz0MyM7S0O6zGkVprh/3+Kw/JzkHSpRpJKZkpr9fYbOx0cjVsCbWG31oHBM9mtt0q73ZcrdLhAMlYQKkUI22aqsNo8HKZAMQhvVaKSHWj2Q2aPU3mJQFY7nuHyvYFduP83WF3AJRfcPNYnr/Lp1G1uK4m9sno1LaUbnX/htf8BNzoneUD5NhjvLCMhURQSQ93QCZwXYjFwg3I0NZKrvoknQPMIHkt/jRAQKMeG2yX89/mB4EJbKbZxIhFAAAAAElFTkSuQmCC");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|ru')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

menuItem = document.createXULElement("menuitem");
menuItem.setAttribute("label", "Перевести на английский");
menuItem.setAttribute("class", "menuitem-iconic");
menuItem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAIAAACQkWg2AAAABnRSTlMAAAAAAABupgeRAAAB5UlEQVR4AWOgPZg0c9+Oq2+qpx9LaQaiw4mNB27efbs2uXFNQh2Q4Zm9zSNth23MhqjGnXMC86vnHmUS4udxv7OvOd2yPE7PTlfCTk9GVVEoyJA7WI8dyPA0k3U1l+jJMV7CeThpTZeoKDdDUsvBPSff/V+6/P/Bvf///2+bdvU/EKRm/k9IBNIlfZe+LFrzvbsbyJ636pKkyQyQhoUb7tZNvPpw3/0/TfX/ISAm5n94BIiRm/n/xYsLd946ei4vajoiqDuRAejQf//+o4PQ0P9+fmhiQGVnrr1kXJNYG2zEzXDxDsPv3wy/fkFJoOTPn39+/fr/69e/37//AUX+/mXRkO458wWHDba2f8wswCyQ3N+/f//8/fP7z5+TV18w2Mdt6plzPiptx5Wr7/+/ffMzOR6kysjkt74hWMPfp06O+2dulZCeFZKwnkE4m8E8bN3i9aCQ+dxY96GrK6bkGJD9R1v3l6Y20NVW9kt+/v//ZdbcFwkxTVPPMQimM8XEqkb7a/zoqLxkH9v4zVyI5+///wyMmtKMmhJAnbLqQjHxaw5r2orOmZN5uj470Zahat6BKS7JzpmLBHXm8GhM5lCdcP7ai1ZpixZxk9NXXjKIFzOIFjAI54oY1vXuue5qmscw+AAAW0tKxtPoicEAAAAASUVORK5CYII=");
menuItem.addEventListener("command", function(){ujs_google_translate('auto|en')}, false);
contextMenu.insertBefore(menuItem, nextEleMenu);

contextMenu.insertBefore(document.createXULElement("menuseparator"), nextEleMenu);

Отредактировано Andrey_Krropotkin (17-09-2019 07:45:32)

Отсутствует

 

№1375717-09-2019 08:47:31

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

Re: Custom Buttons

Andrey_Krropotkin
То je шик !
avizr3jm.png

Отсутствует

 

№1375817-09-2019 14:59:22

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

Re: Custom Buttons

Вот вы запарились с этим окошком... Использую кнопку только для перевода всей страницы, для окна QTranslate - даббл клик Ctrl рулит. Там и возможностей больше, а памяти он кушает минимально. Хотя, нет предела совершенству!))

скрытый текст
https://i.imgur.com/L6k7hrK.png

Отредактировано xrun1 (17-09-2019 15:00:05)

Отсутствует

 

№1375917-09-2019 22:45:23

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

Re: Custom Buttons

Dumby
Не знаете, почему поиск плагин в 69 невозможно сделать без https ? Могу сломать search-extensions и переделать на searchplugins, так настойки поиска не работают.
А в самих search-extensions только https...К примеру , http://seasonvar.ru/ , все никак...только https://seasonvar.ru/ , так сайт падает...Где плюсы новых версий?
Зато минусов, как грязи...

Отсутствует

 

№1376018-09-2019 04:52:01

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

Re: Custom Buttons

solombala пишет

почему поиск плагин в 69 невозможно сделать без https ?

Есть какая-то кнопка или вопрос чисто теоретический?
Если теоретический, то проблем нет. Пользуюсь ContextSearch web-ext Lite и через него поиск легко делается.
Ради интереса, сделал для http://seasonvar.ru/ --> картинка1 - добавлено в search.json.mozlz4, картинка2 - настройки в расширении.

Отсутствует

 

№1376118-09-2019 12:19:05

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

Re: Custom Buttons

А я не пользуюсь, ни поисковыми плагинами, ни WebExtensions для них.
Но тоже, ради интереса, попробовал — нормально установилось, и в 69, и в 71.

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

Выделить код

Код:

Services.search.addEngine("data:text/xml," + encodeURIComponent(`

    <SearchPlugin xmlns="http://www.mozilla.org/2006/browser/search/">
        <ShortName>seasonvar.ru</ShortName>
        <Description>Сериалы ТУТ! Сериалы онлайн смотреть бесплатно. Смотреть онлайн.</Description>
        <InputEncoding>UTF-8</InputEncoding>
        <Image width="16" height="16">data:image/x-icon;base64,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</Image>
        <Url type="text/html" method="GET" template="http://seasonvar.ru/search">
            <Param name="q" value="{searchTerms}"/>
        </Url>
        <SearchForm>http://seasonvar.ru/</SearchForm>
    </SearchPlugin>

`), null, null);

Andrey_Krropotkin пишет

помоги разобраться с еще одной для многопроцессорного

Я же давал ссылку чуть выше, или думаешь дело в другом?
Если я правильно понимаю, теперь, в многопроцессном Firefox, при попытке
загрузить в родительском процессе какой-нибудь документ с http(s) адресом,
или даже data: или blob: — nsDocShell будет показывать фигу.

То есть <iframe> не подходит, нужен <browser>, как в сайдбаре.
Могу попытаться сделать набросок, чтобы было от чего оттолкнуться.

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

Выделить код

Код:

(xul => {
    var hidden = true;
    var df = MozXULElement.parseXULToFragment(xul);
    var [splitter, box, menuitem] = df.children;
    
    var btn = box.querySelector("toolbarbutton");
    btn.handleCommand = () => splitter.hidden = box.hidden = hidden = !hidden;
    
    var popup = document.getElementById("tabContextMenu");
    popup.insertBefore(menuitem, popup.firstChild.nextSibling);

    var tab = box.querySelector("tab");
    var setTab = set => set
        ? gBrowser._tabForBrowser.set(tab.linkedBrowser = box.lastChild, tab)
        : gBrowser._tabForBrowser.delete(box.lastChild);
    setTab(true);

    var destroyBrowser = br => {
        br.messageManager.loadFrameScript(
            "data:,docShell.createAboutBlankContentViewer(null,null)", false
        );
        setTab(); br.remove();
    }
    var principal = {
        triggeringPrincipal: Services.scriptSecurityManager.getSystemPrincipal()
    };
    var getBrowser = Services.appinfo.browserTabsRemoteAutostart
        ? tab => {
            var br = box.lastChild;
            var type = tab.linkedBrowser.remoteType;
            if (br.remoteType != type) {
                destroyBrowser(br);
                br = br.cloneNode(false);
                if (type)
                    br.setAttribute("remote", true),
                    br.setAttribute("remoteType", type);
                else
                    br.removeAttribute("remote"),
                    br.removeAttribute("remoteType");
                box.append(br);
                setTab(true);
            }
            return br;
        }
        : () => box.lastChild;

    menuitem.handleCommand = () => {
        hidden && btn.handleCommand();
        var tab = TabContextMenu.contextTab;
        getBrowser(tab).loadURI(tab.linkedBrowser.currentURI.spec, principal);
    }
    addDestructor(() => {
        destroyBrowser(box.lastChild);
        for(var node of [splitter, box, menuitem]) node.remove();
    });
    document.getElementById("appcontent").append(df);
})(`
    <splitter id="SNote-splitter" orient="vertical" hidden="true"/>
    <vbox id="SNote-panel" height="300" hidden="true">
        <toolbox>
            <toolbar>
                <tabs flex="1">
                    <tab collapsed="true"/>
                </tabs>
                <toolbarbutton class="tabs-closebutton" 
                    oncommand="handleCommand();"
                    image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACt0lEQVQ4jaWSzUtUYRTGn/fcGZ25H+m9Iyne8fpFq4lGCsFFIW21NiKKuHIn4qpazDraabnMTVEh+Af0B0QIIohBowhlkM1MMTre+VLngzv3PW1SKWvVWR0eOL/zcM4jmBn/U4G/iTuzsyK7unoLUl4HABDtdExNbV1fXr60Tfzp4J1h3Dd1/ak1OHhN7+kBiHCaTsPd2NgrlMsP7x4fv/0nYE3XH9ix2GLbzIwQmvYbmCsVHL16xd+3tx/dOTl5dqbTWfPeMIavOs6COT0tmBmyWAS1toJaWyGLRbCUMKemxFXHWXhvGMOXACrw2BwdJYUITX190MbG4O/twf/yBdrYGJr6+6EQwbx3j1QhHv8GWDfNNjUavR3u6ACyWQRjMQRsG+rkJNSJCQRsG8FYDDKbRbi9Harj3F43zbYLB41Gr2bbRIUCFACnS0vwMhkEbBsB24aXyaCcSEDJZiFyOWidnYRGo/f8jQpQp9NTiFwOACCJACEuDsgMeXAAuC7YMECeBwWonwOaLOtT/evXMhTlSs00oS8vI2jbqGcyADOau7pgvHiB8vg4tMND1F233GRZn87pzIwtXX9eiEb5uLubC2/ecC2V4qOhIT4aGuJqKsX516/52HG4EI3ylq4/P5s7z8FHy2qXnvehOxTqDBGhFongiusCAMqWhVA+j5qU+Far/RDB4M2BfP7gUpCSLS03qr7/NiyEExEC6i+9AsBlRpU5FVaU+zdKpeSlHCSTSazOzW0XNW2gCjzZ9/3Pu77Pu77P+77/uQo8cTVt4OXMzM7a2tpFlBOJhFhZWWkulUphz/NUKWWYmUPM3GwCKgBRAKoA6kRUI6JKIBCo6rpeGRkZqQlmRjqdxuLiIm1ublIul6NKpaI0Gg3yfV8AABFxMBiUoVBIRiIRPx6Py/n5eRmPx/ETBvM/dPD/rBwAAAAASUVORK5CYII="
                />
            </toolbar>
        </toolbox>
        <browser
            flex="1"
            type="content"
            id="SNote-browser"
            tooltip="aHTMLTooltip"
            disableglobalhistory="true"
            context="contentAreaContextMenu"
        />
    </vbox>

    <menuitem class="menuitem-iconic"
        id="TabSNote"
        oncommand="handleCommand();"
        label="Открыть в нижней панели"
        image="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAAZdEVYdFNvZnR3YXJlAHBhaW50Lm5ldCA0LjAuMjHxIGmVAAABKUlEQVQ4T6WS24qDMBRF/f9fHCi1ijHkQi7kRqJ7jpYZYSxMi8J6CezlyT7p6MNFXh5+wsvDT+hQ2opcn6TyJG7kJ4HwcYXxDcoWCJXhXD4E67r+y7IsKKUipYwQElpO7wtaW5BzRYwF3idYG5FCfE9w/PknHKC1R3D+EEi6j3LlhLQZs04YRcBjdrhPFrdB46tXuI/qEFykg0vUbqi/SF8hqG1utgkyJhUxyogHD+hnjzvz0MoegtPdqbRaGhKVFjytzG4BB8EtZqYx0fh8kmfBsqyote2Nh1CosARjAqR04BSeJoNhUOh7iWkQZ0Gtx7q2h2JMhFJ+DzO2hfUevt0Ehp7/FSxEo/ELVnokNSYkWlWwDk4ZaKEhGY0+crCBQ7H5EFwCuAK6b7kpsLGbUcTpAAAAAElFTkSuQmCC"
    />
`);

Andrey_Krropotkin пишет

и еще вот перестала правильно работать

Ну да, откуда "load" то возьмётся, load "там" остался.
Что-нибудь другое попробуй, типа

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

Выделить код

Код:

(num => {
    var lst = type => addEventListener(type, func, false, gBrowser.tabContainer);
    
    var func = e => e.detail.changed.includes("label") && num(e.target, e.target._tPos);
    lst("TabAttrModified");
    
    (func = () => gBrowser.visibleTabs.forEach(num))();
    for(var type of ["TabOpen", "TabClose", "TabMove"]) lst(type);
})(
    (tab, ind) => tab.label = (ind + 1) + "  \u202D" + tab.label.match(/(?:^\d+  \u202D)?(.+)/)[1]
);

Отсутствует

 

№1376218-09-2019 12:39:28

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

Re: Custom Buttons

Dumby
25c8adgc.png
Не слабо...Но если вставить в search-extensions , то рухнет...Все поисковики перед seasonvar - вставлены вручную и по умолчанию. Впрочем, итак нормально.
А, кнопку "видео в плеер"  нельзя уделать  под мульти?

Отсутствует

 

№1376318-09-2019 13:55:05

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

Re: Custom Buttons

Dumby спасибо разобрался

Отсутствует

 

№1376419-09-2019 10:16:51

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

Re: Custom Buttons

egorsemenov06 пишет

что то не работает

69

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

Выделить код

Код:

(sss => {
    var pref = `CB.${_id.slice(20)}.setStyleForPage`;
    var url = "data:text/css," + encodeURIComponent(this.Help);
    var args = [Services.io.newURI(url), sss.AGENT_SHEET];
    var reg = add => {
        var has = sss.sheetRegistered(...args);
        if (add) has || sss.loadAndRegisterSheet(...args);
        else has && sss.unregisterSheet(...args);
    }
    var setState = () => {
        var state = Services.prefs.getBoolPref(pref, false);
        this.icon.style.backgroundColor = state ? "#131d24" : "#ffeeaa";
        reg(state);
    }
    setState();
    this._handleClick = () => Services.prefs.setBoolPref(
        pref, !Services.prefs.getBoolPref(pref, false)
    );
    Services.prefs.addObserver(pref, setState, false);
    addDestructor(reason => {
        Services.prefs.removeObserver(pref, setState);
        reason[5] == "e" && reg();
    });
})(
    Cc["@mozilla.org/content/style-sheet-service;1"]
        .getService(Ci.nsIStyleSheetService)
);

Отсутствует

 

№1376519-09-2019 19:54:33

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

Re: Custom Buttons

Dumby Столкнулся с моментом упорядочить закладки. Был у меня старый скрипт от Alice0775, который он давно забросил - в контекстном меню закладок создавал пункт - Открыть в библиотеке, т.е. открывалось местоположение в библиотеке в развернутом дереве папок. Раньше им давно пользовался. Сейчас естественно не работает.

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

Выделить код

Код:

/*Initialization Code*/

//--------------------- Открыть в бибилиотеке в контекстном меню закладок
// @author         Alice0775
//https://github.com/alice0775/userChrome.js/blob/master/openLibraryContextMenu.uc.xul

(function () { 

 var openLibraryContextMenu = {
 node: null,
 organizer: null,
   get ios() {
    return Components.classes["@mozilla.org/network/io-service;1"]
                    .getService(Components.interfaces.nsIIOService);
  },

  get bmsvc() {
    return Components.classes["@mozilla.org/browser/nav-bookmarks-service;1"]
                  .getService(Components.interfaces.nsINavBookmarksService);
  },
 showOrganizer : function () {
    var view = PlacesUIUtils.getViewForNode(document.popupNode);
    this.node = view.selectedNode;
    var wm = Cc["@mozilla.org/appshell/window-mediator;1"].getService(Ci.nsIWindowMediator);
    this.organizer = wm.getMostRecentWindow("Places:Organizer");

    if (!this.organizer) {
      this.organizer = openDialog("chrome://browser/content/places/places.xul",
                             "", "chrome,toolbar=yes,dialog=no,resizable");
      this.organizer.addEventListener("load", this, false);
    } else {
      this.selectNode(this.node);
    }
  },
 
getParentFolderByItemId: function(aNode){
    var parentFolderId = null;
    var itemType = PlacesUtils.nodeIsFolder(aNode) ||
                   PlacesUtils.nodeIsTagQuery(aNode) ? "folder" : "bookmark";
    var concreteId = PlacesUtils.getConcreteItemId(aNode);
    var isRootItem = PlacesUtils.isRootItem(concreteId);
    var itemId = aNode.itemId;
    if (isRootItem || PlacesUtils.nodeIsTagQuery(aNode)) {
    itemId = concreteId;
    }
    parentFolderId = this.bmsvc.getFolderIdForItem(itemId);
    return parentFolderId;
  },

  selectNode: function(aNode) {
    var itemType = PlacesUtils.nodeIsFolder(aNode) ||
                   PlacesUtils.nodeIsTagQuery(aNode) ? "folder" : "bookmark";
    var concreteId = PlacesUtils.getConcreteItemId(aNode);
    var isRootItem = PlacesUtils.isRootItem(concreteId);
    var itemId = aNode.itemId;
    if (isRootItem || PlacesUtils.nodeIsTagQuery(aNode)) {
      itemId = concreteId;
    }
    var isFolder = PlacesUtils.nodeIsFolder(aNode);
    if (isFolder) {
      this.selectLeftPane([itemId]);
    } else if (PlacesUtils.nodeIsQuery(aNode)) {
      var folderId = aNode.parent.itemId;

      if (folderId){
        this.selectLeftPane([folderId]);
      }
      this.selectRightPane([itemId]);
    } else {
      var folderId = this.getParentFolderByItemId(aNode);
      if (folderId){
        this.selectLeftPane([folderId]);
      }
      this.selectRightPane([itemId]);
    }

    setTimeout(function(self){
      self.organizer.window.focus();
    }, 1, this);
  },

selectRightPane: function(rightPaneItemIds) {
    var places = this.organizer.document.getElementById("placeContent");
    places.selectItems(rightPaneItemIds, true);
    var tbo = places.treeBoxObject;
    tbo.ensureRowIsVisible(places.currentIndex);
  },

  selectLeftPane: function(leftPaneItemIds) {
    var places = this.organizer.document.getElementById("placesList");
    places.selectItems(leftPaneItemIds, true);
    var tbo = places.treeBoxObject;
    tbo.ensureRowIsVisible(places.currentIndex);
  },

 selectOnLoad: function() {
    setTimeout(function(self){
      self.selectNode(self.node);
    }, 1, this);
    this.organizer.removeEventListener("load", this, false);
  },

handleEvent: function(event){
    switch (event.type){
      case 'load':
        this.selectOnLoad(event);
        break;
    }
  }  
}
if ( document.getElementById("placesContext_manageFolder") ) return; 

  var copyBothMenuItem = document.createXULElement("menuitem");
    copyBothMenuItem.id = "placesContext_manageFolder";
    copyBothMenuItem.setAttribute("label", "Открыть в библиотеке");
    copyBothMenuItem.setAttribute("selection", "bookmark|folder|query|livemark/feedURI");
    copyBothMenuItem.setAttribute("closemenu", "single");
   copyBothMenuItem.addEventListener("command", function () { openLibraryContextMenu.showOrganizer(); });
  
     var copyMenuItem = document.getElementById("placesContext_openSeparator");
     copyMenuItem.parentNode.insertBefore(copyBothMenuItem, copyMenuItem); 
     
})();


У меня такая просьба или подправить (но Вы не любите чужие мысли, тем более там многое уже не работает) или накидать новую для многопроцессорного. Буду очень признателен.

Отсутствует

 

№1376620-09-2019 14:06:55

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

Re: Custom Buttons

Andrey_Krropotkin пишет

накидать новую для многопроцессорного

Вот причём здесь многопроцессность

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

Выделить код

Код:

(popup => addEventListener("popupshowing", {

    openFoldersInRightPane: false,

    handleEvent() {
        if (this.shouldHide) return;
        var menuitem = document.createXULElement("menuitem");
        menuitem.setAttribute("label", "Открыть в библиотеке");
        menuitem.setAttribute("oncommand", "openInLibrary();");
        menuitem.setAttribute("id", "placesContext_open:library");
        popup.querySelector("#placesContext_openSeparator").before(menuitem);
        addDestructor(() => menuitem.remove());
        this.handleEvent = e => e.target == popup && (
            menuitem.hidden = menuitem.disabled = this.shouldHide
        );
        menuitem.openInLibrary = () => {
            var win = Services.wm.getMostRecentWindow("Places:Organizer");
            if (win) return win.focus(this.onLibrary(win));
            win = openDialog(
                "chrome://browser/content/places/places.xul",
                "", "chrome,toolbar=yes,dialog=no,resizable"
            );
            win.addEventListener("pageshow", () => this.onLibrary(win), {once: true});
        }
    },
    get shouldHide() {
        var tn = popup.triggerNode;
        if (tn.id == "PlacesChevron") return true;
        var node = tn._placesNode || popup._view.result.root;
        if (!node) return true;
        this.data = [
            node.bookmarkGuid,
            node.parent && node.parent.bookmarkGuid,
            PlacesUtils.nodeIsFolder(node)/* || PlacesUtils.nodeIsQuery(node)*/,
            node.pageGuid
        ];
        return false;
    },
    async onLibrary(win) {
        var [guid, parentGuid, isFolder, pageGuid] = this.data;
        var list = win.document.getElementById("placesList");
        var tree = win.document.getElementById("placeContent");

        var onlyLeft = isFolder && !this.openFoldersInRightPane;
        var search = tree.result.root.uri.startsWith("place:terms=");
        var vRoot = PlacesUtils.virtualAllBookmarksGuid;

        if (!onlyLeft || search) {
            if (PlacesUtils.bookmarks.userContentRoots.includes(guid))
                parentGuid = vRoot;
            else if (!parentGuid)
                parentGuid = (await PlacesUtils.bookmarks.fetch(guid)).parentGuid;
        }
        if (search) {
            var trgGuid = onlyLeft ? guid : parentGuid;
            if (PlacesUtils.getConcreteItemGuid(list.selectedNode) == trgGuid)
                list.selectItems([vRoot]);
            else {
                var rows = list.view._rows, lastRow = rows[rows.length - 1];
                if (lastRow.bookmarkGuid == vRoot)
                    lastRow.containerOpen = true;
            }
        }
        if (onlyLeft) {
            list.selectItems([guid]);
            return list.focus(this.scroll(list));
        }
        list.selectItems([parentGuid]);
        this.scroll(list);

        if (guid) tree.selectItems([guid]);
        else if (pageGuid) {
            var ind = tree.view._rows.findIndex(
                r => r.pageGuid && r.pageGuid == pageGuid
            );
            if (ind != -1)
                tree.view.selection.clearSelection(),
                tree.view.selection.rangedSelect(ind, ind, true);
        }
        await new Promise(resolve => setTimeout(resolve, 100));
        tree.focus(this.scroll(tree));
    },
    scroll(tree) {
        var pos = .35;
        var visibleRows = tree.getPageLength();
        var ind = tree.view.selection.currentIndex;
        var first = tree.getFirstVisibleRow();
        var newFirst = ind - pos*visibleRows + 1;
        tree.scrollByLines(Math.round(newFirst - first));
    }
}, false, popup || 1))(document.getElementById("placesContext"));

Отсутствует

 

№1376720-09-2019 15:10:19

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

Re: Custom Buttons

Dumby большое спасибо

Отсутствует

 

№1376821-09-2019 09:19:57

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

Re: Custom Buttons

Dumby подскажи, вот есть такой код

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

Выделить код

Код:

// добавить страницу в закладки в указанной папке ....
   function addBookmark(folder, id) {
      var title = gBrowser.selectedTab.label;
      var folderId = PlacesUtils.getConcreteItemId(folder);
      var index = id ? PlacesUtils.bookmarks.getItemIndex(id) + 1 : 0;
      var readOnlyFolder = PlacesUtils.nodeIsQuery(folder) ||
                           PlacesUtils.annotations.itemHasAnnotation(folderId, PlacesUtils.LMANNO_FEEDURI);
      if ( !readOnlyFolder )
           PlacesUtils.bookmarks.insertBookmark(folderId, gBrowser.currentURI, index, title);


можно как-то по другому "title" обозначить. Проблема в том что при включенной нумерации табов, сохраняется название вместе с нумерацией, если я нажимаю на штатную кнопку "добавить страницу в закладки", то сохраняется без нумерации

Отсутствует

 

№1376921-09-2019 12:15:58

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

Re: Custom Buttons

Andrey_Krropotkin пишет

если я нажимаю на штатную кнопку "добавить страницу в закладки", то сохраняется без нумерации

Что мешает посмотреть как это делает браузер?
Вот, цитата из кода PlacesCommandHook.bookmarkPage()

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

Выделить код

Код:

async bookmarkPage() {
    let browser = gBrowser.selectedBrowser;
    let url = new URL(browser.currentURI.spec);
    .....
      let isErrorPage = false;
      if (browser.documentURI) {
        isErrorPage = /^about:(neterror|certerror|blocked)/.test(
          browser.documentURI.spec
        );
      }

      try {
        if (isErrorPage) {
          let entry = await PlacesUtils.history.fetch(browser.currentURI);
          if (entry) {
            info.title = entry.title;
          }
        } else {
          info.title = browser.contentTitle;
        }
        info.title = info.title || url.href;


А можно, наверно, наоборот,
иначе устанавливать название вместе с нумерацией
скрытый текст

Выделить код

Код:

var tab = gBrowser.selectedTab;

tab.textLabel.textContent = "bla";

alert(tab.label);

Отсутствует

 

№1377022-09-2019 12:44:55

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

Re: Custom Buttons

Здравствуйте, у всех неподписанные дополнения пашут? вроде бы они пашут но иконок нет, вот CB пашет и другие но иконок(пробовал вызвать через настройки, так окно не разворачивается будто 0px).

Отсутствует

 

№1377122-09-2019 13:23:29

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

Re: Custom Buttons

func4ptch4
AGENT_SHEET и этого все-равно мало . Binding - menu.xml и т.д.

Отсутствует

 

№1377223-09-2019 11:28:30

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 56.0

Re: Custom Buttons

Dumby Вы бы не могли пожалуйста, починить эту кнопку для 68 версии, если можно.
https://forum.mozilla-russia.org/viewtopic.php?id=59458

Отсутствует

 

№1377323-09-2019 21:36:45

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

Re: Custom Buttons

Dumby ради интереса попытался создать кнопку в URL-bar, там где многоточие

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

Выделить код

Код:

if ( document.getElementById("reloadButton") ) return; 
var icon1="блаблабла"; 
  
   var reButton = document.createXULElement("toolbarbutton");
   reButton.setAttribute("class", "subviewbutton subviewbutton-iconic pageAction-panel-button");
   reButton.setAttribute("id", "pageAction-panel-reloadButton");
   reButton.setAttribute("label", "Обновить");
   reButton.setAttribute("command", "Browser:ReloadOrDuplicate");
   reButton.setAttribute("image", icon1);
Варианты: 
1. const contextMenu = document.getElementById('pageAction-panel-bookmark')
   contextMenu.parentNode.insertBefore(reButton, contextMenu);
2. const contextMenu = document.getElementById("pageActionPanelMainView"); 
   contextMenu.appendChild( reButton );


В первом варианте при запуске браузера пишет const contextMenu = null, при переоткрытии кнопки все появляется.
Во втором варианте кнопка появляется сразу, но находится не где все кнопки - во vbox.
Что я хочу добиться, чтобы у кнопки появилось контекстное меню -  "Добавить на панель адреса" и "Удалить с панели адреса" и естественно чтобы копки появлялись URL-bar
Если сравнивать атрибуты одной и той же кнопки допустим - копировать ссылку
скрытый текст

Выделить код

Код:

Там где многоточие:
toolbarbutton [348×24]
namespaceURI: XUL
margin: 0
border: 0
padding: 4px 12px
id = pageAction-panel-copyURL
class = subviewbutton subviewbutton-iconic pageAction-panel-button
actionid = copyURL
label = Копировать ссылку

URL-bar:
image [24×24]
namespaceURI: XUL
margin: 0
border: 0
padding: 4px
id = pageAction-urlbar-copyURL
class = urlbar-icon urlbar-page-action
actionid = copyURL
aria-label = Копировать ссылку
role = button
tooltiptext = Копировать ссылку


Я пытался разобраться с browser-pageActions.js, но что-то не получается.
Можете ли Вы привести простейший пример такой кнопки?

Отсутствует

 

№1377424-09-2019 15:27:55

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

Re: Custom Buttons

Stkvsky пишет

Dumby Вы бы не могли пожалуйста, починить эту кнопку для 68 версии, если можно.
https://forum.mozilla-russia.org/viewtopic.php?id=59458

У меня есть похожая, может подойдёт

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

Выделить код

Код:

((popup, {lastChild} = popup, pref = "CB.bookmarkFolderGuidForSaving") =>
addDestructor(reason => reason == "delete" && Services.prefs.clearUserPref(pref)) +
addEventListener("popupshowing", {
    index: 0, // 0 - первой, PlacesUtils.bookmarks.DEFAULT_INDEX - последней
    width: 500,
    height: 640,
    nodePosition: .35,
    handleEvent(e) {
        if (this.shouldHide) return;
        var menuitem = document.createElementNS(xulns, "menuitem");
        menuitem.id = "context-addBookmark";
        menuitem.className = "menuitem-iconic";
        menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACD0lEQVR42oWTXUhTYRiAP89qziAYepG6TfAiyV1JsFojMJrVjf3dDOsmMoOwCwnSXLSJXgWDqAWBF7aGoFGGV0EUrL9FERoh1bQsqeiXfrzoB0N6es8528ncaC88fOfwnff53vN976eUUprafJk8lPIKS1XRkI8LRVayUVgmLBFsQklBwfhb8rAkRauSidQLDK49/zvqFKmqxBKcn4BzDzBGnU39BVZfTMOxQ6ZIXk6msdh7wUz+9IP/RraaLYYgfAUL73Fz8tJjs5rBh3B2HPrvQ/P+N8TvYJAVdBqCfRcxWH8aYm0dpCIRxvr6SG7bSWLrDsZ6e7ke7SESaiV61UoeFVoMwfYEBrGWNr6NjEAmY5JKmUxPw9QU35NJDq/ekBOcEqoNQSAOnh5Ih0IwPAwJsQ0MSP2DMDTEfDTKV7+f904nN12uBavr/SECZ6dZ1u11Aejqgu5u2ZAwv9vbmfP5mLXZeK0UrzSNGy53bnWXdYw6K47CEX8znwMB5oNBvtTX87G0lA+SmEueqazkYHWdLtgl1OVaybvwfPd41vLI42HGbicjiZPCy7IyntTUcKBqpZ58Iru61dZ6a64RwkJMmGi022dv1dbyrKKCp+XlpOW5yeH4KXPvhMbs3fgndJtDqDJ3VjX4NO3MqNs9J/xapWn3sv/dlJfcGr+rFbijunC5EBQ6hN2C27j6i+IP/uDMhPNYgHUAAAAASUVORK5CYII=");
        menuitem.setAttribute("oncommand", "linkedObject.oncommand(event);");
        menuitem.linkedObject = this;
        menuitem.oncontextmenu = e => this.pick(e.preventDefault());

        lastChild.after(menuitem);
        addDestructor(() => menuitem.remove());
        (this.handleEvent = e => e.target == popup
            && !(menuitem.hidden = this.shouldHide)
            && this.update(menuitem)
        )(e);
    },
    ons: ["isContentSelected", "onTextInput", "onImage", "onVideo", "onCanvas", "onAudio"],
    get shouldHide() {
        if (gContextMenu.onLink) return false;
        return this.ons.some(on => gContextMenu[on]);
    },
    oncommand(e) {
        this[e.ctrlKey || e.shiftKey ? "pick" : "bookmark"](e.target);
    },
    get guid() {
        return Services.prefs.getStringPref(pref, PlacesUtils.bookmarks.toolbarGuid);
    },
    async update(menuitem) {
        var info = await PlacesUtils.bookmarks.fetch(this.guid);
        var title = PlacesUtils.bookmarks.getLocalizedTitle(info);
        menuitem.label = "Добавить закладку в: " + (
            menuitem.folderName = title || "[без заголовка]"
        );
    },
    pick() {
        var features = "chrome,all,resizable,centerscreen,modal";
        window.openDialog(this.url, "_blank", features, this.guid);
    },
    bookmark({folderName}) {
        if (gContextMenu.onLink) {
            var url = gContextMenu.linkURL;
            var title = gContextMenu.linkText();
        } else {
            var url = gBrowser.currentURI.spec;
            var title = gBrowser.contentTitle || gBrowser.selectedTab.label;
        }
        var info = {url, title, parentGuid: this.guid, index: this.index};
        PlacesUtils.bookmarks.insert(info).then(
            () => this.notify(title, "Добавил закладку в папку: " + folderName),
            err => this.notify("Ошибка", err)
        );
    },
    get alert() {
        var as = this.as = Cc["@mozilla.org/alerts-service;1"]
            .getService(Ci.nsIAlertsService);
        this.alertName = _id + "-bookmark-alert";
        delete this.alert;
        return this.alert = as.showAlertNotification
            .bind(as, "chrome://global/skin/icons/warning.svg");
    },
    notify(title, msg) {
        this.alert(title, msg, false, null, null, this.alertName);
        setTimeout(() => this.as.closeAlert(this.alertName), 1800);
    },
    get url() {
        var xul =
            `<?xml version="1.0"?>
            <?xml-stylesheet href="chrome://global/skin/" type="text/css"?>
            <?xml-stylesheet href="chrome://browser/content/places/places.css"?>
            <?xml-stylesheet href="chrome://browser/skin/places/places.css"?>
            <?xml-stylesheet href="chrome://browser/skin/places/tree-icons.css"?>
            <dialog xmlns="${xulns}"
                id="bookmark-folder-saver-dialog"
                windowtype="bookmark-folder-saver:dialog"
                title="Выберите папку"
                buttons="accept,cancel"
                onload="init();"
                width="${this.width}"
                height="${this.height}">

                <script type="application/javascript" src="chrome://global/content/globalOverlay.js"/>
                <script type="application/javascript" src="chrome://browser/content/utilityOverlay.js"/>
                <script type="application/javascript"><![CDATA[
                    ChromeUtils.defineModuleGetter(window, "PlacesUtils", "resource://gre/modules/PlacesUtils.jsm");
                    ChromeUtils.defineModuleGetter(window, "PlacesUIUtils", "resource:///modules/PlacesUIUtils.jsm");
                    ChromeUtils.defineModuleGetter(window, "PlacesTransactions", "resource://gre/modules/PlacesTransactions.jsm");
                    ChromeUtils.import("resource://gre/modules/XPCOMUtils.jsm");
                    XPCOMUtils.defineLazyScriptGetter(window, "PlacesTreeView", "chrome://browser/content/places/treeView.js");
                    XPCOMUtils.defineLazyScriptGetter(
                        window,
                        ["PlacesInsertionPoint", "PlacesController", "PlacesControllerDragHelper"],\n\
                        "chrome://browser/content/places/controller.js"\n\
                    );
                ]]></script>
                <script type="application/javascript" src="chrome://browser/content/places/places-tree.js"/>

                <tree id="tree" type="places" is="places-tree"
                    place="place:type=${
                        Ci.nsINavHistoryQueryOptions.RESULTS_AS_ROOTS_QUERY
                    }&amp;excludeItems=1&amp;excludeQueries=1"
                    hidecolumnpicker="true" seltype="single" flex="1">
                    <treecols>
                        <treecol id="title" flex="1" primary="true" hideheader="true" />
                    </treecols>
                    <treechildren />
                </tree>
                <script type="application/javascript"><![CDATA[
                    var tree = document.getElementById("tree");
                    function init() {
                        tree.selectItems([window.arguments[0]]);
                        var ind = tree.view.selection.currentIndex;
                        ind != -1 && setTimeout(() => {
                            if ("nsITreeBoxObject" in Ci) {
                                var tbo = tree.treeBoxObject;
                                var visibleRows = tbo.height/tbo.rowHeight;
                            } else {
                                var tbo = tree;
                                var visibleRows = tbo.getPageLength();
                            }
                            var cur = tbo.view.selection.currentIndex;
                            var first = tbo.getFirstVisibleRow();
                            var newFirst = cur - ${this.nodePosition}*visibleRows + 1;
                            tbo.scrollByLines(Math.round(newFirst - first));
                        }, 0);
                        var onKeydown = e => e.ctrlKey && e.key == "Enter" && !e.shiftKey
                            && document.documentElement.acceptDialog(e.stopPropagation());
                        addEventListener("keydown", onKeydown, true);
                        addEventListener("dialogaccept", dialogCallback);
                        window.onunload = () => {
                            removeEventListener("keydown", onKeydown, true);
                            removeEventListener("dialogaccept", dialogCallback);
                        }
                    }
                    function dialogCallback() {
                        var ind = tree.view.selection.currentIndex;
                        if (ind == -1) return;
                        var item = tree.view.nodeForTreeIndex(ind);
                        item && Services.prefs.setStringPref(
                            "${pref}", PlacesUtils.getConcreteItemGuid(item)
                        );
                    }
                ]]></script>
            </dialog>`;
        var url, type = "application/vnd.mozilla.xul+xml";
        if (parseInt(Services.appinfo.platformVersion) >= 69 && Services.appinfo.browserTabsRemoteAutostart) {
            url = `chrome://custombuttons/content/cbfolderpicker${Date.now()}.xul`;
            var ams = Cc["@mozilla.org/addons/addon-manager-startup;1"].getService(Ci.amIAddonManagerStartup);
            this.helper = ams.registerChrome(
                Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)),
                [["override", url, `data:${type},${encodeURIComponent(xul)}`]]
            );
            addDestructor(this.helper.destruct);
        } else {
            url = URL.createObjectURL(new Blob([xul], {type}));
            addDestructor(() => URL.revokeObjectURL(url));
        }
        delete this.url; return this.url = url;
    }
}, false, popup || 1))(document.getElementById("contentAreaContextMenu"));

Andrey_Krropotkin пишет

Можете ли Вы привести простейший пример такой кнопки?

Могу, наверно

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

Выделить код

Код:

((id, g) => addDestructor(reason => id in g && g[id].destroy(reason)) || id in g || ({
    actions: [{
        title: "Обновить",
        tooltip: "tooltip",
        iconURL: "chrome://browser/content/robot.ico",
    
        id: "reloadButton",
        _insertBeforeActionID: "copyURL",
    
        onCommand: (e, btn) => e.view.BrowserReloadOrDuplicate(e)
    }],
    init() {
        g[id] = this;
        this.actions = this.actions.map(action => {
            action.extensionID = "custombuttons@xsms.org";
            return g.PageActions.addAction(new g.PageActions.Action(action));
        });
    },
    destroy(reason) {
        if (reason[5] != "e") return;
        delete g[id];
        for(var action of this.actions) action.remove();
    }
}).init())(
    "CBPageActionsMaker", Cu.import("resource:///modules/PageActions.jsm", {})
);

Отсутствует

 

№1377524-09-2019 16:21:28

Stkvsky
Участник
 
Группа: Members
Зарегистрирован: 26-06-2012
Сообщений: 1700
UA: Firefox 56.0

Re: Custom Buttons

Dumby пишет

У меня есть похожая, может подойдёт

Супер, спасибо большое.

Отсутствует

 

Board footer

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