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

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

№1592621-10-2021 16:01:12

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby

Dumby пишет

args.unshift("-o", "D:/Загрузки/видео/%(title)s-%(id)s.%(ext)s");

Класс !

Отсутствует

 

№1592721-10-2021 22:18:09

Пострел
Участник
 
Группа: Members
Зарегистрирован: 08-04-2021
Сообщений: 51
UA: Firefox 93.0

Re: Custom Buttons

Dumby,

описание не предоставленно

Критику учел.
С первым кодом, обертывание не подлечило, кнопка не реагировала.
Ваш код работает безупречно.
Да пребудет с вами JS-сила, мастер. Спасибо.


Оставлю рабочий вариант кнопки. Автор Dumby.

Изменить уровень яркости экрана

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u0418%u0437%u043C%u0435%u043D%u0438%u0442%u044C%20%u0443%u0440%u043E%u0432%u0435%u043D%u044C%20%u044F%u0440%u043A%u043E%u0441%u0442%u0438%20%u044D%u043A%u0440%u0430%u043D%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bdata%3Aimage/png%3Bbase64%2CiVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVR4nKWTQW6EMAxFP2gugLgIC87AnmMjIXECLhL7213MxHIo6rQdS1aiyH7+cZwOgOMDe7zWLh8uywKSUFWQhJmBJLZti5h5nrHvuyMp8L/4NE0A4A8kO44jqqlquIiEGpJY1xUkmysAQByaGcwM7h57MwsIAIjIPcDdoxJJiEisvwLkaqUUkIy1OgCc5/kdoKpw96iaFVSIqt4+Y6NARBrp1fMVbgE16PoCpZRmJn4EVJkVlqFvAaoaDazzcPUroL/2oCbnRtZEd4f7c3CHYYi8f43yC9CMcvOhso3jGAq67hnW930kffSdvwAkRmw4ZXkwxgAAAABJRU5ErkJggg%3D%3D%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B//%20%u0410%u0432%u0442%u043E%u0440%20%u043A%u043E%u0434%u0430%20%u0434%u043B%u044F%20%u044D%u0442%u043E%u0439%20%u043A%u043D%u043E%u043F%u043A%u0438%20-%20Dumby.%20%0A//%20%u0424%u043E%u0440%u0443%u043C.%20Mozilla%20%u0420%u043E%u0441%u0441%u0438%u044F.%20%0A//%20https%3A//forum.mozilla-russia.org/viewtopic.php%3Fpid%3D795613%23p795613%0A%0A%28%28ovar%2C%20obs%29%20%3D%3E%20%7B%0A%09this.appendChild%28document.createElement%28%22style%22%29%29.append%28%0A%09%09%22%23tabbrowser-tabbox%20%7Bbackground-color%3A%20black%20%21important%3B%7D%5Cn%22%0A%09%09+%20%60%23tabbrowser-tabpanels%20%7Bopacity%3A%20var%28%24%7Bovar%7D%29%20%21important%3B%7D%60%0A%09%29%3B%0A%09var%20pref%20%3D%20%22CB.tabbrowser-tabpanels.opacity%22%3B%0A%09var%20gp%20%3D%20%28%29%20%3D%3E%20Services.prefs.getIntPref%28pref%2C%20100%29%3B%0A%09var%20sp%20%3D%20val%20%3D%3E%20Services.prefs.setIntPref%28pref%2C%20val%29%3B%0A%0A%09var%20st%20%3D%20document.documentElement.style%3B%0A%09%28obs%20%3D%20%28%29%20%3D%3E%20st.setProperty%28ovar%2C%20gp%28%29%20/%20100%2C%20%22important%22%29%29%28%29%3B%0A%09Services.prefs.addObserver%28pref%2C%20obs%29%3B%0A%0A%09this.onwheel%20%3D%20e%20%3D%3E%20%7B%0A%09%09var%20val%20%3D%20gp%28%29%20+%20%28e.deltaY%20%3C%200%20%3F%201%20%3A%20-1%29%3B%0A%09%09val%20%3C%200%20%7C%7C%20val%20%3E%20100%20%7C%7C%20sp%28val%29%3B%0A%09%7D%0A%09this.onauxclick%20%3D%20e%20%3D%3E%20e.button%20%21%3D%201%20%7C%7C%20sp%28100%29%3B%0A%0A%09addDestructor%28reason%20%3D%3E%20%7B%0A%09%09st.removeProperty%28ovar%29%3B%0A%09%09Services.prefs.removeObserver%28pref%2C%20obs%29%3B%0A%09%09reason%20%3D%3D%20%22delete%22%20%26%26%20Services.prefs.clearUserPref%28pref%29%3B%0A%09%7D%29%3B%0A%7D%29%28%22--cb-tabbrowser-tabpanels-opacity%22%29%3B%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5Bcustombuttons.alertBox%28this.name%2C%20this.Help%29%3B%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%2C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u0435%20%u043A%u043E%u043B%u0435%u0441%u043E%20%u043C%u044B%u0448%u0438%20%u0432%u0432%u0435%u0440%u0445%20/%20%u0432%u043D%u0438%u0437%2C%20%u0434%u043B%u044F%20%u0440%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u043A%u0438%20%u044F%u0440%u043A%u043E%u0441%u0442%u0438.%0AC%u0440%u0435%u0434%u043D%u0438%u0439%20%u043A%u043B%u0438%u043A%2C%20%u043F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u043F%u043E-%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1592822-10-2021 05:59:18

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 570
UA: Firefox 91.0

Re: Custom Buttons

Dumby
Адаптируйте, пожалуйста, кнопку  Изменить уровень яркости экрана, которую выложил выше Пострел для UCF.

Отсутствует

 

№1592922-10-2021 10:03:51

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Пострел пишет

Изменить уровень яркости экрана

Уменьшить яркость , а не изменить.  Не фига не увеличивает больше чем по умолчанию !

Отсутствует

 

№1593022-10-2021 11:47:17

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

Re: Custom Buttons

ВВП пишет

