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

Юристы зарабатывают огромные деньги и славу, оперируя хорошим знанием законов. Правила форума — простой путь к успешному общению.

№1572603-07-2021 07:40:04

momo2000
Участник
 
Группа: Members
Зарегистрирован: 03-09-2015
Сообщений: 228
UA: Firefox 89.0

Re: Custom Buttons

Dumby
Спасибо, буду разбираться!:beer:

Отсутствует

 

№1572703-07-2021 13:33:18

harryk
Участник
 
Группа: Members
Зарегистрирован: 23-12-2019
Сообщений: 418
UA: Firefox 68.0

Re: Custom Buttons

Alex_one

Alex_one пишет

как добавить в кнопку BBCode пункт Нумерованный список?

У меня так работает

Нумерованный список

Выделить код

Код:

NumList|Нумерованный список|list|1||data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA/UlEQVQ4Ea3RMWsCMRjG8Xh2KQdqp6NuOru7CAoiSJ0KhW7iKrj7IXQQN7+C4CcoHRwcRNwcxaGTi5NoRUH957ik4ZDenSjPL2+Se3NEFeLvYzOt4K68c2qCESIl7nXvqSdkMMR/KfPwiC2EJQf8YIkw6dP0ATeWO0YbYrTrc3rCpvwKO2qkPBnd38wlSviYNwh/yuh86AuyvLiIZ/jzykYdZhwWDfUb5Fl0MUcbbzDjsBggB/kvpKljrOGmxViAhQ1i8KfKxi/Onik1CR15mx4riXIz8mYHnsyQgk6C2ReaCEpJCPECN+qqHVY1LHDBJ0JFvcCh24bKSk2C6hUBwSHi/YrJMAAAAABJRU5ErkJggg==

Отсутствует

 

№1572803-07-2021 14:32:05

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 89.0

Re: Custom Buttons

harryk

Нумерованный список

Как его правильно вставить в  BBCode_multi.js для ucf? В конец добавил с номером 3.0.21- верт. панель "раздулась" и не пашет

Отсутствует

 

№1572903-07-2021 18:16:18

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

Re: Custom Buttons

Возможно ли получить куки ответа сервера? В заголовках ответа есть set-cookie, но там не полное содержание кук, нет httpOnline.
Чтобы сделать запрос, использую var XMLHttpRequest = Components.Constructor("@mozilla.org/xmlextras/xmlhttprequest;1");

Отредактировано Азат55555 (03-07-2021 19:47:21)

Отсутствует

 

№1573004-07-2021 00:56:26

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 85.0

Re: Custom Buttons

Можно сделать код для экспорта закладок в формате HTML в назначенную папку без запроса?

Отсутствует

 

№1573104-07-2021 14:21:17

Alex_one
Участник
 
Группа: Members
Зарегистрирован: 27-09-2015
Сообщений: 135
UA: Firefox 84.0

Re: Custom Buttons

harryk

harryk пишет

У меня так работает

Уже, что-то прорисовывается, спасибо.
Но всё равно цифры не хочет ставить. У меня сейчас так:


  1. ТЕКСТ
    ТЕКСТ
    ТЕКСТ
Выделить код

Код:

NumList|Нумерованный список|list|1||data:image...

Dumby, Наведите на путь истинный, пжа.

Отсутствует

 

№1573204-07-2021 16:12:33

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

Re: Custom Buttons

hartumov пишет

Можно сделать код для экспорта закладок в формате HTML в назначенную папку без запроса?

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

Выделить код

Код:

ChromeUtils.import("resource://gre/modules/BookmarkHTMLUtils.jsm")
	.BookmarkHTMLUtils.exportToFile("D:\\test\\sub\\bexp.html");

Alex_one пишет

Наведите на путь истинный

Ага, речь про кнопку — самой кнопки нет,
написано «Чтобы вышло примерно так» — не написано вышло из чего.


Вот такой bb-код, чтобы вышло

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

Выделить код

Код:

[list=1]
[*]ТЕКСТ
[*]ТЕКСТ
[*]ТЕКСТ
[/list]

  1. ТЕКСТ
  2. ТЕКСТ
  3. ТЕКСТ

Отсутствует

 

№1573304-07-2021 17:43:44

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 89.0

Re: Custom Buttons

Dumby

Dumby пишет

Вот такой bb-код, чтобы вышло

А в этот код https://forum.mozilla-russia.org/viewtopic.php?pid=788982#p788982 его можно вставить? У меня не выходит, вот так вставлено

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

Выделить код

Код:

3.0.17.NumList|Нумерованный список[list=1]
[*]ТЕКСТ
[*]ТЕКСТ
[*]ТЕКСТ
[/list]|data:image...

Отсутствует

 

№1573404-07-2021 19:25:52

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

Re: Custom Buttons

bezuma пишет

А в этот код https://forum.mozilla-russia.org/viewtopic.php?pid=788982#p788982 его можно вставить?

Нет, нельзя. Это ведь уже результат, а не описательная строка для результата.
Кстати, в первом посте того топика, у _zt в кнопке есть что-то подобное.
В смысле, если имеется в виду сплит по строкам, тогда, выделяем текст,
жмём на горизонтальной панели кнопку «List», затем, на выпавшей вертикальной,
жмём кнопку «ItemTag» и кнопку «NumList».

Отсутствует

 

№1573504-07-2021 21:12:40

