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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№822621-04-2020 16:13:12

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
не туда добавлено, ладно вот полный custom_script_win.js

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

Выделить код

Код:

// Этот скрипт работает в главном окне браузера если включено в настройках

var ucf_custom_script_win = {
    initialized: false,
    unloadlisteners: [],
    load: function() {
        if (this.initialized)
            return;
        this.initialized = true;
        // this.specialwidgets.constructor(); // <-- Special Widgets
        this.autohidesidebar.constructor(); // <-- Auto Hide Sidebar
        /* ************************************************ */
        this.googletranslate.constructor();
        // Здесь может быть ваш код который сработает по событию "load" не раньше

        /* ************************************************ */
        if (this.unloadlisteners.length < 1)
            return;
        window.addEventListener("unload", this, false);
    },
    handleEvent: function(event) {
        this[event.type](event);
    },
    unload: function() {
        window.removeEventListener("unload", this, false);
        this.unloadlisteners.forEach((str) => {
            try {
                this[str].destructor();
            } catch (e) {}
        });
    },
    googletranslate: {
        constructor: function() {
            var lc = navigator.lastClick = {}, w = null, xhtmlns = 'http://www.w3.org/1999/xhtml';
            var mouseUp = function(e) {
                if (e.button) return;
                lc.X = e.screenX - mozInnerScreenX;
                lc.Y = e.screenY - mozInnerScreenY;
            };
            gBrowser.tabpanels.addEventListener('mouseup', mouseUp, false);
            this.destructor = function() {
                gBrowser.tabpanels.removeEventListener('mouseup', mouseUp, false);
                if (w)
                    w.closeWin();
            };
            ucf_custom_script_win.unloadlisteners.push("googletranslate");
            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();};
                var mouseDown = function() {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);
                    gBrowser.tabpanels.removeEventListener('mousedown', mouseDown, false);
                    this.parentNode.removeChild(this);
                    w = null;
                };
                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.createElementNS(xhtmlns, '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:16px 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);
                gBrowser.tabpanels.addEventListener('mousedown', mouseDown, 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 = gContextMenu.selectionInfo.fullText, l = dir.split('|');
                var encTxt = encodeURIComponent(txt);
                var winWait = function(lng) {createWindow('', (lng == 'ru' ? 'Подождите идет перевод' : 'Wait, is going 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=gtx&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 urlt = "http://translate.google.com/translate_t?text="+encTxt+"&sl='  + langFrom_google_text + '&tl=' + langTo_google_text +'&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').replace(/\\n/g, "<br />"));
                                for (var i = 0, n; n = tmp[0][i]; i++) {
                                    if (n[0])result += n[0].toString();
                                };
                               status = tmp[8][0][0].toUpperCase() + ' -\u203A ' + l[1].toUpperCase();
                               createWindow(result, status, '<a href="'+urlt.replace(/&/g,'&amp;')+'" target="_blank" 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(e) {};
                    };
                    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 menuItem = document.createXULElement("menuitem");
            menuItem.setAttribute("id", "context-ru-google-translate");
            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("id", "context-en-google-translate");
            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);
        }
    },
    specialwidgets: {
        _timer: null,
        get Customizable() {
            delete this.Customizable;
            if ("createSpecialWidget" in CustomizableUI)
                return this.Customizable = CustomizableUI;
            var scope = null;
            try {
                scope = Components.utils.import("resource:///modules/CustomizableUI.jsm", {}).CustomizableUIInternal;
            } catch (e) { }
            return this.Customizable = scope;
        },
        constructor: function() {
            if (!("CustomizableUI" in window) || !("gCustomizeMode" in window))
                return;
            ucf_custom_script_win.unloadlisteners.push("specialwidgets");
            window.addEventListener("customizationready", this, false);
        },
        destructor: function() {
            window.removeEventListener("customizationready", this, false);
        },
        handleEvent: function(event) {
            this[event.type](event);
        },
        customizationchange: function() {
            clearTimeout(this._timer);
            this._timer = setTimeout(() => {
                this.createSpecialWidgets();
            }, 1000);
        },
        customizationready: function() {
            if (!this.Customizable)
                return;
            this.createSpecialWidgets();
            window.addEventListener("customizationchange", this, false);
            window.addEventListener("customizationending", this, false);
        },
        customizationending: function() {
            window.removeEventListener("customizationchange", this, false);
            window.removeEventListener("customizationending", this, false);
        },
        createSpecialWidgets: function() {
            try {
                var fragment = document.createDocumentFragment();
                if (this.findSpecialWidgets("spring")) {
                    var spring = this.Customizable.createSpecialWidget("spring", document);
                    spring.setAttribute("label", "Растягивающийся интервал");
                    fragment.appendChild(gCustomizeMode.wrapToolbarItem(spring, "palette"));
                }
                if (this.findSpecialWidgets("spacer")) {
                    var spacer = this.Customizable.createSpecialWidget("spacer", document);
                    spacer.setAttribute("label", "Интервал");
                    fragment.appendChild(gCustomizeMode.wrapToolbarItem(spacer, "palette"));
                }
                if (this.findSpecialWidgets("separator")) {
                    var separator = this.Customizable.createSpecialWidget("separator", document);
                    separator.setAttribute("label", "Разделитель");
                    fragment.appendChild(gCustomizeMode.wrapToolbarItem(separator, "palette"));
                }
                gCustomizeMode.visiblePalette.appendChild(fragment);
            } catch (e) {}
        },
        findSpecialWidgets: function(string) {
            try {
                if (!gCustomizeMode.visiblePalette.querySelector(`toolbar${string}[id^="customizableui-special-${string}"]`))
                    return true;
            } catch (e) {}
            return false;
        }
    },
    autohidesidebar: {
        sidebar: null,
        constructor: function() {
            var sidebar = this.sidebar = document.querySelector("#sidebar-box");
            if (!sidebar)
                return;
            ["dragenter", "drop", "dragexit"].forEach((type) => {
                sidebar.addEventListener(type, this, false);
            });
            ucf_custom_script_win.unloadlisteners.push("autohidesidebar");
        },
        destructor: function() {
            var sidebar = this.sidebar;
            ["dragenter", "drop", "dragexit"].forEach((type) => {
                sidebar.removeEventListener(type, this, false);
            });
        },
        handleEvent: function(event) {
            this[event.type](event);
        },
        dragenter: function() {
            if (!this.sidebar.hasAttribute("sidebardrag"))
            this.sidebar.setAttribute("sidebardrag", "true");
        },
        drop: function() {
            if (this.sidebar.hasAttribute("sidebardrag"))
            this.sidebar.removeAttribute("sidebardrag");
        },
        dragexit: function(event) {
            var sidebar = this.sidebar;
            var boxObj = sidebar.getBoundingClientRect(), boxScrn = !sidebar.boxObject ? sidebar : sidebar.boxObject;
            if ((!event.relatedTarget || event.screenY <= (boxScrn.screenY + 5) || event.screenY  >= (boxScrn.screenY + boxObj.height - 5)
                || event.screenX <= (boxScrn.screenX + 5) || event.screenX >= (boxScrn.screenX + boxObj.width - 5))
                && sidebar.hasAttribute("sidebardrag"))
                sidebar.removeAttribute("sidebardrag");
        }
    }
};

