Сыылка прекрасно копируется и без alt. Но если вам надо принципиально с alt…
ну чтоб одним кликом сохранялась в буфер ЛКМ+ALT например или колесо+ALT
Сейчас-то надо выбрать из меню этот пункт при ПКМ на картинку
когда по 100 раз за час ссылки дёргаешь запаривает
Отредактировано selevo (10-05-2016 15:29:50)
Отсутствует
selevo
addEventListener('dblclick', (e)=> { var img = e.originalTarget.tagName.toLowerCase() == "img"; var win = e.originalTarget.ownerDocument.defaultView; if (img && e.button == 2 && win.top == content) { e.preventDefault(); e.stopPropagation(); document.getElementById("contentAreaContextMenu").hidePopup(); var imgLink = e.originalTarget.src; if (imgLink && e.originalTarget.parentNode.tagName.toLowerCase() == "a" && e.originalTarget.parentNode.href.match(/\.(jpg|jpeg|png|gif|apng|webp)$/)) { imgLink = e.originalTarget.parentNode.href; } gClipboard.write(imgLink); custombuttons.alertSlide('Ссылка на изображение скопирована', imgLink); } }, false, gBrowser);
Двойным ПКМ по картинкам. Если картинка - ссылка на картинку, то копируется ссылка на картинку. Только если ссылка прямая (можно изменить, удалив
-тогда скопируется любая ссылка).
Отредактировано turbot (15-05-2016 21:34:36)
Отсутствует
Не работает на 28,38 лисах.Запустилась только с 45 и 46
Отсутствует
VORON
Так на них и оригинальное расширение работает...
Но вот, хозяин барин:
for (var type of ["mousedown", "dragstart", "TabClose"]) { addEventListener(type, (e)=> { if (e.target != gBrowser.selectedTab) return; var menuPopup = document.getElementById("backForwardMenu"); if (e.type == "mousedown" && e.button == 0) { menuPopup.showPopup(e.target, -1, -1, "popup", "bottomleft", "topleft") } else { menuPopup.hidePopup(); } }, true, gBrowser.tabContainer) };
На 24+ точно работает
Отредактировано turbot (11-05-2016 07:31:16)
Отсутствует
VORON
Так на них и оригинальное расширение работает...
Но вот, хозяин барин:
На 24+ точно работает
Ну так ради уменьшения количества расширений,не только функционала для
Спасибо.
Отсутствует
Dumby
не подскажете про BBCode:
addEventListener("click", (e)=> { if (document.activeElement != gBrowser.selectedBrowser) return; var text = e.target.tagName.toLowerCase() == "textarea"; if (text && e.button == 0) { popup.showPopup(e.target, -1, -1, "panel", "topright", "bottomright"); e.target.focus(); } else popup.hidePopup(); }, false, window);
заменил menupopup на panel и поставил
), но есть пара проблем:
Будучи panel, попапы кнопок лишаются прокрутки. Подскажите, как сделать остальные субменю снова menupopup? Я заблудился в вашем коде...
Собственно, вот. Главная проблема. Остальное - мелочи, но может тоже подскажете:
Плавающая панель очень неспешно (а вернее, только если шевельнуть мышью и снова на секунду-другую остановить) возвращается к границе формы после прокрутки страницы. Можно ли сделать, чтоб она чаще корректировала свое положение?
Если листенер на focus, то как закрывать ее? При клике на странице фокус на нее не переходит? Потому что панель не скрывается. (По этой причине с click и сделал.)
Отсутствует
VORON
Я тут подумал, может так лучше будет:
addEventListener('mousedown', e=> { let tab = e.originalTarget; while (tab && tab.localName != 'tab') tab = tab.parentNode; var selTab = tab.hasAttribute('visuallyselected') || tab.hasAttribute('selected'); if (!tab) return; var menuPopup = document.getElementById("backForwardMenu"); var controlItem = e.originalTarget.localName == 'toolbarbutton' || e.originalTarget.localName == 'image'; tab.onmouseup = (tab && selTab && e.button == 0 && !controlItem) ? e=> menuPopup.openPopup(tab, 'after_start') : delete e; }, true, gBrowser.tabContainer);
- попап не будет появляться/скрываться когда не нужен (при закрытии вкладки/перетаскивании/отключении звука), но с минусом - закроется он только при клике по его пунктам или не по активной вкладке.
UPD: Переделал снова. Ничего существенного, но так вроде правильнее будет. Старый вариант - под спойлером.
addEventListener('mousedown', (e)=> { let tab = e.originalTarget; while (tab && tab.localName != 'tab') { tab = tab.parentNode; } var selTab = tab.hasAttribute('visuallyselected') || tab.hasAttribute('selected'); var menuPopup = document.getElementById("backForwardMenu"); var controlItem = e.originalTarget.localName == 'toolbarbutton' || e.originalTarget.localName == 'image'; tab.onmouseup =e=> null; if (tab && selTab && e.button == 0 && !controlItem) { tab.onmouseup =e=> { menuPopup.showPopup(tab, -1, -1, "popup", "bottomleft", "topleft"); } } }, true, gBrowser.tabContainer);
Отредактировано turbot (26-05-2016 19:13:21)
Отсутствует
Я заблудился в вашем коде...
Код не мой.
Будучи panel, попапы кнопок лишаются прокрутки. Подскажите, как сделать остальные субменю снова menupopup?
Это несложно. Если там, где ты «заменил menupopup на panel»
заменить обратно на menupopup и добавить в массив пятый элемент "panel",
а во вкладке Справка заменить самый первый ноль, соответственно, на четыре,
то на panel изменится только попап с кнопками.
Но menupopup какой-то жадный до клавиш, впрочем
можно попробовать оставить panel, а прокрутку как у menupopup
к panel добавить каким-нибудь биндингом.
Плавающая панель очень неспешно (а вернее, только если шевельнуть мышью и снова на секунду-другую остановить) возвращается к границе формы после прокрутки страницы. Можно ли сделать, чтоб она чаще корректировала свое положение?
Не знаю. Но, например, есть метод moveToAnchor.
Можно его на листенеры повесить, но это сложно,
поскольку скролл, зум, ресайз, и всё такоё.
А можно повесить на интервал, но, сам понимаешь, интервал есть интервал.
Если листенер на focus, то как закрывать ее?
Да, focus это стрёмно. Может осторожно попробуй дописать вместо своего
(listener => { addEventListener("focus", listener, true, gBrowser); addDestructor(() => listener.textarea && listener.destroy()); })({ position: "before_end", updatePositionInterval: 100, handleEvent(e) { if (!this.isTarget(e.target)) return; var xblURL = "data:application/xml," + encodeURIComponent(` <bindings xmlns="http://www.mozilla.org/xbl" xmlns:xul="${xulns}"> <binding id="${'CB' + _id.slice(20) + '-bbc-panels'}" role="xul:menupopup" extends="chrome://global/content/bindings/popup.xml#panel"> <content> <xul:arrowscrollbox class="popup-internal-box" flex="1" orient="vertical" smoothscroll="false"> <children/> </xul:arrowscrollbox> </content> </binding> </bindings> `.trim().replace(/>\s+</g, "><")); for(var subPopup of this.subPopups) subPopup.nodeName == "panel" && subPopup.style.setProperty("-moz-binding", `url("${xblURL}")`, "important"); this.handleEvent = e => this[e.type](e); this.init(e.target); }, isTarget(node) { return node instanceof HTMLTextAreaElement && !node.readOnly && node.ownerDocument.defaultView.top == content; }, focus(e) { !this.textarea && this.isTarget(e.target) && this.init(e.target); }, init(textarea) { this.textarea = textarea; popup.setAttribute("noautohide", true); this.intervalId = setInterval(() => this.moveToAnchor(), this.updatePositionInterval); popup.firstChild.addEventListener("popuphiding", this, false); popup.addEventListener("mousedown", this, true); popup.openPopup(textarea, this.position); setTimeout(() => textarea.focus() || textarea.addEventListener("blur", this, false), 0); }, destroy() { popup.removeAttribute("noautohide"); clearInterval(this.intervalId); this.textarea.removeEventListener("blur", this, false); popup.firstChild.removeEventListener("popuphiding", this, false); popup.removeEventListener("mousedown", this, true); popup.hidePopup(); for(var subPopup of this.subPopups) subPopup.state == "open" && subPopup.hidePopup(); this.textarea = null; }, moveToAnchor() { popup.moveToAnchor(this.textarea, this.position); for(var subPopup of this.subPopups) subPopup.anchorNode && subPopup.moveToAnchor(subPopup.anchorNode); }, get subPopups() { delete this.subPopups; return this.subPopups = [...popup.querySelectorAll("popupset > :first-child")]; }, blur(e) { !popup.matches(":hover") ? this.destroy() : setTimeout(() => this.textarea.ownerDocument.defaultView.top != content || this.textarea.ownerDocument.visibilityState == "hidden" ? this.destroy() : this.textarea.focus() , 0); }, popuphiding(e) { popup.matches(":hover") && e.preventDefault(); }, mousedown() { var subPopup = popup.querySelector(`#${popup.id} > hbox > button:hover + popupset > :first-child`); if (!subPopup || subPopup.state != "open") return; var parent = subPopup.parentNode; subPopup.remove(); setTimeout(() => parent.appendChild(subPopup), 100); } });
Отсутствует
Infocatcher
Давным-давно пользуюсь кнопкой Back_to_Close, и всё никак не спрошу...
А можно сделать так, чтобы она не изменяла дефолтный вид BACK-стрелки, т.е. когда "Go Back" возврата больше нет, стрелка тускнеет. (?)
Отсутствует
А можно сделать так, чтобы она не изменяла дефолтный вид BACK-стрелки, т.е. когда "Go Back" возврата больше нет, стрелка тускнеет. (?)
По идее (лень тестовый профиль запускать ), там достаточно стили убрать вот эти:
https://github.com/Infocatcher/Custom_B … #L144-L163
И вот тут еще убрать:
https://github.com/Infocatcher/Custom_B … #L184-L187
Отредактировано Infocatcher (24-05-2016 19:50:52)
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
Infocatcher
Спасибо.
Помогло, но Back становится перманентно черным, а не серым (тусклым).
Я, в меру своего понимания, могу предположить, что так и будет, потому что функция закрытия при нажатии Back активна, соответственно, и стрелка "активного" цвета.
Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.
(оставшихся хоткея и/или боковых кнопок мыши хватит с лихвой).
Отсутствует
Помогло, но Back становится перманентно черным, а не серым (тусклым).Я, в меру своего понимания, могу предположить, что так и будет, потому что функция закрытия при нажатии Back активна, соответственно, и стрелка "активного" цвета.Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.(оставшихся хоткея и/или боковых кнопок мыши хватит с лихвой).
В общем, пока придумал такой воркераунд, без удаления стиля из кнопки.
Взял из chrome://browser/skin/Toolbar.png иконку, перегнал ее в base64, и с добавлением opacity: 0.4 получил желаемый результат.
За подсказку про opacity спасибо okkamas_knife.
Отсутствует
thrower
Хм, ну тогда и правда проще там в стилях поправить, потому как серая отключенная кнопка не будет нажиматься.
Вот так можно сделать:
var cssStr = '\ @namespace url("http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul");\n\ @-moz-document url("' + window.location.href + '") {\n\ #back-button[_cb_backToClose] > .toolbarbutton-icon {\n\ opacity: 0.4 !important;\n\ }\n\ }';
(заменить там аналогичный var cssStr = ...)
А иконку и не трогать вовсе, пусть оригинальная висит.
Если так, то возможно ли тогда (если не сложно) убрать весь блок, отвечающий конкретно за закрытие таба при нажатии Back.
Да там все равно идет вмешательство в функции браузера насчет переходов назад и обновления состояния кнопок и пунктов меню, что-то отдельное сделать сложнее, чем все разом.
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует