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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№75118-04-2023 00:29:29

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

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

kokoss
У меня появляется (изменил в UcfTooltipUrlChild.jsm задержку с 400 на 100) или не появляется сразу (тогда и надо чуть-чуть дёрнуть мышкой по ссылке). С чем связано не понимаю. Может какие-то скрипты конфликтуют.

скрытый текст
Вообще, чисто визуально, мне больше нравится javascript с моими правками
"Hover Links (v2)"

Выделить код

Код:

// ==UserScript==
// @name          Hover Links (v2)
// @version       2023.04.17
// @namespace     http://userscripts-mirror.org/scripts/show/30002
// @description   A tooltip pops up when hovering over links.
// @include       *
// ==/UserScript==

// define
const popTTDelay = 0; // было 300 amount of time(in ms) after mouseover before popup (0 for immediatly)
var bg_color = "#ffffe0";
var border_color = "#ffd700";
var font_color = "#4682b4";
var font_face = "verdana";
var font_size = "10px"; // sorry, change slyles manually in function create_window   :-)
const offSBRRight = 18; // было 24 horizontal constant. if the popup makes horizontal scrollbars appear, increase this constant until it doesn't (default:18)
const offSBRTop = 18; // было 24 vertical constant. if the popup makes vertical scrollbars appear, increase this constant until it doesn't (default:18)
// variables
var ttH, ttW;

(function() {
  function locate(event)
  {
    var ttWin = find_window();
    if (ttWin) {
      var tempLeft=(event.clientX + window.pageXOffset)+13; // было 9
      var tempTop=(event.clientY + window.pageYOffset)+17; // было 10

    if ((tempLeft+ttW) > (window.innerWidth+window.pageXOffset-offSBRRight)) { //if its too far right
      tempLeft= (window.innerWidth+window.pageXOffset-offSBRRight-ttW-10);
    }

    if((tempTop+ttH) > (window.innerHeight+window.pageYOffset-offSBRTop)) { //if its too far down
      tempTop-=(ttH+offSBRTop);
    }

    if (tempLeft < window.pageXOffset) { //if it is too far left, i.e. it is a super-wide box
      tempLeft=window.pageXOffset+1; //set it all the way to the left
    }
      ttWin.style.top = tempTop + "px";
      ttWin.style.left = tempLeft + "px";
    }
  }

  function find_window()
  {
    return document.getElementById("link_tt");
  }

  function create_window(id, ttTitle)
  {
    var tt_err ='';
    var tt_div = document.createElement("div");
    tt_div.setAttribute("id", "link_tt");
    tt_div.setAttribute("style", "text-align: left; background: " + bg_color + "; border: 1px solid " + border_color + "; padding: 2px; color: " +
                                font_color + "; font-family: " + font_face + "; font-size: " + font_size + "; position: absolute; z-index:1000000; " +
                'padding-left: 8px; padding-right: 8px; padding-top: 3px; padding-bottom: 3px; ' +
                'max-width: 35% !important; line-height: 1.2 !important; width: auto !important; ' +
                '-moz-border-radius: 0.7em !important;' );

    try {var decodedUrl=decodeURIComponent(id.href); }
    catch (err) { tt_err += '<br><font style="font-size: 8px; color: grey;">' + ' bad url )' + '</font>';
            decodedUrl=id.href; } // ?? :)

    var ttUrlHost = decodedUrl.split('/'); ttUrlHost = ttUrlHost[2];
//    var favIco = '';
    // изменил if (ttUrlHost) {favIco="<img style='display: none;' onLoad=this.style.display=''; src=http://"+ttUrlHost+"/favicon.ico>  ";}
//    if (ttUrlHost) {favIco='';} // Закомментировал if, вроде, без иконки не нужно
//    else {ttUrlHost='';}{ttUrlHost='';}
    var dUrlLeng = decodedUrl.length;
    var urlPage = decodedUrl.slice(decodedUrl.indexOf(ttUrlHost) + ttUrlHost.length,decodedUrl.length);
    if (urlPage == '/') { urlPage = ''; } else { urlPage = '<br>' + urlPage; }

    if (ttTitle) { ttTitle = '<font style = "font-size: 13px; color: #8b0000;">' + ttTitle + '</font><br>'; }
    else { ttTitle = ''; }
    // изменил tt_div.innerHTML = ttTitle+favIco +
    tt_div.innerHTML = ttTitle + '<font style = "font-size: 12px; color: #007700;">' + ttUrlHost + '</font>' + urlPage + tt_err; // цвет добавил для домена

    document.body.appendChild(tt_div);
    ttH = tt_div.offsetHeight;
    ttW = tt_div.offsetWidth;
//    if (popTTDelay)
//      {  find_window().style.display='none';
//        window.setTimeout('show_windowTT()', popTTDelay);
//      }
  }

  function show_windowTT()
    {  if (find_window()) { find_window().style.display = ''; }
  }

  function kill_window()
  {
    if (find_window()) find_window().parentNode.removeChild(find_window());
  }

  function create_event(id)
  {
    if (id.title)
    {
      var ttTitle = id.title;
      id.addEventListener("mouseover", function() { create_window(id, ttTitle); }, false);
      id.title=''; // Прибивает всплывашку у ссылки на сайте и делает всплывашку заголовком
    }
    else {id.addEventListener("mouseover", function() { create_window(id); }, false);
    }
    id.addEventListener("mouseout", function() { kill_window(); }, false);
    id.addEventListener("click", function() { kill_window(); }, false); // добавил действие на клик, чтобы окно убивалось
    id.addEventListener("mousemove", function(event) { locate(event); }, true);
  }

  unsafeWindow.show_windowTT = show_windowTT;
  var link = document.getElementsByTagName("a");
  var i;
  for (i = 0; i < link.length; i++)
  {
    create_event(link[i]);
  }
})();