if (window.document.readyState != "complete") {
    window.addEventListener("load", function load() {
        window.removeEventListener("load", load, false);
        ucf_custom_script_win.load();
    }, false);
} else
    ucf_custom_script_win.load();

Отсутствует

 

№822721-04-2020 18:46:56

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
попробуйте пока вторую добавить в custom_script_win.js
ucf_custom_script_win.load

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

Выделить код

Код:

(this.ucf_img_scroll_zoom = {
            imgZoom: 190,   // на сколько увеличить изображение из меню
            scrollZoom: 20, // на сколько увеличивать/уменьшать колесиком мыши
            scrollTop: 1,   // или -1, переключение направление прокрутки для увеличение колёсиком
            init(that) {
                var popup = this.popup = document.querySelector("#contentAreaContextMenu");
                if (!popup) return;
                popup.addEventListener("popupshowing", this);
                that.unloadlisteners.push("ucf_img_scroll_zoom");
            },
            receiveMessage(msg) {
                var container = document.documentElement
                    .appendChild(document.createElement("div"));
                var image = container.appendChild(document.createXULElement("image"));
                image.style.cssText = "width: 100% !important; height: 100% !important;";
                image.setAttribute("validate", "never");

                var st = container.style;
                var dz = this.scrollZoom/100 * this.scrollTop;
                var currScale = 1, x, y, initialZoom = this.imgZoom/100 - 1;

                var hide, props = ["width", "height", "left", "top"], p = n => n + "px";
                var set = (...args) => props.forEach((prop, ind) => st[prop] = p(args[ind]));

                (hide = () => {
                    st.cssText = "position: fixed; display: none; z-index: 2147483647;";
                    currScale = 1;
                    image.src = null;
                })();
                container.onwheel = (e, ds = e.deltaY > 0 ? -dz : dz) => {
                    if (currScale < .15 && ds < 0) return;
                    st.transform = `scale(${currScale += ds})`;
                    var {width, height, left, top, bottom, right} = container.getBoundingClientRect();

                    if (height < innerHeight) {
                        if (top < 0) st.top = p(y -= top);
                        if (bottom > innerHeight) st.top = p(y -= bottom - innerHeight);
                    }
                    if (width < innerWidth) {
                        if (left < 0) st.left = p(x -= left);
                        if (right > innerWidth) st.left = p(x -= right - innerWidth);
                    }
                }
                (this.receiveMessage = msg => {
                    var {src, width, height, left, top} = msg.data;
                    image.src = src;
                    left -= mozInnerScreenX;
                    top -= mozInnerScreenY;

                    set(width, height, x = left, y = top);
                    st.display = "block";
                    container.onwheel(null, initialZoom);
                    window.addEventListener("mousedown", hide, {once: true, capture: true});
                })(msg);
            },
            handleEvent(e) {
                if (!gContextMenu.onImage) return;
                var menuitem = document.createXULElement("menuitem");
                menuitem.setAttribute("label", "Увеличить размер");
                menuitem.className = "menuitem-iconic";
                menuitem.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADZElEQVR42oXSe0xbVRwH8N8597a35e7SAmUFukGhY66AMiNzw4GvTCQLCssc4pQsmTOa+ERMlrktW1zigpnEuWn8x2eMmiVGMBDCFjS+cJHEDIk8RoSNV1+3tLWX3t72nnO8sETJFrfvP7/k5Pw+Ob9fDoLrYi8ow9GFUbq+5aRLrGraqQcX6hlF2wkFEWn6EDIJAyQy9+3VT58cWb6PrmvmjGZS/FSHlxbXtbtLobGqJlPKMhNepWb0V8hKpi8FNd/gzCCogbdmvtg/8C9gz9+Eor5x5nn2tDOZ98Dx2i3C/uYai9mOGCxiDQIIg1/PgUCEhyvDMox9PXYBkPzaaoAzAFL0yle7ShtqO/eWJ9w1vJ1oGsVzYhTNATMQG4Q1G40ldDw6PB339fs7VgMmA0jnHfioo6F9Z3tDYYJzKSZKMYcDvAILiICfZUNYEYFixMKpKBk8MfTTasBsACnngU/6Wg4+VL/VFSOmBHAYY1BAhzAvgmyMEIkh0EUOBD1Eu49eStwA5D3z4TcPv9TYdHvxEhXSGgaEIMkJkKAS+ONmSKYolOVqMBlRSd8bv8v/AQXlJoiHUE5rZ1tFa/Nhj1uVrCaNMoQxYSaIqDxAGqAuQ2XZ1iS8HUTpkZMXe1eATOdtiCcJblGe1a3PnWp0uEvfv3tbeX5RhSet/q3wxh6xgAncZUmw2hxEryQx9/LHE7I2RV5HNudGFAtcZsuQd919u/kiz56JOwobcjd6xerqKnB4HIB4RvMzCM1DGj8X0GD64pL2Xdf850z+4djKC8wl24XUpj1P75sdfe/+sSHoq3uQnSuwa+s2Vy5uubd2jQWUTAYchJK8HpyIzvv7p/rMkV/OzPeeGEWi+x6LufiR573h8VO7Zr4n9fEZNeiqXHOofFvPsKPkS1fKsX5JU6uNZQh8Wh/hRcuvOC3/fLXrcGj52yOo7zzU9udvbzbN9uglggK2MhsnvfiE0tY9tfed7vM98D+x53tx1DdG0Z2b97Ejf3SRSiGGCysyENvdoipZa4+/8NmPp8+N+Ei2ZEVpQhG71rdcqFFozD+xcoQugFUvlDS8wWsl8Uebk5C79ujjHwyc6R/309ysDBRauEzhJkG9ErAdG0xEe6yVkwqcr+549/zZgcmQ7pAEkH2TDG6RfwCoJI0uEWJP5QAAAABJRU5ErkJggg==");
                menuitem.setAttribute("oncommand", "handleCommand();");
                e.target.append(menuitem);
                menuitem.handleCommand = () => this.cmd();

                this.handleEvent = () => menuitem.hidden = !gContextMenu.onImage;
            },
            cmd() {
                var msg = this.msg = "UCF:GetImageScreenRectForMosuseZoom";
                var code = `(targetIdentifier => {
                    var image = ChromeUtils.import("resource://gre/modules/ContentDOMReference.jsm")
                        .ContentDOMReference.resolve(targetIdentifier);
                    var mm = image.ownerGlobal.docShell.messageManager;
                    var rect = image.getBoundingClientRect();
                    var win = image.ownerGlobal;
                    var x = rect.left, y = rect.top;
                    var parentFrame = win.frameElement;
                    while (parentFrame) {
                      win = parentFrame.ownerGlobal;
                      let cstyle = win.getComputedStyle(parentFrame);
                      let framerect = parentFrame.getBoundingClientRect();
                      x +=
                        framerect.left +
                        parseFloat(cstyle.borderLeftWidth) +
                        parseFloat(cstyle.paddingLeft);
                      y +=
                        framerect.top +
                        parseFloat(cstyle.borderTopWidth) +
                        parseFloat(cstyle.paddingTop);
                      parentFrame = win.frameElement;
                    }
                      x += win.mozInnerScreenX;
                      y += win.mozInnerScreenY;
                    var fullZoom = win.windowUtils.fullZoom;
                    mm.sendAsyncMessage("${msg}",
                        {
                            src: image.currentSrc,
                            left: x * fullZoom,
                            top: y * fullZoom,
                            width: rect.width * fullZoom,
                            height: rect.height * fullZoom,
                        }
                    );
                })(`;
                messageManager.addMessageListener(msg, this);

                (this.cmd = () => {
                    var {osPid} = gContextMenu.actor.manager.browsingContext.currentWindowGlobal;
                    if (osPid == -1) osPid = Services.appinfo.processID;
                    for(var ind = 0, len = Services.ppmm.childCount; ind < len; ind++) {
                        var pmm = Services.ppmm.getChildAt(ind);
                        if (pmm.osPid == osPid) break;
                    }
                    pmm.loadProcessScript("data:;charset=utf-8," + encodeURIComponent(
                        code + JSON.stringify(gContextMenu.targetIdentifier) + ")"
                    ), false);
                })();
            },
            destructor() {
                this.popup.removeEventListener("popupshowing", this);
                if (this.msg)
                    messageManager.removeMessageListener(this.msg, this);
            },
        }).init(this);

