Страницы: 1
Установил себе свежевыпущенный Thunderbird 3, полюбовался вкладками и пошёл искать расширение аналогичное расширению Павла Власова Close Tab by Double Click для Firefox. И не нашёл.
Удивился сильно (вроде не самая сложная вещь), пожал плечами и пошёл писать своё.
Не так-то и всё просто, как казалось.
Добавлено 19-12-2009 13:20:34
Посмотрел tabmail.xml и пару расширений, которые работают с вкладками в TB (скажем, Fast Close Tabs или New Tab King) и написал самый простой вариант:
<?xml version="1.0"?> <overlay id="CloseTabByDoubleClick-overlay" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> <script type="application/x-javascript"> <![CDATA[ var closeTabByDoubleClick = { init : function() { let tabmail = document.getElementById('tabmail'); tabmail.addEventListener('dblclick', closeTabByDoubleClick.clicked, false); }, clicked : function() { let tabmail = document.getElementById('tabmail'); tabmail.removeCurrentTab(); } } window.addEventListener('load', closeTabByDoubleClick.init, false); ]]> </script> </overlay>
В этом варианте плохо то, что обработчик навешивается на слишком большой объект - tabmail. Щелкаешь дважды по письму - оно открывается и тут же закрывается. Если же аккуратно открыть письмо (правый клик в списке, затем выбрать в попапе "открыть в другой вкладке"), то письмо открывается и его можно закрыть двойным щелчком по любому месту панели (самому табу, по свободному месту).
Сижу вот, перечитываю tabmail.xml и пытаюсь понять - то ли ковырять в сторону удаления события после обработки двойного клика в "ненужных" местах, толи куда-то перевешивать обработчик (в цикле для всех вкладок добавлять обработчики двойного клика?) в другое место.
Есть какие-либо идеи?
Добавлено 19-12-2009 13:38:40
Плюс, оказывается, кликать по пустому месту на панели - не самый лучший вариант, гораздо лучше реализовывать двойной клик только по самой вкладке. Дело в том, что tabmail.removeCurrentTab в случае фокуса на вкладке со списком ящиков не закрывает её.
Отредактировано questor (19-12-2009 13:30:19)
Отсутствует
questor
Как-то так, наверное:
isTab: function(node) { for(; node; node = node.parentNode) if(node.localName == "tab") return true; return false; }, clicked : function(event) { if(!closeTabByDoubleClick.isTab(event.originalTarget)) // В данном случае this не указывает на closeTabByDoubleClick return; let tabmail = document.getElementById('tabmail'); tabmail.removeCurrentTab(); }
Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела
Отсутствует
О, какое простое и изящное решение! Спасибо.
Добавлено 19-12-2009 19:12:22
Собралось без проблем. Если кому-то надо - выложил себе на сайт.
Отредактировано questor (19-12-2009 20:16:48)
Отсутствует
О, какое большое спасибо, как не хватало!
Так выложите его на АМО - люди только обрадуются!
И за ссылочку на Close Tab by Double Click - тоже моя благодарность. Скорее всего, потестирую и включу в свою сборку. До этого у меня с целью исполнения ТОЛЬКО этой функции стояло TabclickingOptions, но оно давно уже не обновлялось, а в TabMixLite CE слишком много ненужного пользователям функционала.
Project Rosenfox: Pure, fast and secure inner settings for Mozilla Firefox. Global and complete manual on GitHub.
Отсутствует
+1
Хорошо, что сделали его пока что экспериментальным: может выявится конфликт с другими дополнениями или утечка памяти. Пусть себе потестируется.
Project Rosenfox: Pure, fast and secure inner settings for Mozilla Firefox. Global and complete manual on GitHub.
Отсутствует
Страницы: 1