Уменьшить яркость , а не изменить.

А в зад она её уже не увеличивает? :)

Отсутствует

 

№1593122-10-2021 21:51:49

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

Re: Custom Buttons

rubel пишет

Адаптируйте, пожалуйста, кнопку  Изменить уровень яркости экрана, которую выложил выше Пострел для UCF.

Какая-то шляпа получилась, надеюсь сойдёт.

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

Выделить код

Код:

(async pref => CustomizableUI.createWidget(({
	label: "Изменить уровень яркости экрана",
	tooltiptext: "Изменить уровень яркости экрана",
	id: "ucf-tabbrowser-tabpanels-opacity-changer",
	localized: false,
	get pref() {
		return Services.prefs.getIntPref(pref, 100);
	},
	onCreated(btn) {
		var txt = "При наведении курсора на иконку, прокрутите колесо мыши вверх / вниз, для регулировки яркости.\n"
			+ "Cредний клик, при наведении курсора на иконку кнопки, сбросит яркость по-умолчанию.";
		var click = () => Services.prompt.alert(null, this.label, txt);

		var setPref = (e, val = 100) => {
			Services.prefs.setIntPref(pref, val);
			e.target.toggleAttribute("rst");
		}
		var auxclick = e => e.button != 1 || setPref(e);
		var wheel = e => {
			var val = this.pref + (e.deltaY < 0 ? 1 : -1);
			val < 0 || val > 100 || setPref(e, val);
		}
		(this.onCreated = btn => {
			btn.onwheel = wheel;
			btn._handleClick = click;
			btn.onauxclick = auxclick;
			btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAA7klEQVR4nKWTQW6EMAxFP2gugLgIC87AnmMjIXECLhL7213MxHIo6rQdS1aiyH7+cZwOgOMDe7zWLh8uywKSUFWQhJmBJLZti5h5nrHvuyMp8L/4NE0A4A8kO44jqqlquIiEGpJY1xUkmysAQByaGcwM7h57MwsIAIjIPcDdoxJJiEisvwLkaqUUkIy1OgCc5/kdoKpw96iaFVSIqt4+Y6NARBrp1fMVbgE16PoCpZRmJn4EVJkVlqFvAaoaDazzcPUroL/2oCbnRtZEd4f7c3CHYYi8f43yC9CMcvOhso3jGAq67hnW930kffSdvwAkRmw4ZXkwxgAAAABJRU5ErkJggg==");
		})(btn);
	},
	init() {
		var css = [
			"@-moz-document url(chrome://browser/content/browser.xhtml) {",
			"\t#${this.id}[rst] {filter: grayscale(1%) !important;}",
			"\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabbox {background-color: black !important;}",
			`\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabpanels {opacity: ${this.pref / 100} !important;}`, "}"
		].join("\n");
		var url = `resource://${this.id}/`;
		Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler)
			.setSubstitution(this.id, Services.io.newURI("data:text/css," + encodeURIComponent(css)));
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
		sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

		var st = InspectorUtils.getAllStyleSheets((
			Services.appShell.hiddenDOMWindow ||
			Services.wm.getEnumerator(null).getNext()
		).document).find(s => s.href == url).cssRules[0].cssRules[2].style;

		var obs = () => st.setProperty("opacity", this.pref / 100, "important");
		Services.prefs.addObserver(pref, obs);
		Services.obs.addObserver(function quit(s, topic) {
			Services.obs.removeObserver(quit, topic);
			Services.prefs.removeObserver(pref, obs);
		}, "quit-application-granted");
		return this;
	}
}).init()))("ucf.tabbrowser-tabpanels.opacity");

Отсутствует

 

№1593222-10-2021 22:07:18

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby
Какой большой прок от этой "яркости" ? Ну, затемняет и все ? А ,прибавить яркость выше номинала? Или это нерешаемо?

Отсутствует

 

№1593323-10-2021 06:21:19

rubel
Участник
 
Группа: Members
Откуда: г.Самара
Зарегистрирован: 10-05-2005
Сообщений: 570
UA: Firefox 91.0

Re: Custom Buttons

Dumby пишет

Какая-то шляпа получилась, надеюсь сойдёт.

Очень даже сойдет! :) Спасибо.

Отсутствует

 

№1593425-10-2021 12:41:28

Mishania
Забанен
 
Группа: Members
Откуда: Usa
Зарегистрирован: 22-10-2011
Сообщений: 357
UA: Firefox 86.0

Re: Custom Buttons

Подскажите как на 91esr запустить кнопки. Пытаюсь переехать с 52, пока не сильно то и получается. Поставил Custom Buttons 0.0.7.0.0.21, но кнопки не устанавлива.тся

Отсутствует

 

№1593526-10-2021 19:41:27

Senflex
Участник
 
Группа: Members
Зарегистрирован: 18-07-2021
Сообщений: 29
UA: Chrome 94.0

Re: Custom Buttons

Приветствую всех! Как программно закрыть все вкладки кроме активной? Заранее благодарю!!!

Отсутствует

 

№1593626-10-2021 21:26:26

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

Re: Custom Buttons

ВВП пишет

Какой большой прок от этой "яркости" ? Ну, затемняет и все ? А ,прибавить яркость выше номинала? Или это нерешаемо?

Мне-то откуда знать, что дали, то и есть.
Прибавить яркость — вряд ли, световой поток из под пикселей не поднять.
Есть filter: brightness(), можно под него переделать,
но сомневаюсь, что результат понравится.


Mishania пишет

Подскажите как на 91esr запустить кнопки. Пытаюсь переехать с 52, пока не сильно то и получается. Поставил Custom Buttons 0.0.7.0.0.21, но кнопки не устанавлива.тся

Не, 0.0.7.0.0.21 на 91 ставить не следует, там есть косяк несовместимости.
Для 91 вполне должен подойти 0.0.7.0.0.19.


А «запустить кнопки», если имеется в виду, что код, работающий в 52,
будет работать и в 91, то нет, не будет. Зависит, конечно, от кода,
могут быть исключения, но в общем случае — нет, такого ожидать не стоит.