bezuma
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 26-01-2014
Сообщений: 256
UA: Firefox 89.0

Re: Custom Buttons

Dumby
Благодарю, буду разбираться с кодом из первого поста

Отсутствует

 

№1573605-07-2021 14:55:53

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 54.0

Re: Custom Buttons

Можно ли поправить Автоматически добавлять выделенный текст в SearchBar http://forum.mozilla-russia.org/viewtop … 56#p708256 , для работы на 84.0.2 и выше.

Отсутствует

 

№1573705-07-2021 18:35:07

hartumov
Участник
 
Группа: Members
Зарегистрирован: 17-11-2013
Сообщений: 136
UA: Firefox 85.0

Re: Custom Buttons

Dumby
Спасибо за код для экпорта закладок!

Отсутствует

 

№1573805-07-2021 23:31:19

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

Re: Custom Buttons

Dumby подскажи есть код

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

Выделить код

Код:

// Редактировать размеры поля выбора вкладок в окне добавления закладки звёздочки. .............
((css, panel) => ({
	init() {
		panel = document.getElementById("editBookmarkPanel");
		if (panel) {
			addEventListener("popupshowing", this, false, panel);
			this.destroy && this.destroy();
			return;
		} else if (this.destroy) return;

		var mo = new MutationObserver(this.init.bind(this));
		mo.observe(document.getElementById("mainPopupSet"), {childList: true});
		addDestructor(this.destroy = reason => {
			mo.disconnect();
			if (reason) return;
			self._destructors.splice(self._destructors.findIndex(
				d => d.destructor == this.destroy
			), 1);
			delete this.destroy;
		});
	},
	pref: "CB.editBMPanel_folderTreeRow_WidthHeight",
	handleEvent(e) {
		css = encodeURIComponent(css.replace(/;/g, " !important;"));
		var args = ["data:text/css," + css, windowUtils.USER_SHEET];
		windowUtils.loadSheetUsingURIString(...args);

		var row = this.row = document.getElementById("editBMPanel_folderTreeRow");
		addEventListener("popuphidden", this, false, panel);

		addDestructor(reason => {
			windowUtils.removeSheetUsingURIString(...args);
			row.removeAttribute("width");
			row.removeAttribute("height");
			reason == "delete" && Services.prefs.clearUserPref(this.pref);
		});
		this.handleEvent = e => e.target == panel && this[e.type]();
		this.popupshowing();
	},
	popupshowing() {
		var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" ");
		this.row.width = width; this.row.height = height;
		gEditItemOverlay.toggleFolderTreeVisibility();

		gEditItemOverlay._paneInfo.visibleRows.add("keywordRow");
		gEditItemOverlay._element("keywordRow").collapsed = false;
		gEditItemOverlay._initKeywordField().catch(Cu.reportError);
	},
	popuphidden() {
		var {width, height} = this.row;
		Services.prefs.setStringPref(this.pref, width + " " + Math.max(184, height));
	}
}).init())(`

	#editBookmarkPanel #editBMPanel_folderTreeRow {
		resize: both;
		overflow: hidden;
		min-width: 332px;
	}

	#editBookmarkPanel box.panel-header {
		padding: 0;
		border: none;
	}
	#editBookmarkPanel #editBookmarkPanelRows {
		padding-top: 0;
	}
	#editBookmarkPanel #editBMPanel_locationRow {
		visibility: visible;
	}
	#editBookmarkPanel #editBMPanel_tagsRow > hbox,
	#editBookmarkPanel #editBMPanel_folderRow > hbox,
	#editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) {
		display: flex;
		align-items: center;
	}
	#editBookmarkPanel #editBMPanel_tagsField,
	#editBookmarkPanel #editBMPanel_folderMenuList,
	#editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * {
		flex-grow: 1;
	}
	#editBookmarkPanel moz-input-box {
		width: 100%;
	}
`);


Проблема: он некорректно работает - не растягивается, как исправить
И еще помоги пожалуйста с этим кодом
скрытый текст

Выделить код

Код:

gCBNotepad = this; // global obj



