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

Многие проблемы быстрее решаются поиском по форуму и чтением FAQ, чем созданием новой темы и томительным ожиданием ответа.

№1607621-12-2021 22:50:41

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

Re: Custom Buttons

Dumby пишет

Вобщем, переделал. Надо смотреть не испортил ли чего.

Всё прекрасно работает. Огромное спасибо.



Dumby пишет

Содержимое файла можно было разместить там же, внутри кода.
Напрямую как `строку`, но там много экранировать нужно,
или как тело функции и дальше func.toString().slice(N, -M);

Что-то я не очень понимаю, как это реализовать на практике.
Если не очень сложно, можете в качестве примера показать оба этих варианта.


«The Truth Is Out There»

Отсутствует

 

№1607722-12-2021 00:09:40

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

Re: Custom Buttons

unter_officer пишет

можете в качестве примера показать оба этих варианта

Ну, записать каждый из них можно ведь по-разному, навскидку:


cразу строка

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

Выделить код

Код:

(async initCode => CustomizableUI.createWidget({
	id: "0123456789",
	label: "0123456789",
	defaultArea: CustomizableUI.AREA_NAVBAR,
	localized: false,
	onCreated(btn) {
		btn.setAttribute("image", "resource://usercontext-content/fence.svg");
		new btn.ownerGlobal.Function(initCode).call(btn);
	}
}))(`(u => {
	var id, lfs = url => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false);
	var max = () => {
		var url = u([
			"var args = [scroller.scrollHeight, 0];",
			"scroller.scrollTop != 0 || args.reverse();",
			"content.scrollTo(...args);"
		].join("\\n\\t"));
		(max = () => lfs(url))();
	}
	var mid = () => {
		var url = u("content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight) / 2);");
		(mid = () => id = lfs(url))();
	}
	var obj = {
		mousedown: () => id = setTimeout(mid, 500),
		mouseup: () => id && max(id = clearTimeout(id))
	};
	this.onmousedown = this.onmouseup = e => e.button || obj[e.type]();
	this.tooltipText = "Л:   Вверх/Вниз по странице \\nдЛ: Центрирование страницы";
})
(code => "data:," + encodeURIComponent(\`(doc => {
	var root = doc.documentElement;
	var body = doc.body || root;
	var scroller = body.scrollHeight > root.scrollHeight ? body : root;
	\${code}
})(content.document)\`));`);


через функцию
скрытый текст

Выделить код

Код:

(async initCode => CustomizableUI.createWidget({
	id: "0123456789",
	label: "0123456789",
	defaultArea: CustomizableUI.AREA_NAVBAR,
	localized: false,
	onCreated(btn) {
		btn.setAttribute("image", "resource://usercontext-content/fence.svg");
		new btn.ownerGlobal.Function(initCode).call(btn);
	}
}))((() => {

(u => {
	var id, lfs = url => gBrowser.selectedBrowser.messageManager.loadFrameScript(url, false);
	var max = () => {
		var url = u([
			"var args = [scroller.scrollHeight, 0];",
			"scroller.scrollTop != 0 || args.reverse();",
			"content.scrollTo(...args);"
		].join("\n\t"));
		(max = () => lfs(url))();
	}
	var mid = () => {
		var url = u("content.scrollTo(0, (scroller.scrollHeight - scroller.clientHeight) / 2);");
		(mid = () => id = lfs(url))();
	}
	var obj = {
		mousedown: () => id = setTimeout(mid, 500),
		mouseup: () => id && max(id = clearTimeout(id))
	};
	this.onmousedown = this.onmouseup = e => e.button || obj[e.type]();
	this.tooltipText = "Л:   Вверх/Вниз по странице \nдЛ: Центрирование страницы";
})
(code => "data:," + encodeURIComponent(`(doc => {
	var root = doc.documentElement;
	var body = doc.body || root;
	var scroller = body.scrollHeight > root.scrollHeight ? body : root;
	${code}
})(content.document)`));

}).toString().slice(9, -3));

Отсутствует

 

№1607822-12-2021 00:47:32

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

Re: Custom Buttons

Dumby пишет

Ну, записать каждый из них можно ведь по-разному, навскидку:

Большое спасибо. Теперь более или менее понятно.


«The Truth Is Out There»

Отсутствует

 

№1607923-12-2021 02:46:23

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

Re: Custom Buttons

Dumby
Подскажите пожалуйста, возможно ли в UCF реализовать что-то подобное:

Пара примеров

Выделить код

Код:

var switchOff = {
	observe: function(subject, topic, data) {
		if ( data == "shutdown" ) cbu.setPrefs("network.proxy.type", 0);
	}
}
Services.obs.addObserver(switchOff, "quit-application", false);

-------------------------------------------------------------------------------