Скрипт ловит ссылки по тегу "a" и отлавливает не все, даже с тегом. И не работает на youtube. У Виталия ловится больше ссылок по matches. В скрипте надо менять var link = document.getElementsByTagName("a");, но пока не представляю как.
Хотел попробовать скрестить (т.е. добавить цветное окно вместо просто "всплывашки" у ссылки в UcfTooltipUrlChild.jsm), но вообще не представляю, как добавить функцию окна и стиль в jsm-ку. Идеи есть, знаний не хватает. Вот и сижу со скриптом, а кнопка от Виталия на всякий случай.

Отсутствует

 

№75218-04-2023 12:08:42

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

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

egorsemenov06 пишет

пробывал добавить вот это https://forum.mozilla-russia.org/viewto … 78#p804278 ну ничего у меня не получилось

Хмм, интересно, что там может не получиться?
Нужно, всего-то, например, заменить loadURI на fixupAndLoadURIString


Посмотреть прямо полностью в работе, разумеется, не могу,
это сетевые дела, да ещё и гуглячьи. Но, скажем так:


судя по коду букмарклета, он создаёт и суёт на страницу в элемент <body>
элемент <div> в начало, и два элемента <script> в конец.
После замены — это и происходит (видно в инспекторе).

Отредактировано Dumby (18-04-2023 12:10:14)

Отсутствует

 

№75318-04-2023 12:39:15

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

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

xrun1 пишет

С чем связано не понимаю. Может какие-то скрипты конфликтуют.

На чистом профиле только с этим скриптом без расширений также ?


Win7

Отсутствует

 

№75418-04-2023 12:51:34

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

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

xrun1
"-moz-border-radius" в Hover Links работает? Вроде border-radius надо.

Отсутствует

 

№75518-04-2023 13:35:43

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

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

kokoss
На чистом нормально. Предполагаю, что может гадить один java-скрипт, но, как писал выше, для меня не особенно критично и разбираться с этим не хочется. Убью кучу времени...
PsS. Но со скриптом из поста выше, окно подсказки появляется мгновенно, а здесь с небольшой задержкой.

Отредактировано xrun1 (18-04-2023 13:38:44)

Отсутствует

 

№75618-04-2023 14:18:38

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

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

xrun1 пишет

Хотел попробовать скрестить (т.е. добавить цветное окно вместо просто "всплывашки" у ссылки в UcfTooltipUrlChild.jsm), но вообще не представляю, как добавить функцию окна и стиль в jsm-ку. Идеи есть, знаний не хватает

Если не принципиально в jsm-ке, то можно в scrollbars_tooltips.css немного изменить стиль автора...

тултипы

Выделить код

Код:

/* Тултипы */
tooltip {
    -moz-appearance: none !important;
    appearance: none !important;
}
tooltip[hasbeenopened="true"] {
    color: InfoText !important;
    background: InfoBackground !important;
    border: 1px solid color-mix(in srgb, currentColor 20%, transparent) !important;
    padding: 2px !important;
}
@media (prefers-color-scheme: light), (-moz-toolbar-prefers-color-scheme: light) {
tooltip[hasbeenopened="true"] {
    color: rgb(12, 12, 22) !important;
    background: rgb(245, 245, 255) !important;
    border: 1px solid rgb(204, 204, 214) !important;
}
}
@media (prefers-color-scheme: dark), (-moz-toolbar-prefers-color-scheme: dark) {
tooltip[hasbeenopened="true"] {
    color: rgb(0, 0, 0) !important;
    background-image: linear-gradient(#FFFFDB, yellow) !important; 
    border-color: rgb(64, 64, 75) !important;
    border-radius: 1px !important;
    font-size: 15px !important;
}
}
tooltip[hasbeenopened="true"] :is(description,label) {
    color: inherit !important;
}


Win7

Отсутствует

 

№75718-04-2023 17:30:05

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

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

kokoss
Спасибо. Я видел подобный код на форуме, но у себя не сохранил.

Отсутствует

 

№75818-04-2023 18:40:10

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

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

xrun1 пишет

Я видел подобный код на форуме, но у себя не сохранил.

Он из комплекта "full_theme".


Win7

Отсутствует

 

№75918-04-2023 18:45:58

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

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

kokoss
Я это понял, но у меня своя тема. Лёгких путей не ищем!

Отсутствует

 

№76019-04-2023 10:55:08

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

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

Dumby, имеется такой скрипт от немецких камрадов для версии 112, показывает количество закладок/папок (можно наоборот) в меню и кнопке избранного,  здесь вариант для версий ниже 112. Можно на его основе что-то придумать, чтобы подобное работало  в боковой панели..?

Отредактировано LGS (19-04-2023 18:33:28)

Отсутствует

 

№76119-04-2023 12:19:01

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

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

Открытие "about:addons" по ПКМ на кнопке нового меню дополнений 111+

Выделить код

Код:

// Открытие "about:addons" по ПКМ на кнопке нового меню дополнений 111+
(this.openaboutaddonsthisfirefox = {
    async init(that) {
        await window.delayedStartupPromise;
        var btn = CustomizableUI.getWidget("unified-extensions-button")?.forWindow(window).node;
        if (!btn) return;
        btn.setAttribute("context", "");
        btn.tooltipText = `	 ЛКМ : Меню дополнений\n	 ПКМ : Менеджер\nCtrl+ПКМ : Отладка`;
        var listener = e => {
            if (e.button != 2) return;
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
            var gb = e.view.gBrowser;
            gb.selectedTab = gb.addTrustedTab(`about:${
                e.ctrlKey ? "debugging#/runtime/this-firefox" :"addons"
            }`);
        };
        btn.addEventListener("click", listener);
        that.unloadlisteners.push("openaboutaddonsthisfirefox");
        this.destructor = () => {
            btn.removeEventListener("click", listener);
        };
    }
}).init(this);


В scriptschrome >> load
   
+стиль

Выделить код

Код:

/* Настройка меню кнопки расширений 111+
 * https://forum.mozilla-russia.org/viewtopic.php?pid=804620#p804620 ***/
#unified-extensions-view {
/*    background: transparent !important; /* прозрачность меню, если настроено глобально */
    --uei-icon-size: 18px; /* значки */
}
/* бейджи - ~ три символа, например, у uBlock 1000+ пишется как >1k */
#unified-extensions-view .toolbarbutton-badge {
    margin: -3px 0 0 0 !important;
    margin-inline-end: -4px !important;
    font-size: 10px !important;
    line-height: 14px !important;
    max-width: 4em !important;
    padding: 0 !important;

}
/* нижняя часть списка - дополнения без кнопок на панели - на выбор */
#unified-extensions-view .unified-extensions-list, /* целиком */
/*#unified-extensions-view .unified-extensions-list .unified-extensions-item:not([extension-id="например-полный-ID-@Imagus"],[extension-id^="например-начало-ID-select-after-closing"]), /* или с исключениями */
#unified-extensions-view .panel-header /* заголовок меню */ {
    display: none !important;
}
#unified-extensions-view toolbaritem,
#unified-extensions-view unified-extensions-item {
    height: 29px !important;
    padding: 0 0 0 2px !important;
/*    margin: 0 4px 0 0 !important; /* если шестеренки скрыты */
}
#unified-extensions-view toolbarbutton {
    height: 29px !important;
    padding: 0 0 0 4px !important;

}
#unified-extensions-view .unified-extensions-item {
    height: 30px !important;
}
#unified-extensions-view .unified-extensions-item-menu-button {
/*    display: none !important; /* скрыть шестеренки */
    padding: 0 !important;
    margin: 0 4px 0 0 !important;
}
#unified-extensions-view .unified-extensions-item-name,
#unified-extensions-view .unified-extensions-item-message {
    height: 1.2em !important;
    width: 15em !important; /* длина заголовка и сообщения */
    padding-right: 0 !important;
    margin-right: 0 !important;
    padding-inline: 0 !important;
    margin-inline: 0 !important;
}
#unified-extensions-view .unified-extensions-item-message {
/*    display: none !important; /* скрыть сообщения */
    font-size: 12px !important;
}
/* нижняя кнопка */
#unified-extensions-manage-extensions {
    background: rgba(50,50,50,0.5) !important;
    min-height: 28px !important;
    padding: 2px 8px 4px 8px !important;
    margin: -6px 0 0 0 !important;
}
#unified-extensions-manage-extensions:hover {
    background: rgba(70,70,70,0.8) !important;
}
#unified-extensions-manage-extensions label {
    margin-block: 0;
    margin-inline: 10px !important;
}

/* Изменить, убрать пункты контекстного меню */
menuitem.unified-extensions-context-menu-pin-to-toolbar[label="Закрепить на панели инструментов"] > .menu-iconic-text {
    display: none !important;
}
menuitem.unified-extensions-context-menu-pin-to-toolbar[label="Закрепить на панели инструментов"] > .menu-accel-container::before {
    content: "Закрепить на панели";
    display: inline-block;
    -moz-box-flex: 1;
}
menuitem.unified-extensions-context-menu-report-extension {
    display: none !important;
}


Компактное меню новой кнопки "Расширения", скрывает - заголовок, дополнения без кнопок на панели (на выбор - целиком или со списком исключений), пункт контекстного меню "пожаловаться", сообщения (по желанию). И еще, по мелочи.

Отредактировано _zt (25-04-2023 21:48:30)

Отсутствует

 

№76219-04-2023 15:59:21

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

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

Dumby
Ctrl+Shift+C в Attributes Inspector работает, на 112?
   
И еще, на 112, в этом скрипте некорректно работает щелчок ЛКМ в списке вызываемом по ПКМ. Приводит к открытию первого меню поверх второго. Он у меня сейчас так выглядит.

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

Выделить код

Код:

//
(async (name, id, func) => {
	if (name == "Object") return CustomizableUI.createWidget(func());
	var win = name == "Window", g = Components.utils.import("resource://gre/modules/Services.jsm", {});
	if (g[id]) {if (win) return;} else g[id] = func();
	if (win) return CustomizableUI.createWidget(g[id]);
	addDestructor(r => r[5] == "e" && delete g[id]);
	g[id].onCreated(this);
})(this.constructor.name, "QuickToggleAboutConfigSettings", () => {

	var {prefs} = Services, db = prefs.getDefaultBranch("");
	var pv = parseInt(Services.appinfo.platformVersion);
	var xul_ns = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

	var primary = [
//
	];
	var secondary = [
//
	];
	return {
		label: "Quick toggle",
		id: "QuickToggleAboutConfigSettings",
		localized: false,
		image: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAFPSURBVDhPnVPNSsNAEJ5tamnBk+A7BMEcikohp/gi9i18nRafQoT00kK16tnn8CJo4vp9m5m41eSgH0zmd3d+diJ/gfdedvl0QW7k1PcLwem+3TjowZagK+Nn6yc3gNCJ+LCCh9LzzTMdqeoNbkQSFZmpJLGCW5Gx2hZaQahMbZ52VuDSfHpnAVJXOb4FKzianbzCXiLrHLYl5C3t5NTRwtxaKJxUTZ/JcOTr6q2Rxwf0aVb2/hLs4KqL3Isckz/mmSdRRksjyg+z7IM6LzDCBfuvAEOJmIKBOqAWmo1YodxLlQNsyO0rsIV/AZM+JGc2a4GgzhZ2p9mFmrpboCMqNYBDdMlwompoTWN6F2nFT5hBXb0PEpmo/Gk+oH+RrqNZINPeIlnZViV1jQuLFJQuWGB0gJdwgShvqdPXZv6J+F/QS7oXqQ9xBTFZ5oa8fAGs9fed5YhPSwAAAABJRU5ErkJggg==",
		onCreated(btn) {
			btn.setAttribute("image", this.image);
			var doc = btn.ownerDocument;

			btn.btn = true;
			btn.domParent = null;
			btn.popups = new btn.ownerGlobal.Array();
			this.createPopup(doc, btn, "primary", primary);
			this.createPopup(doc, btn, "secondary", secondary);
			this.createCloseMenusOption(doc, btn);

			btn.linkedObject = this;
			for(var type of ["command", "contextmenu"])
				btn.setAttribute("on" + type, `linkedObject.${type}(event)`);
		},
		createPopup(doc, btn, name, data) {
			var popup = doc.createElementNS(xul_ns, "menupopup");
			var prop = name + "Popup";
			btn.popups.push(btn[prop] = popup);
			popup.id = this.id + "-" + prop;
			for (var type of ["popupshowing", "click"])
				popup.setAttribute("on" + type, `parentNode.linkedObject.${type}(event)`);
			for(var obj of data) popup.append(this.createElement(doc, obj));
			btn.append(popup);
		},
		map: {b: "Bool", n: "Int", s: "String"},
		createElement(doc, obj) {
			if (!obj) return doc.createElementNS(xul_ns, "menuseparator");
			var pref = doc.ownerGlobal.Object.create(null), node, img, bool;
			for(var [key, val] of Object.entries(obj)) {
				if (key == "pref") {
					var [apref, lab, akey, ttt] = val;
					pref.pref = apref; pref.lab = lab || apref;
					if (ttt) pref.ttt = ttt;
				}
				else if (key == "image") img = val, pref.img = true;
				else if (key != "values") pref[key] = val;
				else pref.hasVals = true;
			}
			var type = prefs.getPrefType(pref.pref);
			var str = this.map[type == prefs.PREF_INVALID
				? obj.values ? (typeof obj.values[0][0])[0] : "b"
				: type == prefs.PREF_BOOL ? "b" : type == prefs.PREF_INT ? "n" : "s"
			];
			pref.get = prefs[`get${str}Pref`];
			pref.set = prefs[`set${str}Pref`];

			node = doc.createElementNS(xul_ns, "menu");
			node.className = "menu-iconic";
			node.setAttribute("closemenu", "none");
			img && node.setAttribute("image", img);
			akey && node.setAttribute("accesskey", akey);
			(node.pref = pref).vals = doc.ownerGlobal.Object.create(null);
			this.createRadios(doc,
				str.startsWith("B") && !pref.hasVals ? [[true, "true"], [false, "false"]] : obj.values,
				node.appendChild(doc.createElementNS(xul_ns, "menupopup"))
			);
			if ("userChoice" in obj) pref.noAlt = !("userAlt" in obj);
			return node;
		},
		createCloseMenusOption(doc, btn) {
			var pn = this.closePref = "QuickToggleAboutConfigSettings.closeMenus";
			var data = [null, {
				pref: [pn, "Закрывать меню этой кнопки"], values: [[true, "Да"], [false, "Нет"]]
			}];
			var setCloseMenus = e => {
				e.stopPropagation();
				var trg = e.target, {pref, val} = trg, updPopup = true, clear;
				switch(e.type) {
					case "command": pref = (trg = trg.closest("menu")).pref; updPopup = false; break;
					case "click": if (e.button) return; break;
					case "contextmenu": e.preventDefault(); clear = pref;
				}
				if (!pref) return;
				if (clear) prefs.clearUserPref(pn);
				else if (!updPopup && val === pref.val) return;
				else pref.set(pn, val !== undefined ? val : !pref.val);
				this.upd(trg);
				updPopup && this.popupshowing(null, trg.querySelector("menupopup"));
			}
			(this.createCloseMenusOption = (doc, btn) => {
				for(var obj of data)
					btn.secondaryPopup.append(this.createElement(doc, obj));
				var m = btn.secondaryPopup.lastChild;
				m.style.cssText = "fill: lightblue !important; list-style-image: url(chrome://browser/skin/menu.svg) !important;";
				m.setAttribute("oncommand", "setCloseMenus(event)");
				m.onclick = m.oncontextmenu = m.setCloseMenus = setCloseMenus;
			})(doc, btn);
		},
		UserChoiceImg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACRUlEQVR42qWTS2gTQRjH/zPJZo2BDfgkB62vYg5CjQdvRUE8WB8HKyahYotIQQOeFKGCF7EgvQlBqOCjWFKlevBRDyL4uHloLXhYqWJroaEqlETSptndGb+ZPDH0ojN8O8vA98vv+/Itw38u1nSRYRE6UhKyg4FF1R292/Q+xhhLi4TIrgjgIzwe4MbgmR2nrZMtxxEN63zYORuPZp7gzpehvCu9XjfuPmwCUHIiEtw4fK89zVvD2+FHAD56quXBpV3CVO4ret6nxHzxZxdBRuqADCKmz7RHD9y2tlmbYbBVfwE8DXBkEd/y39H5+mze8ZyoSIpsFXC9u/VE3/ldpyg5AAMEoJMTQi2hANKBgyKdy0h/eoChqcf9MimvVAHjd/fdiG0NRwgQpDAp1agBpDZwdHKJLKZzc+h5e3kCSexh5c5j8fmhW0HGpNZXFkqfsQpAKgcFKGmAlAxHXp5bkkmsrhosjh4cCIJ5pG5qfQXgtMslqO1qgEMWTPrR+eriEhoA4wN7L8TWh0KVXzfgY2RQAUjVBenWLH4UCrj04Wa9BNXEo5va+w63xCiJ6WRVP2MVgNQIgjgEA17MTODZ7Lt+AtSaGDG4377a1m2FAkKrc11/dUwIID1dSKHEcW3yft4RbpR6kK1PYgaJtaY1nNp5jIeMsjKNbs1AWRUcjvTnp2Kh9LtLJGTDINUhcTIZ3L+hzdq9ZgvWmSF9/Wu5gI8L03gzP5l3hddL/3/zKDdA9MdE0UERrdzaFGMUaap75Y/pX9Yfap76EQYaCeEAAAAASUVORK5CYII=",
		notUserChoiceImg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAACNUlEQVR42qXTT2jTUBwH8G9e0ta2ks5ND0Ww/qX1oGyevEwQnOBA6EHXwLwoUh3eRGRs501RPE6xgp6KrexQECZY8DBPXmbRS4Z/K0gRtmmDa2yb5PlLX7p2Gwpi4EfCy8sn3/dPwn9e0saGnCRF6XYFnA9DkhKtRs51ep6jmtEcp/JHIM9Yivl9mf0XNDV2Ngn1YLzVxdB1lJ8U8P5hzuCWnR6xrPwmIM8kLRjdkT326BaLHNgLKAFA9ouXdhOw6qi++4j589cd89vSaMqyc2sAPUXlgF8fyt9WI3t2Av4w4NsCMJ8AHAKav6hqqH76iuLINcNuNhOawyttYCp+7tRE/6XT9GFQAG4CpniATQkIaNQIMVG6/xSL2WfTGueTbWDh5L2rA9t29QGBrQQEPUDuAuoEmFSr+P5lGc8v33mtAUfaQO3M4/GgDOoYCIkUin8D0BDDoBQ2ZMxqN0wCQh0gMxaUnYb4uzt+dwIZ8wBHTGQbYAHMpu+uAxaGxpMDvSr3AHcFaAIlD+BtoN6ag5WqhOLNwrohTMWPH5roP7pdLIwb3wW6EziWGAZhpVdLWHzxdpqAyc4yKrJ+4uKg2oMV+lgRK9CdwAVsG1WpF8UH84Zt2QkCKmsbiRAtFAllB5OHWQ9fpr81OwlcgBL9kPrwsvDGMQ1zNMV5ZyN1ISlZYZl9/TE1tjuMSFgA1VWO8uef+FAqG47tpFMcm7dyFyIOEzBMlfCadao5qhk39l9P479evwFbiOcRSXKueAAAAABJRU5ErkJggg==",
		UserAltImg: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAIfSURBVDhPpVM9b9NQFD02cSKKFVGKIFFREFsmFiCA1AEQQrQjC0gssLCkC0jJj0iFWFoGdiT4Ay0SEmJBhPI5FBokikL4SCC0Te2UxInt13Mdu1CVrVc6713fe86x/T6w09DCeTNKJ7Q0pzyUmoCmZYOiUhXms8RMcd6vB7UwthhM5fTLWix2L3PmYjKdOwdz9DDFGtr1KuovnqD29JGlfO9Goew9DCV/DaZy2pXE8PD9Y/mbupk6xE6cVWPQhEujHo2+4fXdO76ztnq1UPYfSCcwKB1HWjeMyunCraSZOsDqbkBPsBOTNoMGvkOTLto/f+F56bble262OK/qesiYzIydTJojFLjrgEe4bcIOEdXWYe6LITN2KgmFSRFGBuPpo0eAngX0SexTJHD5LOgLpEZTcgKuUuMijAyy5l7+r0NSb21g5LQI5gGYSy2AjYBLjQyRAUniTnJXsBoayBzm3RBBndwwIoOK3fgNdIREQYCV/0DqLdiNZqCRITKYayx85RfQuUNiZ3k7IgO+vfGeXGpkiAyma++WLHtZhZ8o5H/FEVpos1V7u8TFwLQId8nw+Afa51Oq2vyycmlk9KCW0GXFZeu63IUO8z88Bx5s28SbuUXfddzrxVcobxpI0GTh7H734/dPzQt9d0/CGBpCPB7nbhmwbAPVxR4+PPtsuU7/WuElth/lKORUcsoTE8TgMg0WbJaY4Zu3XKYdBrABARUk+ls4DfQAAAAASUVORK5CYII=",
		upd(node) {
			var {pref} = node, def = false, user = false, val;
			if (prefs.getPrefType(pref.pref) != prefs.PREF_INVALID) {
				var pn = pref.pref;
				try {val = pref.defVal = db[pref.get.name](pn); def = true}
				catch(ex) {def = false;}
				var user = prefs.prefHasUserValue(pn);
				if (user) try {val = pref.get(pn, undefined);} catch(ex) {}
			}
			if (val == pref.val && def == pref.def && user == pref.user) return;
			pref.val = val; pref.def = def; pref.user = user;
			var exists = def || user;

			var ttt = exists ? val : "Этого префа не существует";
			if (ttt === "") ttt = "[ empty_string ]";
			ttt += "\n" + pref.pref;
			if (pref.ttt) ttt += "\n" + pref.ttt;
			node.tooltipText = ttt;

			var img, alt = "userAlt" in pref && val == pref.userAlt;
			if (alt) img = this.UserAltImg;
			if ("userChoice" in pref)
				if (val == pref.userChoice)
					//node.style.removeProperty("color"),
					img = this.UserChoiceImg;
				else {
					//node.style.setProperty("color", "maroon", "important");
					if (!alt) img = this.notUserChoiceImg;
				}
			if (!pref.img) img
				? node.setAttribute("image", img)
				: node.removeAttribute("image");
			user
				? node.style.setProperty("font-style", "italic", "important")
				: node.style.removeProperty("font-style");

			var {lab} = pref;
			if (exists && pref.hasVals) {
				if (val in pref.vals) var sfx = pref.vals[val] || val;
				else var sfx = user ? "Другое" : "По умолчанию";
				lab += ` ${"restart" in pref ? "— ↯" : "refresh" in pref ? "— ⧖" : "— -"} "${sfx}"`;
			}
			node.setAttribute("label", lab);
		},
		createRadios(doc, vals, popup) {
			for(var arr of vals) {
				if (!arr) {
					popup.append(doc.createElementNS(xul_ns, "menuseparator"));
					continue;
				}
				var [val, lab, key, ttt] = arr;
				var menuitem = doc.createElementNS(xul_ns, "menuitem");
				menuitem.setAttribute("type", "radio");
				menuitem.setAttribute("closemenu", "none");
				menuitem.style.setProperty("font-style", "italic", "important"),
				menuitem.setAttribute("label", popup.parentNode.pref.vals[val] = lab);
				key && menuitem.setAttribute("accesskey", key);
				var tip = menuitem.val = val;
				if (ttt) tip += "\n" + ttt;
				menuitem.tooltipText = tip;
				popup.append(menuitem);
			}
		},
		openPopup(popup) {
			var btn = popup.parentNode;
			if (btn.domParent != btn.parentNode) {
				btn.domParent = btn.parentNode;
				var pos;
				if (btn.matches(".widget-overflow-list > :scope"))
					pos = "after_start";
				else var win = btn.ownerGlobal, {width, height, top, bottom, left, right} =
					btn.closest("toolbar").getBoundingClientRect(), pos = width > height
						? `${win.innerHeight - bottom > top ? "after" : "before"}_start`
						: `${win.innerWidth - right > left ? "end" : "start"}_before`;
				for(var p of btn.popups) p.setAttribute("position", pos);
			}
			popup.openPopup(btn);
		},
 		maybeRestart(node, conf) {
			if (conf && !Services.prompt.confirm(null, this.label, "Перезапустить браузер?")) return;

			var cancel = Cc["@mozilla.org/supports-PRBool;1"].createInstance(Ci.nsISupportsPRBool);
			Services.obs.notifyObservers(cancel, "quit-application-requested", "restart");
			return cancel.data ? Services.prompt.alert(null, this.label, "Запрос на выход отменен.") : this.restart();
		},
		async restart() {
			var meth = Services.appinfo.inSafeMode ? "restartInSafeMode" : "quit";
			Services.startup[meth](Ci.nsIAppStartup.eAttemptQuit | Ci.nsIAppStartup.eRestart);
		},
		regexpRefresh: /^(?:view-source:)?(?:https?|ftp)/,
		maybeRe(node, fe) {
			var {pref} = node;
			if ("restart" in pref) {
				if (this.maybeRestart(node, pref.restart)) return;
			}
			else this.popupshowing(fe, node.parentNode);
			if ("refresh" in pref) {
				var win = node.ownerGlobal;
				if (this.regexpRefresh.test(win.gBrowser.currentURI.spec)) pref.refresh
					? win.BrowserReloadSkipCache() : win.BrowserReload();
			}
		},
		maybeClosePopup(e, trg) {
			!e.ctrlKey && prefs.getBoolPref(this.closePref, undefined)
				&& trg.parentNode.hidePopup();
		},
		command(e) {
			var trg = e.target;
			if (trg.btn) return this.openPopup(trg.primaryPopup);

			var menu = trg.closest("menu"), newVal = trg.val;
			this.maybeClosePopup(e, menu);
			if (newVal != menu.pref.val)
				menu.pref.set(menu.pref.pref, newVal),
				this.maybeRe(menu, true);
		},
		popupshowing(e, trg = e.target) {
			if (trg.state == "closed") return;
			if (trg.id) {
				for(var node of trg.children) {
					if (node.nodeName.endsWith("r")) continue;
					this.upd(node);
					!e && node.open && this.popupshowing(null, node.querySelector("menupopup"));
				}
				return;
			}
			var {pref} = trg.closest("menu"), findChecked = true;

			var findDef = "defVal" in pref;
			var checked = trg.querySelector("[checked]");
			if (checked) {
				if (checked.val == pref.val) {
					if (findDef) findChecked = false;
					else return;
				}
				else checked.removeAttribute("checked");
			}
			if (findDef) {
				var def = trg.querySelector("menuitem:not([style*=font-style]");
				if (def)
					if (def.val == pref.defVal) {
						if (findChecked) findDef = false;
						else return;
					}
					else def.style.setProperty("font-style", "italic", "important");
			}
			for(var node of trg.children) if ("val" in node) {
				if (findChecked && node.val == pref.val) {
					node.setAttribute("checked", true);
					if (findDef) findChecked = false;
					else break;
				}
				if (findDef && node.val == pref.defVal) {
					node.style.removeProperty("font-style");
					if (findChecked) findDef = false;
					else break;
				}
			}
		},
		contextmenu(e) {
			var trg = e.target;
			if (trg.btn) {
				if (e.ctrlKey || e.shiftKey) return;
				if (e.detail == 2) return trg.secondaryPopup.hidePopup();
				this.openPopup(trg.secondaryPopup);
			}
			else if ("pref" in trg) {
				this.maybeClosePopup(e, trg);
				if (trg.pref.user)
					prefs.clearUserPref(trg.pref.pref),
					this.maybeRe(trg);
			}
			e.preventDefault();
		},
		click(e) {
			if (e.button) return;
			var trg = e.target, {pref} = trg;
			if (!pref) return;

			this.maybeClosePopup(e, trg);
			if (!("noAlt" in pref)) return;

			if (pref.val == pref.userChoice)
				if (pref.noAlt) return;
				else  pref.set(pref.pref, pref.userAlt);
			else
				pref.set(pref.pref, pref.userChoice);
			this.maybeRe(trg);
		}
	};
});

Можете поправить?
   
xrun1
А туда то я не заглянул. ) Спасибо.

Отредактировано _zt (20-04-2023 09:20:46)

Отсутствует

 

№76319-04-2023 18:50:16

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

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

_zt пишет

Ctrl+Shift+C в Attributes Inspector работает, на 112?

Работает с правкой в Firefox 111+, поломали Ctrl+Shift+C копирование с тултипа

Отредактировано xrun1 (19-04-2023 18:51:01)

Отсутствует

 

№76420-04-2023 10:10:05

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

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

LGS пишет

избранного

???

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

Смотря что считать за «на основе».
В нём же про менюшки, а в боковой панели — дерево.


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

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

Выделить код

Код:

//...
    scriptsallchrome: { // Для докум. всех окон [ChromeOnly]
        domload: [ // По событию "DOMContentLoaded"
            // ...
            { path: "places_sidebar_folders_statistics.js", urlregxp: /chrome:\/\/browser\/content\/places\/(bookmarks|history)Sidebar.xhtml/ },
        ],


и places_sidebar_folders_statistics.js
скрытый текст

Выделить код

Код:

(async () => {
	var addFolderStats = node => {
		var title = PlacesUIUtils.getBestTitle(node, true);

		if (PlacesUtils.nodeIsContainer(node)) {
			var wasClosed = !node.containerOpen;
			if (wasClosed) node.containerOpen = true;

			var urls = 0, containers = 0;
			for(var ind = 0, max = node.childCount; ind < max; ind++) {
				var child = node.getChild(ind);
				if (PlacesUtils.nodeIsURI(child)) urls++;
				else if (PlacesUtils.nodeIsContainer(child)) containers++;
			}
			if (wasClosed) node.containerOpen = false;
		
			title += ` (${urls}/${containers})`;
		}
		return title;
	}
	var proto = PlacesTreeView.prototype;
	Object.assign(proto, eval(`({getCellText: ${proto.getCellText}})`.replace(
		"PlacesUIUtils.getBestTitle(node, true)", "addFolderStats(node)"
	)));
})();

_zt пишет

Приводит к открытию первого меню поверх второго.

Да, вижу, это довольно странно.
Может просто прямо так и записать

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

Выделить код

Код:

.....
			//if (trg.btn) return this.openPopup(trg.primaryPopup);
			if (trg.btn) return trg.secondaryPopup.state == "closed" && this.openPopup(trg.primaryPopup);

Отсутствует

 

№76520-04-2023 11:17:30

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

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

Dumby пишет

Может просто прямо так и записать

Спасибо, очень важная кнопочка.

Отсутствует

 

№76620-04-2023 11:23:06

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

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

Dumby пишет

???

Так еще со школы помню (хоть и давно это было) стараться избегать повтора слов в предложении и применять, по-возможности, синонимы. Вот я и применил). То, что "избранное" будет понято правильно, я как-то не сомневался.

Dumby пишет

Допустм, подключение через встроенный загрузчик

Отлично, спасибо!
На скринах: первый - закладки, второй - история
sidebar.1681978758.png   sidebar-1.1681979968.png
Порядок отображения закладки/папки менять не стал, по-умолчанию устраивает.

Отредактировано LGS (20-04-2023 11:43:05)

Отсутствует

 

№76720-04-2023 11:56:33

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

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

_zt
Посмотрите PM.

Отсутствует

 

№76820-04-2023 14:43:41

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

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

Dumby пишет

custom_script_win.js, "DOMContentLoaded" (не "load").
скрытый текст

У меня если дополнительная панель скрыта, то блокирует всплывающее окно для установки расширения с АМО. В чём может быть причина ?

Отредактировано kokoss (20-04-2023 14:54:30)


Win7

Отсутствует

 

№76920-04-2023 15:44:27

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

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

Dumby
Да, теперь все ок.
   
Посмотрите, пожалуйста, еще пару ваших скриптов, тоже не работают.
// этот вообще не видно
https://forum.mozilla-russia.org/viewto … 78#p798678
// а этот пустой тултип показывает
https://forum.mozilla-russia.org/viewto … 03#p789303
   
Еще одно вылезло:
Я выше поделку выложил, делал ее по шаблонам - раз, два и т.п., в моем профиле она показывает тултип, а в "чистом" - нет.
Не могу понять в чем дело.

Отредактировано _zt (20-04-2023 18:35:22)

Отсутствует

 

№77020-04-2023 22:30:41

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

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

kokoss пишет

У меня если дополнительная панель скрыта, то блокирует всплывающее окно для установки расширения с АМО. В чём может быть причина ?

Понятия не имею.
Но если anchor панельки находится где-то на коллапснутом тулбаре,
то хорошего не жди.


Можно попробовать, на такой случай,
подсунуть какой-нибудь другой anchor'ский элемент.
Код для custom_script_win.js

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

Выделить код

Код:

(async id => {
	var anchor = "notification-popup-box"; // urlbar
	//var anchor = "PanelUI-menu-button"; // hamburger

	var btn = document.getElementById(id);
	var orig = gUnifiedExtensions.getPopupAnchorID;
	var custom = eval(`(function ${orig})`.replace(id, anchor));
	gUnifiedExtensions.getPopupAnchorID = (...args) =>
		(btn.matches("toolbar[collapsed=true] :scope") ? custom : orig)(...args);
})("unified-extensions-button");

_zt пишет

этот вообще не видно

Может здесь посмотри (в самом конце сообщения).


а этот пустой тултип показывает

Ну да, nsINavBookmarkObserver — всё, удалили.
Хорошо, попробую записать только под PlacesObservers

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

Выделить код

Код:

(async (id, sel) => {
	var g = Cu.getGlobalForObject(Cu), stt = g[id];
	if (!stt) {
		var {obs, prefs} = Services, {bookmarks: bm, observers: pobs} = PlacesUtils;
		stt = g[id] = {
			bm,
			pref: `ucf.${id}Guid`,
			async init() {
				this.args = [b => this.bguids.add(b.parentGuid), {concurrent: true}];
				this.pobsArgs = [
					["bookmark-added", "bookmark-moved"],
					this.record = this.record.bind(this)
				];
				pobs.addListener(...this.pobsArgs);
				obs.addObserver(this, "quit-application-granted");

				var guid = prefs.getCharPref(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() {
				pobs.removeListener(...this.pobsArgs);
				obs.removeObserver(this, "quit-application-granted");
				prefs.setCharPref(this.pref, this.guids[0]);
			},
			record(events) {
				for(var e of events) if (
					e.itemType == bm.TYPE_BOOKMARK && e.source == bm.SOURCES.DEFAULT
					&& !(e.type == "bookmark-moved" && e.parentGuid == e.oldParentGuid)
				)
					this.guids[0] = e.parentGuid;
			},
			bguids: new g.Set(),
			guids: new g.Array(),
			fetch(win) {
				this.bguids.clear();
				return bm.fetch({url: win.gBrowser.currentURI.spec}, ...this.args);
			},
			tt(de) {
				var kids = InspectorUtils.getChildrenForNode;
				return (this.tt = kids.length == 2
					? de => {
						var list = kids(de, true);
						return list.item(list.length - 1);
					}
					: de => kids(de, true, false).at(-1)
				)(de);
			}
		};
		stt.init();

		var func = id => this[id].handleEvent = async function(e) {
			var win = e.view;
			var star = e.target;
			star.tooltipText = "\u3164";
			var starred = star.hasAttribute("starred");
			starred && await this.fetch(win);
			var result = [];
			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;
			if (!result.length) return win.document.l10n.translateElements([star]);
			var text = result.join("\n");
			if (starred) {
				var m = result.length > 1;
				text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${text}`;
			}
			star.defaultTT.state == "open"
				? star.defaultTT.label = text : star.tooltipText = text;
		}
		var url = "data:;charset=utf-8," + encodeURIComponent(`(${func})("${id}")`);
		g.ChromeUtils.compileScript(url).then(ps => ps.executeInGlobal(g));
	}
	await delayedStartupPromise;
	var tt = stt.tt(document.documentElement);
	var stars = Array.from(document.querySelectorAll(sel));
	for(var star of stars) star.defaultTT = tt, star.addEventListener("mouseenter", stt);

	var destructor = () => {
		for(var star of stars) star.removeEventListener("mouseenter", stt);
	}
	var ucf = window.ucf_custom_script_win;
	if (ucf) ucf[id] = {destructor}, ucf.unloadlisteners.push(id);
	else window.addEventListener("unload", destructor, {once: true});

})("ucfBookmarksStarFTooltipHelper", "#star-button, #context-bookmarkpage");

в моем профиле она показывает тултип, а в "чистом" - нет.

У, это надо чистую сборку собирать с чистым UCF,
только чтобы проверить. Может быть соберусь, а может нет.

Отредактировано Dumby (21-04-2023 06:01:59)

Отсутствует

 

№77120-04-2023 22:48:43

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

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

Dumby пишет

Можно попробовать, на такой случай,
подсунуть какой-нибудь другой anchor'ский элемент.
Код для custom_script_win.js
скрытый текст

Спасибо, теперь ОК!


Dumby пишет

Понятия не имею.
Но если anchor панельки находится где-то на коллапснутом тулбаре,
то хорошего не жди.

Использую дополнительную панель из UCF


Win7

Отсутствует

 

№77220-04-2023 23:26:00

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

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

_zt
А вообще, заморочно, но не так уж и долго.
Собрал 112.0.1, подключил скрипт как написано.
Результат — тултип есть.

скриншот

Выделить код

Код:

data:image/png;base64,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

Отсутствует

 

№77321-04-2023 02:52:18

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

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

Dumby

Ну да, nsINavBookmarkObserver — всё, удалили.
Хорошо, попробую записать только под PlacesObservers

Поискал у себя в кнопках текст nsINavBookmarkObserver, нашёл одну. Если правильно понял, это аналог кнопки из-под цитаты выше.
Вот хотелка, а вот реализация (2-й спойлер). И работает невзирая на nsINavBookmarkObserver.
Клики на звёздочке, лично мне, не нужны. А вот идея с "Недавняя папка:" симпатичная.

tooltip скриншот

Выделить код

Код:

data:image/png;charset=utf-8;base64,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


Или подскажите, куда эту новую вместо моей вставлять. Старая работает так, новая нет.
скрытый текст

Выделить код

Код:

scriptschrome: { // Для докум. окна браузера [ChromeOnly]
        domload: [ // По событию "DOMContentLoaded"

        ],
        load: [ // По событию "load"
            // { path: "special_widgets.js", ucfobj: true, }, // <-- Special Widgets
            // { path: "auto_hide_sidebar.js", ucfobj: true, }, // <-- Auto Hide Sidebar
            { path: "cs_win/bookmark-added.js", ucfobj: false, }, // для звёздочки показывать папку https://forum.mozilla-russia.org/viewtopic.php?pid=790890#p790890


Или это вообще не о том... :(

Отредактировано xrun1 (21-04-2023 03:18:44)

Отсутствует

 

№77421-04-2023 06:03:13

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

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

xrun1 пишет

И работает невзирая на nsINavBookmarkObserver.

Это потому, что соответствующий стафф находится
в блоке else, соответственно, давно уже не исполняется.

Старая работает так, новая нет.

Да, мой косяк.
Возился из-под 114, а на 112 не проверил.
Подправил, надеюсь.


Но, это версия без заголовка в тултипе,
то есть сразу «Адрес(а) заклад(ки/ок): ...»,
или последняя папка, куда добавлялась закладка.


Если заголовок желателен, то дай знать, может попробую добавить.

Отсутствует

 

№77521-04-2023 10:24:41

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

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

Dumby
Новый UndoBookmarks работает.
BookmarksStarTooltipHelper, заработал, только последний.
   
Тултипу кнопки "расширения" мешал этот код.
Почему этого не происходило в старом профиле, мне неведомо.
Этот код работает и вроде не мешает.
   
Где то упоминалось, что в следующих версиях эту кнопку сделают перемещаемой. Это случилось в 114?
   
Спасибо.
   
Добавлено 21-04-2023 10:32:38
xrun1
Или так. )

Выделить код

Код:

// Убираем строку перед адресом закладки
//				text = `Адрес${m ? "а" : ""} заклад${m ? "ок" : "ки"}:\n${text}`;
				text = `${text}`;

Отредактировано _zt (21-04-2023 10:32:59)

Отсутствует

 

Board footer

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