({
	title: "Блокнот",
	url: "data:text/html;base64," + window.btoa(unescape(encodeURIComponent( this.Help ))),
	icon: "data:image/x-icon;base64,AAABAAEAEREAAAEAIADwBAAAFgAAACgAAAARAAAAIgAAAAEAIAAAAAAAyAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAgAAAAApKSlRRkZGh0BAQHxBQUF+QUFBfkFBQX5BQUF+QEBAfEZGRogaGho1AAAAAAABAAECAgICAgICAgQEBAUAAAAAMTEwWeLi4f//////+vr6//r6+v/6+vr//Pz8//v7+//5+fn++/v7/7CwsPdNTU2hAQEBAgAAAAAAAAAAAwMDBAAAAABvbm+x8vHy/+Df4Pfi4+P76ubr++Lh4vvk5OT7/f39+/////v////77/Dv/aysrP8BEAElKngnxDCDLdEvgSzOLX8qy0GTPu1Zq1b/WatW/lasU/9op2f/xcPF/8PEw//i5+L/8vfx//H27//p6+n/qqqq/ESaQOS67a7/teip/rbpqv+36qv/suSm/6zfoP+s36D/teOo/4bNfP93s3b/39bf/9XY1f/5/Pj/+Pv2/+vs6/+qqar/T6RK8bvjsP6t2qT8sNym/LDcpvyx3af+st6o/7LeqP+w3ab/vuaz/1mqVP+2w7b/3dvd//D07//4+/f/6+zr/6qqqv8BNwFvndiU/8Djt/y34a//ueGw/7nhsP+54bD/ueGw/7jgr//B5Lj/mtSS/3q1ev/WzNb/4ufh//f79f/p6+n/qqqq/wAAAANHk0Pbzu/F/73gtP3A47f/wOO3/8Djt//A47f/wOO4/73itf/D5rn/Y7Je/7/MwP/k4eP/+f35/+vs6/+qqqr/AAAAAAAzAGap4KP/zebG+8Tkvv/G5b//xuS//8blv//F5b7/vuK2/8LkuP+U0Yv/ZaBl/97W3v/u9e3/6+3r/6qqqv8DAQMAAAAABE6XS+Db8dT/yuPD/czmxv/N5sf/zObG/8blv//A47j/t+Cu/7vjsP9nuWP/uMW5/+zr6//s7+z/qamq/wACAAQAAAAAATQBZrTir//a6dX70ufN/9Pozv/N5sf/xuS//8Djt/+44K//u+Ow/4zNgv9uqW7/6+Tr/+ru6v+qqar/AAAAAQMBAwAAAAAHVJhS2Or25v/W59L91OjP/8zmxv/G5b//wOO3/7rhsP+w3ab/tuSp/1isU/+vva//6+rq/6qqqv8AAAAAAQIBAwAAAAAENQRkv+S7/+Pr3vvR58z/zObG/8bkv/+/4rf/ueCw/7Hep/+z4Kf/h818/3Kucv/r4uv/qKqo/gAAAAAAAAABAwEDAAAAAApVl1TU7Pbo/9HlzP3P58j/xuS//8Ljuf+64bH/s9+p/6vcoP+t4KD/Wq5U/8bSx/23tLf9AAAAAAAAAAABAgEDAAAAAAk3CWaq36b/1unR+cLjvPzF5r78t+Cv/LXgrP2w36b8odmW/Kzgn/1yxGf7gLKA/52Sne0AAAAAAAAAAAAAAAECAQIAAAEADUOCQcdwt23/Zati82GrXvVjrWD4XKlY9FqpVvZaqlX3UqZN81OnTvxYbFndGxcbNAAAAAAAAAAAAAAAAAABAQEAAAAAFBAUHTAzMGcqKipRJSclUS8wL14nJyZNKCspVy4uLlsiJCJKNjU2aQQABAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
	init() {
		var trg = document.getElementById("browser");
		trg && addEventListener("DOMContentLoaded", this, false, trg);
		var id = "viewCBNotepadLoader";

		var menuitem = this.element("menuitem", {
			type: "checkbox",
			label: this.title,
			id: "menu_browserCBNotepadLoader",
			oncommand: `SidebarUI.toggle("${id}");`
		}, document.getElementById("viewSidebarMenu"));

		var btn = this.element("toolbarbutton", {
			type: "checkbox",
			label: this.title,
			id: "sidebar-switcher-CBNotepadLoader",
			oncommand: `SidebarUI.show("${id}");`,
			class: "subviewbutton subviewbutton-iconic"
		});
		document.querySelector(
			'toolbarbutton[id^="sidebar-switcher-"] + toolbarseparator'
		).before(btn);

		SidebarUI.sidebars.set(id, {
			url: this.url,
			buttonId: btn.id,
			title: this.title,
			menuId: menuitem.id
		});
		SidebarUI.isOpen && SidebarUI.currentID == id && SidebarUI.selectMenuItem(id);

		var popupset = this.popupset = this.element("popupset", {
			id: `CB${_id.slice(20)}-browserConsole-popupset`
		}, document.documentElement);
		
		
		var css = `\
			#${btn.id} > .toolbarbutton-icon,
			#sidebar-box[sidebarcommand="${id}"] > #sidebar-header > #sidebar-switcher-target > #sidebar-icon {
			width: 16px;
            height: 16px;
            opacity: 0.8;
            fill: currentColor;
            -moz-context-properties: fill;
				list-style-image: url(${this.icon});
			}`;
		var str = (cbu.cb || "") + "data:text/css," + encodeURIComponent(css), type = windowUtils.USER_SHEET;
		windowUtils.loadSheetUsingURIString(str, type);

addDestructor(() => {
			SidebarUI.sidebars.delete(id);
			btn.remove(); menuitem.remove(); popupset.remove();
			windowUtils.removeSheetUsingURIString(str, type);
		});
		parseInt(Services.appinfo.platformVersion) < 73 
			&& "insertFTLIfNeeded" in MozXULElement
			&& MozXULElement.insertFTLIfNeeded("toolkit/main-window/editmenu.ftl");






var leftClick = () => {
    var msg = _id + ":NotepadPageShowAndPaste";
    var url = "data:," + encodeURIComponent(`addEventListener("pageshow", () => {
        content.document.getElementById("req_message").focus();
        docShell.doCommand("cmd_paste");
        sendAsyncMessage("${msg}");
    }, {once: true})`);

    var busy = 0, clip, listener = () => {
        if (clip) clip = gClipboard.write(clip);
        busy = 0;
    }
    messageManager.addMessageListener(msg, listener);
    addDestructor(() => messageManager.removeMessageListener(msg, listener));

    var openTab = () => gBrowser.getBrowserForTab(
        gBrowser.selectedTab = gBrowser.addTrustedTab(this.url)
    ).messageManager.loadFrameScript(url, false);

    (leftClick = () => {
        if (busy && Date.now() - busy < 4e3) return;
        busy = Date.now();
        // запомнить текст из буфера обмена и скопировать текст на странице ....
        clip = gClipboard.read();
        goDoCommand("cmd_copy");
        // открыть блокнот в новой вкладке
        setTimeout(openTab, 50);
    })();
}

    	self.onclick = e => {

       if (e.button == 0) {
              if (gMultiProcessBrowser){  leftClick(); } 
              else {
             // запомнить текст из буфера обмена и скопировать текст на странице ....
               var clip = gClipboard.read();
               goDoCommand("cmd_copy");
             // открыть блокнот в новой вкладке
               gBrowser.selectedTab = gBrowser.addTrustedTab(this.url); 
               gBrowser.addEventListener("pageshow", function(event) {
               this.removeEventListener("pageshow", arguments.callee, true);
               content.document.getElementById("req_message").value = gClipboard.read(); 
               if (clip) gClipboard.write(clip);
               }, true);
                } ;
               }

        if (e.button == 1)   return SidebarUI.toggle(id);
     }

    // Обработчик следит за изменениями табов и меняет название и иконку нужного таба ......................................................
gBrowser.tabContainer.addEventListener("TabAttrModified", function(event) {
         // очистить адресную строку если это блокнот ....
         if ( gBrowser.currentURI.spec == this.url) gURLBar.value = "Notepad";
}, true);

    if (!btn.hasAttribute("checked")) return;
		var doc = SidebarUI.browser.contentDocument;
		if (doc.documentURI != this.url) btn.doCommand();
		else if (doc.readyState == "complete") this.defineDocPopupset(doc);
	},
	defineDocPopupset(doc) {
		this.definePopupset(
			doc.querySelector("popupset") ||
			doc.documentElement.appendChild(doc.createXULElement("popupset"))
		);
	},
	get definePopupset() {
		var append = customElements.get("menuitem")
			? popup => {
				this.popupset.appendChild(popup);
				popup.setAttribute("oncommand", "event.target.cmd()");
				for(var node of [...popup.querySelectorAll("menuitem")]) {
					var menuitem = document.importNode(node, true);
					menuitem.cmd = Services.els.getListenerInfoFor(node)
						.find(inf => inf.type == "command").listenerObject;
					popup.replaceChild(menuitem, node);
				}
				return popup;
			}
			: this.popupset.appendChild.bind(this.popupset);

		delete this.definePopupset;
		return this.definePopupset = popupset => popupset.appendChild = append;
	},
	lss: Services.scriptloader.loadSubScript,
	async handleEvent({target: doc}) {
		if (!doc || doc.documentURI != this.url) return;

		var win = doc.defaultView;
		if (
			win.docShell.name == "toolbox-panel-iframe-webconsole" ||
			doc.DOMContentLoadedEventHandled
		)
			return;
		doc.DOMContentLoadedEventHandled = true;
		"custombuttonsConsole" in win || this.lss(
			"chrome://custombuttons/content/consoleOverlay.js", win
		);
		var cw = win.isChromeWindow, bc;
		if (!cw) {
			if (doc.visibilityState == "hidden") {
				var {focus} = win;
				win.focus = () => win.focus = focus;
			}
			doc.title = this.title;
			var link = doc.createElement("link");
			link.setAttribute("rel", "shortcut icon");
			link.setAttribute("href", this.icon);
			doc.head.prepend(link);

			var br = win.docShell.chromeEventHandler;
			var cmAttr = br.getAttribute("contextmenu");
			cmAttr && br.removeAttribute("contextmenu");
			win.onbeforeunload = () => {
				if (bc) bc.chromeWindow = {close() {}};
				cmAttr && br.setAttribute("contextmenu", cmAttr);
			}
		}
		bc = await this.console(win);
	},
	get console() {
		// Bug 1579090 - WebConsole should handle ObjectFront when needed (for non-primitive Console API args + Evaluation results) (Firefox 73+)
		// https://bugzilla.mozilla.org/show_bug.cgi?id=1579090
		var vers = parseInt(Services.appinfo.platformVersion);
		this.bug1579090 = vers > 73 || (vers == 73 && !(
			"_setCurrentURI" in gBrowser.selectedBrowser // https://bugzil.la/1431214
		));
		delete this.console;
		return this.console = this.bug1579090 ? async win => {
			await this.loader.bcm._browserConsoleInitializing;
			var key = "CBBrowserConsolePromise", {wins} = this.loader;
			win[key] = win.Object.create(null);
			win[key].promise = new win.Promise(resolve => win[key].resolve = resolve);
			win[key].destroy = () => {
				win[key].resolve();
				delete win[key];
				wins.splice(wins.indexOf(win), 1);
			}
			wins.unshift(win);
			wins.length > 1 && await wins[1][key].promise;

			var bc = await new this.loader.console(win).toggleBrowserConsole();
			win[key].destroy();
			return bc;

		} : async win => {
			this.loader.Services.ww.wins.push(win);
			return await new this.loader.HUDService().toggleBrowserConsole();
		}
	},
	get loader() {
		delete this.loader;
		var url = "resource://devtools/shared/Loader.jsm";
		if (this.bug1579090) {
			var g = Cu.import(url, {}), key = "CBBrowserConsoleLoader";
			addDestructor(reason => reason[5] == e && key in g && g[key].destroy());
			if (key in g) return this.loader = g[key];
			var {BrowserConsoleManager} = g.require(
				"devtools/client/webconsole/browser-console-manager"
			);
			return this.loader = g[key] = {
				wins: [],
				bcm: BrowserConsoleManager,
				console: class extends BrowserConsoleManager.constructor {
					constructor(win) {
						super();
						this.win = win;
					}
					openWindow() {
						var {win} = this;
						win.addEventListener("unload", () => {
							win.CBBrowserConsolePromise &&
								win.CBBrowserConsolePromise.destroy();
							this.closeBrowserConsole.call(this);
						}, {once: true});
						delete this.win;
						return win;
					}
				},
				destroy() {
					this.wins = null;
					delete g[key];
				}
			};
		}
		var id = _id + "-browser-console";
		url += "?" + id;
		var loader = {exports: {}}, nsvo = Cu.import(url, loader);
		addDestructor(reason => reason[5] == "e" && Cu.unload(url));

		if (id in nsvo) return this.loader = nsvo[id];

		var dir = "resource://devtools/client/webconsole/";
		try {
			this.lss(dir + "hudservice.js", loader);
		} catch(ex) {
			// Bug 1570320 - Rename hudservice.js into browser-console-manager.js (Firefox 70+)
			// https://bugzilla.mozilla.org/show_bug.cgi?id=1570320
			this.lss(dir + "browser-console-manager.js", loader);
			this.lss("data:,this.HUDService=BrowserConsoleManager", loader);
		}
		var e = new CustomEvent("DOMContentLoaded", {bubbles: false}), ww = loader.Services.ww;
		loader.Services.ww = Cu.getGlobalForObject(nsvo).Object.create(ww, {
			wins: {value: []},
			openWindow: {value: function() {
				var win = this.wins.shift();
				win.setTimeout(() => win.dispatchEvent(e), 0);
				return win;
			}}
		});
		return this.loader = nsvo[id] = loader;
	},
	element(name, attrs, parent) {
		var node = document.createXULElement(name);
		for(var attr in attrs) node.setAttribute(attr, attrs[attr]);
		parent && parent.append(node);
		return node;
	}
}).init();

