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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№57607-12-2022 23:21:36

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 988
UA: Firefox 107.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
на ff 107 заметил, что перестал работать скрипт SwitchKeyboardLayout

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

Выделить код

Код:

try {(keybUtils => CustomizableUI.createWidget({
    type: "custom",
    id: "SwitchKeyboardLayout",
    onBuild(doc) {
        var btn = doc.createXULElement("toolbarbutton");
        btn.id = this.id;
        btn.label = btn.tooltipText = "Switch Keyboard Layout";
        btn.image = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAk1BMVEX///8/Pz8BAQF8fHwJCQkCAgIJCQl8fHx9fX0AAABJSUkBAQENDQ0wMDBVVVUAAABra2t0dHR7e3thYWEBAQEAAAAAAAABAQEAAAAgICABAQEBAQH8/Pzw8PDp6en39/fj4+Pe3t41V9I/YeWKioqDg4N9fX0jRa8wUrVoaGhkhuxWeNx1dXVCZMhvb28kRqsqTL4KidXxAAAAHHRSTlMAAABndwAAAAA0blVZcm1naWhNa6hrcJ8AAKRU4jk/3gAAAHVJREFUeF6FyMUCwjAUBdEbaQupUMOjqMv/fx1dQN6yZ3aDcWnyw6ezoRWNYc15kqKQZCFlgTKQQwgllL/dn5f3+bPb+6P3CpWNw56srdCZOMzDmA61i8O9nKvRaHLVukEryFKIFtnkj7ENYxmNdd5v+5xj1BcJ/w9Kj6K7ZAAAAABJRU5ErkJggg==";

        btn.setAttribute("oncommand", "linkedObj.switch(document);");
        btn.className = "toolbarbutton-1 chromeclass-toolbar-additional";
        btn.linkedObj = this;
        return btn;
    },
    switch(doc) {
        var br = doc.activeElement;
        br && br.localName == "browser" && br.isRemoteBrowser
            ? br.messageManager.loadFrameScript(this.url, false)
            : this.keybUtils.switchSelKeybLayout();
    },
    get url() {
        delete this.url;
        return this.url = `data:;charset=utf-8,(${
            encodeURIComponent(keybUtils)
        }).switchSelKeybLayout()`;
    },
    get keybUtils() {
        delete this.keybUtils;
        var def = "let{KeyEvent,HTMLInputElement,HTMLTextAreaElement}=Cu.getGlobalForObject(Services);";
        var url = `data:;charset=utf-8,${def}%0Athis.keybUtils=${encodeURIComponent(keybUtils)}`;
        Services.scriptloader.loadSubScript(url, this);
        var {id} = this;
        this.keybUtils.getFocusedElement = function(_subCall, _focusFixed) {
            var window = Services.focus.activeWindow, {document} = window;
            var button = document.getElementById(id);
            if(
                !_focusFixed
                && "closeMenus" in window
                && document.commandDispatcher.focusedElement == button
            ) {
                window.closeMenus(button);
                window.setTimeout(function(_this) {
                    _this.switchSelKeybLayout(_subCall, true);
                }, 0, this);
                return;
            }
            return document.commandDispatcher.focusedElement;
        }
        return this.keybUtils;
    }
}))(`{
    //== Options
    noSelBehavior: { // Shift+Home
        ctrlKey:  false,
        altKey:   false,
        shiftKey: true,
        metaKey:  false,
        keyCode:  KeyEvent.DOM_VK_HOME,
        charCode: 0
    },
    // 0 - do nothing
    // 1 - convert all text
    // Or use object like following to simulate "keypress" event:

    convTableForward: { // ru -> en
        "\\"": "@",
        ":": "^",
        ";": "$",
        "?": "&",
        ",": "?",
        "/": "|",
        ".": "/",
        "э": "'",
        "б": ",",
        "ю": ".",
        "Ж": ":",
        "ж": ";",
        "Б": "<",
        "Ю": ">",
        "Э": "\\"",
        "х": "[",
        "ъ": "]",
        "ё": "\`",
        "Х": "{",
        "Ъ": "}",
        "Ё": "~",
        "№": "#",
        "Ф": "A",
        "ф": "a",
        "И": "B",
        "и": "b",
        "С": "C",
        "с": "c",
        "В": "D",
        "в": "d",
        "У": "E",
        "у": "e",
        "А": "F",
        "а": "f",
        "П": "G",
        "п": "g",
        "Р": "H",
        "р": "h",
        "Ш": "I",
        "ш": "i",
        "О": "J",
        "о": "j",
        "Л": "K",
        "л": "k",
        "Д": "L",
        "д": "l",
        "Ь": "M",
        "ь": "m",
        "Т": "N",
        "т": "n",
        "Щ": "O",
        "щ": "o",
        "З": "P",
        "з": "p",
        "Й": "Q",
        "й": "q",
        "К": "R",
        "к": "r",
        "Ы": "S",
        "ы": "s",
        "Е": "T",
        "е": "t",
        "Г": "U",
        "г": "u",
        "М": "V",
        "м": "v",
        "Ц": "W",
        "ц": "w",
        "Ч": "X",
        "ч": "x",
        "Н": "Y",
        "н": "y",
        "Я": "Z",
        "я": "z",
        __proto__: null
    },
    //== End of options

    get convTableBackward() {
        var ctb = { __proto__: null };
        var ctf = this.convTableForward;
        for(var c in ctf)
            ctb[ctf[c]] = c;
        delete this.convTableBackward;
        return this.convTableBackward = ctb;
    },
    inPrimaryLayout: function(s) {
        for(var i = 0, l = s.length; i < l; ++i) {
            var c = s.charAt(i);
/*
            if(c in this.convTableForward)
                return true;
            if(c in this.convTableBackward)
                return false;
*/
            var primary = c in this.convTableForward;
            if(primary ^ c in this.convTableBackward)
                return primary;        }

        return false;
    },
    switchKeybLayout: function(s, convTable) {
        var res = "";
        for(var i = 0, l = s.length; i < l; ++i) {
            var c = s.charAt(i);
            res += c in convTable ? convTable[c] : c;
        }
        return res;
    },
    getFocusedElement: function() {
        return Cc["@mozilla.org/focus-manager;1"].getService(Ci.nsIFocusManager)
            .getFocusedElementForWindow(content, true, {});
    },
    switchSelKeybLayout: function(_subCall, _focusFixed) {
        var fe = this.getFocusedElement(_subCall, _focusFixed);
        if(!fe)
            return;
        if(fe instanceof HTMLInputElement || fe instanceof HTMLTextAreaElement) {
            var ta = fe;
            try {
                var val = ta.value;
                var sel = val.substring(ta.selectionStart, ta.selectionEnd);
            }
            catch(e) { // Non-text HTMLInputElement
                return;
            }
            if(!sel && val && this.noSelBehavior && !_subCall) {
                if(this.noSelBehavior == 1) {
                    ta.selectionStart = 0;
                    ta.selectionEnd = val.length;
                    sel = val;
                }
                else {
                    this.handleNoSel(ta);
                    return;
                }
            }
            if(!sel)
                return;
            var res = this.switchKeybLayout(
                sel,
                this.inPrimaryLayout(sel)
                    ? this.convTableForward
                    : this.convTableBackward
            );
            if(res != sel)
                this.insertText(ta, res);
        }
        else if(fe.contentEditable == "true") {
            var doc = fe.ownerDocument;

            var docURI = doc.documentURI;
            if(
                docURI.substr(0, 5) == "data:"
                && docURI.indexOf("chrome://browser/skin/devtools/") != -1
            ) {
                //~ todo: seems like we only can use paste from clipboard here...
                return;
            }

            var sel = doc.defaultView.getSelection();
            var rng = sel.rangeCount && sel.getRangeAt(0);
            var tmpNode;
            if(!rng || rng.collapsed) {
                if(!this.noSelBehavior || _subCall)
                    return;
                if(this.noSelBehavior == 1) {
                    var r = doc.createRange();
                    r.selectNodeContents(fe);
                    sel.removeAllRanges();
                    sel.addRange(r);
                    tmpNode = fe.cloneNode(true);
                }
                else {
                    this.handleNoSel(fe);
                    return;
                }
            }
            else {
                tmpNode = doc.createElementNS("http://www.w3.org/1999/xhtml", "div");
                tmpNode.appendChild(rng.cloneContents());
            }

            var orig = tmpNode.innerHTML;
            var convTable = this.inPrimaryLayout(tmpNode.textContent)
                ? this.convTableForward
                : this.convTableBackward;

            var _this = this;
            var parseChildNodes = function(node) {
                if(node instanceof Element) {
                    var childNodes = node.childNodes;
                    for(var i = childNodes.length - 1; i >= 0; --i)
                        parseChildNodes(childNodes[i]);
                }
                else if(node.nodeType == node.TEXT_NODE) {
                    var text = node.nodeValue;
                    var newText = _this.switchKeybLayout(node.nodeValue, convTable);
                    if(newText != text)
                        node.parentNode.replaceChild(doc.createTextNode(newText), node);
                }
            }
            parseChildNodes(tmpNode);

            var res = tmpNode.innerHTML;
            if(res != orig)
                doc.execCommand("insertHTML", false, res);
        }
    },
    handleNoSel: function(node) {
        this.select(node);
        this.switchSelKeybLayout(true);
    },
    select: function(node) {
        var e = this.noSelBehavior;
        if(!e || typeof e != "object")
            return;

/*
        var evt = new node.ownerGlobal.KeyboardEvent(
            "keypress", {bubbles: true, cancelable: true, ...e}
        );

        node.dispatchEvent(evt);
    },
*/

	if(ChromeUtils.domProcessChild.childID) {
            var cmd = this.beh2cmd[e.ctrlKey + "_" + e.shiftKey + "_" + e.keyCode];
            cmd && docShell.doCommand(cmd);
        }
        else node.dispatchEvent(new node.ownerGlobal.KeyboardEvent(
            "keypress", {bubbles: true, cancelable: true, ...e}
        ));
    },
    beh2cmd: { // Ctrl_Shift_VK
        false_true_36: "cmd_selectLinePrevious", // Shift+Home
    },

    insertText: function(ta, text) {
        //var editor = ta.QueryInterface(Components.interfaces.nsIDOMNSEditableElement).editor
        var editor = ta.editor
            .QueryInterface(Components.interfaces.nsIPlaintextEditor || Ci.nsIEditor);
        if(editor.flags & editor.eEditorReadonlyMask)
            return;

        var sTop = ta.scrollTop;
        var sHeight = ta.scrollHeight;
        var sLeft = ta.scrollLeft;
        // var sWidth = ta.scrollWidth;

        if(text)
            editor.insertText(text);
        else
            editor.deleteSelection(0, 0);

        ta.scrollTop = sTop + (ta.scrollHeight - sHeight);
        ta.scrollLeft = sLeft; // + (ta.scrollWidth - sWidth);
    }
}`)} catch(ex) {Cu.reportError(ex);}