Senflex пишет

закрыть все вкладки кроме активной

gBrowser.removeAllTabsBut(gBrowser.selectedTab);

Отсутствует

 

№1593727-10-2021 12:49:35

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby
Я не просил, так теперь прошу. Фишка эта нужна именно на прибавить. На ютубе вечно темновато , куда там убавлять? Кнопка не помешала бы.

Отсутствует

 

№1593827-10-2021 23:52:38

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

Re: Custom Buttons

ВВП пишет

Я не просил, так теперь прошу.

Я что-то непонятное написал? Нет у меня ничего.
Где-то может есть какой-то хитрый svg-фильтр, не знаю.
Или хочешь покрутить колесо, посмотреть как выглядит brightness(),
но самому код менять несподручно? Ну покрути

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

Выделить код

Код:

((bvar, obs) => {
	this.appendChild(document.createElement("style")).append(
		`#tabbrowser-tabpanels .browserStack > browser {filter: brightness(var(${bvar})) !important;}`
	);
	var pref = "CB.tabbrowser-browser.brightness";
	var gp = () => Services.prefs.getIntPref(pref, 100);
	var sp = val => Services.prefs.setIntPref(pref, val);

	var st = document.documentElement.style;
	(obs = () => st.setProperty(bvar, gp() + "%", "important"))();
	Services.prefs.addObserver(pref, obs);

	this.onwheel = e => {
		var val = gp() + (e.deltaY < 0 ? 2 : -2);
		val < 100 || val > 200 || sp(val);
	}
	this.onauxclick = e => e.button != 1 || sp(100);

	addDestructor(reason => {
		st.removeProperty(bvar);
		Services.prefs.removeObserver(pref, obs);
		reason == "delete" && Services.prefs.clearUserPref(pref);
	});
})("--cb-tabbrowser-browser-brightness");

Отсутствует

 

№1593928-10-2021 09:34:58

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby
От любите Вы жути нагнать , ну, так Вам можно. Кнопка , не супер,конечно, но все одно класс ! Жаль с первой не совместить. Типа, эта прибавляет, а, та наоборот...

Отсутствует

 

№1594028-10-2021 11:11:15

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

Re: Custom Buttons

ВВП пишет

Жаль с первой не совместить. Типа, эта прибавляет, а, та наоборот...

Ну почему же, меньше 100% brightness() тоже работает,
можно val < 100 заменить на val < 0, вот, для наглядности, - 50-100-200.

Отсутствует

 

№1594128-10-2021 12:28:39

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby
От теперь , то что надо!

Выделить код

Код:

custombutton://%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0D%0A%3Ccustombutton%20xmlns%3Acb%3D%22http%3A//xsms.nm.ru/custombuttons/%22%3E%0A%20%20%3Cname%3E%u041F%u0440%u0438%u0431%u0430%u0432%u0438%u0442%u044C%20/%u0423%u0431%u0430%u0432%u0438%u0442%u044C%20%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u044D%u043A%u0440%u0430%u043D%u0430%3C/name%3E%0A%20%20%3Cimage%3E%3C%21%5BCDATA%5Bfile%3A///C%3A/Users/%25D0%2590%25D0%25BD%25D0%25B4%25D1%2580%25D0%25B5%25D0%25B9/Desktop/index.png%5D%5D%3E%3C/image%3E%0A%20%20%3Cmode%3E0%3C/mode%3E%0A%20%20%3Cinitcode%3E%3C%21%5BCDATA%5B/*Initialization%20Code*/%0A%0A%28%28bvar%2C%20obs%29%20%3D%3E%20%7B%0A%09this.appendChild%28document.createElement%28%22style%22%29%29.append%28%0A%09%09%60%23tabbrowser-tabpanels%20.browserStack%20%3E%20browser%20%7Bfilter%3A%20brightness%28var%28%24%7Bbvar%7D%29%29%20%21important%3B%7D%60%0A%09%29%3B%0A%09var%20pref%20%3D%20%22CB.tabbrowser-browser.brightness%22%3B%0A%09var%20gp%20%3D%20%28%29%20%3D%3E%20Services.prefs.getIntPref%28pref%2C%20100%29%3B%0A%09var%20sp%20%3D%20val%20%3D%3E%20Services.prefs.setIntPref%28pref%2C%20val%29%3B%0A%0A%09var%20st%20%3D%20document.documentElement.style%3B%0A%09%28obs%20%3D%20%28%29%20%3D%3E%20st.setProperty%28bvar%2C%20gp%28%29%20+%20%22%25%22%2C%20%22important%22%29%29%28%29%3B%0A%09Services.prefs.addObserver%28pref%2C%20obs%29%3B%0A%0A%09this.onwheel%20%3D%20e%20%3D%3E%20%7B%0A%09%09var%20val%20%3D%20gp%28%29%20+%20%28e.deltaY%20%3C%200%20%3F%202%20%3A%20-2%29%3B%0A%09%09val%20%3C%200%20%7C%7C%20val%20%3E%20200%20%7C%7C%20sp%28val%29%3B%0A%09%7D%0A%09this.onauxclick%20%3D%20e%20%3D%3E%20e.button%20%21%3D%201%20%7C%7C%20sp%28100%29%3B%0A%0A%09addDestructor%28reason%20%3D%3E%20%7B%0A%09%09st.removeProperty%28bvar%29%3B%0A%09%09Services.prefs.removeObserver%28pref%2C%20obs%29%3B%0A%09%09reason%20%3D%3D%20%22delete%22%20%26%26%20Services.prefs.clearUserPref%28pref%29%3B%0A%09%7D%29%3B%0A%7D%29%28%22--cb-tabbrowser-browser-brightness%22%29%3B%0Athis.onclick%20%3D%20this.oncontextmenu%20%3D%20function%28event%29%20%7B%0A%20if%28event.button%20%3D%3D%202%20%26%26%20%21event.ctrlKey%20%26%26%20%21event.shiftKey%20%26%26%20%21event.altKey%20%26%26%20%21event.metaKey%29%7B%0Acustombuttons.alertBox%28this.name%2C%20this.Help%29%3B%0A%7D%3B%0A%7D%20%0Athis.oncontextmenu%20%3De%3D%3E%20%7B%20e.button%20%26%26%20%21e.ctrlKey%20%26%26%20e.preventDefault%28%29%20%7D%3B%0A%0A%5D%5D%3E%3C/initcode%3E%0A%20%20%3Ccode%3E%3C%21%5BCDATA%5B/*CODE*/%0A%5D%5D%3E%3C/code%3E%0A%20%20%3Caccelkey%3E%3C%21%5BCDATA%5B%5D%5D%3E%3C/accelkey%3E%0A%20%20%3Chelp%3E%3C%21%5BCDATA%5B%u041F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%2C%20%u043F%u0440%u043E%u043A%u0440%u0443%u0442%u0438%u0442%u0435%20%u043A%u043E%u043B%u0435%u0441%u043E%20%u043C%u044B%u0448%u0438%20%u0432%u0432%u0435%u0440%u0445%20/%20%u0432%u043D%u0438%u0437%2C%20%u0434%u043B%u044F%20%u0440%u0435%u0433%u0443%u043B%u0438%u0440%u043E%u0432%u043A%u0438%20%u044F%u0440%u043A%u043E%u0441%u0442%u0438.%0AC%u0440%u0435%u0434%u043D%u0438%u0439%20%u043A%u043B%u0438%u043A%2C%20%u043F%u0440%u0438%20%u043D%u0430%u0432%u0435%u0434%u0435%u043D%u0438%u0438%20%u043A%u0443%u0440%u0441%u043E%u0440%u0430%20%u043D%u0430%20%u0438%u043A%u043E%u043D%u043A%u0443%20%u043A%u043D%u043E%u043F%u043A%u0438%2C%20%u0441%u0431%u0440%u043E%u0441%u0438%u0442%20%u044F%u0440%u043A%u043E%u0441%u0442%u044C%20%u043F%u043E-%u0443%u043C%u043E%u043B%u0447%u0430%u043D%u0438%u044E.%5D%5D%3E%3C/help%3E%0A%20%20%3Cattributes/%3E%0A%3C/custombutton%3E