//Всплывающие подсказки 

this.tooltipText = "\n\
ЛКМ: открыть в новой вкладке с текстом( выделенным или из буфера )\n\n\
СКМ: открыть в боковой панели\n\n\
ПКМ: меню кнопки\n\n";

проблема в боковой консоли
Просто давно не был на сайте а измений очень много и вроде все работает, кажется мелочь, а начинаешь вникать, черт ногу сломит, и смотрю все начинают на программу Виталия Скрипты преходить и я не пойму, что ты заканчиваешь поддержку Custom Buton или как. Просто хочу понять что дальше. Заранее спасибо за ответ.

Отредактировано Andrey_Krropotkin (05-07-2021 23:44:54)

Отсутствует

 

№1573907-07-2021 20:16:40

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

Re: Custom Buttons

vv07 пишет

Можно ли поправить Автоматически добавлять выделенный текст в SearchBar http://forum.mozilla-russia.org/viewtop … 56#p708256 , для работы на 84.0.2 и выше.

Под «поправить», наверно, приблизительно подошло бы
через буфер обмена перегонять, но что-то мне не очень.
Попробовал JSM'ку для ucf сочинить, и, даже не знаю,
ну посмотри, вдруг подойдёт.


Создать в папке custom_scripts текстовый файл SelectionToSearchbar.jsm

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