гляньте пожалуйста, возможно ли починить?

Отредактировано Inko7 (07-12-2022 23:23:38)

Отсутствует

 

№57708-12-2022 10:18:39

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Inko7 пишет

на ff 107 заметил, что перестал работать скрипт

Не вижу на 107.0.1 такого.


Но, x instanceof *Element лучше заменить на *Element.isInstance(x)
Там три вхождения (поиск по «instanceof»).

Отсутствует

 

№57808-12-2022 17:21:42

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 988
UA: Firefox 107.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby
После правок всё заработало! Спасибо.

Отсутствует

 

№57908-12-2022 20:35:40

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 988
UA: Firefox 107.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

не долго радовался((
скопировал правленый файл скрипта, принес с работы домой, заменил им текущий нерабочий, перегрузил FF с очисткой кэша - не заработало!
начал разбираться:
оказывается, если тыцкать саму кнопку, то раскладка слов исправляется! не работает код на горячую клавишу F8

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

Выделить код

Код:

// Назначить клавишу F8 для исправления раскладки введенного текста
// код SwitchKeyboardLayout в файле custom_script.js

try {(id => {
    var listener = {
        get obj() {
            var obj = document.getElementById(id);
            if (obj) obj = obj.linkedObj;
            else {
                obj = Cu.import("resource:///modules/CustomizableUI.jsm", {})
                    .gPalette.get(id);
                if (obj) obj = obj.implementation;
                else {
                    Services.console.logStringMessage(id + " not found");
                    return this.destroy() || {switch() {}};
                }
            }
            delete this.obj; return this.obj = obj;
        },
        handleEvent(e) {
            if (e.key != "F8" || e.ctrlKey || e.shiftKey || e.altKey || e.repeat)
                return;
            //e.preventDefault();
            //e.stopPropagation();
            this.obj.switch(document);
        },
        destroy: function destroy() {
            removeEventListener("keydown", this, true);
            removeEventListener("unload", destroy);
        }
    };
    addEventListener("keydown", listener, true);
    addEventListener("unload", listener.destroy);
})("SwitchKeyboardLayout");} catch(ex) {Cu.reportError(ex);}


странно, но на работе ж каким-то чудным образом заработало...

Dumby
извиняюсь, что не верно и не разобравшись озвучил суть проблемы
почини пожалуйста эту переключалку по F8

Отсутствует

 

№58009-12-2022 07:30:38

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3201
UA: Firefox 107.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

del

Отредактировано voqabuhe (09-12-2022 07:31:40)

Отсутствует

 

№58109-12-2022 10:12:27

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Inko7 пишет

почини пожалуйста эту переключалку по F8

Затруднительно починить то, что не сломано.


Добавил код в custom_script_win.js, топаю по адресу
data:text/html;charset=utf-8,<textarea spellcheck="false">qwerty</textarea>
фосус в конец поля, жму F8, и вижу переключение qwerty <—> йцукен


перегрузил FF с очисткой кэша

Кодом? Увы, это не всегда срабатывает.
Чтобы быть уверенным, следует, при закрытом браузере,
удалить папку startupCache собственноручно.

Отсутствует

 

№58209-12-2022 21:43:11

Inko7
Участник
 
Группа: Members
Зарегистрирован: 09-11-2009
Сообщений: 988
UA: Firefox 107.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Чтобы быть уверенным, следует, при закрытом браузере,
удалить папку startupCache собственноручно.

помогло
раньше как-то до этого не доходило
спасибо

Отсутствует

 

№58309-12-2022 22:00:45

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

собственноручно

Кнопку + батник для себя не делали?
   
По поводу окна кук:
У меня окно кук в [firefox] 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.
Скрипт вызова здесь или:

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

Выделить код

Код:

(this.viewcookieswithrightclick = {
            init(that) {
                var star = this.star = document.querySelector("#star-button-box");
                if (!star)
                    return;
                star.addEventListener("contextmenu", this, true);
                star.addEventListener("click", this, true);
                that.unloadlisteners.push("viewcookieswithrightclick");
            },
            handleEvent(e) {
                if (e.button != 2)
                    return;
                e.preventDefault();
                e.stopPropagation();
                e.stopImmediatePropagation();
                if (e.type != "click")
                    return;
                this.viewCookies();
            },
            getETDL(uri) {
                var eTLD = "";
                try {
                    eTLD = Services.eTLD.getBaseDomain(uri);
                } catch (e) {
                    try {
                        eTLD = uri.asciiHost;
                    } catch (e) {}
                }
                return eTLD;
            },
            async viewCookies() {
                var uri = gBrowser.selectedBrowser.currentURI;
                try {
                    let _uri = ReaderMode.getOriginalUrl(uri.spec);
                    if (_uri)
                        uri = Services.io.newURI(_uri);
                } catch(e) {}
                uri = this.getETDL(uri);
                var type = "Browser:SiteDataSettings", id = "SiteDataSettingsDialog";
                var _win = Services.wm.getMostRecentWindow(type);
                await SiteDataManager.updateSites();
                if (!_win) {
                    let url = "chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", xs = Services.xulStore;
                    let sx = xs.getValue(url, id, "screenX");
                    let sy = xs.getValue(url, id, "screenY");
                    let wh = xs.getValue(url, id, "width");
                    let ht = xs.getValue(url, id, "height");
                    let sm = xs.getValue(url, id, "sizemode");
                    let features = `chrome,dialog=no,resizable,${sx && sy ? `screenX=${sx !== "0" ? sx : "1"},screenY=${sy !== "0" ? sy : "1"}` : "centerscreen"}${wh && ht ? `,width=${wh},height=${ht}` : ""}`;
                    _win = openDialog(url, type, features);
                    await new Promise(resolve => {
                        _win.windowRoot.addEventListener("DOMContentLoaded", () => {
                            _win.windowRoot.addEventListener("MozUpdateWindowPos", () => {
                                if (sm === "maximized")
                                    _win.maximize();
                            }, { once: true, capture: true });
                            resolve();
                        }, { once: true });
                    });
                } else if ("_gSiteDataSettings" in _win)
                     _win._gSiteDataSettings();
                else {
                    Services.scriptloader.loadSubScript("data:," + encodeURIComponent(`
                        var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() {
                            SiteDataManager.getSites().then(sites => {
                                this._sites = sites;
                                var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]");
                                this._sortSites(this._sites, sortCol);
                                this._buildSitesList(this._sites);
                            });
                        }).bind(gSiteDataSettings);
                        _gSiteDataSettings();
                        var updateSetInterval = setInterval(async () => {
                            await SiteDataManager.updateSites();
                            _gSiteDataSettings();
                        }, 5000);
                        let removeBtns = document.querySelectorAll("#removeSelected, #removeAll");
                        var updateClearInterval = () => {
                            clearInterval(updateSetInterval);
                            for (let btn of removeBtns)
                                btn.removeEventListener("command", updateClearInterval);
                            updateClearInterval = null;
                        };
                        for (let btn of removeBtns)
                            btn.addEventListener("command", updateClearInterval);
                    `), _win, "UTF-8");
                     _win.addEventListener("unload", () => {
                        _win.updateClearInterval?.();
                    }, { once: true });
                }
                var doc = _win.document;
                var docEl = doc.documentElement;
                docEl.setAttribute("windowtype", type);
                docEl.id = id;
                docEl.setAttribute("persist", "screenX screenY width height sizemode");
                _win.focus();
                var filter = doc.querySelector("#searchBox");
                if (!filter) return;
                filter.value = uri;
                filter.focus();
                filter.dispatchEvent(new _win.Event("input", { bubbles: true }));
            },
            destructor() {
                this.star.removeEventListener("contextmenu", this, true);
                this.star.removeEventListener("click", this, true);
            },
        }).init(this);

egorsemenov06 пишет

решилось созданием нового профиля

Сомневаюсь. Просто не запустили нужное кол-во раз.

Отредактировано _zt (09-12-2022 22:02:24)

Отсутствует

 

№58409-12-2022 22:39:31

unter_officer
Участник
 
Группа: Members
Откуда: Санкт-Петербург
Зарегистрирован: 27-03-2011
Сообщений: 377
UA: Firefox 108.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt пишет

У меня окно кук в [firefox] 102 растет по вертикали после каждого запуска с удалением, в итоге после нескольких запусков кнопки удаления уезжают под панель задач.

Я в 108 бетке "приколотил высоту гвоздями". Вроде пока нормально.
В userChrome.css:

Выделить код

Код:

@-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataSettings.x") {
	#SiteDataSettingsDialog {
		max-height: 465px !important;
	}
	#sitesList {
		height: 25em !important;
	}
}
@-moz-document url-prefix("chrome://browser/content/preferences/dialogs/siteDataRemoveSelected.x") {
	#SiteDataRemoveSelectedDialog {
		max-height: 450px !important;
	}
	#removalList {
		height: 25em !important;
	}
}