Отсутствует

 

№1594228-10-2021 13:40:25

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

Re: Custom Buttons

ВВП пишет

От теперь , то что надо!

Только если вывести на max, шрифт становится какой-то искривлённый.

Отредактировано voqabuhe (28-10-2021 14:05:36)

Отсутствует

 

№1594329-10-2021 13:50:34

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 93.0

Re: Custom Buttons

Dumby
В 94 начал некорректно работать скрипт ucf-mem-indicator (не отображется счетчик)
Можно это поправить?

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

Выделить код

Код:

(async id => ({
	delay: 2e3,
	val: "",
	init(topic, mm) {
		Services.obs.addObserver(mm = this, topic);
		Services.obs.addObserver(function quit(s, t) {
			this.timer?.cancel();
			Services.obs.removeObserver(mm, topic);
			Services.obs.removeObserver(quit, t);
		}, "quit-application-granted");
	},
	observe(win) {
		var df = win.MozXULElement.parseXULToFragment(
			`<hbox id="${id}"><label id="${id += "-label"}"/></hbox>`
		);
		this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);
		(this.observe = async win => {
			this.timer.cancel();
			await new Promise(ChromeUtils.idleDispatch);
			win.document.getElementById("star-button-box")
				.after(win.document.importNode(df, true));
			this.notify();
		})(win);
	},
	async notify() {
		var info = await ChromeUtils.requestProcInfo();
		var bytes = info.residentSetSize;
		for(var child of info.children) bytes += child.residentUniqueSize;
		this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT);

		var prev = this.val;
		if ((this.val = this.mgb(bytes)) != prev)
			for(var win of CustomizableUI.windows)
				win.document.getElementById(id).value = this.val;
	},
	mgb: bytes => bytes < 1073741824
		? Math.round(bytes / 1048576) + "MB"
		: (bytes / 1073741824).toFixed(2) + "GB"
}).init("browser-delayed-startup-finished"))("ucf-mem-indicator");

Отсутствует

 

№1594429-10-2021 14:36:57

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

Re: Custom Buttons

Garalf пишет

Можно это поправить?

Да, вроде поправлял, когда-то

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

Выделить код

Код:

(async id => ({

	delay: 2e3,

	val: "",
	init(topic, mm) {
		Services.obs.addObserver(mm = this, topic);
		Services.obs.addObserver(function quit(s, t) {
			this.timer?.cancel();
			Services.obs.removeObserver(mm, topic);
			Services.obs.removeObserver(quit, t);
		}, "quit-application-granted");
	},
	observe(win) {
		var df = win.MozXULElement.parseXULToFragment(
			`<hbox id="${id}" align="center"><label id="${id += "-label"}"/></hbox>`
		);
		this.timer = Cc["@mozilla.org/timer;1"].createInstance(Ci.nsITimer);

		// Bug 1665318 - In about:processes refresh, ResidentUniqueDistinguishedAmount is slow (Firefox 94+)
		// https://bugzilla.mozilla.org/show_bug.cgi?id=1665318
		parseInt(Services.appinfo.platformVersion) < 94 && Object.assign(this, eval(
			`({${this.notify}})`.replace("memory", "residentSetSize").replace("memory", "residentUniqueSize")
		));

		(this.observe = async win => {
			this.timer.cancel();
			await new Promise(ChromeUtils.idleDispatch);
			var ind = win.document.importNode(df, true);
			win.document.getElementById("star-button-box").after(ind);
			this.notify();
		})(win);
	},
	async notify() {
		var info = await ChromeUtils.requestProcInfo();
		var bytes = info.memory;
		for(var child of info.children) bytes += child.memory;
		this.timer.initWithCallback(this, this.delay, this.timer.TYPE_ONE_SHOT);

		var prev = this.val;
		if ((this.val = this.mgb(bytes)) != prev)
			for(var win of CustomizableUI.windows) {
				var lab = win.document.getElementById(id);
				if (lab) lab.value = this.val;
			}
	},
	mgb: bytes => bytes < 1073741824
		? Math.round(bytes / 1048576) + "MB"
		: (bytes / 1073741824).toFixed(2) + "GB"
}).init("browser-delayed-startup-finished"))("ucf-mem-indicator");

