а как бы вы сделали?
Я? Ну, мне бы хотелось видеть нечто
чуть более информативное, то есть типа это альфа, бета, esr'ка...
Хотя, может быть таков и был твой замысел, обрезать именно
до трёх символов, чтобы занимало меньше места (отсюда же замысел не видно).
Всё нижепоследующее не имеет хоть сколько-нибудь
какого-то значения, но лишь чистая вкусовщина.
Мне не нравятся одинарные кавычки, предпочитаю двойные.
Впрочем, уместны, если нужен микс из обоих.
Название переменной elem, возможно, чтобы подчеркнуть,
что это не просто нода, а именно элемент.
Но я, скорее, склонен был бы её так и назвать — label
Вместо установки innerHTML предпочёл бы
использовать всё тот же append() и без промежуточной переменной,
покольку для этого нет никаких видимых причин.
Если есть возможность прицепить в обёртку нечто,
заведомо не могущее образовать ошибку (типа просто строка),
то, вроде, так чуть красивее смотриться, чем просто голые скобки ()
Вобщем, то же самое — вид сбоку
(async css => { var label = document.createElement("label"); label.append(AppConstants.MOZ_APP_VERSION_DISPLAY); label.style.cssText = css; gURLBar._inputContainer.append(label); })(` padding-block: 1px; font-size: 13px; color: gray; `);
Отсутствует
Dumby, спасибо, подправил у себя + проверка на окно, чтобы консоль не пищала на AppConstants.
Возвращаясь к этому, не хватает подсказки при наведении мыши на кнопку - многострочную. Придумал так
btn.setAttribute("title", "1\tFirst line\n2\tSecond line");
Не знаю, как по другому еще можно и нужно ли
Не в тему, но отсутствие ответа на вопрос не дает мне норм спать по ночам. Можно ли как-то посмотреть прослушки на #main-window? В инспекторе есть кнопка event, но при ее нажатии ошибка в консоли
Error while calling actor 'domnode's method 'getEventListenerInfo' passing non-debuggable global to addDebuggee
Отсутствует
Придумал так
btn.setAttribute("title", "1\tFirst line\n2\tSecond line");
Не знаю, как по другому еще можно
Да чего там ещё от добра добра искать.
resource://gre/modules/TooltipTextProvider.sys.mjs
твой "title" подхватит, и в #aHTMLTooltip'е будет показан.
Можно ли как-то посмотреть прослушки на #main-window? В инспекторе есть кнопка event
Кнопка, это конечно хорошо, но,
раз такое дело, то почему бы не попрактиковать аскетику.
Запускаешь
Services.els.getListenerInfoFor(document.documentElement);
и смотришь.
Но, что-то там ничего особо интересного не видно.
Мне отдаёт массив всего из пяти экземпляров nsIEventListenerInfo
у каждого из которых, свойство listenerObject есть null
Впрочем, если задуматься, ничего удивительного, что так мало.
Кому бы понадобилось вешать листенер именно на html#main-window
Либо на что-то более конкретное дочернее,
либо, тогда уж, сразу на документ, окно, windowRoot окна
(вот там, числа уже вокруг сотни).
Отсутствует
resource://gre/modules/TooltipTextProvider.sys.mjs
твой "title" подхватит, и в #aHTMLTooltip'е будет показан.
да и без файла подхватывает, а отображение в aHTMLTooltip не особо нужно
Кому бы понадобилось вешать листенер именно на html#main-window
Да часто лопушусь из-за названия main-window и считаю, что в нем прослушки на window
Я вот тута подумал, а можно ведь версию сабжа отображать вместо дефолтного placeholder с никому не нужной "Search or enter address".
Но реализация у меня костыльная. Здеся можно стилями изменить название, а если замутить
content: attr(ffversion);
а затем через обсервер в config.js
let str = Services.appinfo.name + " " + Services.appinfo.platformVersion + " " + Services.appinfo.defaultUpdateChannel;
doc.getElementById("urlbar-input").parentNode?.setAttribute("ffversion", str);
то получим то, что хотели
Отсутствует
да и без файла подхватывает, а отображение в aHTMLTooltip не особо нужно
Это было просто информационное сообщение.
Оно может быть понятным, или не понятным,
интересным, или не интересным ...
Но, оно не для того, чтобы комментировать поперёк.
Разве что только если я не прав. Хорошо, давай проверим.
и без файла подхватывает
Испортим то, что делает файл. Запускаем с консоли браузера:
ChromeUtils.importESModule("resource://gre/modules/TooltipTextProvider.sys.mjs")
.TooltipTextProvider.prototype.getNodeText = (elm, out) => out.value = "???";
Затем, наводим указатель мыши на кнопку.
Что видно в тултипе?
отображение в aHTMLTooltip не особо нужно
Ладно, тогда долой. Запускаем aHTMLTooltip.remove();
Снова наводим. Как теперь видно?
версию сабжа отображать вместо дефолтного placeholder
можно стилями изменить название
Ну, не прямо «изменить».
Это некая CSS-мимикрия под это дело.
Довольно симпатичная, пока для псевдоэлемента
хватает горизонтального места.
А, если именно «изменить»,
то, скорее, наверно, типа как-то так.
Увы, изменить мало, надо ещё как-то предотвратить
обратную перестановку со стороны браузера.
Вариант с MutationObserver'ом
(async (attr, rem) => { var input = document.getElementById("urlbar-input"); (rem = () => input.removeAttribute(attr))(); new MutationObserver(rem).observe(input, { attributes: true, attributeFilter: [attr] }); input.setAttribute("placeholder", "Version Info"); })("data-l10n-id");
(async keys => { var input = document.getElementById("urlbar-input"); input.removeAttribute("data-l10n-id"); input.setAttribute("placeholder", "Version Info"); var p = Promise.resolve(), noop = () => p; for(var key of keys) BrowserSearch[key] = noop; Object.getOwnPropertyDescriptor(window, "gURLBar").get && await document.documentReadyForIdle; var code = `{${gURLBar.view.input._updateSearchModeUI}}`.replace( /this\.document\.l10n\.setAttributes\([^)]+?this\.inputField.+?\);/gs, "// placeholder setup was here" ); var url = `data:,Object.assign(gURLBar.view.input, ${encodeURIComponent(code)});`; (await ChromeUtils.compileScript(url)).executeInGlobal(window); })([ "initPlaceHolder", "_setURLBarPlaceholder", "_updateURLBarPlaceholder", "_updateURLBarPlaceholderFromDefaultEngine" ]);
Отсутствует
Это было просто информационное сообщение.
Оно может быть понятным, или не понятным
Мне не понятно, почему один и тот же атрибут на элементе button ведет себя по разному.
для одной кнопки атрибут title связан с подсказкой, а tooltiptext не пашет
для другой кнопки атрибут tooltiptext связан с подсказкой, а title - с названием
Может зависит от типа родительского элемента?
Испортим то, что делает файл
Да, теперь вижу зависимость от файла. "Хорошо" сломало тултипы с пониженными правами
Про placeholder, благодарю за оба варианта. Потестирую и если что не так - отпишусь.
Отсутствует
для одной кнопки атрибут title связан с подсказкой, а tooltiptext не пашет
для другой кнопки атрибут tooltiptext связан с подсказкой
Процитирую часть кода из TooltipTextProvider.sys.mjs
..... if (tipElement.namespaceURI == XUL_NS) { lookingForSVGTitle = false; titleText = tipElement.getAttribute("tooltiptext"); } else if (!defView.SVGElement.isInstance(tipElement)) { lookingForSVGTitle = false; titleText = tipElement.getAttribute("title"); }
Вот, демо-код для запуска с консоли.
Окошко с двумя кнопками.
У обоих кнопок присутствуют оба атрибута.
Какой будет показан в тултипе?
(async (TITLE, TOOLTIP_TEXT) => { var win = openDialog("about:blank", "", "chrome,centerscreen,width=340,height=220"); Services.scriptloader.loadSubScript("chrome://global/content/customElements.js", win); await new Promise(resolve => win.addEventListener("DOMContentLoaded", resolve, {once: true})); win.windowUtils.loadSheetUsingURIString("data:text/css," + encodeURIComponent(` :root, body { height: 100vh; display: flex; align-items: center; flex-direction: column; justify-content: space-around; } button { color: gray; font: 42px monospace, auto; } `), win.windowUtils.USER_SHEET); var doc = win.document; doc.title = "Test"; var htmlButton = doc.createElement("button"); htmlButton.setAttribute("title", `\n HTML Button ${TITLE} Attribute \n `); htmlButton.setAttribute("tooltiptext", `\n HTML Button ${TOOLTIP_TEXT} Attribute \n `); htmlButton.append("HTML Button"); doc.body.append(htmlButton); var xulButton = doc.createXULElement("button"); xulButton.setAttribute("title", `\n XUL Button ${TITLE} Attribute \n `); xulButton.setAttribute("tooltiptext", `\n XUL Button ${TOOLTIP_TEXT} Attribute \n `); xulButton.setAttribute("label", "XUL Button"); doc.body.append(xulButton); })( "\u{1d413}\u{1d408}\u{1d413}\u{1d40b}\u{1d404}", "\u{1d413}\u{1d40e}\u{1d40e}\u{1d40b}\u{1d413}\u{1d408}\u{1d40f} \u{1d413}\u{1d404}\u{1d417}\u{1d413}" );
Отсутствует
То есть, если это XUL элемент, то берётся атрибут "tooltiptext".
Иначе, если это не SVG элемент, то берётся атрибут "title".
Ок, теперь ясно
Возвращаясь к скрытым вкладкам, обнаружил траблу.
Для короткоживущих (например, при открытии исх кода в новом окне) код работает как мне надо, т.е. не выводит алерт, однако это происходит за счет ошибки в консоли
"record.target.linkedBrowser is null"
Для исправления немного переделал код и вроде теперь все ок
var notify = records => alert('"true" hidden attribute on tab(s) detected.\n\n' + records.map(info).join("\n\n"));
var notify = records => { for (let mutation of records) { if (mutation.target.collapsed) return; } alert('"true" hidden attribute on tab(s) detected.\n\n' + records.map(info).join("\n\n")); }
Отсутствует