Отредактировано unter_officer (09-12-2022 23:07:00)


«The Truth Is Out There»

Отсутствует

 

№58510-12-2022 00:59:56

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

unter_officer
Спасибо. Добавил, пока не увеличивается, посмотрим.
   
xrun1
Спасибо. Работает вроде.
   

Dumby пишет

динамическая хром-регистрация

Спасибо.

Отредактировано _zt (15-12-2022 03:21:03)

Отсутствует

 

№58610-12-2022 10:15:08

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

_zt пишет

Кнопку + батник для себя не делали?

Нет, не делал.

У меня окно кук в [firefox] 102 растет по вертикали после каждого запуска с удалением

Да, есть такое.
Можно скопировать xhtml'ку в UCF, дописать persist'а и windowtype,
и загружать уже этот адрес. Ну и почистить код, соответственно.


Или динамическая хром-регистрация, viewCookies() типа

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

Выделить код

Код:

async viewCookies() {
                var sds = "chrome://ucfsdswnd/content/sds.xhtml";
                var type = "Browser:SiteDataSettings", g = Cu.getGlobalForObject(Cu);
                if (!Object.hasOwn(g, sds)) {
                    var xhtml = (await (await fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text())
                        .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`);
                    g[sds] = Cc["@mozilla.org/addons/addon-manager-startup;1"]
                        .getService(Ci.amIAddonManagerStartup).registerChrome(
                            Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)),
                            [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]]
                        );
                }
                (this.viewCookies = async () => {
                    var uri = gBrowser.selectedBrowser.currentURI;
                    try {
                        let _uri = ReaderMode.getOriginalUrl(uri.spec);
                        if (_uri)
                            uri = Services.io.newURI(_uri);
                    } catch(e) {}
                    uri = this.getETDL(uri);
                    var _win = Services.wm.getMostRecentWindow(type);
                    await SiteDataManager.updateSites();
                    if (!_win)
                        await new Promise(resolve =>
                            (_win = openDialog(sds, type, "chrome,dialog=no,resizable"))
                                .addEventListener("DOMContentLoaded", resolve, {once: true})
                        );
                    else if ("_gSiteDataSettings" in _win)
                         _win._gSiteDataSettings();
                    else {
                        Services.scriptloader.loadSubScript("data:," + encodeURIComponent(`
                            var _gSiteDataSettings = gSiteDataSettings._gSiteDataSettings = (function() {
                                SiteDataManager.getSites().then(sites => {
                                    this._sites = sites;
                                    var sortCol = document.querySelector("treecol[data-isCurrentSortCol=true]");
                                    this._sortSites(this._sites, sortCol);
                                    this._buildSitesList(this._sites);
                                });
                            }).bind(gSiteDataSettings);
                            _gSiteDataSettings();
                            var updateSetInterval = setInterval(async () => {
                                await SiteDataManager.updateSites();
                                _gSiteDataSettings();
                            }, 5000);
                            let removeBtns = document.querySelectorAll("#removeSelected, #removeAll");
                            var updateClearInterval = () => {
                                clearInterval(updateSetInterval);
                                for (let btn of removeBtns)
                                    btn.removeEventListener("command", updateClearInterval);
                                updateClearInterval = null;
                            };
                            for (let btn of removeBtns)
                                btn.addEventListener("command", updateClearInterval);
                        `), _win);
                         _win.addEventListener("unload", () => {
                            _win.updateClearInterval?.();
                        }, { once: true });
                    }
                    _win.focus();
                    var filter = _win.document.getElementById("searchBox");
                    if (!filter) return;
                    filter.value = uri;
                    filter.focus();
                    filter.dispatchEvent(new _win.Event("input", { bubbles: true }));
                })();
            },

Отсутствует

 

№58710-12-2022 20:06:17

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby а что надо исправить в этой кнопке Переключить куки что бы окно не росло по вертикали в [firefox] 107.0.1?

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

Выделить код

Код:

//Переключить Куки
try {(() => {
    var id = "ucf-cookie-toggle",
    label = "Переключить Куки",
    tooltiptext = "ЛКМ: Переключить Куки\nСКМ: Удалить куки домена текущей страницы\nПКМ: Управление куками",
    gpref = "network.cookie.cookieBehavior",
    img = "data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='32'><path style='fill:none;stroke:context-fill;stroke-opacity:context-fill-opacity;stroke-width:1.2;stroke-linecap:round;stroke-linejoin:round;' d='M12.5 10.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1h-1v-1M8 .6C8 5 11 8 15.4 8c0 4-3.4 7.4-7.4 7.4S.6 12 .6 8 4 .6 8 .6M12.5 26.5v-1h-1v1h1m-4-4h1v1h-1v-1m0 7h1v-1h-1v1m-6-7h1v1h-1v-1m4 4v-1h-1v1h1m-3 3v-1h-1m3-9h1v1m2-3.5v.5h1V17m2 2.5v1h1v-1h-1m3.5 3h-.5v1h.5m-8.5-3h-1v-1M8 16.6c4 0 7.4 3.4 7.4 7.4S12 31.4 8 31.4.6 28 .6 24 4 16.6 8 16.6'/></svg>";

    var tbarbtns = {
        initialised: false,
        get network_cookie_cookieBehavior() {
            delete this.network_cookie_cookieBehavior;
            try {
                return this.network_cookie_cookieBehavior = Services.prefs.getIntPref(gpref);
            } catch(e) { }
            return this.network_cookie_cookieBehavior = null;
        },
        init() {
            if (this.initialised) return;
            this.initialised = true;
            Services.prefs.addObserver(gpref, this);
        },
        prefToggleNumber(pref, next) {
            Services.prefs.setIntPref(pref, next[Services.prefs.getIntPref(pref)]);
        },
        getETDL(uri) {
            var eTLD = "";
            try {
                eTLD = Services.eTLD.getBaseDomain(uri);
            } catch (e) {
                try {
                    eTLD = uri.asciiHost;
                } catch (e) {}
            }
            return eTLD;
        },
        async viewCookies(win) {
            var uri = win.gBrowser.selectedBrowser.currentURI;
            try {
                let _uri = win.ReaderMode.getOriginalUrl(uri.spec);
                if (_uri)
                    uri = Services.io.newURI(_uri);
            } catch(e) {}
            uri = this.getETDL(uri);
            var type = "Browser:SiteDataSettings", id = "SiteDataSettingsDialog";
            var _win = Services.wm.getMostRecentWindow(type);
            if (!_win) {
                await win.SiteDataManager.updateSites();
                let url = "chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml", xs = Services.xulStore;
                let sx = xs.getValue(url, id, "screenX");
                let sy = xs.getValue(url, id, "screenY");
                let wh = xs.getValue(url, id, "width");
                let ht = xs.getValue(url, id, "height");
                let sm = xs.getValue(url, id, "sizemode");
                let features = `chrome,dialog=no,resizable,${sx && sy ? `screenX=${sx !== "0" ? sx : "1"},screenY=${sy !== "0" ? sy : "1"}` : "centerscreen"}${wh && ht ? `,width=${wh},height=${ht}` : ""}`;
                _win = win.openDialog(url, type, features);
                await new Promise(resolve => {
                    _win.windowRoot.addEventListener("DOMContentLoaded", () => {
                        _win.windowRoot.addEventListener("MozUpdateWindowPos", () => {
                            if (sm === "maximized")
                                _win.maximize();
                        }, { once: true, capture: true });
                        resolve();
                    }, { once: true });
                });
            }
            var doc = _win.document;
            var docEl = doc.documentElement;
            docEl.setAttribute("windowtype", type);
            docEl.id = id;
            docEl.setAttribute("persist", "screenX screenY width height sizemode");
            _win.focus();
            var filter = doc.querySelector("#searchBox");
            if (!filter) return;
            filter.value = uri;
            filter.focus();
            filter.dispatchEvent(new _win.Event("input", { bubbles: true }));
        },
        callWithEachWindow(buttonID, atr) {
            var getW = CustomizableUI.getWidget(buttonID);
            if (getW.instances.length)
                for (let {node} of getW.instances) {
                    if (!node) continue;
                    for (let a in atr)
                        node.setAttribute(a, atr[a]);
                }
            else
                for (let win of CustomizableUI.windows) {
                    let node = getW.forWindow(win).node;
                    if (!node) continue;
                    for (let a in atr)
                        node.setAttribute(a, atr[a]);
                }
        },
        observe(subject, topic, pref) {
            if (pref == gpref) {
                delete this.network_cookie_cookieBehavior;
                let network_cookie_cookieBehavior = this.network_cookie_cookieBehavior = Services.prefs.getIntPref(pref);
                this.callWithEachWindow(id, {badge: network_cookie_cookieBehavior, badgeStyle: `background: ${network_cookie_cookieBehavior !== 2 ? "#0074e8" : "#e31b5d"}; color: #ffffff; font-size: 10px; line-height: 10px; box-shadow: none; text-shadow: none; padding-block: 0 1px !important; padding-inline: 2px !important; min-width: 0 !important;`});
            }
        },
        uninit() {
            if (!this.initialised) return;
            Services.prefs.removeObserver(gpref, this);
            this.initialised = false;
        },
    };
    CustomizableUI.createWidget({
        id: id,
        type: "custom",
        label: label,
        tooltiptext: tooltiptext,
        localized: false,
        defaultArea: CustomizableUI.AREA_NAVBAR,
        onBuild(document) {
            var win = document.defaultView, trbn = document.createXULElement("toolbarbutton");
            trbn.id = id;
            trbn.className = "toolbarbutton-1 chromeclass-toolbar-additional badged-button";
            trbn.setAttribute("badged", "true");
            trbn.setAttribute("constrain-size", "true");
            trbn.setAttribute("label", label);
            trbn.setAttribute("context", "false");
            trbn.setAttribute("tooltiptext", tooltiptext);
            var cookieBehavior = tbarbtns.network_cookie_cookieBehavior;
            if (cookieBehavior !== null) {
                trbn.setAttribute("badge", cookieBehavior);
                trbn.setAttribute("badgeStyle", `background: ${cookieBehavior !== 2 ? "#0074e8" : "#e31b5d"}; color: #ffffff; font-size: 10px; line-height: 10px; box-shadow: none; text-shadow: none; padding-block: 0 1px !important; padding-inline: 2px !important; min-width: 0 !important;`);
                trbn.addEventListener("click", e => {
                    if (e.button == 0)
                        tbarbtns.prefToggleNumber(gpref, [1,2,3,4,5,0]);
                    else if (e.button == 1) {
                        if (!win.gIdentityHandler?._uriHasHost || win.gIdentityHandler._pageExtensionPolicy)
                            return;
                        let baseDomain = win.SiteDataManager.getBaseDomainFromHost(win.gIdentityHandler._uri.host);
                        win.SiteDataManager.hasSiteData(baseDomain).then(hasData => {
                            if (hasData && win.SiteDataManager.promptSiteDataRemoval(win, [baseDomain]))
                                win.SiteDataManager.remove(baseDomain);
                        });
                    } else if (e.button == 2) {
                        e.preventDefault();
                        e.stopPropagation();
                        tbarbtns.viewCookies(win);
                    }
                });
            }
            var btnstyle = "data:text/css;charset=utf-8," + encodeURIComponent(`
                #${id} {
                    list-style-image: url("${img}") !important;
                    -moz-image-region: rect(0px, 16px, 16px, 0px) !important;
                }
                #${id}[badge="0"] {
                    -moz-image-region: rect(16px, 16px, 32px, 0px) !important;
                }
                #${id}[badge="2"] {
                    fill: color-mix(in srgb, currentColor 20%, #e31b5d) !important;
                }
            `);
            try {
                win.windowUtils.loadSheetUsingURIString(btnstyle, win.windowUtils.USER_SHEET);
            } catch (e) {}
            tbarbtns.init();
            return trbn;
        },
        onDestroyed(doc) {
            tbarbtns.uninit();
        },
    });
})();} catch(e) {}