Отсутствует

 

№1594529-10-2021 19:53:55

Garalf
Участник
 
Группа: Members
Зарегистрирован: 19-09-2017
Сообщений: 316
UA: Firefox 94.0

Re: Custom Buttons

Dumby
Спасибо. Как всегда, все ОК.

Отсутствует

 

№1594630-10-2021 02:27:48

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

Re: Custom Buttons

Dumby - спасибо за подсказки! В моём FF-профиле 90% твоих скриптов! :)
Чуть поменял код - помоги объединить скрипт яркости со скриптом дополнительных кликов Звёздочки? :beer:

надо в этот UCF-скрипт добавить возможность регулировать яркость вращением колёсика над Звёздочкой:

Выделить код

Код:

(async (id, sel) => { // Клики на Звёздочке, ToolTip: расположение закладки в Избранном, Недавняя папка
	var g = Cu.getGlobalForObject(Cu), stt = g[id]; // https://forum.mozilla-russia.org/viewtopic.php?pid=790890#p790890
	if (!stt) { var {obs, prefs} = Services, {bookmarks: bm, observers: pobs} = PlacesUtils;
		stt = g[id] = { bm, help_star: `

Правый клик:	⤾ Вернуть вкладку
…+ Alt 	Перевод выдел.текст | Сайт 
…+ Shift	Яндекс-поиск выделенного\n
Колесико ±	Яркость страницы
…+ клик 	Полная яркость`,

			pref: `ucf.${id}Guid`,
			events: ["bookmark-added"],
			async init() {
				this.handleEvent = e => this[e.type](e);

				if ((this.pbm = typeof PlacesBookmarkMoved == "function"))
					this.events.push("bookmark-moved");
				else
					this.QueryInterface = g.ChromeUtils.generateQI([Ci.nsINavBookmarkObserver]),
					bm.addObserver(this);
				pobs.addListener(this.events, this.added = events => {
					for(var e of events) e.isTagging || this[e.constructor.name](e);
				});
				obs.addObserver(this, "quit-application-granted");
				this.args = [b => this.bguids.add(b.parentGuid), {concurrent: true}];
				var guid = prefs.getStringPref(this.pref, "");
				if (!guid) try {var [guid] = await PlacesUtils.metadata.get(
					PlacesUIUtils.LAST_USED_FOLDERS_META_KEY, []
				)} catch {}
				this.guids.push(guid || await PlacesUIUtils.defaultParentGuid || bm.unfiledGuid);
			},
			observe() {
				this.pbm || bm.removeObserver(this);
				pobs.removeListener(this.events, this.added);
				obs.removeObserver(this, "quit-application-granted");
				prefs.setStringPref(this.pref, this.guids[0]);
			},
			bguids: new g.Set(), guids: new g.Array(),
			skipTags: true,
			tt(win) {
				var list = win.InspectorUtils
					.getChildrenForNode(win.document.documentElement, true);
				return list.item(list.length - 1);
			},
			PlacesBookmarkAddition(e) {
				if (e.itemType == bm.TYPE_BOOKMARK && e.source == bm.SOURCES.DEFAULT)
					this.guids[0] = e.parentGuid;
			},
			PlacesBookmarkMoved(e) {
				e.parentGuid != e.oldParentGuid && this.PlacesBookmarkAddition(e);
			},
			onItemMoved(a, b, c, d, e, itemType, f, oldParentGuid, parentGuid, source) {
				this.PlacesBookmarkMoved({itemType, source, oldParentGuid, parentGuid});
			},
			fetch(win) {
				this.bguids.clear();
				return bm.fetch({url: win.gBrowser.currentURI.spec}, ...this.args);
			},
			addTab: function(win, url, add, params = {relatedToCurrent: true}) { // открыть адрес [add: в новой вкладке]
				params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
				return (add) ? win.gBrowser.addTab(url, params) : win.gBrowser.loadURI(url, params);
			},
			translate(browserMM, win, e, go) { // Google-перевод сайта | выделенного текста (go) поиск выдел. текста в Яндекс
				browserMM.addMessageListener('getSelect', function listener(msg) {
					var url = (msg.data) ? (go)
						? "https://yandex.ru/search/?text="+ msg.data +"&src=suggest_Pers&lang=ru" // поиск текста в Яндекс
						: "https://translate.google.com/#view=home&op=translate&sl=auto&tl=ru&text="+ msg.data // Гугл перевод
						: "http://translate.google.com/translate?u="+ gURLBar.value +"&hl=ru&ie=UTF-8&sl=auto&tl=ru"; // Перевод сайта
					if (go && !msg.data) // Перевод сайти в Яндекс. ничего не выделено + go не пуст
						gBrowser.selectedTab = e.addTab(win, "https://translate.yandex.com/translate?url=" + gURLBar.value + "&dir=&ui=ru&lang=auto-ru", 1)
					else
						gBrowser.selectedTab = e.addTab(win, url, 1);
				browserMM.removeMessageListener('getSelect', listener, true);
				});
				browserMM.loadFrameScript('data:,sendAsyncMessage("getSelect", content.document.getSelection().toString())', false);
			},
			auxclick(e) {	if (e.button == 0) return; var win = e.view;
				if (e.button == 2) {
					if (e.altKey)
						this.translate(gBrowser.selectedBrowser.messageManager, win, this)
					else if (e.shiftKey)
						this.translate(gBrowser.selectedBrowser.messageManager, win, this, 1)
					else
						win.undoCloseTab();
				} else
					this.addTab(win, "about:newtab");
			},
			find: obj => obj.name == "tooltiptext"
		};
		var ps = ["onBeginUpdateBatch", "onEndUpdateBatch", "onItemChanged", "onItemVisited"];
		var noop = () => {}; for(var p of ps) stt[p] = noop; stt.init();

		var func = id => this[id].mouseenter = async function(e) {
			var win = e.view, star = e.target, result = [], starred = star.hasAttribute("starred"); // star.tooltipText = "\u3164"; // лишнее
			starred && await this.fetch(win);
			for(var guid of (starred ? this.bguids : this.guids)) {
				var arr = [], num = 50;
				while(--num) {
					if (!star.matches(":hover")) return;
					var res = await this.bm.fetch(guid);
					if (!res) break;
					if ((guid = res.parentGuid) == this.bm.rootGuid) {
						arr.unshift(this.bm.getLocalizedTitle(res));
						break;
					}
					arr.unshift(res.title || "[Безымянная папка]");
				}
				arr.length && result.push(arr.join("\\"));
			}
			if (!star.matches(":hover")) return;

			var text = (await win.document.l10n.formatMessages([{
				id: star.getAttribute("data-l10n-id"),
				args: JSON.parse(star.getAttribute("data-l10n-args"))
			}]))[0].attributes.find(this.find).value, txt;

			if (result.length) {
				txt = result.join("\n");
				txt = starred ? `\n\n★ ${result.length > 1 ? "Данные закладки добавлены" : "Данная закладка добавлена"} в:\n${txt}` : "\n\n★ Недавно добавленная папка:\n" + txt; // text += this.help_star +'\n'+ txt;
			}
			win.document.tooltipNode == star ? this.tt(win).label = text + this.help_star + txt : star.tooltipText = text + this.help_star + txt;
		}
		var url = "data:;charset=utf-8," + encodeURIComponent(`(${func})("${id}")`);
		g.ChromeUtils.compileScript(url).then(ps => ps.executeInGlobal(g));
	}
	await delayedStartupPromise;
	var stars = Array.from(document.querySelectorAll(sel));
	for(var star of stars)
		star.addEventListener("auxclick", stt), star.addEventListener("mouseenter", stt);
	star.setAttribute("context", "event.stopPropagation()");

	var destructor = () => {
		for(var star of stars)
			star.removeEventListener("auxclick", stt), star.removeEventListener("mouseenter", stt);
	}
	var ucf = window.ucf_custom_script_win || window.ucf_custom_script_all_win;
	if (ucf)
		ucf[id] = {destructor}, ucf.unloadlisteners.push(id);
	else
		window.addEventListener("unload", destructor, {once: true});
})("ucfBookmarksStarFTooltipHelper", "#star-button, #context-bookmarkpage");

