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

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

№65112-02-2023 12:20:16

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

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

Dumby
Большое спасибо! Всё отлично работает.


«The Truth Is Out There»

Отсутствует

 

№65215-02-2023 09:23:39

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

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

Dumby Посмотрите пожалуйста кнопку Переключить Куки на ней не отображаеться иконка в [firefox] 110.0

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

Выделить код

Код:

//Переключить Куки
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 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);
        },
        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) {}

Отсутствует

 

№65316-02-2023 06:44:28

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

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

egorsemenov06
Можно сменить протокол svg'шки.
Создать, например, cookie-toggle.svg
допустим, в папке user_chrome_files\custom_scripts\imgs


Содержимое файла взять из data-адреса от «<svg» и до «/svg>» включительно.
Тогда в коде меняем

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

Выделить код

Код:

/*
    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>";
*/
    img = "chrome://user_chrome_files/content/custom_scripts/imgs/cookie-toggle.svg";


Можно и динамическую хром-регистрацию в код вписать, если очень надо.
Смотрю, и как resource-адрес тоже работает
скрытый текст

Выделить код

Код:

/*
    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>";
*/
    img = (rph => {
        var subst = "ucf-cookie-toggle-btn-img";
        rph.setSubstitution(subst, Services.io.newURI(
            "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>"
        ));
        return `resource://${subst}/`;
    })(Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler));


Ну, или включить настройку svg.context-properties.content.enabled
Но, я не знаю почему она дефолтно выключена,
может тому есть какие-то веские причины.

Отсутствует

 

№65416-02-2023 10:03:10

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

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

Dumby пишет

Ну, или включить настройку svg.context-properties.content.enabled Но, я не знаю почему она дефолтно выключена,может тому есть какие-то веские причины.

Спасибо Большое!!!

Отсутствует

 

№65517-02-2023 10:18:53

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

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

egorsemenov06
Опаньки!
Bug 1817071 - Remove -moz-image-region


Попытка наброска реплейсмента, если 16px:


1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);


2. Правка стиля

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

Выделить код

Код:

/*
                #${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} image {
                    --h: 16px;
                    height: var(--h); !important;
                    object-fit: cover !important;
                    object-position: top !important;
                }
                #${id}[badge="0"] image {
                    object-position: 0 calc(-1 * var(--h)) !important;
                }

Отсутствует

 

№65617-02-2023 14:02:21

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

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

Dumby пишет

egorsemenov06Опаньки!Bug 1817071 - Remove -moz-image-regionПопытка наброска реплейсмента, если 16px:1. После многочисленных trbn.setAttribute(…) — ещё одинtrbn.setAttribute("image", img);2. Правка стиляскрытый текстВыделить кодКод:/*
                #${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} image {
                    --h: 16px;
                    height: var(--h); !important;
                    object-fit: cover !important;
                    object-position: top !important;
                }
                #${id}[badge="0"] image {
                    object-position: 0 calc(-1 * var(--h)) !important;
                }

я включил насройку svg.context-properties.content.enabled и она нормально стала отображаться.Сейчас попробовал правку стиля и иконка опять пропала.Но всеравно Спасибо Вам может в будущем опять такое же получиться а так работает и мать с ней.

Отсутствует

 

№65717-02-2023 16:42:29

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

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

Dumby пишет

1. После многочисленных trbn.setAttribute(…) — ещё один
trbn.setAttribute("image", img);


2. Правка стиля

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

Выделить код

Код:

/*
                #${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} image {
                    --h: 16px;
                    height: var(--h); !important;
                    object-fit: cover !important;
                    object-position: top !important;
                }
                #${id}[badge="0"] image {
                    object-position: 0 calc(-1 * var(--h)) !important;
                }

У меня в этой кнопке иконка не пропадала. Видимо из-за включенного svg.context-properties.content.enabled. Но на всякий случай фикс все же накатил.
После применения фикса все ОК. Спасибо.


«The Truth Is Out There»

Отсутствует

 

№65821-02-2023 15:06:43

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

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

Dumby, скажите, пожалуйста, а нельзя ли с помощью скрипта вернуть пункт в контекстном меню адресной строки "Вставить и перейти" в версиях 91 и выше..?
Как было в старых версиях:
PastGo.1676980660.png
Без него как-то не совсем комфортно... чего-то удобного из функционала не хватает.
Что интересно, в новых версиях ФФ в строке поиска (не адреса) пункт "Вставить и искать" оставили, а адресную почему-то обделили...

Отсутствует

 

№65921-02-2023 15:33:54

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

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

LGS пишет

нельзя ли с помощью скрипта вернуть пункт в контекстном меню адресной строки "Вставить и перейти"

Нет. Нельзя «вернуть» то, что не пропадало.

Отсутствует

 

№66021-02-2023 16:36:10

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

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

Dumby пишет

Нельзя «вернуть» то, что не пропадало.

Понятно.

Отсутствует

 

№66128-02-2023 11:15:21

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

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

Dumby, вы, вроде как, .uc.js машинерию не особо жалуете, но, может посмотрите этот скрипт, чтобы на 110 заработал.
Он показывает закладки(папки) из кнопки избранного, меню, гамбургера в боковой панели. На 102esr еще срабатывал, на 110 уже нет.
Консоль пишет ошибку Uncaught TypeError: PlacesUtils.bookmarks.getFolderIdForItem is not a function в строке  let aFolderItemId = PlacesUtils.bookmarks.getFolderIdForItem(node.itemId);.

Отсутствует

 

№66228-02-2023 13:23:29

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

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

LGS пишет

вы, вроде как, .uc.js машинерию не особо жалуете

С чего бы мне её не жаловать? Просто у меня её нет.
И, они разные бывают. Если что-то простое, типа скрит в окно и всё, то ещё ничего.

Но если там своих API понатыкано, то машинерию разворачивать надо,
а это, сам понимаешь, радости мало.

PlacesUtils.bookmarks.getFolderIdForItem is not a function

Может просто так

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

Выделить код

Код:

/*
      let aFolderItemId = PlacesUtils.bookmarks.getFolderIdForItem(node.itemId);
      if (aFolderItemId) {
*/
      if (node.parent.type == node.RESULT_TYPE_FOLDER) {

Отсутствует

 

№66328-02-2023 14:44:08

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

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

Dumby пишет

а это, сам понимаешь, радости мало

Поэтому и уточнил сначала... вдруг, желания связываться не будет.

Dumby пишет

Может просто так

Сработало! Только из гамбургера не подхватывает. Но я закладками оттуда не пользуюсь, поэтому и так хорошо.
Спасибо.

Отсутствует

 

№66401-03-2023 05:28:07

Dobrov
Участник
 
Группа: Members
Зарегистрирован: 04-10-2011
Сообщений: 395
UA: Firefox 97.0

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

Dumby - просьба исправить скрипт, скрывающий панель вкладок с одной вкладкой для FF-110 (на FF97 работало)
плюс используется стиль «Вкладки снизу»: от aris-t2 @import ./css/tabs/tabs_below_navigation_toolbar.css

Выделить код

Код:

// ucf_autohidetabstoolbar.js https://forum.mozilla-russia.org/viewtopic.php?pid=790733#p790733
(this.autohidetabstoolbar = {
	init(that) {
		var newtab = this.newtab = document.querySelector("#tabs-newtab-button");
		if (!newtab) return;
		newtab.addEventListener("animationstart", this);
		that.unloadlisteners.push("autohidetabstoolbar");
		var style = "data:text/css;charset=utf-8," + encodeURIComponent(`
			:root[ucfautohidetabstoolbar="true"] #TabsToolbar:not([customizing]) {
				visibility: collapse !important;
			}
			#main-window[ucfautohidetabstoolbar="true"]:not([customizing]) box > #navigator-toolbox {
				padding-bottom: 0 !important;
			}
			#tabs-newtab-button {
				opacity: 1;
				animation-name: toolbar_visible !important;
				animation-timing-function: step-start !important;
				animation-duration: .1s !important;
				animation-iteration-count: 1 !important;
				animation-delay: 0s !important;
			}
			.tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabs-newtab-button,
			.tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button {
				opacity: 0;
				animation-name: toolbar_hide !important;
			}
			@keyframes toolbar_visible {
				from { opacity: 0;}
				to {opacity: 1;}
			}
			@keyframes toolbar_hide {
				from {opacity: 1;}
				to {opacity: 0;}
			}
		`);
		windowUtils.loadSheetUsingURIString(style, windowUtils.USER_SHEET);
	},
	handleEvent(e) {
		this[e.animationName]?.();
	},
	toolbar_visible() {
		document.documentElement.setAttribute("ucfautohidetabstoolbar", "false");
	},
	toolbar_hide() {
		document.documentElement.setAttribute("ucfautohidetabstoolbar", "true");
	},
	destructor() {
		this.newtab.removeEventListener("animationstart", this);
	}
}).init(this);

Отсутствует

 

№66503-03-2023 08:12:16

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

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

Dobrov пишет

просьба исправить

Не способен.


То есть, атрибуты {first, last}-visible-tab выпилены,
однако, можно записать как-то так

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

Выделить код

Код:

/*
					.tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabs-newtab-button,
					.tabbrowser-tab[first-visible-tab="true"][last-visible-tab="true"] ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button {
						opacity: 0;
						animation-name: toolbar_hide !important;
					}
*/
					#tabs-newtab-button {
						animation-name: toolbar_hide !important;
					}
					.tabbrowser-tab:not([hidden]) ~ .tabbrowser-tab:not([hidden]) ~ #tabbrowser-arrowscrollbox-periphery > #tabs-newtab-button {
						animation-name: toolbar_visible !important;
					}


и будет срабатывать.
Но что дальше с этим делать — я без понятия.

Отсутствует

 

№66604-03-2023 13:43:29

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

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

Dumby
Помогите решить задачку.
При выделении текста на странице, на ряде сайтов, и последующем копировании этого текста (Ctrl+C), в начале текста, или в конце текста, или и там и там, также копируются пробелы.
Надо, что в буфер обмена попал текст без этих пробелов.


Я сам пытался что-то придумать. Вроде бы даже получился рабочий код:

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

Выделить код

Код:

try {
(this.ucf_SelectedTextToClipboard = {
	init(that) {
		document.addEventListener("keydown", this);
	},
	destructor() {
		this.document.removeEventListener("keydown", this);
	},
	handleEvent(e) {
		if (e.ctrlKey && e.code == "KeyC") {

			// выделенный текст из страницы .....
			var selection = document.commandDispatcher.focusedWindow.getSelection();

			// выделенный текст из текстового поля .....
			if ( selection.isCollapsed ) {
				var theBox = document.commandDispatcher.focusedElement;
				if (theBox && (theBox.type == "text" || theBox.type == "textarea" || theBox.type == "textbox" || theBox.type == "input" || theBox.type == "search")) {
					var startPos = theBox.selectionStart;
					var endPos = theBox.selectionEnd;
					selection = theBox.value.substring(startPos, endPos);
				}
			}

			if ( selection !== '' ) {
				setTimeout(()=> selection = gClipboard.read(), 100); // читаем из буфера обмена .....
				setTimeout(()=> selection = selection.toString().trim(), 100); // убираем пробелы .....
				setTimeout(()=> gClipboard.write(selection), 100); // записываем в буфер обмена .....
			}
			else { return; }
		}
	},
}).init(this);
} catch(e) {}

Но мне в этом коде не нравиться цепочка: копировать в буфер -> читать из буфера -> обрезать пробелы -> и снова копировать в буфер. А по другому сделать у меня не получается.
Помогите пожалуйста с кодом.


«The Truth Is Out There»

Отсутствует

 

№66704-03-2023 16:22:58

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

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

unter_officer
Прости великодушно, но код — эпический ппц.

Выделить код

Код:

//
	init(that) {
		document.addEventListener("keydown", this);
	},
	destructor() {
		this.document.removeEventListener("keydown", this);
	},

Что ещё за «this.document»? Просто document
И, если имелось в виду, что удалить листенер по выгрузке окна,
то это так не работает. Следует явно указать в init() имя объекта с методом destructor()
that.unloadlisteners.push("ucf_SelectedTextToClipboard");

Выделить код

Код:

//
			// выделенный текст из страницы .....
			var selection = document.commandDispatcher.focusedWindow.getSelection();

			// выделенный текст из текстового поля .....
			if ( selection.isCollapsed ) {

Какой ещё страницы? Какого ещё текстового поля?
Всё это добро находится в другом(!) процессе.
Нету больше прямого доступа к содержимому веб-страниц. И уже давно.

не нравиться цепочка: копировать в буфер -> читать из буфера -> обрезать пробелы -> и снова копировать в буфер.

Ну «копировать в буфер» уже произошло, ведь слушается Ctrl+C,
а чем не нравится «читать из буфера -> обрезать пробелы -> и снова копировать в буфер»
я не понял, разве есть другие варианты?


И, код, вроде как, под UCF, но используется объект gClipboard,
а его добавляет в окно CB, то есть, если неиметь/удалить/выключить CB,
то код просто не будет работать.

Отредактировано Dumby (04-03-2023 16:26:39)

Отсутствует

 

№66804-03-2023 20:04:58

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

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

Dumby пишет

Прости великодушно, но код — эпический ппц.

Для меня листенеры и деструкторы всегда были "темным лесом". Плюс, в данном случае, моя невнимательность.


Dumby пишет

И, код, вроде как, под UCF, но используется объект gClipboard

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



Не знаю, правильно или нет..... в общем, получился у меня вот такой код:

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

Выделить код

Код:

try {
(this.ucf_SelectedTextToClipboard = {
	init(that) {
		document.addEventListener("keydown", this);
	},
	handleEvent(e) {
		if (e.ctrlKey && e.code == "KeyC") {

			var write, read = () => {
				var cb = Services.clipboard, gc = cb.kGlobalClipboard, fl = "text/plain";
				var ch = Cc["@mozilla.org/widget/clipboardhelper;1"].getService(Ci.nsIClipboardHelper);
				write = str => ch.copyStringToClipboard(str, gc);

				var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
				trans.init(null);

				return (read = () => {
					trans.addDataFlavor(fl);
					cb.getData(trans, gc);
					var res = {};
					trans.getTransferData(fl, res);
					res = res.value?.QueryInterface(Ci.nsISupportsString).data;
					trans.removeDataFlavor(fl);
					return res;
				})();
			}

			var selection = '';
			setTimeout(()=> selection = read(), 100); // читаем из буфера обмена .....
			setTimeout(()=> selection = selection.toString().trim(), 100); // убираем пробелы с обоих концов текста .....
			setTimeout(()=> write(selection), 100); // записываем в буфер обмена .....
		}
	},
}).init(this);
} catch(e) {}

В нем я использовал вашу функцию из другой кнопки. Вроде работает.
На большее, в данном вопросе, я пожалуй не способен.


«The Truth Is Out There»

Отсутствует

 

№66914-03-2023 17:41:21

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

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

Dumby
В кнопке ATB 2021.9.5 перестал работать переход по адресу из буфера обмена, исправьте пожалуйста!


Win7

Отсутствует

 

№67014-03-2023 18:28:29

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

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

kokoss пишет

В кнопке ATB 2021.9.5 перестал работать переход по адресу из буфера обмена, исправьте пожалуйста!

И ещё в кнопке поиск на странице не работает СКМ: Поиск на этой странице из буфера обмена.

Отсутствует

 

№67114-03-2023 20:00:37

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

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

kokoss
Попробуй, например, такую правку parent.js

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

Выделить код

Код:

/*
    readFromClipboard(win) {
        var url = "";
        try {
            var trans = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
            var contxt = ("docShell" in win) ? win.docShell.QueryInterface(Ci.nsILoadContext) : win.QueryInterface(Ci.nsIInterfaceRequestor).getInterface(Ci.nsIWebNavigation).QueryInterface(Ci.nsILoadContext);
            trans.init(contxt);
            trans.addDataFlavor("text/unicode");
            var clipboard = Services.clipboard;
            clipboard.getData(trans, clipboard.kGlobalClipboard);
            var data = {};
            trans.getTransferData("text/unicode", data, {});
            if (data.value) {
                data = data.value.QueryInterface(Ci.nsISupportsString);
                url = data.data;
            }
        } catch (ex) {}
        return url;
    },
*/
    readFromClipboard() {
        var {getData, kGlobalClipboard: kGK} = Services.clipboard;
        var flavor = `text/${parseInt(Services.appinfo.platformVersion) >= 111 ? "plain" : "unicode"}`;
        var transferable = Cc["@mozilla.org/widget/transferable;1"].createInstance(Ci.nsITransferable);
        transferable.init(null);
        transferable.addDataFlavor(flavor);

        return (this.readFromClipboard = () => {
            try {
                getData(transferable, kGK);
                var out = {};
                transferable.getTransferData(flavor, out);
                var url = out.value.QueryInterface(Ci.nsISupportsString).data;
            }
            finally {
                transferable.setTransferData(flavor, null);
                return url || "";
            }
        })();
    },

Отсутствует

 

№67214-03-2023 21:16:49

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

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

Dumby пишет

Попробуй, например, такую правку parent.js
скрытый текст

Благодарю!


voqabuhe пишет

И ещё в кнопке поиск на странице не работает СКМ: Поиск на этой странице из буфера обмена.

В этой кнопке работает только ЛКМ.

Отредактировано kokoss (14-03-2023 21:17:13)


Win7

Отсутствует

 

№67315-03-2023 02:28:27

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

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

kokoss пишет

В этой кнопке работает только ЛКМ.

Эта кнопка? https://imgsh.net/a/LYEkjcn.png
У меня все пункты работают.

Отсутствует

 

№67415-03-2023 05:39:07

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

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

Dumby пишет

Попробуй, например, такую правку parent.js

Спасибо.

kokoss пишет

В этой кнопке работает только ЛКМ.

Но теперь то всё работает.

xrun1 пишет

У меня все пункты работают.

В смысле после правки от Dumby работают, или без неё работают?

Отсутствует

 

№67515-03-2023 09:01:06

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

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

voqabuhe пишет

Но теперь то всё работает.

Да, после правки вроде всё заработало.


Win7

Отсутствует

 

Board footer

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