_zt Вы  правы

Отсутствует

 

№58811-12-2022 19:43:29

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

egorsemenov06 пишет

а что надо исправить в этой кнопке Переключить куки что бы окно не росло по вертикали в [firefox] 107.0.1?

Ну тоже что-то сделать с методом viewCookies().
Например, заменить на такой

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

Выделить код

Код:

//
        async viewCookies(win) {
            var func = async sds => {
                await document.documentReadyForIdle;
                var upd, box = document.getElementById("searchBox");
                (upd = site => box.setUserInput(site, box.focus()))(window.arguments[0]);
                var attr = "data-isCurrentSortCol", sel = `treecol[${attr}=true]`;
                window.updSearch = async site => {
                    var sites = sds._sites = await SiteDataManager.getSites();
                    var col = document.querySelector(sel);
                    col.removeAttribute(attr);
                    sds._sortSites(sites, col);
                    sds._buildSitesList(sites);
                    window.focus(upd(site));
                }
            }
            var type = "Browser:SDS";
            var xhtml = (await (await win.fetch("chrome://browser/content/preferences/dialogs/siteDataSettings.xhtml")).text())
                .replace(/(persist=".+)"/, `$1 screenX screenY sizemode" windowtype="${type}"`)
                .replace(/<script .+>/, `$&\n  <script>(${func})(gSiteDataSettings);\n  </script>\n${
                    ["globalOverlay", "editMenuOverlay"]
                        .map(n => `  <script src="chrome://global/content/${n}.js"/>`).join("\n")
                }`);

            var sds = "chrome://ucfsdswnd/content/sds.xhtml";
            this.cr = Cc["@mozilla.org/addons/addon-manager-startup;1"]
                .getService(Ci.amIAddonManagerStartup).registerChrome(
                    Services.io.newFileURI(Services.dirsvc.get("ProfD", Ci.nsIFile)),
                    [["override", sds, "data:application/xhtml+xml," + encodeURIComponent(xhtml)]]
                );
            (this.viewCookies = async win => {
                var uri = win.gBrowser.selectedBrowser.currentURI;
                try {
                    var u = win.ReaderMode.getOriginalUrl(uri.spec);
                    if (u) uri = Services.io.newURI(u);
                } catch {}
                uri = this.getETDL(uri);

                await win.SiteDataManager.updateSites();
                var w = Services.wm.getMostRecentWindow(type);
                w ? w.updSearch(uri) : win.openDialog(sds, type, "chrome,dialog=no,resizable", uri);
            })(win);
        },

Отсутствует

 

№58911-12-2022 20:47:34

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Ну тоже что-то сделать с методом viewCookies().
Например, заменить на такой

Спасибо Огромное!!!

Отсутствует

 

№59012-12-2022 22:13:08

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 37
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby здесь вопрос под первым спойлером, а здесь ответ.
Посмотрите, пожалуйста, можно ли заставить работать на 68 ESR. xhtml на xul заменил, результат отрицательный. Что интересно, на Mypal68 (форке 68esr для ХР) скрипт срабатывает. В Вин10 и 78esr, 91esr, 102esr, 107 - тоже без проблем.

Отсутствует

 

№59113-12-2022 13:30:58

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

LGS пишет

xhtml на xul заменил, результат отрицательный

Этого недостаточно. Надо ещё от этого оператора избавиться,
его поддержка добавлена в Firefox только с версии 74 (в Mypal68, видимо, она есть).


Правки можно по-разному записать. Допустим, такой вариант

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

Выделить код

Код:

/*
            var listener = e => {
                var doc = e.target || ({});
                load_scripts_by_url[doc.documentURI]?.(doc.defaultView);
            };
*/
            var listener = e => load_scripts_by_url.x(e.target.ownerGlobal);
Выделить код

Код:

/*
            if (win.arguments?.find(f => f === "Downloads" || f === "History" || f === "Tags")) return;
*/
            if (/^(?:Downloads|History|Tags)(?:,|$)/.test(String(win.arguments))) return;
Выделить код

Код:

/*
    };
    load_scripts_by_url[location.href]?.(window);
*/
        x(win) {
            var func = this[win.location.href];
            func && func(win);
        }
    };
    load_scripts_by_url.x(window);

Отсутствует

 

№59213-12-2022 14:26:31

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 37
UA: Firefox 78.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Надо ещё от этого оператора избавиться

Да, именно на "?." консоль ругалась, а как правильно сделать, естественно, не знал, поэтому и обратился к профессионалу. Тупое удаление оператора вопрос не решало, писать про это не стал, чтобы еще глупее не выглядеть.

Dumby пишет

Допустим, такой вариант

Отличный вариант, спасибо.

Отсутствует

 

№59317-12-2022 19:00:59

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

https://hg.mozilla.org/mozilla-central/rev/49cefc94b9bd

https://github.com/xiaoxiaoflood/firefox-scripts/commit/33c69b5b959b84d3982eb6f72aefd1cca14e3ad3#diff-c8669a0b709ab73f8751d7e079d6c3b98ac1c464b5a9e1592f28e91ab7a63de7

Отсутствует

 

№59423-12-2022 23:58:38

mfrost
Участник
 
Группа: Members
Зарегистрирован: 08-05-2019
Сообщений: 9
UA: Firefox 108.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Я дико извиняюсь, на чистоустановленного лиса, залил архив из первого сообщения этой темы https://forum.mozilla-russia.org/viewto … 26#p791126, все по полочкам, пытаюсь прикрутить к нему скрипт про ненужные папки https://forum.mozilla-russia.org/viewto … 25#p777225 , а у меня, к сожалению, ничего не выходит.... Если кому не сложно скиньте свой файл заведомо рабочий, для такого криворукого идиота я:)
З.Ы : лис 108