Отредактировано Vitaliy V. (11-03-2021 20:55:22)

Отсутствует

 

№822821-04-2020 21:09:09

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

contextsearch
ucf_custom_script_win.load

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

Выделить код

Код:

(this.contextsearch = {
    topic: "browser-search-engine-modified",
    hide: "browser.search.hiddenOneOffs",
    defaultImg: "chrome://browser/skin/search-engine-placeholder.png",
    searchSelect: null,
    popup: null,
    init(that) {
        var searchSelect = this.searchSelect = document.querySelector("#context-searchselect");
        if (!searchSelect)
            return;
        var popup = this.popup = searchSelect.closest("menupopup");
        popup.addEventListener("popupshowing", this);
        that.unloadlisteners.push("contextsearch");
    },
    destructor() {
        this.popup.removeEventListener("popupshowing", this);
        if (this.popupshowing == this.handler) {
            this.popup.removeEventListener("popuphidden", this);
            Services.obs.removeObserver(this, this.topic);
            Services.prefs.removeObserver(this.hide, this);
        }
    },
    handleEvent(e) {
        this[e.type](e);
    },
    popupshowing(e) {
        var popup = this.popup;
        var searchSelect = this.searchSelect;
        if (e.target != popup || searchSelect.hidden) return;

        var menu = document.createXULElement("menu");
        menu.className = "menu-iconic";
        var menupopup = document.createXULElement("menupopup");
        menu.append(menupopup);
        menu.ePopup = menupopup;
        searchSelect.style.setProperty("display", "none", "important");
        searchSelect.before(menu);
        menu.onclick = this.search.bind(this);
        this.handler = e => e.target != popup || (menu.hidden = searchSelect.hidden);
        this.handlerRebuild = e => this.handler(e) || this.rebuild(menu);
        this.popuphidden = ev => {
            if (ev.target != popup) return;
            menu.hidden = true;
        };
        this.popup.addEventListener("popuphidden", this);
        this.rebuild(menu);
    },
    async rebuild(menu) {
        var de = Services.search.defaultEngine;
        de = de.wrappedJSObject || de;
        this.setAttrs(menu, de, `Искать в ${de.name} или в ...`);
        menu.ePopup.textContent = "";
        var pref = Services.prefs.getStringPref("browser.search.hiddenOneOffs");
        var hiddenList = pref ? pref.split(",") : [];
        var engines = await Services.search.getVisibleEngines();
        for (let engine of engines.filter(e => !hiddenList.includes(e.name))) {
            if (engine == de) continue;
            var menuitem = document.createXULElement("menuitem");
            menuitem.className = "menuitem-iconic";
            this.setAttrs(menuitem, engine);
            menu.ePopup.append(menuitem);
        }
        this.popupshowing = this.handler;
        Services.obs.addObserver(this, this.topic, false);
        Services.prefs.addObserver(this.hide, this);
    },
    setAttrs(node, engine, label = engine.name) {
        node.engine = engine;
        node.setAttribute("label", label);
        node.setAttribute("image", engine.iconURI ? engine.iconURI.spec : this.defaultImg);
    },
    observe() {
        this.popupshowing = this.handlerRebuild;
        Services.obs.removeObserver(this, this.topic);
        Services.prefs.removeObserver(this.hide, this);
    },
    search(e) {
        var {engine} = e.target;
        if (!engine) return;
        var searchSelect = this.searchSelect;
        var submission = engine.getSubmission(
            searchSelect.searchTerms, null, "contextmenu"
        );
        if (submission) {
            let tab = gBrowser.addTab(submission.uri.spec, {
                postData: submission.postData,
                index: (gBrowser.selectedTab._tPos + 1),
                triggeringPrincipal: searchSelect.principal
            });
            if (e.button == 0)
                gBrowser.selectedTab = tab;
        }
        var popup = this.popup;
        e.button != 1 && popup.state == "open" && popup.hidePopup();
    }
}).init(this);

