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

Общайтесь со знакомыми и друзьями в нашей группе в Контакте.

№897610-08-2020 15:58:22

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

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

egorsemenov06 пишет

"Текст URL в кликабельные ссылки" для user_chrome_files

Код новый как и RegExp, возможно будет определять URL иначе, для текста без https? или www в начале обязательно наличие / косой черты чтобы посчитать это за URL,
да и email ссылки тоже ищет и добавляет mailto: чтобы открыть в почтовом клиенте.

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

Выделить код

Код:

try {
    (() => {
        var id = "ucf-text-to-link",
        label = "Текст URL в кликабельные ссылки",
        tooltiptext = "Превратить текст URL в кликабельные ссылки",
        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(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 32,5 24,12 22.8,20.3 24.2,21.7 21.7,24.3 20.3,22.9 12,24 5,31 7.7,43 12.7,48 H 45 C 46.7,48 48,46.7 48,45 V 12.8 L 40.2,5 Z'/><path style='fill:white;' d='M 40.4,5.23 C 37.5,2.26 32.9,2.26 29.8,5.23 L 24,11 C 21.5,13.5 21.2,17.4 22.8,20.3 L 25.8,17.3 C 25.2,15.4 25.7,14 27.2,12.6 L 31,8.8 C 33.3,6.55 36,6.55 38.1,8.8 L 39.3,9.9 C 41.4,12.1 41.4,14.7 39.2,17 L 35.4,20.8 C 33.9,22.4 32.1,23.2 30.2,22.7 L 27.8,25.2 C 30.6,26.9 34.4,26.5 37.1,24 L 42.7,18.2 C 45.7,15.2 45.7,10.5 42.7,7.49 L 40.4,5.23 M 33,15 C 32.3,14.5 31.4,14.3 30.6,14.8 L 14.8,30.6 C 14.3,31.3 14.5,32.3 15,33 15.6,33.5 16.7,33.7 17.4,33.2 L 33.2,17.4 C 33.7,16.7 33.5,15.6 33,15 M 20.3,22.9 C 17.4,21.2 13.4,21.5 11,24 L 5.23,29.8 C 2.26,32.9 2.26,37.6 5.23,40.4 L 7.48,42.8 C 10.5,45.8 15.3,45.8 18.2,42.8 L 24,37.1 C 26.5,34.5 26.8,30.6 25.1,27.7 L 22.2,30.7 C 22.7,32.6 22.3,34 20.8,35.5 L 17,39.3 C 14.8,41.5 12,41.5 9.8,39.4 L 8.8,38.2 C 6.55,36 6.55,33.3 8.8,31 L 12.5,27.3 C 14,25.7 15.4,25.3 17.2,25.7' /></g></svg>";

        var mmMap;
        var texttolink = {
            get framescript() {
                delete this.framescript;
                return this.framescript = "data:application/javascript;charset=utf-8," + encodeURIComponent(`(${(function() {
                    var frame_script = {
                        gFrameList: [],
                        running: false,
                        init: function() {
                            addMessageListener("requestTextToLinkFrameScript", this);
                        },
                        receiveMessage: function(msg) {
                            var mdf = msg.data.func;
                            if (mdf == "TextToLink")
                                this.textToLink();
                        },
                        get excludedTags() {
                            delete this.excludedTags;
                            return this.excludedTags = new Set(["a","svg","canvas","applet","input","button","area","embed","noembed","frame","frameset","head","iframe","img","select","option","datalist","map","meta","noscript","object","param","script","style","textarea","code"]);
                        },
                        textToLink: function() {
                            if (this.running || !content.document || !content.document.body)
                                return;
                            this.running = true;
                            this.goThroughFrames(content.document, content.window);
                            var url_regexp = /(^|[\s(,;'"`“\[\]=_])((?:(?:http|ftp)s?:\/\/[-\wа-яё.!~*'();,/?:@&=+$#%_\u2300-\u23FF\u2600-\u27BF]|www\d{0,3}[.][a-zа-яё0-9.-]{2,249}|[a-zа-яё0-9.-]{2,250}[.][a-zа-яё]{2,4}\/)[-\wа-яё.!~*'();,/?:@&=+$#%_\u2300-\u23FF\u2600-\u27BF]*)/gim,
                            email_regexp = /(^|mailto:|[\s(,;'"`“\[\]=])([\w!#$%&'*+/=?^`{|}~.-]{2,}@[\[\]a-z0-9.-]+)/gim,
                            setEmail = (node, text) => {
                                var repl = text.replace(email_regexp, '$1<a href="mailto:$2" class="add__TextToEmail">$2</a>');
                                if (text.length == repl.length)
                                    return;
                                var span = node.ownerDocument.createElement("span");
                                span["innerHTML"] = repl;
                                node.replaceWith(span);
                            },
                            setLink = (node, text) => {
                                if (!(text = node.textContent)) return;
                                text = text.replace(/</g, "&lt;").replace(/>/g, "&gt;");
                                var repl = text.replace(url_regexp, '$1<a href="$2" target="_blank" class="add__TextToLink">$2</a>');
                                if (text.length == repl.length) {
                                    setEmail(node, text);
                                    return;
                                }
                                var span = node.ownerDocument.createElement("span");
                                span["innerHTML"] = repl;
                                for (let el of span.querySelectorAll("a.add__TextToLink[href]:not([href^='http']):not([href^='ftp'])"))
                                    el.setAttribute("href", "http://" + el.getAttribute("href"));
                                node.replaceWith(span);
                                for (let child of span.childNodes) {
                                    let txt;
                                    if (child.nodeType == child.TEXT_NODE && (txt = child.textContent))
                                        setEmail(child, txt);
                                }
                            },
                            excludedTags = this.excludedTags,
                            elList = [],
                            getWalker = elem => {
                                var doc = elem.ownerDocument, win = doc.defaultView,
                                filter_reject = win.NodeFilter.FILTER_REJECT,
                                filter_skip = win.NodeFilter.FILTER_SKIP,
                                filter_accept = win.NodeFilter.FILTER_ACCEPT,
                                walker = doc.createTreeWalker(elem, win.NodeFilter.SHOW_ALL, {
                                    acceptNode: function(node) {
                                        if (excludedTags.has(node.localName))
                                            return filter_reject;
                                        if (node.nodeType != node.TEXT_NODE && !node.shadowRoot)
                                            return filter_skip;
                                        return filter_accept;
                                    }
                                }, false);
                                while (walker.nextNode()) {
                                    let currnode = walker.currentNode;
                                    if (!currnode.shadowRoot)
                                        elList.push(currnode);
                                    else
                                        getWalker(currnode.shadowRoot);
                                }
                            };
                            this.gFrameList.forEach(doc => {
                                if (!doc.body) return;
                                getWalker(doc.body);
                                for (let el of elList)
                                    setLink(el);
                                elList = [];
                            });
                            this.gFrameList = [];
                            this.running = false;
                        },
                        goThroughFrames: function(aDocument, aWindow) {
                            if (!aDocument) return;
                            this.gFrameList.push(aDocument);
                            var num = aWindow.frames.length;
                            if (!num) return;
                            for (let i = 0; i < num; i++) {
                                let frame = aWindow.frames[i], doc = null;
                                try {
                                    doc = frame.document;
                                } catch (e) {}
                                this.goThroughFrames(doc, frame);
                            }
                        },
                        ininit: function() {
                            removeMessageListener("requestTextToLinkFrameScript", this);
                            sendAsyncMessage("responseTextToLinkFrameScript", {func: "unloadFrameScript"});
                        }
                    };
                    frame_script.init();
                    addEventListener("unload", function unload() {
                        frame_script.ininit();
                    }, { once: true });
                })})();`);
            },
            loadsScript: function() {
                this.receiveMessage = function(msg) {
                    var mdf = msg.data.func;
                    if (mdf == "unloadFrameScript") {
                        this.mm.removeMessageListener("responseTextToLinkFrameScript", this);
                        mmMap.delete(this.mm);
                        this.mm = null;
                    }
                };
                this.addMessage = function(mm) {
                    this.mm = mm;
                    mm.addMessageListener("responseTextToLinkFrameScript", this, true);
                    mm.loadFrameScript(texttolink.framescript, false);
                };
                this.sendMessage = function(str) {
                    this.mm.sendAsyncMessage("requestTextToLinkFrameScript", {func: str});
                };
            },
            sendAsyncMessages: function(win, str) {
                mmMap = new WeakMap();
                this.sendAsyncMessages = function(win, str) {
                    var message = mmMap.get(win.gBrowser.selectedBrowser.messageManager) || (() => {
                        var loadsScript = new this.loadsScript(), mm = win.gBrowser.selectedBrowser.messageManager;
                        loadsScript.addMessage(mm);
                        mmMap.set(mm, loadsScript);
                        return loadsScript;
                    })();
                    message.sendMessage(str);
                };
                this.sendAsyncMessages(win, str);
            },
        };
        CustomizableUI.createWidget({
            id: id,
            label: label,
            tooltiptext: tooltiptext,
            localized: false,
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onCreated: function(btn) {
                btn.style.setProperty("list-style-image", `url("${img}")`, "important");
            },
            onCommand: function(e) {
                texttolink.sendAsyncMessages(e.target.ownerGlobal, "TextToLink");
            },
        });
    })();
} catch(e) {}

sandro79 пишет

кнопки "Загрузки" и "Переключить прокси" из Add Toolbar Buttons для user_chrome_files

Две в одном

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

Выделить код

Код:

try {
    (() => {
        var id = "ucf-toggle-proxy",
        label = "Переключить прокси",
        tooltiptext = "Переключить прокси",
        tooltiptextbtnmenu = "ЛКМ: Открыть меню\nПКМ: Открыть настройки прокси",
        toggleproxy = 1, // 0, 1, 2, 4 , 5  Первый режим
        toggleproxy2 = 2, // 0, 1, 2, 4 , 5  Второй режим
        doreload = true, // Перезагрузить страницу
        img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='80' width='16' viewBox='0 0 48 240'><g><rect x='0' y='0' width='48' height='48' rx='3' ry='3' style='fill:rgb(146, 69, 101);'/><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' /><rect x='0' y='48' 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,65.6 23.1,71.9 8,74 6.4,80.2 11.4,85.2 3.7,92.8 6.9,96 45,96 C 46.7,96 48,94.7 48,93 V 68 L 31.4,51.4'/><path style='fill:white;' d='M 17.4,51 C 16.7,51 16.2,51.8 16.2,52.9 V 63.9 C 16.2,65 16.7,65.8 17.4,65.8 H 30.6 C 31.3,65.8 31.8,65 31.8,63.9 V 52.9 C 31.8,51.8 31.3,51 30.6,51 H 17.4 M 22.4,68.5 V 71.7 H 6.41 V 80.2 H 9.35 V 76.2 H 22.4 V 80.4 H 25.5 V 76.2 H 38.5 V 80.4 H 41.5 V 71.7 H 25.5 V 68.5 H 22.4 M 4.23,83.1 C 3.55,83.1 3,83.9 3,85.1 V 91 C 3,92.1 3.55,93 4.23,93 H 12.1 C 12.8,93 13.3,92.1 13.3,91 V 85.1 C 13.3,83.9 12.8,83.1 12.1,83.1 H 4.23 M 19.9,83.1 C 19.2,83.1 18.8,83.9 18.8,85.1 V 91 C 18.8,92.1 19.2,93 19.9,93 H 27.8 C 28.5,93 29,92.1 29,91 V 85.1 C 29,83.9 28.5,83.1 27.8,83.1 H 19.9 M 35.9,83.1 C 35.2,83.1 34.7,83.9 34.7,85.1 V 91 C 34.7,92.1 35.2,93 35.9,93 H 43.7 C 44.4,93 45,92.1 45,91 V 85.1 C 45,83.9 44.4,83.1 43.7,83.1 H 35.9' /><rect x='0' y='96' width='48' height='48' rx='3' ry='3' style='fill:rgb(243, 135, 37);'/><path style='opacity:0.25;fill:black;' d='M 16.8,114 23.1,120 8,122 6.4,128 11.4,133 3.7,141 6.9,144 H 45 C 46.7,144 48,142.7 48,141 V 116 L 31.4,99.4'/><path style='fill:white;' d='M 17.4,99 C 16.7,99 16.2,99.8 16.2,101 V 112 C 16.2,113 16.7,114 17.4,114 H 30.6 C 31.3,114 31.8,113 31.8,112 V 101 C 31.8,99.8 31.3,99 30.6,99 H 17.4 M 22.4,117 V 120 H 6.41 V 128 H 9.35 V 124 H 22.4 V 128 H 25.5 V 124 H 38.5 V 128 H 41.5 V 120 H 25.5 V 117 H 22.4 M 4.23,131 C 3.55,131 3,132 3,133 V 139 C 3,140 3.55,141 4.23,141 H 12.1 C 12.8,141 13.3,140 13.3,139 V 133 C 13.3,132 12.8,131 12.1,131 H 4.23 M 19.9,131 C 19.2,131 18.8,132 18.8,133 V 139 C 18.8,140 19.2,141 19.9,141 H 27.8 C 28.5,141 29,140 29,139 V 133 C 29,132 28.5,131 27.8,131 H 19.9 M 35.9,131 C 35.2,131 34.7,132 34.7,133 V 139 C 34.7,140 35.2,141 35.9,141 H 43.7 C 44.4,141 45,140 45,139 V 133 C 45,132 44.4,131 43.7,131 H 35.9' /><rect x='0' y='144' width='48' height='48' rx='3' ry='3' style='fill:rgb(21, 161, 99);'/><path style='opacity:0.25;fill:black;' d='M 16.8,162 23.1,168 8,170 6.4,176 11.4,181 3.7,189 6.9,192 H 45 C 46.7,192 48,190.7 48,189 V 164 L 31.4,147'/><path style='fill:white;' d='M 17.4,147 C 16.7,147 16.2,148 16.2,149 V 160 C 16.2,161 16.7,162 17.4,162 H 30.6 C 31.3,162 31.8,161 31.8,160 V 149 C 31.8,148 31.3,147 30.6,147 H 17.4 M 22.4,165 V 168 H 6.41 V 176 H 9.35 V 172 H 22.4 V 176 H 25.5 V 172 H 38.5 V 176 H 41.5 V 168 H 25.5 V 165 H 22.4 M 4.23,179 C 3.55,179 3,180 3,181 V 187 C 3,188 3.55,189 4.23,189 H 12.1 C 12.8,189 13.3,188 13.3,187 V 181 C 13.3,180 12.8,179 12.1,179 H 4.23 M 19.9,179 C 19.2,179 18.8,180 18.8,181 V 187 C 18.8,188 19.2,189 19.9,189 H 27.8 C 28.5,189 29,188 29,187 V 181 C 29,180 28.5,179 27.8,179 H 19.9 M 35.9,179 C 35.2,179 34.7,180 34.7,181 V 187 C 34.7,188 35.2,189 35.9,189 H 43.7 C 44.4,189 45,188 45,187 V 181 C 45,180 44.4,179 43.7,179 H 35.9' /><rect x='0' y='192' width='48' height='48' rx='3' ry='3' style='fill:rgb(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 16.8,210 23.1,216 8,218 6.4,224 11.4,229 3.7,237 6.9,240 H 45 C 46.7,240 48,238.7 48,237 L 48,212 31.4,195'/><path style='fill:white;' d='M 17.4,195 C 16.7,195 16.2,196 16.2,197 V 208 C 16.2,209 16.7,210 17.4,210 H 30.6 C 31.3,210 31.8,209 31.8,208 V 197 C 31.8,196 31.3,195 30.6,195 H 17.4 M 22.4,213 V 216 H 6.41 V 224 H 9.4 V 220 H 22.4 V 224 H 25.5 V 220 H 38.5 V 224 H 41.5 V 216 H 25.5 V 213 H 22.4 M 4.23,227 C 3.55,227 3,228 3,229 V 235 C 3,236 3.55,237 4.23,237 H 12.1 C 12.8,237 13.3,236 13.3,235 V 229 C 13.3,228 12.8,227 12.1,227 H 4.23 M 19.9,227 C 19.2,227 18.7,228 18.7,229 V 235 C 18.7,236 19.2,237 19.9,237 H 27.8 C 28.5,237 29,236 29,235 V 229 C 29,228 28.5,227 27.8,227 H 19.9 M 35.9,227 C 35.2,227 34.7,228 34.7,229 V 235 C 34.7,236 35.2,237 35.9,237 H 43.7 C 44.4,237 45,236 45,235 V 229 C 45,228 44.4,227 43.7,227 H 35.9' /></g></svg>",
        imgmenu = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' height='80' width='16' viewBox='0 0 48 240'><g><circle cy='24' cx='24' style='fill:rgb(146, 69, 101);' r='20'/><path style='opacity:0.25;fill:black;' d='M 33,41.8 22.3,31.1 36.7,17.9 44,25.2 C 43.5,30.6 41,37.7 33,41.8 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 35,19 H 13 L 24,30 35,19' /><circle cy='72' cx='24' style='fill:rgb(209, 8, 3);' r='20'/><path style='opacity:0.25;fill:black;' d='M 33,89.8 22.3,79.1 36.7,65.9 44,73.2 C 43.5,78.6 41,85.7 33,89.8 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 35,67 H 13 L 24,78 35,67' /><circle cy='120' cx='24' style='fill:rgb(243, 135, 37);' r='20'/><path style='opacity:0.25;fill:black;' d='M 32.8,138 22,127 36.7,114 44,121 C 43.5,127 40.9,134 32.8,138 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 34.9,115 H 13.1 L 24,126 34.9,115' /><circle cy='168' cx='24' style='fill:rgb(21, 161, 99);' r='20'/><path style='opacity:0.25;fill:black;' d='M 32.9,186 22,175 36.7,162 44,169 C 43.5,175 40.9,182 32.9,186 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 35,163 H 13 L 24,174 35,163' /><circle cy='216' cx='24' style='fill:rgb(0, 120, 173);' r='20'/><path style='opacity:0.25;fill:black;' d='M 32.8,234 22,223 36.7,210 44,217 C 43.5,223 40.9,230 32.8,234 Z'/><path style='fill:white;stroke:white;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;' d='M 35,211 H 13 L 24,222 35,211' /></g></svg>";

        var id2 = "ucf-open-downloads",
        label2 = "Загрузки",
        tooltiptext2 = "ЛКМ: Показать загрузки\nСКМ: Открыть папку загрузок\nПКМ: Открыть последнюю папку загрузок",
        img2 = "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(0, 120, 173);'/><path style='opacity:0.25;fill:black;' d='M 23.4,33 30,39.6 H 18 L 8.7,30 3.9,44.1 7.8,48 H 45 C 46.7,48 48,46.7 48,45 V 22.5 L 28.8,3.3 Z'/><path style='fill:white;' d='M 20.27,3 C 19,3 19.25,3.798 19.25,3.798 V 17.94 20.23 H 13.75 C 12.13,20.23 13.61,21.58 13.61,21.58 L 23.36,32.85 V 32.85 C 23.36,32.85 24.17,33.75 25.01,32.95 26.16,31.84 34.47,21.3 34.47,21.3 34.47,21.3 35.93,19.89 33.98,19.89 H 28.91 V 17.83 3.672 C 28.91,3.672 28.93,3 28.03,3 Z M 3,29.93 V 42.22 C 3,43.75 4.303,45 5.918,45 H 42.08 C 43.71,45 45,43.75 45,42.22 V 29.93 H 39.16 V 39.43 H 8.837 V 29.93 Z' /></g></svg>";

        var tbarbtns = {
            get network_proxy_type() {
                delete this.network_proxy_type;
                try {
                    return this.network_proxy_type = Services.prefs.getIntPref("network.proxy.type");
                } catch(e) { }
                return this.network_proxy_type = null;
            },
            get btnstyle() {
                delete this.btnstyle;
                return this.btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(`
                    #${id}-button {
                        list-style-image: url("${img}") !important;
                        -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                        margin-inline-end: 0 !important;
                    }
                    #${id}-button-menu {
                        list-style-image: url("${imgmenu}") !important;
                        -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                        margin-inline-start: 0px !important;
                    }
                    #${id}[activated="1"] :-moz-any(#${id}-button,#${id}-button-menu) {
                        -moz-image-region: rect(16px, 16px, 32px, 0px) !important;
                    }
                    #${id}[activated="2"] :-moz-any(#${id}-button,#${id}-button-menu) {
                        -moz-image-region: rect(32px, 16px, 48px, 0px) !important;
                    }
                    #${id}[activated="4"] :-moz-any(#${id}-button,#${id}-button-menu) {
                        -moz-image-region: rect(48px, 16px, 64px, 0px) !important;
                    }
                    #${id}[activated="5"] :-moz-any(#${id}-button,#${id}-button-menu) {
                        -moz-image-region: rect(64px, 16px, 80px, 0px) !important;
                    }
                    toolbarpaletteitem[place="palette"] #${id}-button-menu,
                    #${id}-button-menu dropmarker {
                        display: none !important;
                    }
                    toolbarpaletteitem[place="palette"] #${id} {
                        -moz-box-orient: vertical !important;
                    }
                    #${id}-button-menu > .toolbarbutton-icon {
                        min-width: 0 !important;
                        max-width: none !important;
                        width: auto !important;
                        padding-left: 0 !important;
                        padding-right: 0 !important;
                    }
                `);
            },
            toggleTheProxy: function() {
                Services.prefs.setIntPref("network.proxy.type", (Services.prefs.getIntPref("network.proxy.type") == toggleproxy2) ? toggleproxy : toggleproxy2);
            },
            setProxyMenuItem: function(event) {
                var proxyState = Services.prefs.getIntPref("network.proxy.type"), popup = event.currentTarget;
                for (var menuitem in popup.childNodes) {
                    var childNode = popup.childNodes[menuitem];
                    if (+childNode.getAttribute("value") == proxyState) {
                        childNode.setAttribute("checked", "true");
                        break;
                    }
                }
            },
            setProxyValue: function(event) {
                Services.prefs.setIntPref("network.proxy.type", +event.target.getAttribute("value"));
            },
            checkBrowserReload: function(win) {
                if (doreload)
                    win.BrowserReloadSkipCache();
            },
            openProxyWin: function(win) {
                var _win = Services.wm.getMostRecentWindow("aTaB:ProxyWin");
                if (_win)
                    _win.focus();
                else {
                    _win = win.openDialog("chrome://browser/content/preferences/dialogs/connection.xhtml", "_blank", "chrome,dialog=no,centerscreen,resizable");
                    var DOMLoad = () => {
                        _win.document.documentElement.setAttribute("type", "prefwindow");
                        _win.document.documentElement.setAttribute("windowtype", "aTaB:ProxyWin");
                    };
                    _win.addEventListener("DOMContentLoaded", DOMLoad, { once: true });
                    _win.opener = win;
                    _win.opener.gSubDialog = {
                        _dialogs: []
                    };
                }
            },
        };
        CustomizableUI.createWidget({
            id: id,
            type: "custom",
            label: label,
            tooltiptext: tooltiptext,
            localized: false,
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onBuild: function(document) {
                var win = document.defaultView, toolbaritem = document.createXULElement("toolbaritem");
                toolbaritem.id = id;
                toolbaritem.className = "chromeclass-toolbar-additional";
                toolbaritem.setAttribute("label", label);
                toolbaritem.setAttribute("type", "custom");
                var toolbarbutton_0 = document.createXULElement("toolbarbutton");
                toolbarbutton_0.id = `${id}-button`;
                toolbarbutton_0.className = "toolbarbutton-1";
                toolbarbutton_0.setAttribute("label", label);
                toolbarbutton_0.setAttribute("tooltiptext", tooltiptext);
                toolbarbutton_0.setAttribute("context", "false");
                toolbaritem.append(toolbarbutton_0);
                var toolbarbutton_1 = document.createXULElement("toolbarbutton");
                toolbarbutton_1.id = `${id}-button-menu`;
                toolbarbutton_1.className = "toolbarbutton-1";
                toolbarbutton_1.setAttribute("type", "menu");
                toolbarbutton_1.setAttribute("label", "");
                toolbarbutton_1.setAttribute("tooltiptext", tooltiptextbtnmenu);
                toolbarbutton_1.setAttribute("context", "false");
                toolbarbutton_1.addEventListener("click", function(event) {
                    if (event.button == 2) {
                        event.preventDefault();
                        event.stopPropagation();
                        tbarbtns.openProxyWin(win);
                    }
                });
                var menupopup_0 = document.createXULElement("menupopup");
                menupopup_0.id = `${id}-popup`;
                menupopup_0.addEventListener("click", function(event) {
                    event.stopPropagation();
                });
                var proxy = tbarbtns.network_proxy_type;
                if (proxy !== null) {
                    toolbaritem.setAttribute("activated", tbarbtns.network_proxy_type);
                    toolbarbutton_0.addEventListener("command", function(event) {
                        tbarbtns.toggleTheProxy();
                        tbarbtns.checkBrowserReload(win);
                    });
                    menupopup_0.addEventListener("command", function(event) {
                        event.stopPropagation();
                        tbarbtns.setProxyValue(event);
                        tbarbtns.checkBrowserReload(win);
                    });
                    menupopup_0.addEventListener("popupshowing", function(event) {
                        tbarbtns.setProxyMenuItem(event);
                    });
                }
                var menuitem_0 = document.createXULElement("menuitem");
                menuitem_0.setAttribute("label", "Прямое подключение, без прокси");
                menuitem_0.setAttribute("type", "radio");
                menuitem_0.setAttribute("value", "0");
                menupopup_0.append(menuitem_0);
                var menuitem_1 = document.createXULElement("menuitem");
                menuitem_1.setAttribute("label", "Ручная настройка прокси");
                menuitem_1.setAttribute("type", "radio");
                menuitem_1.setAttribute("value", "1");
                menupopup_0.append(menuitem_1);
                var menuitem_2 = document.createXULElement("menuitem");
                menuitem_2.setAttribute("label", "Автоматическая настройка прокси");
                menuitem_2.setAttribute("type", "radio");
                menuitem_2.setAttribute("value", "2");
                menupopup_0.append(menuitem_2);
                var menuitem_3 = document.createXULElement("menuitem");
                menuitem_3.setAttribute("label", "Автоопределение настроек прокси");
                menuitem_3.setAttribute("type", "radio");
                menuitem_3.setAttribute("value", "4");
                menupopup_0.append(menuitem_3);
                var menuitem_4 = document.createXULElement("menuitem");
                menuitem_4.setAttribute("label", "Использовать системные настройки прокси");
                menuitem_4.setAttribute("type", "radio");
                menuitem_4.setAttribute("value", "5");
                menupopup_0.append(menuitem_4);
                var menuseparator_0 = document.createXULElement("menuseparator");
                menupopup_0.append(menuseparator_0);
                var menuitem_5 = document.createXULElement("menuitem");
                menuitem_5.setAttribute("label", "Открыть настройки прокси");
                menuitem_5.addEventListener("command", function(event) {
                    event.stopPropagation();
                    tbarbtns.openProxyWin(win);
                });
                menupopup_0.append(menuitem_5);
                toolbarbutton_1.append(menupopup_0);
                toolbaritem.append(toolbarbutton_1);
                try {
                    win.windowUtils.loadSheetUsingURIString(tbarbtns.btnstyle, win.windowUtils.USER_SHEET);
                } catch (e) {}
                return toolbaritem;
            }
        });
        Services.prefs.addObserver("network.proxy.type", {
            observe: function(aSubject, aTopic, aData) {
                if (aData == "network.proxy.type") {
                    let network_proxy_type = tbarbtns.network_proxy_type = Services.prefs.getIntPref(aData),
                    getW = CustomizableUI.getWidget(id);
                    if (getW.instances.length)
                        for(let {node} of getW.instances)
                            try {
                                node.setAttribute("activated", network_proxy_type);
                            } catch(e) {}
                    else
                        for (let win of CustomizableUI.windows)
                            try {
                                getW.forWindow(win).node.setAttribute("activated", network_proxy_type);
                            } catch(e) {}
                }
            }
        });
        CustomizableUI.createWidget({
            id: id2,
            type: "custom",
            label: label2,
            tooltiptext: tooltiptext2,
            localized: false,
            defaultArea: CustomizableUI.AREA_NAVBAR,
            onBuild: function(document) {
                var win = document.defaultView, toolbarbutton = document.createXULElement("toolbarbutton");
                toolbarbutton.id = id2;
                toolbarbutton.className = "toolbarbutton-1 chromeclass-toolbar-additional";
                toolbarbutton.setAttribute("label", label2);
                toolbarbutton.setAttribute("context", "false");
                toolbarbutton.setAttribute("tooltiptext", tooltiptext2);
                toolbarbutton.addEventListener("click", function(event) {
                    if (event.button == 0)
                        win.DownloadsPanel.showDownloadsHistory();
                    else if (event.button == 1) {
                        try {
                            Services.prefs.getComplexValue("browser.download.dir", Ci.nsIFile).launch();
                        } catch(e) {
                            Services.dirsvc.get("DfltDwnld", Ci.nsIFile).launch();
                        }
                    } else if (event.button == 2) {
                        event.preventDefault();
                        event.stopPropagation();
                        try {
                            Services.prefs.getComplexValue("browser.download.lastDir", Ci.nsIFile).launch();
                        } catch(e) {
                            Services.dirsvc.get("DfltDwnld", Ci.nsIFile).launch();
                        }
                    }
                });
                toolbarbutton.style.setProperty("list-style-image", `url("${img2}")`, "important");
                return toolbarbutton;
            }
        });
    })();
} catch(e) {}


_zt пишет

Вы не могли бы сделать какой либо аналог этой кнопки?

Для себя не вижу смысла в этой кнопке, посмотрим если Dumby не станет делать, то можно подумать.

sandro79 пишет

при наведении указателя на плитку, окантовка по краю плитки приобретает светлый фон, если же включить встроенную тёмную тему, окантовка имеет тёмный цвет

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

Выделить код

Код:

.ds-top-sites .top-sites .top-site-outer .top-site-inner > a:-moz-any(.active, :focus) .tile {
    box-shadow: 0 0 0 5px rgba(69, 161, 255, 0.4) !important;
}

.ds-top-sites .top-sites .top-site-outer .top-site-inner > a:hover .tile {
    box-shadow: 0 0 0 5px #4A4A4F !important;
}


но там не только это, если поискать [lwt-newtab-brighttext] - более 100 совпадений...

Отредактировано Vitaliy V. (14-08-2020 19:45:56)

Отсутствует

 

№897710-08-2020 16:32:51

egorsemenov06
Участник
 
Группа: Members
Зарегистрирован: 12-06-2018
Сообщений: 151
UA: Firefox 79.0

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

Vitaliy V. пишет
egorsemenov06 пишет

"Текст URL в кликабельные ссылки" для user_chrome_files

Код новый как и RegExp, возможно будет определять URL иначе, для текста без https? или www в начале обязательно наличие / косой черты чтобы посчитать это за URL,
да и email ссылки тоже ищет и добавляет mailto: чтобы открыть в почтовом клиенте.

От души ОГРОМНОЕ СПАСИБО!!!!!

Отсутствует

 

№897810-08-2020 16:48:38

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

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

kokoss пишет

А если так:

Не помогло.

Отсутствует

 

№897910-08-2020 16:56:54

sandro79
Участник
 
Группа: Members
Откуда: Omicron Persei 8
Зарегистрирован: 15-11-2017
Сообщений: 1045
UA: Firefox 78.0

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

Vitaliy V. пишет

Две в одном
скрытый текст

Огромное Спасибо!!! Всё завелось и работает как в Add Toolbar Buttons. Виталий, а что последняя версия user_chrome_files уже не работает в безопасном режиме с отключенными дополнениями, скрипты и стили отключены, только панели и кнопки доступны? Нельзя как-то вернуть возможность работы в без. режиме, правкой config.js или user_chrome.js? Искал по Services.appinfo.inSafeMode в user_chrome.js в прошлой версии комплекта и последней - разницы не увидел вроде.

но там не только это, если поискать [lwt-newtab-brighttext] - более 100 совпадений...

Да вот же, если толком не знаешь что искать и использовать... Благодарю, теперь всё в норме :beer:

Отсутствует

 

№898010-08-2020 17:17:03

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

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

Duche
попробуйте так, если стили др. не помешают

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

Выделить код

Код:

.tabbrowser-tab {
    background-color: transparent !important;
    border-color: transparent !important;
}
.tabbrowser-tab[selected] {
  color: #000000 !important; 
}
.tabbrowser-tab .tab-background {
  border: none !important;
  border-radius: 16px 16px 0px 0px !important;
  box-shadow: none !important;
}
.tabbrowser-tab[selected] .tab-background {
  background: linear-gradient(to bottom, #FFF9E5, #ffcc19) !important; 
}
.tabbrowser-tab:hover:not([selected]) .tab-background {
  background: linear-gradient(to bottom, #e6e6e6, #888888) !important; 
}
.tabbrowser-tab .tab-line,
.tabbrowser-tab:hover::after,
.tabbrowser-tab[beforehovered]::after,
.tabbrowser-tab[beforeselected-visible]::after,
.tabbrowser-tab[selected]::after {
  opacity: 0 !important;
  transition: none !important;
}

sandro79 пишет

Нельзя как-то вернуть возможность работы в без. режиме, правкой config.js или user_chrome.js?

удалить можно в user_chrome.js
             try {
                noSafeMode = !Services.appinfo.inSafeMode;
            } catch(e) {}

Отредактировано Vitaliy V. (10-08-2020 18:59:39)

Отсутствует

 

№898110-08-2020 17:32:53

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

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

Vitaliy V. пишет

попробуйте так, если стили др. не помешают

Не могу посмотреть, края не закругляются.

Отсутствует

 

№898210-08-2020 17:43:58

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

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

Duche
Значит помешали, я фиг знает что у вас там наворочено,
скорее всего на .tab-content - background добавлен, поэтому не видно

Отредактировано Vitaliy V. (10-08-2020 17:47:38)

Отсутствует

 

№898310-08-2020 17:47:28

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

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

Vitaliy V. пишет

хоть удалили?

Конечно удалил, сейчас поставлю на чистую FF.

Отсутствует

 

№898410-08-2020 17:48:05

sandro79
Участник
 
Группа: Members
Откуда: Omicron Persei 8
Зарегистрирован: 15-11-2017
Сообщений: 1045
UA: Firefox 78.0

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

Vitaliy V. пишет

удалить можно в user_chrome.js

Спасибо, да, сработало. Видимо не с прошлой версии я user_chrome.js смотрел, там да, нет этих строк, а думал разницы не нашёл. У меня три user_chrome_files в папке chrome, видимо не ту открыл по запарке. Надо избавляться уже от старых версий, новая вроде уже полностью настроена.

Отсутствует

 

№898510-08-2020 18:06:07

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

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

Duche пишет

Vitaliy V. пишет

    хоть удалили?

Конечно удалил, сейчас поставлю на чистую FF.

И на чистой нет.

Отсутствует

 

№898610-08-2020 18:08:39

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

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

Duche пишет

kokoss пишет

    А если так:

Не помогло.

Естественно не помогло


внимательней надо быть :)

Отсутствует

 

№898710-08-2020 18:14:04

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

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

kokoss пишет

Естественно не помогло

Остаюсь в недоумении.

Отсутствует

 

№898810-08-2020 19:11:00

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

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

Duche пишет

И на чистой нет.

На чистой что, сборке?
Вот на чистой

скрытый текст
VirtualBox_Win8.1_10_08_2020_19_05_00.png

но немного подправил код для [windows] 8.1

Отсутствует

 

№898910-08-2020 19:42:48

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

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

Vitaliy V. пишет

На чистой что, сборке?

Да ,  побывал на 68 и моей F_Good71.

Отсутствует

 

№899010-08-2020 20:24:21

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

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

Duche
Попробуйте, добавьте этот стиль на самый верх файла "FG_userChrome.css".

Отредактировано kokoss (10-08-2020 20:34:35)

Отсутствует

 

№899110-08-2020 20:28:11

sandro79
Участник
 
Группа: Members
Откуда: Omicron Persei 8
Зарегистрирован: 15-11-2017
Сообщений: 1045
UA: Firefox 78.0

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

Duche пишет

Остаюсь в недоумении.

Это мне предназначалось и естественно не помогло :D

Duche пишет

и моей F_Good71

скрытый текст
стиль из сообщения выше Интересный у вас UA:  (Windows NT 8.1; rv:54a) Gecko/20100101 Firefox/99 :D
8.1 UA: 252fa37ef224.png
8af4e1e76bdf.png

Отсутствует

 

№899210-08-2020 21:18:26

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

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

sandro79 пишет

Интересный у вас UA:

kokoss пишет

Duche
Попробуйте, добавьте этот стиль на самый верх файла "FG_userChrome.css".

Сам не пойму у меня win7x64 . Распаковывал FGood71 и 32 и 64 . Вставлял код в  "FG_userChrome.css" и в начало и в конец , сам ничего не пойму.

Отсутствует

 

№899310-08-2020 22:19:08

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

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

Duche
Прежде чем проверять с этим стилем, необходимо в файле "userChrome.css", отключить "375" строку -> @import "./css/tabs/classic_squared_tabs.css"; /**/


Add, и советую отключить в файле "userChrome.css", стили которые не используйте.

Отредактировано kokoss (10-08-2020 22:59:39)

Отсутствует

 

№899410-08-2020 22:39:59

sandro79
Участник
 
Группа: Members
Откуда: Omicron Persei 8
Зарегистрирован: 15-11-2017
Сообщений: 1045
UA: Firefox 79.0

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

Duche пишет

Сам не пойму у меня win7x64

Ну юзерагент кто-то сменил на такое чудо. 

kokoss пишет

отключить строку -> @import "./css/tabs/classic_squared_tabs.css"; /**/

Или скопировать с заменой стиль в classic_squared_tabs.css. Скиньте в тему ссылку на свою папку chrome, а мы попробуем разобраться.

Отсутствует

 

№899511-08-2020 08:00:32

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

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

Vitaliy V.
С такой шнягой еще не сталкивался...Дропы ни убрать не в право подвинуть...Это что за фишка? _moz_generated_content_image...
mb93nfdm.jpg

Отсутствует

 

№899611-08-2020 08:42:19

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

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

kokoss пишет

отключить "375" строку

Ура, заработало.Спасибо большое за отзывчивость и реальную помощь.

Еще такой вопрос для самообразования. На старых FF если заменил или установил иконку не того размера , больше 16х16 ,то ломало панели . Сейчас случайно заменил на 64х64, потом для эксперимента заменил на еще большую , панель на месте а иконка как бы авто масштабировалась . Что за эффект такой  . Хотелось сделать иконки побольше без изменения высоты панелей средствами CSS.

Отредактировано Duche (11-08-2020 08:43:37)

Отсутствует

 

№899711-08-2020 09:46:31

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

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

Duche пишет

Хотелось сделать иконки побольше

Я у себя использую этот стиль: https://forum.mozilla-russia.org/viewto … 45#p764745 под 3 спойлером.

Отсутствует

 

№899811-08-2020 11:00:13

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

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

solombala пишет

Это что за фишка? _moz_generated_content_image..

Обычный псевдоэлемент ::after только с иконкой вместо текста

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

Выделить код

Код:

.PanelUI-subView .subviewbutton-nav::after {
    display: none !important;
}


но если хочешь подвинуть нужно в самом пункте уменьшить padding
скрытый текст

Выделить код

Код:

.PanelUI-subView .subviewbutton-nav {
    padding-inline-end: 6px !important;
}


или заменить .subviewbutton-nav на .subviewbutton - для всех этих пунктов

Отредактировано Vitaliy V. (11-08-2020 11:03:24)

Отсутствует

 

№899911-08-2020 11:40:32

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

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

Vitaliy V.
Класс! как это сразу не допер...допер, но по наитию. Прозевал этот class...Благодарю!
Еще б размерчик уменьшить...Заделал, а вот hover - на это никак...

Отредактировано solombala (11-08-2020 12:53:24)

Отсутствует

 

№900011-08-2020 17:50:34

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

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

solombala
hover на что, на псевдоэлемент? Нет :hover пока не может применяться к псевдоэлементам.
только при наведении на элемент

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

Выделить код

Код:

.PanelUI-subView .subviewbutton-nav:hover::after {
   color: gold !important;
}

Отредактировано Vitaliy V. (11-08-2020 17:51:28)

Отсутствует

 

Board footer

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