скрипт изменения яркости:

Выделить код

Код:

(async pref => CustomizableUI.createWidget(({
	label: "Изменить уровень яркости страницы",
	tooltiptext: "Колесико мыши меняет яркость страницы,\nCредний клик: полная яркость",
	id: "ucf-tabbrowser-tabpanels-opacity-changer",
	localized: false,
	get pref() {
		return Services.prefs.getIntPref(pref, 100);
	},
	onCreated(btn) {
		var txt = this.tooltiptext;
		var click = () => Services.prompt.alert(null, this.label, txt);

		var setPref = (e, val = 100) => {
			Services.prefs.setIntPref(pref, val);
			e.target.toggleAttribute("rst");
		}
		var auxclick = e => e.button != 1 || setPref(e);
		var wheel = e => {
			var val = this.pref + (e.deltaY < 0 ? 1 : -1);
			val < 0 || val > 100 || setPref(e, val);
		}
		(this.onCreated = btn => {
			btn.onwheel = wheel;
			btn._handleClick = click;
			btn.onauxclick = auxclick;
			btn.style.setProperty("list-style-image", `url("chrome://user_chrome_files/content/vertical_top_bottom_bar/svg/restart-app-16.svg")`, "important");
		})(btn);
	},
	init() {
		var css = [
			"@-moz-document url(chrome://browser/content/browser.xhtml) {",
			"\t#${this.id}[rst] {filter: grayscale(1%) !important;}",
			"\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabbox {background-color: black !important;}",
			`\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabpanels {opacity: ${this.pref / 100} !important;}`, "}"
		].join("\n");
		var url = `resource://${this.id}/`;
		Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler)
			.setSubstitution(this.id, Services.io.newURI("data:text/css," + encodeURIComponent(css)));
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
		sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

		var st = InspectorUtils.getAllStyleSheets((
			Services.appShell.hiddenDOMWindow ||
			Services.wm.getEnumerator(null).getNext()
		).document).find(s => s.href == url).cssRules[0].cssRules[2].style;

		var obs = () => st.setProperty("opacity", this.pref / 100, "important");
		Services.prefs.addObserver(pref, obs);
		Services.obs.addObserver(function quit(s, topic) {
			Services.obs.removeObserver(quit, topic);
			Services.prefs.removeObserver(pref, obs);
		}, "quit-application-granted");
		return this;
	}
}).init()))("ucf.tabbrowser-tabpanels.opacity");

Отсутствует

 

№1594730-10-2021 17:14:09

VORON
Участник
 
Группа: Members
Зарегистрирован: 03-04-2013
Сообщений: 158
UA: Firefox 91.0

Re: Custom Buttons

Dumby
Можно под 91-ю починить кнопку ?
Она вродеработает, но нет цветового переключения на самой кнопке

Отсутствует

 

№1594830-10-2021 20:15:30

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

Re: Custom Buttons

Dobrov пишет

помоги объединить

Хорошо, попробую вписать, раз самому сложно

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

Выделить код

Код:

(async (id, sel) => { // Клики на Звёздочке, ToolTip: расположение закладки в Избранном, Недавняя папка
	var g = Cu.getGlobalForObject(Cu), stt = g[id]; // https://forum.mozilla-russia.org/viewtopic.php?pid=790890#p790890
	if (!stt) { var {obs, prefs} = Services, {bookmarks: bm, observers: pobs} = PlacesUtils;
		stt = g[id] = { bm, help_star: `

Правый клик:	⤾ Вернуть вкладку
…+ Alt 	Перевод выдел.текст | Сайт 
…+ Shift	Яндекс-поиск выделенного\n
Колесико ±	Яркость страницы
…+ клик 	Полная яркость`,

			pref: `ucf.${id}Guid`,
			events: ["bookmark-added"],
			async init() {
				this.handleEvent = e => this[e.type](e);

				if ((this.pbm = typeof PlacesBookmarkMoved == "function"))
					this.events.push("bookmark-moved");
				else
					this.QueryInterface = g.ChromeUtils.generateQI([Ci.nsINavBookmarkObserver]),
					bm.addObserver(this);
				pobs.addListener(this.events, this.added = events => {
					for(var e of events) e.isTagging || this[e.constructor.name](e);
				});
				obs.addObserver(this, "quit-application-granted");
				this.args = [b => this.bguids.add(b.parentGuid), {concurrent: true}];
				var guid = prefs.getStringPref(this.pref, "");
				if (!guid) try {var [guid] = await PlacesUtils.metadata.get(
					PlacesUIUtils.LAST_USED_FOLDERS_META_KEY, []
				)} catch {}
				this.guids.push(guid || await PlacesUIUtils.defaultParentGuid || bm.unfiledGuid);


				var pref = "ucf.tabbrowser-tabpanels.opacity";
				var getPref = () => Services.prefs.getIntPref(pref, 100);
				var css = [
					"@-moz-document url(chrome://browser/content/browser.xhtml) {",
					`\t:is(${sel})[rst] {filter: grayscale(1%) !important;}`,
					"\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabbox {background-color: black !important;}",
					`\t:root:not([chromehidden*=toolbar]) #tabbrowser-tabpanels {opacity: ${getPref() / 100} !important;}`, "}"
				].join("\n");
				var subst = "ucf-tabbrowser-tabpanels-opacity-style", url = `resource://${subst}/`;
				Services.io.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler)
					.setSubstitution(subst, Services.io.newURI("data:text/css," + encodeURIComponent(css)));
				var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
				sss.loadAndRegisterSheet(Services.io.newURI(url), sss.USER_SHEET);

				var st = InspectorUtils.getAllStyleSheets(document)
					.find(s => s.href == url).cssRules[0].cssRules[2].style;

				this.setPref = (e, val = 100) => {
					Services.prefs.setIntPref(pref, val);
					e.target.toggleAttribute("rst");
				}
				this.wheel = e => {
					var val = getPref() + (e.deltaY < 0 ? 1 : -1);
					val < 0 || val > 100 || this.setPref(e, val);
				}
				var observer = () => st.setProperty("opacity", getPref() / 100, "important");
				Services.prefs.addObserver(pref, observer);
				this.removePrefObs = () => Services.prefs.removeObserver(pref, observer);
			},
			observe() {
				this.pbm || bm.removeObserver(this);
				pobs.removeListener(this.events, this.added);
				obs.removeObserver(this, "quit-application-granted");
				prefs.setStringPref(this.pref, this.guids[0]);

				this.removePrefObs();
			},
			bguids: new g.Set(), guids: new g.Array(),
			skipTags: true,
			tt(win) {
				var list = win.InspectorUtils
					.getChildrenForNode(win.document.documentElement, true);
				return list.item(list.length - 1);
			},
			PlacesBookmarkAddition(e) {
				if (e.itemType == bm.TYPE_BOOKMARK && e.source == bm.SOURCES.DEFAULT)
					this.guids[0] = e.parentGuid;
			},
			PlacesBookmarkMoved(e) {
				e.parentGuid != e.oldParentGuid && this.PlacesBookmarkAddition(e);
			},
			onItemMoved(a, b, c, d, e, itemType, f, oldParentGuid, parentGuid, source) {
				this.PlacesBookmarkMoved({itemType, source, oldParentGuid, parentGuid});
			},
			fetch(win) {
				this.bguids.clear();
				return bm.fetch({url: win.gBrowser.currentURI.spec}, ...this.args);
			},
			addTab: function(win, url, add, params = {relatedToCurrent: true}) { // открыть адрес [add: в новой вкладке]
				params.triggeringPrincipal = Services.scriptSecurityManager.getSystemPrincipal();
				return (add) ? win.gBrowser.addTab(url, params) : win.gBrowser.loadURI(url, params);
			},
			translate(browserMM, win, e, go) { // Google-перевод сайта | выделенного текста (go) поиск выдел. текста в Яндекс
				browserMM.addMessageListener('getSelect', function listener(msg) {
					var url = (msg.data) ? (go)
						? "https://yandex.ru/search/?text="+ msg.data +"&src=suggest_Pers&lang=ru" // поиск текста в Яндекс
						: "https://translate.google.com/#view=home&op=translate&sl=auto&tl=ru&text="+ msg.data // Гугл перевод
						: "http://translate.google.com/translate?u="+ gURLBar.value +"&hl=ru&ie=UTF-8&sl=auto&tl=ru"; // Перевод сайта
					if (go && !msg.data) // Перевод сайти в Яндекс. ничего не выделено + go не пуст
						gBrowser.selectedTab = e.addTab(win, "https://translate.yandex.com/translate?url=" + gURLBar.value + "&dir=&ui=ru&lang=auto-ru", 1)
					else
						gBrowser.selectedTab = e.addTab(win, url, 1);
				browserMM.removeMessageListener('getSelect', listener, true);
				});
				browserMM.loadFrameScript('data:,sendAsyncMessage("getSelect", content.document.getSelection().toString())', false);
			},
			auxclick(e) {
				if (e.button == 2) {
					var win = e.view;
					if (e.altKey)
						this.translate(gBrowser.selectedBrowser.messageManager, win, this);
					else if (e.shiftKey)
						this.translate(gBrowser.selectedBrowser.messageManager, win, this, 1);
					else
						win.undoCloseTab();
				} else
					//this.addTab(win, "about:newtab");
					this.setPref(e);
			},
			find: obj => obj.name == "tooltiptext"
		};
		var ps = ["onBeginUpdateBatch", "onEndUpdateBatch", "onItemChanged", "onItemVisited"];
		var noop = () => {}; for(var p of ps) stt[p] = noop; stt.init();

		var func = id => this[id].mouseenter = async function(e) {
			var win = e.view, star = e.target, result = [], starred = star.hasAttribute("starred"); // star.tooltipText = "\u3164"; // лишнее
			starred && await this.fetch(win);
			for(var guid of (starred ? this.bguids : this.guids)) {
				var arr = [], num = 50;
				while(--num) {
					if (!star.matches(":hover")) return;
					var res = await this.bm.fetch(guid);
					if (!res) break;
					if ((guid = res.parentGuid) == this.bm.rootGuid) {
						arr.unshift(this.bm.getLocalizedTitle(res));
						break;
					}
					arr.unshift(res.title || "[Безымянная папка]");
				}
				arr.length && result.push(arr.join("\\"));
			}
			if (!star.matches(":hover")) return;

			var text = (await win.document.l10n.formatMessages([{
				id: star.getAttribute("data-l10n-id"),
				args: JSON.parse(star.getAttribute("data-l10n-args"))
			}]))[0].attributes.find(this.find).value, txt;

			if (result.length) {
				txt = result.join("\n");
				txt = starred ? `\n\n★ ${result.length > 1 ? "Данные закладки добавлены" : "Данная закладка добавлена"} в:\n${txt}` : "\n\n★ Недавно добавленная папка:\n" + txt; // text += this.help_star +'\n'+ txt;
			}
			win.document.tooltipNode == star ? this.tt(win).label = text + this.help_star + txt : star.tooltipText = text + this.help_star + txt;
		}
		var url = "data:;charset=utf-8," + encodeURIComponent(`(${func})("${id}")`);
		g.ChromeUtils.compileScript(url).then(ps => ps.executeInGlobal(g));
	}
	await delayedStartupPromise;

	var types = ["auxclick", "mouseenter", "wheel"];
	var stars = Array.from(document.querySelectorAll(sel));

	for(var star of stars) for(var type of types) star.addEventListener(type, stt);
	star.setAttribute("context", "event.stopPropagation()");

	var destructor = () => {
		for(var star of stars) for(var type of types) star.removeEventListener(type, stt);
	}
	var ucf = window.ucf_custom_script_win || window.ucf_custom_script_all_win;
	if (ucf)
		ucf[id] = {destructor}, ucf.unloadlisteners.push(id);
	else
		window.addEventListener("unload", destructor, {once: true});
})("ucfBookmarksStarFTooltipHelper", "#star-button, #context-bookmarkpage");