Выделить код

Код:

var EXPORTED_SYMBOLS = ["SelectionToSearchbarChild", "SelectionToSearchbarParent"];

if (!ChromeUtils.domProcessChild.childID) {
	if (typeof Services != "object")
		var {Services} = ChromeUtils.import("resource://gre/modules/Services.jsm");

	var {prefs, obs} = Services;
	var pref = "ucf.selection-to-searchbar.enabled";
	var enabled = prefs.getBoolPref.bind(null, pref, true);

	var SelectionToSearchbarParent = class extends JSWindowActorParent {
		msg(msg, win = this.browsingContext.topChromeWindow) {
			var sb = win.document.getElementById("searchbar");
			if (sb) sb.value = msg.data;
		}
		receiveMessage(msg) {
			var win = this.browsingContext.topChromeWindow;
			win.toolbar.visible
				? (this.receiveMessage = this.msg).call(this, msg, win)
				: this.sendAsyncMessage("", false);
		}
	}
	var name = "SelectionToSearchbar";
	var id = "ucf-selection-to-searchbar";
	var check = (btn, state) => btn.toggleAttribute("checked", state);
	var cui = ChromeUtils.import("resource:///modules/CustomizableUI.jsm").CustomizableUI;

	cui.createWidget({
		id,
		label: "Автоматически добавлять выделенный текст в SearchBar",
		tooltiptext: " Автоматически добавлять выделенный текст в SearchBar",
		image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABcAAAAVCAYAAACt4nWrAAADQklEQVQ4ja3V/08adxzHcf+t/bT90HTLtmT7F5Ym/XUsy4Uu7mdKYiawudaq04DWjVoFxWgRrU5txDL5clKkIDVBVpE77j5wgPW45LkfTMgOf1gb98Pjt/fr+fntbkAIgdfrxel04nA4bszpdOL1ehFCMHDf7cbn81GtVrEs68aq1So+n4/7bjcDkiRRq9UwTZNms3ljpmlSq9WQJIkBh8OBZVnXjlRVJZFIMB9eZPr3IMG5efb399E07T8fsCwLh8NxFe92uzQajZ5qtcrCUoRYKkv8TGfzbZtQ7oyxyBaBQIBarWa779ftdu1xIQRCCBRFYSES4ZWic37Z5fTCJK29Y+20RfC14NHzQ6ZnHqPrem/T71pc13V0XSeZTLL0UqbSucToWpxemCS1dzwrGwRfCyZljeHAArlcrrfpZ4ubpkm9XqderxNaWiZaUik0LjluXpLSLtg+axE5aTKT05jMaDxYP2RlZaW36Weapj2uqiqqqvI4OEe4JNh+a7B71mLz7xbLJ02CeZ3fMnUmUnUebBUIh0K9Tb9rcUVRUBSFpwth/AenPC00WDhuMF8QzB5pTMp1Rv5S8Wc0RqJpVldXe5t+tnin06FUKlEqldjc3MQ7/5zxpMJEWmU8pTB6oOCNnzPyUuFRQmVoNEAymext+nU6HXu8WCxSLBbJ5/OMjY8zHM0wvHeOJ36OZ++chwmFX+M1PE/WGRwcZGpqio1YrLf7t2vxQqHQc3h4yMPRMYb8YX56JjO8cczPUZmhsRnu3XOSTqdZW5wl+90tTrbXbNtCoWCPt9tt8vm8zdHREbFYjIDfz9TkJIGAn52dHaanp4nMz/Bm6Q7WzJdc/vAJb/6M2rbtdtsez+Vy7yUWi7H/7ReYE59C/A4Ev8J0fkRpY7l3Y4u3Wi2y2ex7y+9s0HbegqnP4MU3MPc16o+3iS4tks1mabVa9rgsyx8k92KLzvcfw8RtrL27HKw/4Y9gEFmW7XHDMMhkMh/s1e4Wdefn7AZ/IRQKMTs7SyaTwTCMq7gkSZTLZVRVJZVK3ZiqqpTL5avvudvtxuPxUKlUMAzjxiqVCh6PB7fbzYAQApfLhSRJ/8s/VJIkXC4XQgj+AW9cSYbbZ7hEAAAAAElFTkSuQmCC",
		localized: false,
		defaultArea: cui.AREA_NAVBAR,
		onCreated(btn) {
			btn._handleClick = this.click;
			btn.setAttribute("image", this.image);
			check(btn, enabled());
		},
		click: () => prefs.setBoolPref(pref, !enabled())
	});

	var options = {
		allFrames: true,
		includeChrome: true,
		parent: {moduleURI: __URI__},
		child: {moduleURI: __URI__, events: {DOMDocElementInserted: {}}},
	};
	var reg = () => ChromeUtils.registerWindowActor(name, options);

	var handleBr = br => {
		var bbc = br.browsingContext;
		if (bbc) try {
			for(var bc of bbc.getAllBrowsingContextsInSubtree())
				bc.currentWindowGlobal?.getActor(name)?.sendAsyncMessage("", true);
		} catch {}
	}
	var observer = () => {
		var state = enabled();
		state ? reg() : ChromeUtils.unregisterWindowActor(name);
		for(var {node} of cui.getWidget(id).instances) {
			var win = node.ownerGlobal;
			if (!win.toolbar.visible) continue;
			check(node, state);
			if (state) {
				var doc = win.document;
				for(var br of doc.getElementsByTagName("browser"))
					handleBr(br);
				br = doc.getElementById("sidebar").contentDocument
					?.getElementById("#webext-panels-browser");
				br && handleBr(br);
			}
		}
	}
	enabled() && reg();
	prefs.addObserver(pref, observer);
	obs.addObserver(function quit(s, topic) {
		obs.removeObserver(quit, topic);
		prefs.removeObserver(pref, observer);
	}, "quit-application-granted");
}