Отредактировано Vitaliy V. (06-02-2022 14:01:01)

Отсутствует

 

№822921-04-2020 23:51:56

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
эти коды не подходят для user_chrome_files
слишком много переделывать придется, так что я пас.
Но кнопка прокси есть у меня в расширении add_toolbar_buttons

Отсутствует

 

№823022-04-2020 00:37:01

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
Да эта тоже не слишком удобная, дело в том что
чтобы создать кнопку в user_chrome_files нужно использовать
метод CustomizableUI.createWidget в custom_script.js а это уже другая область,
этот код там просто так не заработает.
Если есть код где не нужно создавать кнопки,
ну или можно с кнопкой но где поменьше кода.

Вторую кнопку сделаю

Отсутствует

 

№823122-04-2020 15:47:31

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
то что обещал в custom_script.js

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

Выделить код

Код:

try {
    ((img, preventClearThumbs) => {
        CustomizableUI.createWidget({
            id: "bt-clear-history",
            label: "Очистить историю",
            tooltiptext: "Очистить историю",
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onCreated: function(bt) {
                bt.image = img;
            },
            onCommand: function(event) {
                var win = event.target.ownerDocument.defaultView;
                (preventClearThumbs || (g => {
                    var key = "onClearHistory", obs = g.PageThumbsHistoryObserver, func = obs[key];
                    return preventClearThumbs = () => obs[key] = () => obs[key] = func;
                })(Cu.import("resource://gre/modules/PageThumbs.jsm", {})))();
                win.PlacesUtils.history.clear();
                var closedTabCount = win.SessionStore.getClosedTabCount(win);
                while(closedTabCount--)
                    win.SessionStore.forgetClosedTab(win, 0);
                var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
                alertsService.showAlertNotification(img, "История Очищена!", "", false);
                win.setTimeout(()=> alertsService.closeAlert(), 2000);
            }
        });
    })("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5AQWDCgXFmePvgAABJ1JREFUWMO9l2tsFFUUx/93ZnZnd7ul2+2bR2VBEAVEUhoowSp+KMQIRatBxQgRDMEEjB8wJlUJ8YOPGDFqRECi1apAgNgIvvAByqNiG4iGSKGmtrvSdvva9+zO3HuPHxRTEdrShT3fJnPPPb/5z5z/PcMwKF6smI0qX2kFmFIKTdlfVrfPwnUOZfCFT0oYnV2bkn5/nQhH7296YCkyCtAa7EX/QOhbYSR0Ho3WEonsokwCfBjogiFFgySERSw6TSaNh79aXs0yBtBiCbSlrHYBaiYpVRGPP2mZpitjAADw0vmOVK/JtwGQIhGfKi2z+qcVSzIHEJKEhOCHLKJWklLl8fgaZnA9YwAAcDQcC5uSDgIgmTQWgKjyWM3izAHsDPTIoGnWEZAibtl4JLzRDlXPGAAACKKzppSNACCMxJ3SNOcfqKrKHMCh7pBpCPkRAEmWZROJ+MZxuU4bAByruQc/r7gPjcvTN6ohe/z1m0oLZmVnnVYZG8ts9ojNmz/H5nZ3E8kKknItQDuhaZ+Xf9JA11wBALAE60tK2guAyLLGAPQuTxonUt1dB5L+9nutgYHt4PzGIzU1uC4AC+fMYuR0HgbAAYLV012ZuhC4RcRjGgkBHgmP5bHYNrdquq8pwKlHaljTg0tnQND2XJdrBxizAQBJCdAgtYnAY6HK7HLnempZr40G4LJJPBIt4injGA+HxpAQV/p6CMWucO6yIjb+NnqeYPZR+7odysStRJSmAqELfm7298krFrcrXF9c0jv1qQnOaWUsx6EZDlj9r1ASS3n746yw0J4eAJcyKYn+vGxGvh4pWOeL3lqdlV+YZ+nKxT6SRg74wPssqVZ3nVjJtjxTkYYCBBOM/ReAManM8oR9G0q1KTORq9vk/1tYxDywBurB1U0bHivzWL9uwLzpnqv3gbWlRWx5Sf6bqlNbxbJUheXayT3XG/aV2Qqy3UIbdkBgNgmbt4Up+nMgHBLCiFStOojvTgZHbkQHX164aPpMzx6HEzaXk+wOh1A1ha7O4xSdQ/OcZ4q9nqDtYiR71236JvLOrrPDAzTvvj3r5knZPzp0ZXb6fmsHFD0hmb7vt99Dj85c8unwRvRDU0/CSIq9AGTaAGQCIursDASOnmxuHflZcLx+/sTyGbnNqsK86TKYljx36mx4waI1x3siBo3Mik1L+uMJvj9tAQipji7jha27W3sHFwcAdajE7v4klc/wdhZ47Q8xxvRRFuddPcnXPv4i8PaWDzr4pfeHBGjtSGDiOEdwSqnb43Zp84Z7Zf/agaSYEAgJSZGe/tR7dQ3+zbVvnDOueh64GHtenV10d2Vxg8uhzh3JektoF84HUHumpb2p8fRA25b6P+JXWquOZEN/ZzTuG+8+PqHYeZemsvzLgJMkMhlj/xxukgupfK/q3i9XP3vCHGrvEQEEghYaTwd7fePdh0sKnZPsGhsHMPb3nADOGNTOPuzjnHfE4ryp+Uzo6Sc2N332Vv0vIp6k0Y9kl4av2IY7yvNyVi67YU5JgXNyypQxLqWVl2OfTMx1bnXtka+lJNnmTxntQYtwnYMNeoBR/z/+Bdn0Q21KgEksAAAAAElFTkSuQmCC", null);
} catch(e) {}

egorsemenov06 пишет

Открыть в другом брузере

async_run_applications https://github.com/VitaliyVstyle/Vitali … xperiments
запуск приложений с аргументами, если нужно открыть текущую страницу
в аргументы добавляем %OpenCurrentURI
если ссылку из буфера то %OpenClipboardURI
ну и любые другие аргументы для конкретного приложения можно использовать

Отсутствует

 

№823223-04-2020 14:22:24

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06 пишет

Как прикрутить иконки к приложениям в async_run_applications

Разве что стилем, в расширении это не предусмотрено, то как сделано в вашей кнопке
подходит только для [windows]...

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

Выделить код

Код:

#u-external-application menuitem::before {
    width: 16px !important;
    height: 16px !important;
    display: -moz-box !important;
    margin-inline-start: 5px !important;/* отступ слева для иконок, для linux 0px */
    margin-inline-end: -21px !important;/* для linux -16px */
    position: relative !important;
    background-color: transparent !important;
    background-position: center !important;
    background-size: 16px !important;
    background-repeat: no-repeat !important;
}
/* далее пример */

#u-external-application menuitem[label="Открыть в Firefox"]::before {
    content: "" !important;
    background-image: url("data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><path d='M 2.438,0 C 1.087,0 0,1.088 0,2.438 V 45.56 C 0,46.91 1.087,48 2.438,48 H 45.56 C 46.91,48 48,46.91 48,45.56 V 2.438 C 48,1.088 46.91,0 45.56,0 Z' style='fill:rgb(146,69,101);fill-opacity:1;' /><path style='opacity:0.25;fill:rgb(0,0,0);' d='M 24,3 11.1,45 14.1,48 H 45.58 C 46.93,48 48,46.9 48,45.53 V 22.2 L 45,19.2 39,18 Z'/><path style='fill:rgb(255,255,255);' d='M 45,19.05 C 45.09,19.34 36.05,30.02 35.96,30.3 35.86,30.57 37.21,44.81 36.97,45 36.76,45.15 24.28,39.43 24,39.43 23.73,39.43 11.25,45.16 11.03,45 10.79,44.81 12.11,30.57 12.02,30.3 11.94,30.02 2.911,19.34 3.001,19.05 3.087,18.77 16.37,15.69 16.6,15.53 16.82,15.35 23.72,3 24,3 24.28,3 31.18,15.35 31.4,15.53 31.63,15.69 44.88,18.75 45,19.05' /></g></svg>") !important;
}

верхнее правило повторять не надо, только пример изменяя [label="Открыть в Firefox"]
и иконку

Отредактировано Vitaliy V. (23-04-2020 14:25:45)

Отсутствует

 

№823323-04-2020 21:27:32

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1635
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
А вы в свое расширение аргумент для открытия выделенного текста добавить можете? Что бы выделенный текст передавать во внешнюю программу.
   
А то с этим туго у расширений.
   
Есть несколько с установкой внешних модулей, например run-with, external-application и еще видел похожие.
Есть передача текста из редактируемых полей и даже с возвратом модифицированного текста textern. Что само по себе удивительно.
Есть передача ссылок или URL-а вкладки и таких расширений как грязи open in, open with.
   
А вот простой передачи выделенного текста с аргументами, без внешних модулей, не видел.

Отредактировано _zt (23-04-2020 21:29:35)

Отсутствует

 

№823424-04-2020 00:34:02

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06 пишет

Прокси
добавление прокси в контекстном меню

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

Выделить код

Код:

(this.contextproxy = {
            img: "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='16' width='16' viewBox='0 0 48 48'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(209, 8, 3);'/><path style='opacity:0.25;fill:black;' d='M 16.8,17.6 23.1,23.9 8,26 6.4,32.2 11.4,37.2 3.7,44.8 6.9,48 45,48 C 46.7,48 48,46.7 48,45 V 20 L 31.4,3.4'/><path style='fill:white;' d='M 17.4,3 C 16.7,3 16.2,3.82 16.2,4.91 V 15.9 C 16.2,17 16.7,17.8 17.4,17.8 H 30.6 C 31.3,17.8 31.8,17 31.8,15.9 V 4.91 C 31.8,3.82 31.3,3 30.6,3 H 17.4 M 22.4,20.5 V 23.7 H 6.41 V 32.2 H 9.35 V 28.2 H 22.4 V 32.4 H 25.5 V 28.2 H 38.5 V 32.4 H 41.5 V 23.7 H 25.5 V 20.5 H 22.4 M 4.23,35.1 C 3.55,35.1 3,35.9 3,37.1 V 43 C 3,44.1 3.55,45 4.23,45 H 12.1 C 12.8,45 13.3,44.1 13.3,43 V 37.1 C 13.3,35.9 12.8,35.1 12.1,35.1 H 4.23 M 19.9,35.1 C 19.2,35.1 18.7,35.9 18.7,37.1 V 43 C 18.7,44.1 19.2,45 19.9,45 H 27.8 C 28.5,45 29,44.1 29,43 V 37.1 C 29,35.9 28.5,35.1 27.8,35.1 H 19.9 M 35.9,35.1 C 35.2,35.1 34.7,35.9 34.7,37.1 V 43 C 34.7,44.1 35.2,45 35.9,45 H 43.7 C 44.4,45 45,44.1 45,43 V 37.1 C 45,35.9 44.4,35.1 43.7,35.1 H 35.9' /></g></svg>",
            init(that) {
                var contextMenu = this.contextMenu = document.querySelector("#contentAreaContextMenu");
                if (!contextMenu)
                    return;
                contextMenu.addEventListener("popupshowing", this);
                that.unloadlisteners.push("contextproxy");
            },
            destructor() {
                this.contextMenu.removeEventListener("popupshowing", this);
                this.contextMenu.removeEventListener("popuphiding", this);
            },
            handleEvent(e) {
                if (e.target != this.contextMenu || !gContextMenu.isContentSelected) return;
                var menuitem = document.createXULElement("menuitem");
                menuitem.setAttribute("label", "Добавить прокси");
                menuitem.className = "menuitem-iconic";
                menuitem.setAttribute("image", this.img);
                menuitem.onclick = this.addNewProxy.bind(this);
                (this.contextMenu.querySelector("menuseparator#context-sep-selectall") || this.contextMenu.lastElementChild).after(menuitem);
                this.popupshowing = evt => {
                    if (evt.target != this.contextMenu) return;
                    menuitem.hidden = !gContextMenu.isContentSelected;
                };
                this.popuphiding = evt => {
                    if (evt.target != this.contextMenu) return;
                    menuitem.hidden = true;
                };
                this.contextMenu.addEventListener("popuphiding", this);
                this.handleEvent = e => {
                    this[e.type](e);
                };
            },
            addNewProxy(e) {
                var sel = gContextMenu.selectionInfo.fullText;
                sel = sel.trim().replace(/\s+/g, ":");
                var prefs = Services.prefs, lab;
                if (sel.length < 6 && isFinite(sel)) {
                    lab = "порт", sel = +sel;
                    prefs.setIntPref("network.proxy.http_port", sel);
                    prefs.setIntPref("network.proxy.ssl_port", sel);
                    prefs.setIntPref("network.proxy.ftp_port", sel);
                    prefs.setIntPref("network.proxy.socks_port", sel);
                } else if (sel.length > 5 && !(/:/.test(sel)) && sel.split(".").length == 4) {
                    lab = "адрес";
                    prefs.setStringPref("network.proxy.http", sel);
                    prefs.setStringPref("network.proxy.ssl", sel);
                    prefs.setStringPref("network.proxy.ftp", sel);
                    prefs.setStringPref("network.proxy.socks", sel);
                } else if (sel.length > 5 && /:/.test(sel) && sel.split(":").length == 2 && sel.split(".").length == 4) {
                    lab = "адрес и порт";
                    var arr = sel.split(":"), IP = arr[0], port = +arr[1];
                    prefs.setIntPref("network.proxy.http_port", port);
                    prefs.setStringPref("network.proxy.http", IP);
                    prefs.setIntPref("network.proxy.ssl_port", port);
                    prefs.setStringPref("network.proxy.ssl", IP);
                    prefs.setIntPref("network.proxy.ftp_port", port);
                    prefs.setStringPref("network.proxy.ftp", IP);
                    prefs.setIntPref("network.proxy.socks_port", port);
                    prefs.setStringPref("network.proxy.socks", IP);
                } else
                   return;
                if (prefs.getIntPref("network.proxy.type") != 1)
                   prefs.setIntPref("network.proxy.type", 1);
                var mainPopupSet = document.querySelector("#mainPopupSet");
                var tooltip = document.createXULElement("tooltip");
                tooltip.style.cssText = "font-size: 1.2em !important; -moz-box-orient: horizontal; text-align: center; pointer-events: none; -moz-box-align: center !important;";
                tooltip.label = " Установлен " + lab + " прокси: " + sel;
                var image = document.createXULElement("image");
                image.setAttribute("src", this.img);
                tooltip.firstElementChild.before(image);
                mainPopupSet.append(tooltip);
                tooltip.openPopup(e.target.parentNode, "before_start");
                setTimeout(() => tooltip.remove(), 3000);
            }
        }).init(this);

Отредактировано Vitaliy V. (03-06-2021 14:23:46)

Отсутствует

 

№823524-04-2020 02:54:26

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1635
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
Для поисковика Everything. Если помните, вы мне делали биндинг, но 78 грядет и биндинг отвалится. Да и просто текст в блокнот отправлять можно было бы. Но главное поиск.

Отсутствует

 

№823624-04-2020 21:09:05

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
ну там вроде как комментарий есть // очистить кэш ....

или вот так вдруг ещё чего надумаете чистить

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

Выделить код

Код:

var itemsToClear = [
        "cookies",
        "history",
        "formdata",
        "sessions",
        "cache",
        "downloads",
        "offlineApps",
        "pluginData",
        "siteSettings",
];
var range = win.Sanitizer.getClearRange(4);
win.Sanitizer.sanitize(itemsToClear, {
        ignoreTimespan: !range,
        range,
});


удалите что не нужно из массива
и 4 замените на
0 - всё
1 - за час
2 - за 2часа
3 - за 4 часа
4 - за сегодня

Отредактировано Vitaliy V. (24-04-2020 21:37:54)

Отсутствует

 

№823724-04-2020 23:31:42

Vitaliy V.
Участник
 
Группа: Members
Зарегистрирован: 19-09-2014
Сообщений: 2186
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

egorsemenov06
Ну так я и дал код чтобы добавить туда...
Ну да ладно можно и лишнее убрать оттуда

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

Выделить код

Код:

try {
    ((img, preventClearThumbs) => {
        CustomizableUI.createWidget({
            id: "bt-clear-history",
            label: "Очистить историю",
            tooltiptext: "Очистить историю",
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onCreated: function(bt) {
                bt.image = img;
            },
            onCommand: function(event) {
                var win = event.target.ownerDocument.defaultView;
                (preventClearThumbs || (g => {
                    var key = "onClearHistory", obs = g.PageThumbsHistoryObserver, func = obs[key];
                    return preventClearThumbs = () => obs[key] = () => obs[key] = func;
                })(Cu.import("resource://gre/modules/PageThumbs.jsm", {})))();
                var itemsToClear = [
                    "history",
                    "cache",
                ];
                var range = win.Sanitizer.getClearRange(0);
                win.Sanitizer.sanitize(itemsToClear, {
                    ignoreTimespan: !range,
                    range,
                }).then(() => {
                    var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
                    alertsService.showAlertNotification(img, "История Очищена!", "", false);
                    win.setTimeout(()=> alertsService.closeAlert(), 2000);
                });
            }
        });
    })("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAA3XAAAN1wFCKJt4AAAAB3RJTUUH5AQWDCgXFmePvgAABJ1JREFUWMO9l2tsFFUUx/93ZnZnd7ul2+2bR2VBEAVEUhoowSp+KMQIRatBxQgRDMEEjB8wJlUJ8YOPGDFqRECi1apAgNgIvvAByqNiG4iGSKGmtrvSdvva9+zO3HuPHxRTEdrShT3fJnPPPb/5z5z/PcMwKF6smI0qX2kFmFIKTdlfVrfPwnUOZfCFT0oYnV2bkn5/nQhH7296YCkyCtAa7EX/QOhbYSR0Ho3WEonsokwCfBjogiFFgySERSw6TSaNh79aXs0yBtBiCbSlrHYBaiYpVRGPP2mZpitjAADw0vmOVK/JtwGQIhGfKi2z+qcVSzIHEJKEhOCHLKJWklLl8fgaZnA9YwAAcDQcC5uSDgIgmTQWgKjyWM3izAHsDPTIoGnWEZAibtl4JLzRDlXPGAAACKKzppSNACCMxJ3SNOcfqKrKHMCh7pBpCPkRAEmWZROJ+MZxuU4bAByruQc/r7gPjcvTN6ohe/z1m0oLZmVnnVYZG8ts9ojNmz/H5nZ3E8kKknItQDuhaZ+Xf9JA11wBALAE60tK2guAyLLGAPQuTxonUt1dB5L+9nutgYHt4PzGIzU1uC4AC+fMYuR0HgbAAYLV012ZuhC4RcRjGgkBHgmP5bHYNrdquq8pwKlHaljTg0tnQND2XJdrBxizAQBJCdAgtYnAY6HK7HLnempZr40G4LJJPBIt4injGA+HxpAQV/p6CMWucO6yIjb+NnqeYPZR+7odysStRJSmAqELfm7298krFrcrXF9c0jv1qQnOaWUsx6EZDlj9r1ASS3n746yw0J4eAJcyKYn+vGxGvh4pWOeL3lqdlV+YZ+nKxT6SRg74wPssqVZ3nVjJtjxTkYYCBBOM/ReAManM8oR9G0q1KTORq9vk/1tYxDywBurB1U0bHivzWL9uwLzpnqv3gbWlRWx5Sf6bqlNbxbJUheXayT3XG/aV2Qqy3UIbdkBgNgmbt4Up+nMgHBLCiFStOojvTgZHbkQHX164aPpMzx6HEzaXk+wOh1A1ha7O4xSdQ/OcZ4q9nqDtYiR71236JvLOrrPDAzTvvj3r5knZPzp0ZXb6fmsHFD0hmb7vt99Dj85c8unwRvRDU0/CSIq9AGTaAGQCIursDASOnmxuHflZcLx+/sTyGbnNqsK86TKYljx36mx4waI1x3siBo3Mik1L+uMJvj9tAQipji7jha27W3sHFwcAdajE7v4klc/wdhZ47Q8xxvRRFuddPcnXPv4i8PaWDzr4pfeHBGjtSGDiOEdwSqnb43Zp84Z7Zf/agaSYEAgJSZGe/tR7dQ3+zbVvnDOueh64GHtenV10d2Vxg8uhzh3JektoF84HUHumpb2p8fRA25b6P+JXWquOZEN/ZzTuG+8+PqHYeZemsvzLgJMkMhlj/xxukgupfK/q3i9XP3vCHGrvEQEEghYaTwd7fePdh0sKnZPsGhsHMPb3nADOGNTOPuzjnHfE4ryp+Uzo6Sc2N332Vv0vIp6k0Y9kl4av2IY7yvNyVi67YU5JgXNyypQxLqWVl2OfTMx1bnXtka+lJNnmTxntQYtwnYMNeoBR/z/+Bdn0Q21KgEksAAAAAElFTkSuQmCC", null);
} catch(e) {}

Отсутствует

 

№823825-04-2020 07:43:48

glok
Участник
 
Группа: Members
Зарегистрирован: 31-03-2015
Сообщений: 51
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Здравствуйте.
Win7 64. FF 75(64). Classic CSS tweaks for Firefox Quantum v3.0.8
Проблема, что с  Classic CSS не могу выделить данные из адресной строки, нету графического отображения выделения ( не выделяется синим цветов, выделенный текст).
Удалял папку chrome, проблема исчезает.
Если поставить курсор на адресную строку, нажать ctrl+A + ctrl+C, то в буфер обмена текст копируется, но то что текст выделился, отображения нет.
В чём может быть проблема?
https://yadi.sk/d/fP4I4SLOrZnMZw файл userChrome.css .

Отсутствует

 

№823925-04-2020 14:55:35

eksman
Участник
 
Группа: Members
Зарегистрирован: 24-07-2015
Сообщений: 70
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Привет. Подскажите, пожалуйста, как увеличить высоту navbar'a и всех его элементов?

Если просто задать  #nav-bar {height: 55px !important;} то это только увеличивает сам высоту, а нужно еще и чтобы все элементы (иконки, адресная строка, текст и т.п) увеличивались.