VORON пишет

нет цветового переключения на самой кнопке

Даже не знаю, сейчас лисьи кнопки оформлены иначе, чем в те годы.
Может так сойдёт

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

Выделить код

Код:

(sss => {
	var on = "#131d24";
	var off = "#ffeeaa";

	var pref = `CB.${_id.slice(20)}.setStyleForPage`;
	var url = "data:text/css," + encodeURIComponent(this.Help);
	var args = [Services.io.newURI(url), sss.AGENT_SHEET];
	var reg = add => {
		var has = sss.sheetRegistered(...args);
		if (add) has || sss.loadAndRegisterSheet(...args);
		else has && sss.unregisterSheet(...args);
	}
	var bgs = [off, on].map(c => `linear-gradient(${c}, ${c})`);
	var st = this.icon.style;
	st.cssText = `
		background-repeat: no-repeat !important;
		background-origin: content-box !important;
	`;
	var setState = () => {
		var state = Services.prefs.getBoolPref(pref, false);
		st.setProperty("background-image", bgs[+state], "important");
		reg(state);
	}
	setState();
	this._handleClick = () => Services.prefs.setBoolPref(
		pref, !Services.prefs.getBoolPref(pref, false)
	);
	Services.prefs.addObserver(pref, setState, false);
	addDestructor(reason => {
		Services.prefs.removeObserver(pref, setState);
		reason[5] == "e" && reg();
	});
})(
	Cc["@mozilla.org/content/style-sheet-service;1"]
		.getService(Ci.nsIStyleSheetService)
);

// Подсказка для кнопки .......... 
this.tooltipText = self.label + "\nЛ: Переключить черный фон страниц";

Отсутствует

 

№1594931-10-2021 00:21:42

Sergeys
Administrator
 
Группа: Administrators
Откуда: Moscow, Russia
Зарегистрирован: 23-01-2005
Сообщений: 14014
UA: Firefox 89.0
Веб-сайт

Re: Custom Buttons

для UCF-скриптов есть отдельная тема!
https://forum.mozilla-russia.org/viewtopic.php?id=76642


Через сомнения приходим к истине. Цицерон

Отсутствует

 

№1595031-10-2021 19:13:22

ВВП
Участник
 
Группа: Members
Зарегистрирован: 13-03-2021
Сообщений: 336
UA: Firefox 93.0

Re: Custom Buttons

Dumby
Что-то  java script не работает, выключить, в смысле.

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

Выделить код

Код:

/*CODE*/
// ВКЛ / ВЫКЛ  js на странице + разрешить выделение
// Результат появляется сразу без перезагрузки.
  
      const sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);  
      var uri = makeURI("data:text/css," + encodeURIComponent( "*{ -moz-user-select: text !important;}" ));
// Для текущей вкладки:
       gBrowser.selectedBrowser.messageManager.loadFrameScript(
    "data:,docShell.allowJavascript=!docShell.allowJavascript", false      
  
); 
           
           
                      alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);
                      alertsService.showAlertNotification("chrome://global/skin/icons/cpd_OK.png", "Javascript", "ОТКЛ" );
                      setTimeout(()=> alertsService.closeAlert(), 2000);

Отсутствует

 

Board footer

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