Отредактировано mfrost (24-12-2022 00:06:47)

Отсутствует

 

№59524-12-2022 01:11:27

mfrost
Участник
 
Группа: Members
Зарегистрирован: 08-05-2019
Сообщений: 9
UA: Firefox 108.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Не пойму может я идиот, но у меня все равно не работает:(

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

Выделить код

Код:

// Скрипт для документа окна браузера [ChromeOnly]
var ucf_custom_script_win = {
    initialized: false,
    get unloadlisteners() {
        delete this.unloadlisteners;
        window.addEventListener("unload", this, { once: true });
        return this.unloadlisteners = [];
    },
    load() {
        if (this.initialized)
            return;
        this.initialized = true;
        /* ************************************************ */

        // Здесь может быть ваш код который сработает по событию "load"

((type, listener) => {
    addEventListener(type, listener);
    addEventListener("unload", () => removeEventListener(type, listener), {once: true});
})("MozBeforeInitialXULLayout", {
    handleEvent(e) {
        e.target.documentURI.endsWith(this.ends) &&
        Object.defineProperty(e.target.getElementById("bookmarks-view"), "place", this);
    },
    get ends() {
        delete this.ends;
        return this.ends = `/bookmarksSidebar.x${
            parseInt(Services.appinfo.platformVersion) >= 73 ? "htm" : "u"
        }l`;
    },
    configurable: true,
    set() {
        delete this.place;
        this.place = "place:parent=menu________";
    }
});

        /* ************************************************ */
    },
    handleEvent(e) {
        this[e.type](e);
    },
    unload() {
        this.unloadlisteners.forEach(str => {
            try {
                this[str].destructor();
            } catch (e) {}
        });
    },
};
/* ************************************************ */

// Здесь может быть ваш код который сработает по событию "DOMContentLoaded"


Пробовал в разных вариантах, не работает, все равно :( Может я что в настройках не включил? 3й день на лисе 108 до этого сидел на 68 все работало изумительно.... ни папки меню закладок, ни других тебе закладок....

Отредактировано mfrost (24-12-2022 01:15:33)

Отсутствует

 

№59624-12-2022 01:38:45

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

mfrost пишет

Может я что в настройках не включил?

Кстати, вполне возможно. Типа эту галку


Включить скрипты:
[  ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[  ] Для докум. всех окон [ChromeOnly]

Отредактировано Dumby (24-12-2022 01:39:12)

Отсутствует

 

№59724-12-2022 14:01:51

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 37
UA: Firefox 68.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby, посмотрите, пожалуйста, можно ли "оживить" этот древний скрипт, а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr. Для первого "зачистка" по вашей рекомендации у меня не помогает, для второго замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно.

Отсутствует

 

№59824-12-2022 20:54:20

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

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

LGS пишет

а еще лучше адаптировать dav_LinkifiesLocationBar.uc.js для 68esr

Ууу, копаться в этом радости мало.

замены в стр.14 chrome://browser/content/browser.xhtml на xul явно недостаточно

Если код в custom_script_win.js, то «стр.14» не нужна как таковая, убери её.


Чтобы как-то завелось, можно попробовать заменить пару строк

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

Выделить код

Код:

/*
		var urlBarInput = getWindow().document.querySelector("#urlbar-input").value;
*/
		var urlBarInput = gURLBar.value;


/*
	var urlbarInput = getWindow().document.querySelector("#urlbar-input");
*/
	var urlbarInput = gURLBar.inputField;


И, там ещё есть текст стиля в var stylexul = `…`;
Так вот, в нём, заменить все (три) решётки (#) на точки (.),
то есть, с идентификатора на класс.

Отсутствует

 

№59925-12-2022 10:18:03

LGS
Участник
 
Группа: Members
Зарегистрирован: 17-09-2022
Сообщений: 37
UA: Firefox 68.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет

Ууу, копаться в этом радости мало

Извиняюсь за отнятое время.

Dumby пишет

Чтобы как-то завелось, можно попробовать заменить пару строк

Завелось и работает, благодарю!

Отсутствует

 

№60026-12-2022 19:33:01

mfrost
Участник
 
Группа: Members
Зарегистрирован: 08-05-2019
Сообщений: 9
UA: Firefox 108.0

Re: UCF - ваши кнопки, темы, дополнения, скрипты…

Dumby пишет
mfrost пишет

Может я что в настройках не включил?

Кстати, вполне возможно. Типа эту галку


Включить скрипты:
[  ] В фоне [System Principal]
[✔] Для докум. окна браузера [ChromeOnly] ◄◄◄◄◄◄◄
[  ] Для докум. всех окон [ChromeOnly]

Товарищи, подскажите где это включить в настройках не нашел:(

Отсутствует

 

Board footer

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