var re = /\S/;
var reasons = ["MOUSEUP", "KEYPRESS", "SELECTALL"]
	.map(reason => Ci.nsISelectionListener[reason + "_REASON"]);

class SelectionListener {
	constructor(sender) {
		(this.sender = sender).listener = this;
	}
	QueryInterface = ChromeUtils.generateQI(["nsISelectionListener"]);
	notifySelectionChanged(d, sel, reason) {
		reasons.includes(reason)
		&& re.test(sel = sel.toString())
		&& this.sender.sendAsyncMessage("", sel.trim().slice(0, 160));
	}
}
class SelectionToSearchbarChild extends JSWindowActorChild {
	receiveMessage(msg) {
		msg.data ? this.handleEvent() : this.didDestroy();
	}
	handleEvent() {
		var sel = this.contentWindow.getSelection();
		sel && (this.sel = sel).addSelectionListener(new SelectionListener(this));
	}
	didDestroy() {
		if (this.sel)
			this.sel.removeSelectionListener(this.listener),
			this.sel = this.listener = null;
	}
}


В custom_script.js добавить
(сам custom_script.js должен быть включён в настройках ucf)
скрытый текст

Выделить код

Код:

(async url => ChromeUtils.import(url))(
	"chrome://user_chrome_files/content/custom_scripts/SelectionToSearchbar.jsm"
);