function funcDefault() {
	..........
}

var switchOff = {
	observe: function(subject, topic, data) {
		if ( data == "shutdown" ) funcDefault();
	}
}
Services.obs.addObserver(switchOff, "quit-application", false);


«The Truth Is Out There»

Отсутствует

 

№1608023-12-2021 22:59:16

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

Re: Custom Buttons

unter_officer пишет

возможно ли

А откуда сомнение?
Оба примера вобщем-то одинаковые, и должны работать
(cbu только от Custom Buttons, но это дело десятое).
Вот, например, добавил в custom_script.js, и результат есть.

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

Выделить код

Код:

var switchOff = {
	observe(subject, topic, data) {
		Services.obs.removeObserver(this, topic);
		//if (data == "shutdown")
			Services.prefs.setStringPref(
				"+++TEST+++.quit-application",
				data + " " + new Date().toLocaleString("mn")
			);
	}
};
Services.obs.addObserver(switchOff, "quit-application");

Отсутствует

 

№1608124-12-2021 02:48:24

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

Re: Custom Buttons

Dumby пишет

А откуда сомнение?
Оба примера вобщем-то одинаковые, и должны работать
(cbu только от Custom Buttons, но это дело десятое).
Вот, например, добавил в custom_script.js, и результат есть.

Dumby, большое спасибо.


«The Truth Is Out There»

Отсутствует

 

№1608224-12-2021 14:54:24

dezhnev
Участник
 
Группа: Members
Зарегистрирован: 21-04-2016
Сообщений: 72
UA: Firefox 78.0

Re: Custom Buttons

неактуально :dumb:

fx91 > fx92:
https://bugzilla.mozilla.org/show_bug.cgi?id=1723807

getURLSpecFromFile -> getURLSpecFromActualFile

С наступающим!  :beer:

Отредактировано dezhnev (24-12-2021 16:09:33)

Отсутствует

 

№1608326-12-2021 04:16:23

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

Re: Custom Buttons

Dumby
Если не сложно, переделайте кнопочку для UCF.

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

Выделить код

Код:

/*Initialization Code*/

// Compact Menu ..........
// Dumby: https://forum.mozilla-russia.org/viewtopic.php?pid=792206#p792206 .....
this.parentNode.nodeName == "toolbarpaletteitem" || (icons => {
	this.type = "menu";
	var bar = document.getElementById("main-menubar");
	var menupopup = document.createXULElement("menupopup");
	menupopup.toggleAttribute("context");
	this.prepend(menupopup);
	var move = (from, to, ico) => {
		from.querySelector("#bookmarksMenu")._placesView?.uninit();
		for(var menu of Array.from(from.children)) {
			var popup = menu.menupopup;
			popup.remove();
			menu.textContent = menu.renderedOnce = "";
			if (ico) {
				var img = icons[menu.id];
				if (img)
					menu.className = "menu-iconic",
					menu.setAttribute("image", img);
			} else
				menu.removeAttribute("class"),
				menu.removeAttribute("image");
			to.append(menu);
			menu.render();
			menu.append(popup);
		}
	}
	move(bar, menupopup, true);
	addDestructor(() => move(menupopup, bar));
})({
	"file-menu": "chrome://browser/content/robot.ico",
	"edit-menu": "chrome://browser/skin/preferences/face-smile.svg",
	"view-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"history-menu": "chrome://browser/content/robot.ico",
	"bookmarksMenu": "chrome://browser/skin/preferences/face-smile.svg",
	"tools-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"helpMenu": "chrome://browser/content/robot.ico"
});

Для FF91.


«The Truth Is Out There»

Отсутствует

 

№1608426-12-2021 20:20:37

Азат55555
Участник
 
Группа: Members
Зарегистрирован: 01-11-2018
Сообщений: 28
UA: Yandex 21

Re: Custom Buttons

Здравствуйте. Нужно время от времени выделять текст в адресной строке, пожалуйста подскажите код. Заранее благодарю!

Отредактировано Азат55555 (27-12-2021 18:25:06)

Отсутствует

 

№1608526-12-2021 21:16:30

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

Re: Custom Buttons

unter_officer

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

Выделить код

Код:

(async icons => CustomizableUI.createWidget({
	id: "797097",
	label: "Compact Menu",
	tooltiptext: "Compact Menu",
	localized: false,
	onCreated(btn) {
		btn.type = "menu";
		btn.setAttribute("image", "resource://usercontext-content/briefcase.svg");

		var doc = btn.ownerDocument;
		var menupopup = doc.createXULElement("menupopup");
		menupopup.toggleAttribute("context");
		btn.prepend(menupopup);

		var bar = doc.getElementById("main-menubar");
		bar.querySelector("#bookmarksMenu")._placesView?.uninit();
		for(var menu of Array.from(bar.children)) {
			var popup = menu.menupopup;
			popup.remove();
			menu.textContent = menu.renderedOnce = "";
			var img = icons[menu.id];
			if (img)
				menu.className = "menu-iconic",
				menu.setAttribute("image", img);

			menupopup.append(menu);
			menu.render();
			menu.append(popup);
			menu.disabled = false;
		}
	}
}))({
	"file-menu": "chrome://browser/content/robot.ico",
	"edit-menu": "chrome://browser/skin/preferences/face-smile.svg",
	"view-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"history-menu": "chrome://browser/content/robot.ico",
	"bookmarksMenu": "chrome://browser/skin/preferences/face-smile.svg",
	"tools-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"helpMenu": "chrome://browser/content/robot.ico"
});


Азат55555
gURLBar.select();

Отсутствует

 

№1608627-12-2021 02:01:58

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

Re: Custom Buttons

Dumby пишет

unter_officer

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

Выделить код

Код:

(async icons => CustomizableUI.createWidget({
	id: "797097",
	label: "Compact Menu",
	tooltiptext: "Compact Menu",
	localized: false,
	onCreated(btn) {
		btn.type = "menu";
		btn.setAttribute("image", "resource://usercontext-content/briefcase.svg");

		var doc = btn.ownerDocument;
		var menupopup = doc.createXULElement("menupopup");
		menupopup.toggleAttribute("context");
		btn.prepend(menupopup);

		var bar = doc.getElementById("main-menubar");
		bar.querySelector("#bookmarksMenu")._placesView?.uninit();
		for(var menu of Array.from(bar.children)) {
			var popup = menu.menupopup;
			popup.remove();
			menu.textContent = menu.renderedOnce = "";
			var img = icons[menu.id];
			if (img)
				menu.className = "menu-iconic",
				menu.setAttribute("image", img);

			menupopup.append(menu);
			menu.render();
			menu.append(popup);
			menu.disabled = false;
		}
	}
}))({
	"file-menu": "chrome://browser/content/robot.ico",
	"edit-menu": "chrome://browser/skin/preferences/face-smile.svg",
	"view-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"history-menu": "chrome://browser/content/robot.ico",
	"bookmarksMenu": "chrome://browser/skin/preferences/face-smile.svg",
	"tools-menu": "chrome://browser/skin/preferences/face-sad.svg",
	"helpMenu": "chrome://browser/content/robot.ico"
});

Dumby, большое спасибо.


«The Truth Is Out There»

Отсутствует

 

№1608727-12-2021 06:21:27

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

Re: Custom Buttons

Dumby
Я у себя переделываю кнопочку под UCF.


В общем сама кнопка нормально работает:

Кнопка

Выделить код

Код:

// Переключить прокси ..........
try {
((id, label, tooltiptext, timeout, pref, img, img1, img2) => {
	CustomizableUI.createWidget({
		id: id,
		label: label,
		tooltiptext: tooltiptext,
		localized: false,
		// defaultArea: CustomizableUI.AREA_NAVBAR,
		onCreated: function(btn) {
			if (Services.prefs.getIntPref(pref) == 1) {
				btn.setAttribute("image", img1);
			}
			else if (Services.prefs.getIntPref(pref) == 2) {
				btn.setAttribute("image", img2);
			}
			else {
				btn.setAttribute("image", img);
			}
		},
		onCommand: function(event) {
			switch(Services.prefs.getIntPref(pref)) {
				case 0:  var data = 1; break;
				case 1:  var data = 2; break;
				case 2:  var data = 0; break;
				default: var data = 0;
			}
			Services.prefs.setIntPref(pref, data);
		},
	});
	Services.prefs.addObserver(pref, () => {
		var instances = CustomizableUI.getWidget(id).instances,
		image = Services.prefs.getIntPref(pref);
			switch(image) {
				case 0: image = img; break;
				case 1: image = img1; break;
				case 2: image = img2; break;
				default: image = img;
			}
		instances?.forEach?.(instance => {
			instance?.node?.setAttribute?.("image", image);
		});
	});
})(
	"btn-toggle-proxy",
	"Прокси",
	"Переключить прокси",
	null,
	"network.proxy.type",
	"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAALPSURBVHjahFNLSFVRFF3nnnvfz1+YHzCk0CDLAougkJCiGgRBkDRooDUQJKJZwwY1kAaNm0REEvQhgoKiwcOBFEloKPQR01K0D+Qze/r0vXd/p3XuvVkp0b5szuWcfdZee+19xD2JuuZGnDbjiANQEAhMRKtSiH7Cf+UBo+O40e5iuoth17llEqBj6yB6nBF4sCBFjCcWL0k6LygnWgv0JbjxNphyHyFHcKkqjHJNGUPCfgVke+FZtYBRSi8jUIpuMsSPgMjCnoSnXOg7KfxhZkDdCKhK/WkQuZ5A60IQTV/l6S73MmG5jPVXgwh9kJ8CnDkgVg1YNbxQwYNExESXYpPJDJDYGegl1jDR5iyydJ2xyCKzBEnSqQ+MSBO6kwlBV9sKiMdsPmUSdF9TzwUcgzJ8auIT3GaiKiuIWcNE6Sz5bLhhLXOTDAzrd5DnhMCKLFyW5OYRND4W8oSpD3TtFfVweaSMBHW2YOhsutVeLgQq2w3EmyC9eaBkEzrS79F3eBlpzooRMInvBRqewxQy6Ptflr1CoB9AaXuQTLgTUKklDmgKTx8/wMGjRfSbHyZwN3UIGwiQZO02YWXpLhyIt2CjPQ6VG4BIbmE57JzB1osSCLJxip9h1dfhwuVJ9Ms7HuZyk3jS+REPq6bwrPU4OlOtaJY1sArDwOJbCE4qzBJqsI3iDlGTWRj2V7JaQoW9gNsGa5JMVEfm5Sd24FzlRRyR9YgFc2JAFBeop+4QgfJ9FL6RF8rDLprJoEvC5APyCPRFa/N6FFenq/FIhaovJy3sqaxFL4fL875TbGris4tuhuOvYBayGHvpYQb/MNEVrvJFJdKfjkFlznMW0/CKQ/C/nYU/1gJ1y0A3ore6Yvppt5EFm6Ufs7GdLIfzGGiYRWMygc3SgFEYhMj0Yf7NO/Sc9HCNdxz8x34xSrDT+++bOHNT4BT3mqKkgf0UYABF1AvLPG1k5wAAAABJRU5ErkJggg==",
	"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANkSURBVHjafFNNbFRVFP7uz/uZ6Qzz+kOpU7QWqVqsmoZoYSMiSsCFOzYkTVy60Lhg48KQGAPRuDDxZ2OMhoU/W1YkkKoNVRBiMPgzbWlKcFralHZeO5037+++dz3zphhg4c275973cs53vvOd85iQJ8q7hg6+bhuGBQbN0FoMrH2B1pnNTk1G0X1u+uJXKj79DzBMXhUtCWD88u9HT1294SfCYMK2GKRob9UKijVipRFEGk0vUYf2FuSB56S+/tvp94AuQRmUtKS0L0838enEUtLXa6OQE9jWIVGwOQzGkRJQFKcAPXMLfhIQvm3IfJunmVmZWU4+AgI2RN4R6C5JOEUJk9gkCbEIUsTEqLghNW+XmOKeJalUJkiAm4sNrDQD9Pbk0NtpwSlI5EyeaeEHCaIoRXU5wL7dBVIM7D6Qu28NL4SfRBl1dzNC3pYwCESQf0psEgKprQXQ93HAPeXQCoMYPGUQnEOpFE0jBuMkbtQqpc3EWw8zwYXgW7mj/0B0TJwbGx4FaYTNCKQ2hORZmzXaQNr3KSbGwlIDfhjqLWF5BpIQvw7BUe7roUam2rIMRmVwSsYkAXnNGBZqeGGkCyODjqjVaujfH4/PzL854bufXaBZ4VIzpl98Mo8bH++VQjDxYL0ffP031sMOHDsyCBpINlttaC+Oyrkdr5w7+1HtUFz/dlLOz179/qUjTj8B5FScRsLgYvT57QdH9zgDM4uu/mX+GntiaBfubMTYXuLosCWrrYbx7VurRt8zj75bncKkjMKTsz+d/+4NGl/K+6pz4p1Pvtk/1tnbWTRxaW4dyyt/ktAM/d1FvHZgJyq3XCRcSaUisPzKKLcO7yRhhqmEoTIhbBt59u23Tr4/eHTgEdMsddL0mWD1+kXdCvCoexeuLOHxh4so5SxIQyNXMEl6j1F3KgkB3G51afqvHz7vc/44q7WiKTObRmFzrGesdIamJXHrDW7bjLlehDuul2idyvpCNJOGP1e35qSStUypD9eUwhraE6kDH3Oicnx8z9PqZcvg6dhTO3R30WJT+URsbtzE8rUvz7TiHuhG69ceoBLLdJbpdJLA/fHS6uJDj9ld+d3CkvzK9UU2cW7KnTk/eSqNql9QUMzw/ytjRNum2z5hYzhVaOoYv9K36btO/wowAFoafTv9jJ+AAAAAAElFTkSuQmCC",
	"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABEAAAARCAYAAAA7bUf6AAADvklEQVR42nWUf0xbVRTHz333vddf0BaKQHGKZUxZcTg1CA5NBF3CFomJmmU6x5qZmKl/GDNj5x/adtFlsERJGWWw8UsgZFmmCckY2eYWmBto5ogDJ+lQWJuVHwGk/Oh4ffe+5+3LNJPMk9x3817O+b7POfecix6yZ2SVlpW5DKJOhxCoCBAAWyixMVNV7cl2FRS2iKrApYsXmyfDd0KIGfuuoh273nK3tLUeHp+ZpBzGWOAxYA4Dx3FaEKUUqEJBJhQkaZU4s3P4D/e9721pOOHDPOYpoQRVuvZ4PvnS4z013B9Pt6Zgo2gAk04PBkEHPMJMSAHml4CB8NwMKcx+Qtd+5Gh14GidG/M8EyH3RL7yeE+O9NFMmw2nmiyQYkyGJL0ReEakKArE5bhGFJqZIvnpj/Ft1f7D9XWBz/4V2e3a43Uf8nkOXuqkyclGnGm2QVqSBcx6E+h4QauFxERkIkNkdpZszyvi26v8VYG6wIH7SbyfMpGPe45RXsTYxgSSDSYwinoQmQhmRU7QMGeYjS6Qdwu38x3VtQ8Wee/7GooFhK1GMxh1Ok0AIU4jiJM43JUJLCwtk28qPuA7jvira/1+938Ku5/V5LV2L0WcghNpsOMGAfPaMauMRJIpKKsLALJEfNv28t/VdlU1NTYfYCAiA4mjXZXveD6vOuR19zRLDBobBT0SBYHjOQ6xH8HSagwMqxPwwiNZ4MjIUZfuRtH1m4ORruO9ruDg3HnWKhx627X7i86Wb30sb8p6A8Ma674cgGU5DCVPvc7ozDA1f1sdi1xD47NDNHDw7MuhoZU+lL3e8fiOnTv3Y8wZiEziiW7LL3iydMOjG7LDc7+r1yOtaP26Z6HYWc4KboPlWBSuDvfII7cvC2PBiQtnA3e2as19r31BEEVrU2tzp3NT/ksmvdVw5bcOtS9Yj9ItTnixoAIK88pgeHwAJqZG1Rt/9KPQ1K25ga7Y5kQ8FkUxU5Kk5cq9ro8ajjf6pqcnKQI9/mGoEU4PetVc+xb0fH45WJJS4OG0XLgx9qP6c/AMmvlrfP5cU3Tz/SRqZpbdZkm1rmOzwiFFiBkzVoocpZE2R3oJ3ego4NKsdmS35cC1m30kGLnKj478OXD+WHQLggcbSkw0yxA/94apd9ubT7/iSCtWCvPK2Tikot5f6uHKr92ou25630IIGtCaSM3+eWUqFLCaW/RqSs3Wik3lzzhLuMWlRXSu/8z8hZPhr6dv0RrmvfJ/JGuJ9KIZiq122MjaJrY4CT8BgVHt6mHT/Tcp4LzcDpfj/QAAAABJRU5ErkJggg=="
);
} catch(e) { }

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



В СВ-кнопке tooltiptext переключается в зависимости от состояния прокси:

Это часть из СВ-кнопки

Выделить код

Код:

// Подсказка для кнопки .....
this.onmouseover =()=> {
	if (cbu.getPrefs("network.proxy.type") == 1) {
		statusPrefs = "Ручная настройка прокси" + "\nIP: " + cbu.getPrefs("network.proxy.http") + "\nПорт: "+ cbu.getPrefs("network.proxy.http_port");
	}
	else if (cbu.getPrefs("network.proxy.type") == 2) {
		statusPrefs = "Автонастройка прокси";
	}
	else {
		statusPrefs = "Без прокси";
	}
	this.tooltiptext = "   Переключить прокси \n--------------------------------\nТекущее состояние:\n" + statusPrefs;
}

Я никак не могу сообразить, как реализовать переключающийся tooltiptext в моём UCF-коде.
Не подскажете, как это сделать?



P.S. Вопрос снимается, сам сделал.

Отредактировано unter_officer (27-12-2021 16:17:49)


«The Truth Is Out There»

Отсутствует

 

№1608827-12-2021 18:26:58

Азат55555
Участник
 
Группа: Members
Зарегистрирован: 01-11-2018
Сообщений: 28
UA: Yandex 21

Re: Custom Buttons

Азат55555 пишет

Здравствуйте. Нужно время от времени выделять текст в адресной строке, пожалуйста подскажите код. Заранее благодарю!

А именно эмулировать нажатие alt + d.

Отсутствует

 

№1608928-12-2021 01:10:50

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

Re: Custom Buttons

unter_officer пишет
Выделить код

Код:

this.onmouseover =()=> {
	if (cbu.getPrefs("network.proxy.type") == 1) {
		statusPrefs = "Ручная настройка прокси" + "\nIP: " + cbu.getPrefs("network.proxy.http") + "\nПорт: "+ cbu.getPrefs("network.proxy.http_port");
	}
	else if (cbu.getPrefs("network.proxy.type") == 2) {
		statusPrefs = "Автонастройка прокси";
	}
	else {
		statusPrefs = "Без прокси";
	}
	this.tooltiptext = "   Переключить прокси \n--------------------------------\nТекущее состояние:\n" + statusPrefs;
}

если пятачок
    значит это свин
иначе если хобот
    значит это слон
иначе
    это барсук, мы гарантируем это!

Отсутствует

 

№1609028-12-2021 02:30:00

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

Re: Custom Buttons

в jsm-скрипте AppMenuTbbSaveHTMLChild не работает получение версии Firefox - как исправить?

Выделить код

Код:

var version = Services.appinfo.platformVersion.replace(/\..*/g,''); // нижеследующий код также не работает

if ( parseInt(Services.appinfo.version) < 89 )
	btn.setAttribute("image", "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAAAAAClZ7nPAAAAAXRSTlMAQObYZgAAACNJREFUCNdjYH/AgBX9/89Q/4/B/g+D/A8G/g8gEeYDDIwNAIB7EDCcKCcMAAAAAElFTkSuQmCC");

Отсутствует

 

№1609128-12-2021 10:56:13

Азат55555
Участник
 
Группа: Members
Зарегистрирован: 01-11-2018
Сообщений: 28
UA: Yandex 21

Re: Custom Buttons

Азат55555 пишет
Азат55555 пишет

Здравствуйте. Нужно время от времени выделять текст в адресной строке, пожалуйста подскажите код. Заранее благодарю!

А именно эмулировать нажатие alt + d.

Этот код работает в firefox 56.0.2 https://www.cyberforum.ru/post12284523.html или нет?

Отсутствует

 

№1609228-12-2021 11:08:08

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

Re: Custom Buttons

Dobrov пишет

не работает

Консоль что ли не подруга: «Services is not defined».

как исправить?

Например, вписать appinfo во вторую строку
и, далее, использовать его.

Отсутствует

 

№1609329-12-2021 05:38:03

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

Re: Custom Buttons

Dumby
Если не сложно, переделайте кнопочку для UCF.

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

Выделить код

Код:

// Показывать количество открытых табов в адресной строке ..........
(function() {
	var tabCounter = document.createXULElement("button");
	tabCounter.setAttribute("id", "tabCounter");
	tabCounter.setAttribute("tooltiptext", "Количество открытых вкладок");
	var urlbarIcons = document.getElementById("urlbar-icons") || document.getElementById("page-action-buttons"); // FF57
	urlbarIcons.insertBefore(tabCounter, urlbarIcons.lastChild);
	addDestructor(()=> tabCounter.remove());

	// Css стиль для счётчика ....
	var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
	var uri = makeURI('data:text/css,'+ encodeURIComponent('\
		#tabCounter { -moz-appearance: none !important; min-width: 42px !important; min-height: 22px !important; max-height: 22px !important; text-align: center !important; color: #000000 !important; background-color: #DBEAF9 !important; border-left: #B5C2D0 1px solid !important; padding: 0px 0px 0px 0px !important; margin: 0px 0px 0px 0px !important; }\
	'));
	sss.loadAndRegisterSheet(uri, 0);
	addDestructor(()=> sss.unregisterSheet(uri, 0) );

	// Считать и показывать количество вкладок ....
	function count() {
		try { window.clearTimeout(count.timeout) } catch(e) {};
		count.timeout = window.setTimeout(()=> {
			tabCounter.label = gBrowser.tabs.length;
		}, 350);
	};
	count();

	// Отслеживать открытие и закрытие вкладок ....
	var tabs = gBrowser.tabContainer;
	addEventListener("TabOpen", count, false, tabs);
	addEventListener("TabClose", count, false, tabs);
})();

Для FF91.

Отредактировано unter_officer (29-12-2021 05:39:20)


«The Truth Is Out There»

Отсутствует

 

№1609429-12-2021 21:00:07

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

Re: Custom Buttons

unter_officer
Здесь-то что могло не получиться

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

Выделить код

Код:

(async style => {
	await document.documentReadyForIdle;

	var tabCounter = document.createXULElement("button");
	tabCounter.id = "tabCounter";
	tabCounter.setAttribute("tooltiptext", "Количество открытых вкладок");
	var urlbarIcons = document.getElementById("page-action-buttons");
	urlbarIcons.insertBefore(tabCounter, urlbarIcons.lastChild);

	var flag = "--reg-flag-ex";
	if (!windowUtils.getVisitedDependentComputedStyle(tabCounter, "", flag)) {
		var sss = Cc["@mozilla.org/content/style-sheet-service;1"].getService(Ci.nsIStyleSheetService);
		var uri = Services.io.newURI("data:text/css," + encodeURIComponent(
			`@-moz-document url(${location}) {${
				style.replace("{", `{\n\t\t${flag}: 1;`).replace(/;$/gm, " !important;")
			}}`
		));
		sss.loadAndRegisterSheet(uri, sss.USER_SHEET);
	}
	var tid, lab = () => {
		tid = null;
		tabCounter.label = gBrowser.tabs.length;
	}
	var count = () => {
		tid && clearTimeout(tid);
		tid = setTimeout(lab, 150);
	}
	lab();

	var tc = gBrowser.tabContainer;
	tc.addEventListener("TabOpen", count);
	tc.addEventListener("TabClose", count);

	var ucf = ucf_custom_script_win, id = Symbol();
	ucf.unloadlisteners.push(id);
	ucf[id] = {destructor() {
		tc.removeEventListener("TabOpen", count);
		tc.removeEventListener("TabClose", count);
	}};
})(`
	#tabCounter {
		appearance: none;
		min-width: 42px;
		min-height: 22px;
		max-height: 22px;
		text-align: center;
		color: #000000;
		background-color: #DBEAF9;
		border-left: #B5C2D0 1px solid;
		padding: 0;
		margin: 0;
	}
`);

Отсутствует

 

№1609529-12-2021 22:07:03

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

Re: Custom Buttons

Dumby пишет

unter_officer
Здесь-то что могло не получиться

Понимаете, я же не спец по СВ и UCF кнопкам. Я сам не могу с нуля написать кнопку.
Всё, что я могу, это взять похожую по алгоритму кнопку и переделать её в то, что мне требуется. И то не всегда такое удаётся.
Вот, Вы, мне помогли с крайней кнопочкой, за что огромное спасибо, и я на её примере уже сам переделал ещё одну свою кнопку.
Как-то так.

Отредактировано unter_officer (30-12-2021 01:37:03)


«The Truth Is Out There»

Отсутствует

 

№1609601-01-2022 12:49:54

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

Re: Custom Buttons

Dumby - вопрос по старому скрипту CB drag and go:


не получается подключить в UCF скрипт CB drag and go — перетаскивание ссылки/выделенного текста.
Этот код работает, если подключить его как User.js, то есть запускается из скрипта дополнительных кликов кнопок ucf_hookClicks.js.
Подскажите, как правильно его подключить в UCF-custom_script.js ? Может для Firefox 90+ нужны какие-то доработки ?

Отсутствует

 

№1609701-01-2022 22:42:33

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

Re: Custom Buttons

Dobrov пишет

подключить в UCF-custom_script.js

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


Не понял, почему именно в custom_script.js, а не в окно, но можно и туда.

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

Выделить код

Код:

(async win => ({
	link: {
		U: {
			name: "Открыть ссылку в новой активной странице", cmd() {
				win.openUILinkIn(this.val, "tab", this.opts);
			}
		},
		D: {
			name: "Открыть ссылку в новой фоновой странице", cmd() {
				win.openUILinkIn(this.val, "tabshifted", this.opts);
			}
		}
	},
	text: {
		U: {
			name: "Поиск текста поисковиком по умолчанию в новой активной странице", cmd() {
				this.search("tab");
			}
		},
		D: {
			name: "Поиск текста поисковиком по умолчанию в новой фоновой странице", cmd() {
				this.search("tabshifted");
			}
		}
	},
	search(where) {
		var engine = Services.search[`default${this.opts.private ? "Private" : ""}Engine`];
		var submission = engine.getSubmission(this.val, null, "");
		win.openUILinkIn(submission.uri.spec, where, {postData: submission.postData, ...this.opts});
	},
	opts: {
		//relatedToCurrent: true,
		triggeringPrincipal: Cu.getObjectPrincipal(this),
		get userContextId() {
			return parseInt(win.gBrowser.selectedBrowser.getAttribute("usercontextid"));
		},
		get private() {
			return win.PrivateBrowsingUtils.isWindowPrivate(win);
		}
	},
	dragstart(e) {
		win = e.view.windowRoot.ownerGlobal;
		//if (!win.gBrowser.currentURI.spec.startsWith("http")) return;
		if (!e.dataTransfer.mozItemCount || !win.gBrowser.selectedBrowser.matches(":hover"))
			return;

		var dt = e.dataTransfer;
		this.type = this.link;
		this.dir = this.val = "";

		var url = dt.getData("text/x-moz-url-data");
		if (url) this.val = url;
		else {
			var txt = dt.getData("text/plain");
			if (txt) {
				this.val = txt;
				if (!this.textLinkRe.test(txt)) this.type = this.text;
			}
			else return;
		}
		this.x = e.screenX; this.y = e.screenY;
		this.drag(true);
	},
	drag(init) {
		var meth = `${init ? "add" : "remove"}EventListener`;
		for(var type of this.events) win[meth](type, this, true);
		init || win.StatusPanel.panel.setAttribute("inactive", true);
	},
	events: ["dragover", "drop", "dragend"],
	dragover(e) {
		var {x, y} = this, cx = e.screenX, cy = e.screenY;
		var dx = cx - x, ax = Math.abs(dx), dy = cy - y, ay = Math.abs(dy);
		if (ax < 10 && ay < 10) return;

		this.x = cx; this.y = cy;
		var dir = ax > ay ? dx > 0 ? "R" : "L" : dy > 0 ? "D" : "U";
		if (this.dir.endsWith(dir)) return;

		dir = this.dir += dir;
		var obj = this.type[dir];
		var txt = `${
			obj ? "Ж" : "Неизвестный ж"
		}ест мыши: ${dir + (obj ? "  " + obj.name : "")}`;

		win.StatusPanel._labelElement.value = txt;
		win.StatusPanel.panel.removeAttribute("inactive");
	},
	dragend(e) {
		var dt = e.dataTransfer;
		this.drag();

		var obj = this.type[this.dir];
		if (!obj || dt.mozUserCancelled) return;

		var x = e.screenX, y = e.screenY;
		var wx = win.mozInnerScreenX, wy = win.mozInnerScreenY;
		x > wx && y > wy && x < wx + win.innerWidth && y < wy + win.innerHeight
			&& obj.cmd.call(this);
	},
	textLinkRe: /^([a-z]+:\/\/)?([a-z]([a-z0-9\-]*\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)|(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}[0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(:[0-9]{1,5})?(\/[a-z0-9_\-\.~]+)*(\/([a-z0-9_\-\.]*)(\?[a-z0-9+_\-\.%=&amp;]*)?)?(#[a-z][a-z0-9_]*)?$|^custombutton:\/\/\S+$/,


	observe(w) {
		this.drop = () => this.drag();
		this.handleEvent = e => this[e.type](e);
		var unload = e => {
			var w = e.target.ownerGlobal;
			w.gBrowser.tabpanels.removeEventListener("dragstart", this, true);
			if (w == win) win = null;
		}
		(this.observe = w => {
			//if (!w.toolbar.visible) return;
			w.gBrowser.tabpanels.addEventListener("dragstart", this, true);
			w.addEventListener("unload", unload, {once: true});
		})(w);
	},
	init(topic, self) {
		delete this.init;
		Services.obs.addObserver(self = this, topic);
		Services.obs.addObserver(function quit(s, t) {
			Services.obs.removeObserver(self, topic);
			Services.obs.removeObserver(quit, t);
		}, "quit-application-granted");
	}
}).init("browser-delayed-startup-finished"))();

Отсутствует

 

№1609801-01-2022 23:39:43

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

Re: Custom Buttons

Dumby
Есть у меня вот такая СВ-кнопочка:

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

Выделить код

Код:

// Иконки сайтов на CB-кнопке ..........
addEventListener("TabAttrModified", (e, tab = e.target)=> {
	if ( tab.selected ) {
		favIcon.src = tab.image || "chrome://global/skin/icons/defaultFavicon.svg";
	}
}, true, gBrowser.tabContainer);
var favIcon = self.getElementsByClassName("toolbarbutton-icon")[0];
addDestructor(()=> favIcon.removeAttribute("src") );

Возможно её переделать под UCF?


Для FF91.

Отредактировано unter_officer (01-01-2022 23:40:18)


«The Truth Is Out There»

Отсутствует

 

№1609902-01-2022 00:50:02

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

Re: Custom Buttons

unter_officer пишет

Есть у меня вот такая СВ-кнопочка:

А какой в ней смысл, зачем иконка на кнопке, есть же на вкладке?

Отсутствует

 

№1610002-01-2022 01:18:17

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

Re: Custom Buttons

voqabuhe пишет

А какой в ней смысл, зачем иконка на кнопке, есть же на вкладке?

У меня скрыт заголовок окна.
Заголовок страницы активной вкладки выводится с помощью стиля на нижнюю панель, а иконка сайта на кнопку.

Скрин
Untitled-3.png

Отредактировано unter_officer (02-01-2022 01:19:19)


«The Truth Is Out There»

Отсутствует

 

Board footer

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