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

Заказывай стафф с атрибутикой Mozilla и... пусть все вокруг завидуют тебе! Быть уникальным - быть с Mozilla!

№1390129-11-2019 09:39:33

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

Re: Custom Buttons

Dumby
В 71 отвалилась хорошая кнопка BBCode

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

Выделить код

Код:

const data = this.Help.split("\n");

const names = ["menupopup", "hbox", "popupset", "button"];
const btnAttrs = ["label", "tooltiptext", "value1", "value2", "popup", "image"];
const prefixId = "CB-BBCode-node";
const button = this;

function rep(str) { return str.replace(/%dot%/g, ".").replace(/%sym%/g, "|"); }
 
data.forEach(function(str) {
    if (!str) return;
    var nm = str.split(".").map(rep);

    var name = names[nm[0]];
    var id = parseInt(nm[1]) && (prefixId + nm[1]);
    var parent = document.getElementById(prefixId + nm[2]) || button;
    var attrs = nm[3] ? nm[3].split("|").map(rep) : [];

    var node = document.createElementNS(xulns,name);
    if (id) node.id = id;
    if (name == "button") {
        btnAttrs.forEach(function(attr, i) { attrs[i] && node.setAttribute(attr, ((attr == "label") ? " " : "") + attrs[i]) });
//        node.setAttribute("height", "8px");
        var p = node.getAttribute("popup");
        p && node.setAttribute("popup", prefixId + p);
    } else {
        if (name == "menupopup") node.setAttribute("style", "-moz-appearance: none; border: 1px solid gray");
        attrs.forEach(function(str) {
            var a = str.split("=");
            node.setAttribute(a[0], a[1]);
        });
    }
    parent.appendChild(node);
});
var popup = document.getElementById(prefixId + 1);
popup.setAttribute("oncommand", 'document.getElementById("' + button.id + '").handleClick(event)');

const btnIdPrefix = "cb-bbcode-button-";
const mid = " > .box-inherit.button-box > .button-icon { background-color: ";
const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
const type = sss.USER_SHEET;
var mp = document.getElementById(prefixId + 7);
var style = "";
Array.slice(mp.children).forEach(function(btn) {
    btn.setAttribute("image", "data:image/x-icon;base64,AAABAAEAIA4AAAEAIABgBwAAFgAAACgAAAAgAAAAHAAAAAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP8AAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAA/wAAAP8AAAD/AAAAAH////5////+f////n////5////+f////n////5////+f////n////5////+f////gAAAAA=");
    btn.setAttribute("value1", "color");
    var color = btn.getAttribute("value2");
    btn.id = btnIdPrefix + color.substring(1);
    style += "#" + btn.id + mid + color + " !important; }\n"
});
var cssURI;
setTimeout(function() {
    cssURI = makeURI("data:text/css," + encodeURIComponent(style), null, null);
    if (!sss.sheetRegistered(cssURI, type)) sss.loadAndRegisterSheet(cssURI, type);
}, 1000);

var hbox = document.getElementById(prefixId + 2);
this.handleClick = function(evt) {

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

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

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

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

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

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

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

    box.value = val;
    box.selectionStart = s;
    box.selectionEnd = s + ins.length;
//    box.focus();
}
button.onclick = function(e) {
    if (!e.button) document.getElementById(prefixId + 1).openPopup(button);
};
button.onDestroy = function() {
    if (cssURI && sss.sheetRegistered(cssURI, type)) sss.unregisterSheet(cssURI, type);
};


Можно ее реанимировать?

ЗЫ Так вы еще ко всему и автор этой кнопки)

Отредактировано Garalf (29-11-2019 09:49:05)

Отсутствует

 

№1390230-11-2019 10:51:18

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

Re: Custom Buttons

Garalf
Как насчёт заменить slice на from
И не автор, а утрамбовщик.

Отсутствует

 

№1390330-11-2019 12:49:42

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

Re: Custom Buttons

Dumby пишет:

И не автор, а утрамбовщик.

Самое то, что и надо)

Добавлено 30-11-2019 12:58:45
Dumby
И еще... очень нужная кнопка перестала работать в 72 - перевести в Google

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

Выделить код

Код:

/*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:3px;margin:0;z-index:99999;overflow:hidden;cursor:move;'+(typeof w.style.borderRadius === 'string' ? 'background-color:#f3f5f7;padding-top:4px;border-radius:4px;box-shadow:0 0 12px 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);
    };
    var img = doc.createElement('div');
    img.setAttribute('style', 'display:block;float:right;width:18px;height:18px;padding:0;margin:0;border:none;cursor:pointer;background-image:url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAQAAAD8x0bcAAAAZElEQVR42mNgGNyAGQixsVGU/AdCXjCbHczmxKaMFywlAlWiw6DAwIZNmQhYGqJEDWoqFiAGVmKKTwk73CRJ/Ep0GIyhbsPpO4hbIG4TwKaMk0EZ7hYBBk1cvmNDEmbDrmSwAADE8h10+qICXwAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAAAASUVORK5CYII=");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:16px 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);
    }
    var cnt = w.addEle(text, 'display:block;border:1px solid #aaa;margin:2px 0 1px 0;padding:4px;background-color:#fafcfe;color:#000;font:14px Times New Roman;width:240px;height:120px;overflow:auto;cursor:text;');
    w.addEle(status, 'display:table;color:#555;font:10px Times New Roman;width:auto;height:auto;padding:0;margin:0 2px;cursor:text;');
    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 = 50*i+'px';
                cnt.style.width = 100*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:#009;font:16px 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);

Отредактировано Garalf (30-11-2019 13:36:09)

Отсутствует

 

№1390430-11-2019 14:47:46

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

Re: Custom Buttons

Garalf
Может ContentData удалить

Отсутствует

 

№1390502-12-2019 11:53:43

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

Re: Custom Buttons

Garalf пишет:

В 71 отвалилась хорошая кнопка BBCode

Как она работает? В 70 - никак, что за мансы?

Отсутствует

 

№1390602-12-2019 15:16:21

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

Re: Custom Buttons

«Merge Date»

CB-0.0.7.0.0.{7-8}-fx.js

Выделить код

Код:

// CB-0.0.7.0.0.{7-8}-fx.js
(async re => {
    var gzip = "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";

    var sel = "Select";
    try {sel = Services.strings.createBundle("chrome://global/locale/commonDialogs.properties")
        .GetStringFromName(sel);} catch(ex) {}
    var picker = Cc["@mozilla.org/filepicker;1"].createInstance(Ci.nsIFilePicker);
    picker.init(window, sel + " CB 0.0.7.0.0.7", picker.modeOpen);
    picker.appendFilter(null, "custom_buttons-0.0.7.0.0.7-fx-*.xpi");
    await new Promise(resolve => picker.open(resolve));
    var {file} = picker; if (!file) return;
    var ln = file.leafName;
    if (!re.test(ln)) return alert("???\n" + ln);
    var {fileURL} = picker;

    var xpi = file.parent.clone();
    xpi.append(ln = ln.replace("7-", "8-"));
    file.copyTo(file.parent, ln);

    var obs = {}, data;
    var td = new TextDecoder(), te = new TextEncoder();
    var scs = Cc["@mozilla.org/streamConverters;1"].getService(Ci.nsIStreamConverterService);
    var sis = Cc["@mozilla.org/io/string-input-stream;1"].createInstance(Ci.nsIStringInputStream);
    var sl =  Cc["@mozilla.org/network/stream-loader;1"].createInstance(Ci.nsIStreamLoader);

    sis.data = atob(gzip);
    obs.onStreamComplete = (a, b, c, d, result) => data = td.decode(new Uint8Array(result));
    sl.init(obs);
    var converter = scs.asyncConvertData("gzip", "uncompressed", sl, null);

    converter.onStartRequest(null, null);
    var args = [null, null, sis, 0, sis.data.length];
    if (converter.onDataAvailable.length == 4) args.shift();
    converter.onDataAvailable(...args);
    converter.onStopRequest(null, null, null);

    var zw = Cc["@mozilla.org/zipwriter;1"].createInstance(Ci.nsIZipWriter);
    var mt = Date.now() * 1000, cp = zw.COMPRESSION_DEFAULT;
    var bootstrap = ln.includes("bootstrap");
    var prefix = "jar:" + fileURL.spec + "!/";
    var lr = /^¦(?:\d+)?$/, sep1 = "£", sep2 = "¥";

    zw.open(xpi, 0x04); // PR_RDWR
    for(var item of data.split(sep1)) {
        var [entry, val] = item.split(sep2);
        if (bootstrap && (entry == "manifest.json" || entry == "startup.jsm")) continue;
        if (val == "+") {
            zw.addEntryDirectory(entry, mt, false); continue;
        }
        if (zw.hasEntry(entry)) {
            if (val.includes("¦")) {
                var lines = val.split("\n");
                var oldLines = (await (await fetch(prefix + entry)).text()).split("\n");

                lines.forEach((line, ind) => {
                    if (lr.test(line)) lines[ind] = oldLines[
                        line.length == 1 ? ind : +line.slice(1)
                    ];
                });
                val = lines.join("\n");
            }
            zw.removeEntry(entry, false);
            if (val == "-") continue;
        }
        var stream = Cc["@mozilla.org/io/string-input-stream;1"]
            .createInstance(Ci.nsISupportsCString);
        stream.data = String.fromCharCode(...new Uint8Array(te.encode(val)));
        zw.addEntryStream(entry, mt, cp, stream, false);
        stream.close();
    };
    zw.close(); xpi.reveal();
})(
    /^custom_buttons-0\.0\.7\.0\.0\.7-fx-(?:paxmod|bootstrap)\.xpi$/
);

Отсутствует

 

№1390702-12-2019 15:25:47

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

Re: Custom Buttons

solombala
Вот эту кнопку я проверял в твоей сборке 70.0.1 в однопроцессорном режиме работает
https://www.upload.ee/files/10799834/BBCode_70.rar.html

Отредактировано Garalf (03-12-2019 12:18:43)

Отсутствует

 

№1390802-12-2019 16:51:01

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

Re: Custom Buttons

Dumby
Этот код в config.js добавить надо?

Отсутствует

 

№1390902-12-2019 17:05:30

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

Re: Custom Buttons

Garalf пишет:

Этот код в config.js добавить надо?

Эээ...

Отсутствует

 

№1391002-12-2019 17:24:04

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

Re: Custom Buttons

Dumby
Спасибо. Действительно Эээ...)

Отсутствует

 

№1391102-12-2019 23:32:04

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

Re: Custom Buttons

BBCode у вас работает? что-то у меня не пашет, CB-0.0.7.0.0.{7-8}-fx и сделал правку... кнопка серая будто ошибка в коде, код в инициализаций.

Отредактировано func4ptch4 (02-12-2019 23:33:33)

Отсутствует

 

№1391203-12-2019 10:48:19

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

Re: Custom Buttons

func4ptch4
Присоединяюсь...Может хватит фуфло толкать? Где кнопка, мать вашу.Garalf Хрен ли ты там выложил , кнопка где?

Отсутствует

 

№1391303-12-2019 12:16:32

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

Отсутствует

 

№1391403-12-2019 18:19:03

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

Re: Custom Buttons

В [firefox] 71 перестал работать CB 0.0.7.0.0.6. Кто нибудь может объяснить как применить этот способ ?

Добавлено: разобрался, Dumby, спасибо за способ :beer:

Отредактировано kokoss (03-12-2019 19:02:56)

Отсутствует

 

№1391503-12-2019 19:00:21

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

Re: Custom Buttons

kokoss
Да ну, на...Ну есть рабочая СВ, эта шняга 71 не дает через прокси работать..Ну ... ее.

Отсутствует

 

№1391603-12-2019 19:02:28

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

Re: Custom Buttons

kokoss
Вот тебе новое CB для 71 и не парься)

Добавлено 03-12-2019 19:11:03
solombala
А у тебя есть рабочая кнопка Дв. клик по панели для 71

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

Отсутствует

 

№1391703-12-2019 19:26:24

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

Re: Custom Buttons

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

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

Отсутствует

 

№1391803-12-2019 19:50:58

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

Re: Custom Buttons

Garalf

Garalf пишет:

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

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

Отсутствует

 

№1391903-12-2019 20:12:52

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

Re: Custom Buttons

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

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

Выделить код

Код:

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

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

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

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


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


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

Выделить код

Код:

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


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

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

Отсутствует

 

№1392004-12-2019 12:36:14

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

Re: Custom Buttons

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

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

Отсутствует

 

№1392104-12-2019 12:43:43

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

Re: Custom Buttons

kokoss пишет:

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

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

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

Выделить код

Код:

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

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

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

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

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

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

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

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

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


Garalf пишет:

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

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

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

Выделить код

Код:

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

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


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

Отсутствует

 

№1392204-12-2019 13:16:25

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

Re: Custom Buttons

Dumby пишет:

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

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

Отсутствует

 

№1392304-12-2019 14:05:22

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

Re: Custom Buttons

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

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

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

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

Отсутствует

 

№1392404-12-2019 14:23:46

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

Re: Custom Buttons

Dumby

Dumby пишет:

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

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

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

Отсутствует

 

№1392504-12-2019 15:52:54

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

Re: Custom Buttons

kokoss и Garalf пишет:

не

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

solombala пишет:

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

А если так?

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

Выделить код

Код:

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

Отсутствует

 

Board footer

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