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

В мире Mozilla происходит много интересных событий. Но вам не нужно постоянно посещать новостные сайты, чтобы быть в курсе всех изменений. Зайдите на ленту новостей Mozilla Россия.

№165128-06-2024 22:57:56

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

Re: UCF - ваши кнопки, скрипты…

Vitaliy V. пишет

А почему не установить расширение

Для меня «из дополнения сделать скрипт для UCF»
звучит как задача сделать так,
чтобы работало именно минуя лисью аддонскую машинерию.


Хотя да, согласен, задача странная. Вот, попробовал так, но,
что-то не уверен, и особо тестировать это не охота.


Создаём папку, кладём туда .xpi файл расширения (как есть).
И создаём в ней startup.js, который подключаем в сандбокс.

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

Выделить код

Код:

(async () => {
	var fn = Components.stack.filename;
	var folder = fn.slice(0, fn.lastIndexOf("/") + 1);

	var dir = Cc["@mozilla.org/chrome/chrome-registry;1"]
		.getService(Ci.nsIXULChromeRegistry)
		.convertChromeURL(Services.io.newURI(folder))
		.QueryInterface(Ci.nsIFileURL);

	for(var {leafName} of dir.file.directoryEntries)
		if (leafName.endsWith(".xpi")) break;

	var rootURI = `jar:${dir.spec + leafName}!/`;

	var sym = "llc about br";
	var read = async sub => (await fetch(rootURI + sub)).text();
	var opts = await read("options.xhtml");

	var what = "llc";
	var flags = Ci.nsIAboutModule.ALLOW_SCRIPT;
	var factory = {
		newChannel(...args) {
			var nc = Services.io.newChannelFromURIWithLoadInfo;
			opts = opts.replace(/((?:href|src)=")(.+?")/g, `$1${rootURI}$2`).replace(/<\/head>/,
				`    <script>var browser = windowRoot.ownerGlobal.UcfPrefs.customSandbox[Symbol.for("${sym}")];</script>\n    $&`
			);
			var uri = Services.io.newURI("data:application/xhtml+xml," + encodeURIComponent(opts));
			var sysp = Services.scriptSecurityManager.getSystemPrincipal();

			return (this.newChannel = (u, loadInfo) => {
				var channel = nc(uri, loadInfo);
				channel.owner = sysp;
				return channel;
			})(...args);
		},
		getURIFlags: () => flags,
		createInstance: () => factory,
		QueryInterface: ChromeUtils.generateQI(["nsIAboutModule"])
	};
	Components.manager.QueryInterface(Ci.nsIComponentRegistrar).registerFactory(
		Components.ID("{747e75d6-3146-4c55-b241-f751fa2e73b5}"), null,
		"@mozilla.org/network/protocol/about;1?what=" + what, factory
	);

	var locData = Object.create(null);
	var locs = Array.from((await read("_locales/")).match(/\n201: .+?\//g), s => s.slice(6, -1));
	for(var loc of locs) locData[loc] = JSON.parse(await read(`_locales/${loc}/messages.json`));
	var getMessage = msg => (locData[Services.locale.appLocaleAsBCP47] || locData["en-US"])[msg].message;

	var obj = {ExtensionAPI: class {}};
	obj.ExtensionAPI.prototype.extension = {
		resourceURL: rootURI,
		localeData: {localizeMessage: getMessage}
	};
	Services.scriptloader.loadSubScript(rootURI + "parent.js", obj);
	var LLC = obj.LongLeftClick.prototype;

	var br = globalThis[Symbol.for(sym)] = {i18n: {getMessage}};
	Object.assign(br, LLC.getAPI());
	var {getPref} = br.LongLeftClick;
	br.LongLeftClick.getPref = async arr => getPref(arr);

	Services.scriptloader.loadSubScript("data:,var llcc = longLClick;", obj);

	var {lgltck} = obj, proto = obj.llcc.prototype;
	Object.assign(proto, eval(`({${proto.openLink}})`.replace(
		"addListeners();", "$&\n        if (this.maybeSelectTab(link, win)) return;"
	)));

	// Options
	var b_tabs = "tabs"; // "tabs" or "visibleTabs"
	var b_equals = "equals"; // "equals" or "equalsExceptRef"
	var b_allWins = false;
	var b_skipContainerTabs = true;

	var wins = b_allWins
		? win => new Set([win, ...Services.wm.getEnumerator("navigator:browser")])
		: win => [win];
			
	proto.maybeSelectTab = (link, win) => {
		var uri = Services.io.newURI(link);
		for(var w of wins(win)) for(var tab of w.gBrowser[b_tabs]) try {
			if (b_skipContainerTabs && tab.userContextId)
				continue;
			if (uri[b_equals](tab.linkedBrowser.currentURI))
				return w != win && w.focus(), w.gBrowser.selectedTab = tab;
		} catch {};
	}

	LLC.onStartup();

})();


Правда у меня с самим LLC наблюдаются некоторые непонятки.


В сайдбаре, производишь долгий клик по закладке — открывается вкладка.
Отпускаешь мышь — открывается ещё одна.
Это в смысле, что включена настройка browser.tabs.loadBookmarksInTabs
иначе симптомы другие, но есть.


Лечится удалением из parent.js всех mozSystemGroup: true
Зачем они там — понять не смог.


Ещё, похоже, контейнер, в котором отрывается вкладка,
привязан к контейнеру активной вкладки. Для контента — это правильно.
Но для браузера — это немного странно. В самом Firefox такой привязки нет,
а для открытия закладок в контейнере есть специальный пункт в контекстном меню.


И, в parent.js замечен toolbar#add-additional-vertical-bar
что слегка несовременно.

Отсутствует

 

№165229-06-2024 11:57:37

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

А закрывать по щелчку в поле контента нельзя?

Проверяйте

Dumby пишет

Лечится удалением из parent.js всех mozSystemGroup: true
Зачем они там — понять не смог.

Это нужно для panel'ей , без системных слушателей не перехватываются события от мыши и они закрываются, а этого не нужно если не включена соответствующая настройка
За сайдбар спасибо, исправил теперь для сайдбара без mozSystemGroup.

Dumby пишет

Но для браузера — это немного странно

Мне так надо было, добавил настройку.

Dumby пишет

в parent.js замечен toolbar#add-additional-vertical-bar
что слегка несовременно.

Да прикольно, исправил на просто toolbar, так не устареет, наверно

Добавлено 29-06-2024 12:05:43

egorsemenov06 пишет

только плитки на новой вкладе открывается постоянно новые

Ну я так в расширении делать не буду для правильной работы нужно учитывать перенаправления а для этого нужен сетевой запрос, что слегка долго

Отредактировано Vitaliy V. (29-06-2024 12:05:43)

Отсутствует

 

№165329-06-2024 12:45:11

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

у меня с обновленным расширением вообще перестал работать клик на закладках

Ну а вы как хотели, не буду же я после каждого обновления расширения проверять работает ли оно с нестандартным загрузчиком, если используете то не обновляйте.
startup.js -> строка 67 заменить win на this.win

Отсутствует

 

№165429-06-2024 15:22:55

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06
Вы понимаете, что в отличии от вас на этом форуме люди поиском по версии для печати пользуется? Хватит засерать ветку никому не нужным цитированием. Вы ведете себя как дикарь впервые попавший в город. Это тот что ссыт и срет там где ему приспичило, а не в специально отведенных местах. Цитирование, ограниченное, а не всего поста, допустимо только тогда, когда собеседник может не понять о чем речь в вашем текущем посте.

Отсутствует

 

№165529-06-2024 15:53:41

brake
Участник
 
Группа: Members
Зарегистрирован: 05-05-2022
Сообщений: 14
UA: Firefox 127.0

Re: UCF - ваши кнопки, скрипты…

Dummy, I need your help. I want to remove the blue line in the box (Show as follow picture)
need-help.png
Here's the script

Выделить код

Код:

// ==UserScript==
// @name            UnifiedExtensionsSearch.uc.js
// @description     在扩展面板中搜索扩展
// @author          Ryan
// @include         main
// @version         0.1
// @compatibility   Firefox 126
// @destroy         window.UnifiedExtensionsSearch.onUnload();
// @homepageURL     https://github.com/benzBrake/FirefoxCustomize
// ==/UserScript==
(window.UnifiedExtensionsSearch = {
    timer: [],
    init: function (v, c) {
        if (!v) return;
        this.view = v;
        var pi = document.createProcessingInstruction(
            'xml-stylesheet',
            'type="text/css" href="data:text/css;utf-8,' + encodeURIComponent(c) + '"'
        );
        this.style = document.insertBefore(pi, document.documentElement);
        ["ViewHiding"].forEach(t => v.addEventListener(t, this, false));
        window.addEventListener("unload", this, false); // Corrected line
        let w = document.createElement('html:div');
        for (let [k, v] of Object.entries({
            id: 'unified-extensions-search-input-container',
            class: 'unified-extensions-search-input-container',
            role: 'searchbox',
        })) { w.setAttribute(k, v) }
        let i = document.createElement('html:div');
        for (let [k, v] of Object.entries({
            id: 'unified-extensions-search-input',
            class: 'unified-extensions-search-input',
            role: 'search',
            contenteditable: true,
            empty: true
        })) { i.setAttribute(k, v) }
        this.input = w.appendChild(i);
        ['input', 'change', 'keypress'].forEach(e => i.addEventListener(e, this, false));
        let cl = document.createElement('html:button');
        for (let [k, v] of Object.entries({
            id: 'unified-extensions-search-clear',
            class: 'unified-extensions-search-clear',
            role: 'button',
        })) { cl.setAttribute(k, v) }
        this.btn = w.appendChild(cl);
        cl.addEventListener('click', this, false);
        v.querySelector('.panel-subview-body[context="unified-extensions-context-menu"]').before(w);
    },
    handleEvent (event) {
        const { type } = event;
        // 防止回车换行
        if (type == 'keypress' && event.keyCode == 13) {
            event.preventDefault();
            event.stopPropagation();
            return;
        }
        if (this.timer[type]) clearTimeout(this.timer[type]);
        this.timer[type] = setTimeout(() => {
            this.timer[type] = null;
            let fnName = 'on' + type[0].toUpperCase() + type.slice(1);
            if (this[fnName])
                this[fnName](event);
            else
                console.log(`UnifiedExtensionsSearch.uc.js: Unhandled event: ${type}`)
        }, 100);
    },
    onViewHiding () {
        this.input.textContent = '';
        this.input.setAttribute("empty", true);
        this.resetExtensions();
    },
    onInput () {
        let val = this.input.textContent;
        if (val) {
            this.input.setAttribute("empty", false);
            this.searchExtensions();
        } else {
            this.input.setAttribute("empty", true);
            this.input.innerHTML = '';
            this.resetExtensions();
        }
    },
    searchExtensions () {
        let val = this.input.textContent.trim();
        if (val) {
            let search = val.toLowerCase();
            let items = this.view.querySelectorAll('.unified-extensions-item');
            for (let item of items) {
                let name = item.querySelector('.unified-extensions-item-name').textContent.toLowerCase();
                if (name.includes(search)) {
                    item.removeAttribute("hidden");
                } else {
                    item.setAttribute("hidden", true);
                }
            }
        }
    },
    resetExtensions () {
        let items = document.querySelectorAll('.unified-extensions-item');
        for (let item of items) {
            item.removeAttribute("hidden");
        }
    },
    onClick () {
        if (this.input.getAttribute('empty') === "true") return;
        this.input.innerHTML = '';
        this.input.setAttribute("empty", true);
        this.resetExtensions();
    },
    onUnload () {
        window.removeEventListener('unload', this, false);
        if (this.style && this.style.parentNode) {
            this.style.parentNode.removeChild(this.style);
            this.style = null;
        }
        ["ViewHiding"].forEach(t => this.view.removeEventListener(t, this, false));
        let c = view.querySelector('#unified-extensions-search-input-container');
        if (c && c.parentNode) c.parentNode.removeChild(c);
        delete window.UnifiedExtensionsSearch;
    }
}).init(gUnifiedExtensions.panel && PanelMultiView.getViewNode(
    document,
    "unified-extensions-view"
), `
#unified-extensions-search-input-container {
    min-height: 20px;
    margin:5px 10px;
    border: 1px solid var(--panel-border-color);
    display: flex;
    flex-direction: row;
    overflow: hidden;
}
#unified-extensions-search-input {
    flex-grow: 1;
    height: 100%;
    padding: 5px;
    line-height: 20px;
    font-size: 16px;
    max-width: calc(100% - 40px);
    &[empty="true"] {
        &+#unified-extensions-search-clear {
            background-position: -30px 50%, 8px 50%;
        }
    }
}
#unified-extensions-search-clear {
    width: 20px;
    height: 20px;
    padding: 5px;
    flex-shrink: 0;
    background-image: url(chrome://global/skin/icons/close.svg), url(chrome://global/skin/icons/search-glass.svg);
    background-position: 8px 50%, 30px 50%;
    background-repeat: no-repeat no-repeat;
    transition: background-position 0.2s ease-in-out;
}
.unified-extensions-item[hidden=true] {
    display: none;
    visibility: collapse;
    opacity: 0;
}
`);

Отредактировано brake (29-06-2024 17:07:24)

Отсутствует

 

№165629-06-2024 17:09:55

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

Re: UCF - ваши кнопки, скрипты…

Vitaliy V. пишет

Это нужно для panel'ей

О! Теперь увидел, на примере кнопки «Библиотека» (#library-button).

для правильной работы нужно учитывать перенаправления а для этого нужен сетевой запрос, что слегка долго

Чисто теоретически, можно опрашивать child actor
на предмет window.docShell.currentDocumentChannel.originalURI
Но, даже если работает — хрен не слаще редьки, наверно.

if (node.matches(":is(menupopup,panel) :scope:is(menuitem,toolbarbutton)")) {

Похоже, отвалился кейс #PlacesToolbarItems > toolbarbutton.bookmark-item:not([type=menu])


egorsemenov06 пишет

может Dumby мод сделает

Можно попробовать добавить ещё насилия.
Имеет смысл, только если в about:llc постоянно включена галка
[✔] Включить "долгий" клик для ссылок


После LLC.onStartup();

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

Выделить код

Код:

//
	await new Promise(ChromeUtils.idleDispatch); // works without, but ...
	var m = "resource://long_left_click/LLCWinActorParent.mjs";
	try {var actorProto = ChromeUtils.importESModule(m).LLCWinActorParent.prototype;}
	catch {return;}

	var lazy = globalThis, re = /^about:(?:newtab|home)$/;
	Object.assign(actorProto, eval(`({${actorProto.receiveMessage}})`.replace(
		"var tab ", "if (re.test(browser.currentURI.spec) && proto.maybeSelectTab(link, browser.ownerGlobal)) return;\n        $&"
	)));

brake пишет

I want to remove the blue line in the box (Show as follow picture)

outline: none;
for
#unified-extensions-search-input

Отредактировано Dumby (29-06-2024 17:13:49)

Отсутствует

 

№165701-07-2024 13:31:04

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

ReferenceError: xulns is not defined

Ну, можно заменить xulns собственно на сам неймспейс
"http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"


или node.namespaceURI == xulns на XULElement.isInstance(node)

Отсутствует

 

№165801-07-2024 16:59:24

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

при этих настройках
пропадают пкнкты

Уж не знаю, при каких таких «этих настройках»,
но, не сочиняй, там всё совсем не так, а сложнее.


Первое — эти пункты не расчитаны на autopopup-фичу.
И, в фиче торчит document.popupNode, которого давно нет.
Однако, в этой кнопке нет и никакого контекста.


Поэтому, удаляем строку if(!isContextOpened())
и делаем такую замену

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

Выделить код

Код:

/*
function isContextOpened() {
	return inBtn(document.popupNode);
}
function inBtn(node) {
	for(; node; node = node.parentNode)
		if(node == self)
			return true;
	return false;
}
*/
(desc => {
	var {set} = desc;
	desc.set = val => {
		if (val) delete this.open, this.onmousedown?.({});
		set.call(this, val);
	}
	Object.defineProperty(this, "open", desc);
})(Object.getOwnPropertyDescriptor(MozElements.ButtonBase.prototype, "open"));


Второе — у тебя кривая XML'ка.
SVG'шки должным образом не оформлены для пребывания в атрибуте.
Попробуй так
скрытый текст

Выделить код

Код:

/*
    var df = MozXULElement.parseXULToFragment(`
        <menugroup orient="vertical">
            <menuseparator/>
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>"
                label="Сохранить всю страницу как PNG"
                value="all"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/></svg>"
                label="Сохранить видимую часть страницы как PNG"
                value="page"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'><g style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity'><path d='M11.108 8.852c.327 0 .591-.27.591-.602a.596.596 0 0 0-.59-.602c-.327 0-.591.27-.591.602 0 .332.264.602.59.602z'/><path d='M4.808 7.047c0-.665.53-1.203 1.182-1.203h6.3c.652 0 1.18.538 1.18 1.203v4.01c0 .665-.528 1.203-1.18 1.203h-6.3a1.192 1.192 0 0 1-1.182-1.203v-4.01zm1.182 0v3.524l1.639-1.808a.972.972 0 0 1 1.446 0l2.074 2.287-.008.007h1.149v-4.01h-6.3zm2.362 2.691-1.195 1.32h2.39l-1.195-1.32z'/><path d='M3.036 1.833C1.406 1.833.083 3.18.083 4.841v6.818c0 1.661 1.323 3.008 2.953 3.008h9.844c1.631 0 2.953-1.347 2.953-3.008V4.84c0-1.661-1.322-3.008-2.953-3.008H3.036zM1.265 4.841c0-.997.793-1.805 1.771-1.805h9.844c.979 0 1.772.808 1.772 1.805v6.818c0 .997-.793 1.805-1.772 1.805H3.036c-.978 0-1.771-.808-1.771-1.805V4.84z'/></g></svg>"
                label="Сохранить выбранный элемент страницы как PNG"
                value="click"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='context-fill' fill-opacity='context-fill-opacity'><path fill-rule='evenodd' d='M2.63 1.255c-.76 0-1.375.616-1.375 1.375v2.685a.625.625 0 0 1-1.25 0V2.63A2.625 2.625 0 0 1 2.63.005h2.685a.625.625 0 1 1 0 1.25H2.63ZM10.06.63c0-.345.28-.625.625-.625h2.685a2.625 2.625 0 0 1 2.625 2.625v2.685a.625.625 0 1 1-1.25 0V2.63c0-.76-.616-1.375-1.375-1.375h-2.685A.625.625 0 0 1 10.06.63Zm5.31 9.43c.345 0 .625.28.625.625v2.685a2.625 2.625 0 0 1-2.625 2.625h-2.685a.625.625 0 1 1 0-1.25h2.685c.76 0 1.375-.616 1.375-1.375v-2.685c0-.345.28-.625.625-.625ZM2.729 7.3c-.79 0-1.43.64-1.43 1.429v4.542c0 .79.64 1.43 1.43 1.43H7.27c.79 0 1.43-.64 1.43-1.43V8.73c0-.79-.64-1.43-1.43-1.43H2.73ZM0 8.728A2.729 2.729 0 0 1 2.729 6H7.27A2.729 2.729 0 0 1 10 8.729v4.542A2.729 2.729 0 0 1 7.271 16H2.73A2.729 2.729 0 0 1 0 13.271V8.73Z' clip-rule='evenodd'/><path d='M6.9 14.005H2.73a.5.5 0 0 1-.372-.835l2.085-2.317a.5.5 0 0 1 .744 0l2.085 2.317a.5.5 0 0 1-.371.835ZM8 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'/></svg>"
                label="Сохранить выбранную область страницы как PNG"
                value="clipping"/>
        </menugroup>
    `);
*/
    var df = MozXULElement.parseXULToFragment(`
        <menugroup orient="vertical">
            <menuseparator/>
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'&gt;&lt;path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/&gt;&lt;/svg&gt;"
                label="Сохранить всю страницу как PNG"
                value="all"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'&gt;&lt;path style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity' d='M13.946 2.353c.273 0 .498.23.498.513v10.262l-.156-.209-4.233-5.647a.737.737 0 0 0-1.183 0l-2.584 3.446-.95-1.37a.732.732 0 0 0-1.214.003l-2.49 3.594-.14.199V2.866c0-.282.224-.513.498-.513h11.954zM1.992.813C.893.813 0 1.732 0 2.865v10.268c0 1.133.893 2.054 1.992 2.054h11.954c1.098 0 1.992-.921 1.992-2.054V2.866c0-1.133-.894-2.054-1.992-2.054H1.992zm2.49 6.16a1.494 1.54 0 1 0 0-3.08 1.494 1.54 0 1 0 0 3.08z'/&gt;&lt;/svg&gt;"
                label="Сохранить видимую часть страницы как PNG"
                value="page"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16'&gt;&lt;g style='fill:context-fill rgb(142, 142, 152);fill-opacity:context-fill-opacity'&gt;&lt;path d='M11.108 8.852c.327 0 .591-.27.591-.602a.596.596 0 0 0-.59-.602c-.327 0-.591.27-.591.602 0 .332.264.602.59.602z'/&gt;&lt;path d='M4.808 7.047c0-.665.53-1.203 1.182-1.203h6.3c.652 0 1.18.538 1.18 1.203v4.01c0 .665-.528 1.203-1.18 1.203h-6.3a1.192 1.192 0 0 1-1.182-1.203v-4.01zm1.182 0v3.524l1.639-1.808a.972.972 0 0 1 1.446 0l2.074 2.287-.008.007h1.149v-4.01h-6.3zm2.362 2.691-1.195 1.32h2.39l-1.195-1.32z'/&gt;&lt;path d='M3.036 1.833C1.406 1.833.083 3.18.083 4.841v6.818c0 1.661 1.323 3.008 2.953 3.008h9.844c1.631 0 2.953-1.347 2.953-3.008V4.84c0-1.661-1.322-3.008-2.953-3.008H3.036zM1.265 4.841c0-.997.793-1.805 1.771-1.805h9.844c.979 0 1.772.808 1.772 1.805v6.818c0 .997-.793 1.805-1.772 1.805H3.036c-.978 0-1.771-.808-1.771-1.805V4.84z'/&gt;&lt;/g&gt;&lt;/svg&gt;"
                label="Сохранить выбранный элемент страницы как PNG"
                value="click"/>
    
            <menuitem class="menuitem-iconic"
                image="data:image/svg+xml;charset=utf-8,&lt;svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='context-fill' fill-opacity='context-fill-opacity'&gt;&lt;path fill-rule='evenodd' d='M2.63 1.255c-.76 0-1.375.616-1.375 1.375v2.685a.625.625 0 0 1-1.25 0V2.63A2.625 2.625 0 0 1 2.63.005h2.685a.625.625 0 1 1 0 1.25H2.63ZM10.06.63c0-.345.28-.625.625-.625h2.685a2.625 2.625 0 0 1 2.625 2.625v2.685a.625.625 0 1 1-1.25 0V2.63c0-.76-.616-1.375-1.375-1.375h-2.685A.625.625 0 0 1 10.06.63Zm5.31 9.43c.345 0 .625.28.625.625v2.685a2.625 2.625 0 0 1-2.625 2.625h-2.685a.625.625 0 1 1 0-1.25h2.685c.76 0 1.375-.616 1.375-1.375v-2.685c0-.345.28-.625.625-.625ZM2.729 7.3c-.79 0-1.43.64-1.43 1.429v4.542c0 .79.64 1.43 1.43 1.43H7.27c.79 0 1.43-.64 1.43-1.43V8.73c0-.79-.64-1.43-1.43-1.43H2.73ZM0 8.728A2.729 2.729 0 0 1 2.729 6H7.27A2.729 2.729 0 0 1 10 8.729v4.542A2.729 2.729 0 0 1 7.271 16H2.73A2.729 2.729 0 0 1 0 13.271V8.73Z' clip-rule='evenodd'/&gt;&lt;path d='M6.9 14.005H2.73a.5.5 0 0 1-.372-.835l2.085-2.317a.5.5 0 0 1 .744 0l2.085 2.317a.5.5 0 0 1-.371.835ZM8 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z'/&gt;&lt;/svg&gt;"
                label="Сохранить выбранную область страницы как PNG"
                value="clipping"/>
        </menugroup>
    `);

Отсутствует

 

№165901-07-2024 21:20:15

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

Re: UCF - ваши кнопки, скрипты…

egorsemenov06 пишет

а поставил SVG'шки те что были все заработало

Ой, прошу прощения, у меня код, создающий кнопку, оказался не тот.

поменял

Не-не, вот этот кусок

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

Выделить код

Код:

(desc => {
	var {set} = desc;
	desc.set = val => {
		if (val) delete this.open, this.onmousedown?.({});
		set.call(this, val);
	}
	Object.defineProperty(this, "open", desc);
})(Object.getOwnPropertyDescriptor(MozElements.ButtonBase.prototype, "open"));


он сугубо для кнопки Save, его добавлять не надо было, удали.


Кстати, file picker не поправлен

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

Выделить код

Код:

/*
		fp.init(popup.ownerGlobal, "Укажите путь к программе", fp.modeOpen);
*/
		fp.init(popup.ownerGlobal.browsingContext, "Укажите путь к программе", fp.modeOpen);

Отсутствует

 

№166002-07-2024 17:44:21

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

Re: UCF - ваши кнопки, скрипты…

All
Кнопка для sidebar_tabs обновлена.
Теперь одна команда открытия/закрытия для обоих режимов и убраны тайминги при открытии/закрытии по кнопке.
При открытии по кнопке, с включенным AutoHide, закрывать панель необязательно, можно просто щелкнуть в поле контента.
Открытие/закрытие по наведению отключается --v-sidebar-min-width: 0px;
   
Работает с актуальным UCF

Отредактировано _zt (02-07-2024 17:48:29)

Отсутствует

 

№166102-07-2024 20:41:28

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

All

Вот только это не для всех, данная кнопка нерекомендуемый способ, т.е. костыль, кому надо переключать урезанное AutoHide. С остальным лучше справится кнопка в составе Sidebar Tabs.

Отсутствует

 

№166202-07-2024 23:36:59

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

Re: UCF - ваши кнопки, скрипты…

Vitaliy V.
По мне так это кнопка в составе Sidebar Tabs урезанная. :)

Отсутствует

 

№166303-07-2024 00:00:56

Selten
Участник
 
Группа: Members
Зарегистрирован: 06-01-2010
Сообщений: 60
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Подскажите пожалуйста как поставить и где взять  вертикальную панель на 115.12.0

Отсутствует

 

№166403-07-2024 08:09:02

fuchsfan
Участник
 
Группа: Members
Зарегистрирован: 07-08-2023
Сообщений: 130
UA: Firefox 115.0

Re: UCF - ваши кнопки, скрипты…

Selten пишет

Подскажите пожалуйста как поставить и где взять  вертикальную панель на 115.12.0

Взять здесьhttps://github.com/Aris-t2/CustomJSforF … ical.uc.js Активировать методом Aris-t2 https://forum.ru-board.com/topic.cgi?fo … art=1360#1 (шапка).
Это без UCF. Если же используете UCF, то в него входит свой вертикальный тулбар.

Отредактировано fuchsfan (03-07-2024 08:10:05)

Отсутствует

 

№166503-07-2024 08:23:32

Den199
Участник
 
Группа: Members
Зарегистрирован: 26-06-2024
Сообщений: 7
UA: Chrome 126.0

Re: UCF - ваши кнопки, скрипты…

Есть ли вариант сделать так, чтобы открытые в sidebar_tabs сайты учитывали настройку браузера в части предпочитаемой цветовой схемы для страниц?

Отредактировано Den199 (03-07-2024 09:47:09)


Firefox 128 (64-bit) on windows 10 (64-bit).

Отсутствует

 

№166603-07-2024 13:42:52

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

Re: UCF - ваши кнопки, скрипты…

Den199
А они учитывают, проверьте на сайте поддерживающем эту технологию, например YouTube.

Отсутствует

 

№166703-07-2024 16:02:51

Den199
Участник
 
Группа: Members
Зарегистрирован: 26-06-2024
Сообщений: 7
UA: Chrome 126.0

Re: UCF - ваши кнопки, скрипты…

_zt пишет

А они учитывают, проверьте на сайте поддерживающем эту технологию, например YouTube.

Я и проверил:)


https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.


Вкладки "Bookmarks" и "History" в sidebar_tabs с тёмным фоном. Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном, хотя при их открытии в обычном окне - фон тёмный.


В настройках браузера выбрана темная тема и темная цветовая схема для сайтов.


Firefox 128 (64-bit) on windows 10 (64-bit).

Отсутствует

 

№166803-07-2024 16:43:46

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

Re: UCF - ваши кнопки, скрипты…

Отсутствует

 

№166903-07-2024 23:47:17

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

Re: UCF - ваши кнопки, скрипты…

Den199 пишет

В настройках браузера выбрана темная тема и темная цветовая схема для сайтов.

У меня системная, которая светлая.
Но, выставил как сказано, и ... разреши подтвердить.

Вкладки "Bookmarks" и "History" в sidebar_tabs с тёмным фоном.

Да.

Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном

Да.


Синтетическая file:/// страница во вкладке «Sites»
с @media (prefers-color-scheme: dark) {…} — тоже идёт лесом, остаётся светлой.

Отсутствует

 

№167004-07-2024 02:37:10

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

Re: UCF - ваши кнопки, скрипты…

Den199 пишет

https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.

2024.07.04_013909.png  2024.07.04_014101.png
   

Dumby пишет

Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном

Но стили подхватываются. @media (prefers-color-scheme: dark) работает.
2024.07.04_015016.png  2024.07.04_015248.png  2024.07.04_015454.png
   
Dumby
Скрипт бы какой, что б заставить во вкладке "Сайты" хотя бы некоторые расширения работать, Dark Reader например. :)

Отсутствует

 

№167104-07-2024 03:06:46

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

Re: UCF - ваши кнопки, скрипты…

Dumby пишет

Вкладки "Downloads" и "Add-ons" в sidebar_tabs со светлым фоном

Да.

В [linux] вообще не воспроизводится, посмотрел в [windows] действительно так.
Чтобы включить цветовую схему требуется объявить для browser color-scheme: light dark;

Отсутствует

 

№167204-07-2024 09:25:56

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

хотя бы некоторые расширения работать, Dark Reader например

Ну, Stylus, например, работает.
А Dark Reader хочет того, чего нет.
Как подсунуть ему фейк — увы, я не знаю. :(


Vitaliy V. пишет

Чтобы включить цветовую схему требуется объявить для browser color-scheme: light dark;

Ух ты!
Добавил в userChrome.css


browser {
    color-scheme: light dark;
}


И, теперь, во вкладках «Downloads» и «Add-ons» — контент тёмный.


Более того, синтетическая file:/// страница во вкладке «Sites»
с @media (prefers-color-scheme: dark) {…}
и начальная about:neterror «Мы не можем подключиться к серверу github.com.»
(что, в моём случае, совершенно нормально)
тоже стали тёмными.


Таким образом — похоже, решение найдено.


Просто чего я подорвался: зт закошмарил дэна,
словно он какое-то фуфло прогоняет, а это не так.

Отсутствует

 

№167304-07-2024 16:39:31

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

Re: UCF - ваши кнопки, скрипты…

Dumby
Вот не надо/ И он, и я, о сайтах говорили, которые поддерживают переключение темы в зависимости от настроек браузера.

Den199 пишет

Есть ли вариант сделать так, чтобы открытые в sidebar_tabs сайты учитывали настройку браузера в части предпочитаемой цветовой схемы для страниц?

Den199 пишет

https://github.com/VitaliyVstyle/VitaliyVstyle.github.io - в обычной вкладке отображается в темной цветовой схеме.
А во вкладке "Sites" в sidebar_tabs в светлой.

Это я потом уже, после вашего поста, скринов налепил и с сайтами и без.
И вообще, ну нет у меня, поиском не ищется, никакой части

browser {
    color-scheme: light dark;
}

однако все темное (за исключением сайтов без адаптивных тем).
   
Vitaliy V.
Зачем они так сделали, настройка layout.css.light-dark.enabled тогда зачем?

Отсутствует

 

№167404-07-2024 17:27:16

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

Зачем они так сделали, настройка layout.css.light-dark.enabled тогда зачем?

Что сделали? Настройка для поддержки или неподдержки сайтов например с функцией light-dark
Для стилей браузера настройка не влияет.

Отредактировано Vitaliy V. (04-07-2024 17:31:36)

Отсутствует

 

№167504-07-2024 18:25:25

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

Re: UCF - ваши кнопки, скрипты…

_zt пишет

Вот не надо/ И он, и я, о сайтах говорили

Хорошо, не буду.


Действительно, херли я встрял?
Если ты считаешь, что Den199 просто врёт,
то я не тот человек, который может это рассудить.


Тем не менее, commit есть.

Отсутствует

 

Board footer

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