Andrey_Krropotkin пишет

Проблема: он некорректно работает - не растягивается

Да, это видел когда-то, и даже тяп-ляп чего-то подправлял. Скину что есть.

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

Выделить код

Код:

((css, panel) => ({
	init() {
		panel = document.getElementById("editBookmarkPanel");
		if (panel) {
			addEventListener("popupshowing", this, false, panel);
			this.destroy && this.destroy();
			return;
		} else if (this.destroy) return;

		var mo = new MutationObserver(this.init.bind(this));
		mo.observe(document.getElementById("mainPopupSet"), {childList: true});
		addDestructor(this.destroy = reason => {
			mo.disconnect();
			if (reason) return;
			self._destructors.splice(self._destructors.findIndex(
				d => d.destructor == this.destroy
			), 1);
			delete this.destroy;
		});
	},
	pref: "CB.editBMPanel_folderTreeRow_WidthHeight",
	handleEvent(e) {
		css = encodeURIComponent(css.replace(/;/g, " !important;"));
		var args = ["data:text/css," + css, windowUtils.USER_SHEET];
		windowUtils.loadSheetUsingURIString(...args);

		var row = document.getElementById("editBMPanel_folderTreeRow");

		var fox86 = parseInt(Services.appinfo.platformVersion) >= 86;
		var trg = this.trg = fox86 ? row.style : row;
		this.map = fox86 ? s => s + "px" : s => s;
		var rem = fox86 ? "removeProperty" : "removeAttribute";

		addEventListener("popuphidden", this, false, panel);

		addDestructor(reason => {
			windowUtils.removeSheetUsingURIString(...args);
			trg[rem]("width"); trg[rem]("height");
			reason == "delete" && Services.prefs.clearUserPref(this.pref);
		});

		this.handleEvent = e => e.target == panel && this[e.type]();
		this.popupshowing();
	},
	popupshowing() {
		var [width, height] = Services.prefs.getStringPref(this.pref, "332 184").split(" ").map(this.map);
		this.trg.width = width; this.trg.height = height;
		gEditItemOverlay.toggleFolderTreeVisibility();
	},
	popuphidden() {
		var {width, height} = this.trg;
		Services.prefs.setStringPref(this.pref, parseInt(width) + " " + Math.max(184, parseInt(height)));
	}
}).init())(`

	#editBookmarkPanel #editBMPanel_folderTreeRow {
		resize: both;
		overflow: hidden;
		min-width: 332px;
	}

	#editBookmarkPanel box.panel-header {
		padding: 0;
		border: none;
	}
	#editBookmarkPanel #editBookmarkSeparator,
	#editBookmarkPanel #editBookmarkPanelInfoArea,
	#editBookmarkPanel #editBookmarkHeaderSeparator {
		display: none;
	}
	#editBookmarkPanel #editBookmarkPanelRows {
		padding-top: 1px;
	}
	#editBookmarkPanel #editBMPanel_keywordRow,
	#editBookmarkPanel #editBMPanel_locationRow {
		visibility: visible;
	}
	#editBookmarkPanel #editBMPanel_tagsRow > hbox,
	#editBookmarkPanel #editBMPanel_folderRow > hbox,
	#editBookmarkPanel #editBookmarkPanelRows > vbox:not([id*="folderTree"]):not([id*="tagsSelector"]) {
		display: flex;
		align-items: center;
	}
	#editBookmarkPanel #editBMPanel_tagsField,
	#editBookmarkPanel #editBMPanel_folderMenuList,
	#editBookmarkPanel #editBookmarkPanelRows > vbox > label:first-child + * {
		flex-grow: 1;
	}
	#editBookmarkPanel moz-input-box {
		width: 100%;
	}
`);

проблема в боковой консоли

Что-то я не вижу в коде адреса консоли, вообще химера какая-то.

смотрю все начинают на программу Виталия Скрипты преходить

Так это же хорошо.
Присоединяйся. Никто не торопит, и не напрягает.

не пойму, что ты заканчиваешь поддержку Custom Buton или как. Просто хочу понять что дальше.

Ну как, тут, надеюсь, ничего не изменилось,
просто давно уже ничего круто не ломали.
Вот в 91 выпилили nsIEditorObserver, и будет мусор в консоли
при переходе по первым трём вкладкам в CB-редакторе, надо бы 18-ю собрать сподобиться.

Отредактировано Dumby (08-07-2021 15:42:32)

Отсутствует

 

№1574008-07-2021 01:39:14

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 54.0

Re: Custom Buttons

Dumby
Спасибо за попытку. Не сработало.
Сделал так
Файл SelectionToSearchbar.jsm по пути D:\Firefox Browser 84.0.2\Data\profile\chrome\user_chrome_files\custom_scripts\SelectionToSearchbar.jsm с первым кодом
В D:\Firefox Browser 84.0.2\Data\profile\chrome\user_chrome_files\custom_scripts\custom_script.js вписал второй код
Включил custom_script.js
Эффекта нет или я что то не так сделал?

Отредактировано vv07 (08-07-2021 01:42:03)

Отсутствует

 

№1574108-07-2021 08:33:36

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

Re: Custom Buttons

vv07 пишет

Эффекта нет или я что то не так сделал?

Да нет, три первых шага выглядят сделанными совершенно верно.
Но. Дальше описание, почему-то, резко схлопывается в скупое «Эффекта нет»,
тогда как вместо этого быть продолжение, развитие, типа такого:

...
Как положено, перезапустил браузер с очисткой startupCache.
Ищу кнопку на панели навигации — нет,
в панельке оверфловского виджета [»] — тоже нет,
захожу в персонализацию — и там нет.
Выделяю слово на простой странице
(не в текстовом поле) — слово в поисковой строке не появляется.
После ручной очистки startupCache — ситуация не улучшилась.

Далее, как бы, должно идти цитирование относящихся к этим скриптам
записей в консоли браузера (или констатация отсутствия таковых),
но это, увы, редко от кого дождёшься.


Еще можно было бы добавить, что проверена кодировка ( UTF-8 ),
и расширение ( file.jsm а не какой-нибудь file.jsm.txt ).

Отсутствует

 

№1574208-07-2021 10:39:40

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 54.0

Re: Custom Buttons

Dumby
Есть полный отчет :)
Расширение 19947bc67b19.jpg
Кнопок не наблюдаю нигде
Копирование на странице не работает
Файл в UTF-8
Ошибок в консоли не наблюдаю
Очистка ничего не дала
Доклад закончил :rock:

Отсутствует

 

№1574308-07-2021 12:42:05

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

Re: Custom Buttons

vv07
Чудеса! Даже не знаю что сказать.


Можно в безопасном режиме посмотреть.
Есть универсальный совет: «проверить на чистом профиле».
Но это слегка заморочно, это же надо будет там ucf развернуть
и заново коды расставить.


Или вот ещё, если в папке user_chrome_files не накопилось ничего секретного,
то отправить её в zip-папку и выложить на https://www.upload.ee/
А я попробую скачать и у себя проверить, вдруг что-то обнаружится.

Отсутствует

 

№1574408-07-2021 14:40:59

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

Re: Custom Buttons

Dumby
Работает но есть проблемка если на странице фреймы about:blank или Restricted
TypeError: this.contentWindow.getSelection() is null
надо проверку добавить


vv07 пишет

Очистка ничего не дала

Думается мне что это была не та очистка что сказано в инструкции

После редактирования перезапустить кнопкой «Перезагрузка - ПКМ: Перезапустить и заново создать кэш быстрого запуска»,
или в настройках нажмите «Перезапустить*»

Отредактировано Vitaliy V. (08-07-2021 15:16:29)

Отсутствует

 

№1574508-07-2021 15:19:13

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 84.0

Re: Custom Buttons

Чудеса! Даже не знаю что сказать

Проблема разрешилась. Суть в чем была. Я сразу не заметил этого, но часть кода кириллицей,
почему то сохранилась кракозябрами. Сейчас заново пересоздал файл SelectionToSearchbar.jsm
в UTF-8 и только потом вставил скопированный код. Скрипт заработал. Но если Виталий говорит
что то добавить, сделайте пожалуйста. Всем спасибо

Думается мне что это была не та очистка что сказано

Ошибаетесь :P У меня же ваши кнопочки, так что именно ПКМ

Отредактировано vv07 (08-07-2021 15:23:29)

Отсутствует

 

№1574608-07-2021 15:43:28

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

Re: Custom Buttons

Vitaliy V.
О, набрал data:text/html,<iframe> и, действительно, вижу.
Спасибо, добавил.

Отсутствует

 

№1574708-07-2021 17:09:51

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 54.0

Re: Custom Buttons

Не даром говорят, что аппетит приходит во время еды :blush:
Точно не помню, то ли расширение за это отвечало, то ли еще что то, но на
прежних версиях, в строке поиска отображались значки поисковиков

скрытый текст
8fd7f7c231c4.jpg и при клике 05098a5e75de.jpg

Для 84 такое нельзя сварганить? Извиняюсь за наглость.

Отредактировано vv07 (08-07-2021 17:11:13)

Отсутствует

 

№1574809-07-2021 00:25:42

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

Re: Custom Buttons

vv07
сделать можно если этот не устроит [firefox] 85+ https://github.com/Aris-t2/CustomJSforF … hbar.uc.js
или [firefox] 78-84 https://github.com/Aris-t2/CustomJSforF … _old.uc.js
можно через загрузчик подключить в custom_script_win.js

Выделить код

Код:

loadscript("alternative_searchbar.uc.js", win);

и это включить если надо
var old_search_engine_selection_popup = false; // show old search engine selection popup (true) or not (false)

Отредактировано Vitaliy V. (09-07-2021 00:34:47)

Отсутствует

 

№1574909-07-2021 01:36:12

vv07
Участник
 
Группа: Members
Зарегистрирован: 07-11-2007
Сообщений: 672
UA: Firefox 54.0

Re: Custom Buttons

можно через загрузчик подключить в custom_script_win.js

А как это сделать?
Вписал код в custom_script_win.js, а дальше какие действия?

Отсутствует

 

№1575009-07-2021 01:51:29

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

Re: Custom Buttons

vv07
ну замените те примеры что в загрузчике loadscript(...
так
...
//>>>>>>>>>>| Загрузка скриптов для browser.xhtml |>>>>>>>>>>
loadscript("alternative_searchbar.uc.js", win);
...
и alternative_searchbar.uc.js в папке custom_scripts разумеется
имя файла может быть другим

Отредактировано Vitaliy V. (09-07-2021 01:53:03)

Отсутствует

 

Board footer

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