И кто знает, есть ли способ для последних версий ff сделать так, чтобы панель закладок показывалась только для новой вкладки (как в хроме)? Все способы из гугла перестали работать после обновы firefox(

Отредактировано eksman (25-04-2020 14:57:03)

Отсутствует

 

№824025-04-2020 16:17:43

sandro79
Участник
 
Группа: Members
Зарегистрирован: 15-11-2017
Сообщений: 1750
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

glok пишет: Если поставить курсор на адресную строку, нажать ctrl+A + ctrl+C, то в буфер обмена текст копируется, но то что текст выделился, отображения нет.

Доброго здравия товарищи!
Скачал ваш userChrome.css, закинул взамен userChrome.css, только что скачанного свежего архива Classic CSS tweaks for Firefox Quantum v3.0.8, и такой проблемы не увидел. Ну разве что я неправильно вас понял.
А не проще ли, копировать в буфер обмена без манипуляций с ctrl+A + ctrl+C, добавив через ПКМ в адресную строку значок "Копировать ссылку".

скрытый текст
d9f238abba7b.png

eksman пишет: как увеличить высоту navbar'a и всех его элементов?

Может выбрать мобильные значки.

eksman пишет: чтобы панель закладок показывалась только для новой вкладки (как в хроме)?

После удаления поддержки биндингов, такого способа с userChrome.css не существует, скриптов тоже пока не попадалось. Разве что можете попробовать, не совсем то конечно, стиль от Aris-а

Войдите или зарегистрируйтесь, чтобы увидеть скрытый текст.

Отредактировано sandro79 (25-04-2020 16:25:37)

Отсутствует

 

№824125-04-2020 16:50:38

eksman
Участник
 
Группа: Members
Зарегистрирован: 24-07-2015
Сообщений: 70
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

Может выбрать мобильные значки.

Да, знаю про это. Но не то, что именно мне нужно. Там еще и tabbar затрагивается, да и в целом не то.

Мне надо бы именно navbar увеличить, но чтобы было красиво, иконки нормально смотрелись и т.п
Я пробовал играться с

скрытый текст
#nav-bar .toolbarbutton-icon
{
width: 30px !important;
height: 30px !important;
max-width: 30px !important;
max-height: 30px !important;
}
Но на этом все...

стиль от Aris-а

Лучше чем ничего, авось пригодится, спасибо.

Отсутствует

 

№824225-04-2020 18:19:13

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

Re: Настройка внешнего вида Firefox в userChrome.css

eksman пишет

Мне надо бы именно navbar увеличить, но чтобы было красиво, иконки нормально смотрелись

Попробуйте так:

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

Выделить код

Код:

/* Большие значки на панели навигации */
 toolbar .toolbarbutton-1 > .toolbarbutton-icon,
toolbar .toolbarbutton-1 > .toolbarbutton-badge-stack {
    padding: calc(var(--toolbarbutton-inner-padding) - 2px) !important;
}
toolbar .toolbarbutton-1 > .toolbarbutton-badge-stack > .toolbarbutton-icon {
    width: 20px !important;
    height: 20px !important;
}

/* Зум панели навигации */
#nav-bar .toolbarbutton-1 {
    padding-top: 3px !important;
    padding-bottom: 3px !important;
}

Отредактировано kokoss (25-04-2020 18:19:46)


Win7

Отсутствует

 

№824325-04-2020 21:01:11

eksman
Участник
 
Группа: Members
Зарегистрирован: 24-07-2015
Сообщений: 70
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

kokoss
Огромное спасибо, то что нужно. Имеется некоторая размытость, но это и понятно почему так (по другому видимо не сделать) :beer:

Отсутствует

 

№824425-04-2020 21:47:56

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

Re: Настройка внешнего вида Firefox в userChrome.css

eksman пишет

Имеется некоторая размытость, но это и понятно почему так (по другому видимо не сделать

Размытость чего? Если иконок, то у меня в [firefox] 75 не размыто!

Отредактировано kokoss (25-04-2020 21:48:39)


Win7

Отсутствует

 

№824525-04-2020 22:36:06

_zt
Участник
 
Группа: Members
Зарегистрирован: 10-11-2014
Сообщений: 1635
UA: Firefox 68.0

Re: Настройка внешнего вида Firefox в userChrome.css

eksman
Вы в персонализации большие значки включали? Попробуйте изменить размер там.

Отсутствует

 

№824625-04-2020 23:34:15

eksman
Участник
 
Группа: Members
Зарегистрирован: 24-07-2015
Сообщений: 70
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

kokoss пишет
eksman пишет

Имеется некоторая размытость, но это и понятно почему так (по другому видимо не сделать

Размытость чего? Если иконок, то у меня в [firefox] 75 не размыто!

Да, иконки расширений слега размыты. Ну это не страшно.

_zt пишет

eksman
Вы в персонализации большие значки включали? Попробуйте изменить размер там.

ага, включал, не то :( Мне больше размер нужен :) Но уже вопрос решили выше.

Отсутствует

 

№824726-04-2020 05:41:24

glok
Участник
 
Группа: Members
Зарегистрирован: 31-03-2015
Сообщений: 51
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

sandro79 пишет

А не проще ли, копировать в буфер обмена без манипуляций с ctrl+A + ctrl+C, добавив через ПКМ в адресную строку значок "Копировать ссылку".

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

Отсутствует

 

№824828-04-2020 11:41:43

RadeD
Участник
 
Группа: Members
Зарегистрирован: 20-04-2020
Сообщений: 3
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

glok
Там 3.0.9 вышла, попробуйте ее. Там, судя по треду в багрепортах, как раз что то с выделением правили

Отсутствует

 

№824901-05-2020 14:52:10

glok
Участник
 
Группа: Members
Зарегистрирован: 31-03-2015
Сообщений: 51
UA: Firefox 75.0

Re: Настройка внешнего вида Firefox в userChrome.css

RadeD пишет

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

Скачал 3.11. Проблема осталась.
Хотя, поставил чистый css, ничего не менял, текст выделяется.
Стоит подправить userchrome, сразу появляется проблема.
Вот этот параметр ломает.  @import "./css/tabs/tabs_below_navigation_toolbar_fx74.css"; /**/

Отредактировано glok (01-05-2020 14:59:28)

Отсутствует

 

№825005-05-2020 22:03:00

roadrunner
Участник
 
Группа: Members
Зарегистрирован: 18-08-2011
Сообщений: 34
UA: Firefox 76.0

Re: Настройка внешнего вида Firefox в userChrome.css

Vitaliy V.
В 76 версии не работает ваш код кнопки Открыть папку профиля и Перезагрузка,посмотрите пожалуйста.

Отсутствует

 

Board footer

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