>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Работа со вкладками в Thunderbird 3 http://forum.mozilla-russia.org/viewtopic.php?id=42392 |
questor > 19-12-2009 13:15:53 |
Установил себе свежевыпущенный Thunderbird 3, полюбовался вкладками и пошёл искать расширение аналогичное расширению Павла Власова Close Tab by Double Click для Firefox. И не нашёл. Не так-то и всё просто, как казалось. 19-12-2009 13:20:34 Выделить код Код:<?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 |
Infocatcher > 19-12-2009 19:00:57 |
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(); } |
questor > 19-12-2009 19:06:31 |
О, какое простое и изящное решение! Спасибо. 19-12-2009 19:12:22 |
Rosenfeld > 19-12-2009 19:46:25 |
О, какое большое спасибо, как не хватало! Так выложите его на АМО - люди только обрадуются! И за ссылочку на Close Tab by Double Click - тоже моя благодарность. Скорее всего, потестирую и включу в свою сборку. До этого у меня с целью исполнения ТОЛЬКО этой функции стояло TabclickingOptions, но оно давно уже не обновлялось, а в TabMixLite CE слишком много ненужного пользователям функционала. |
questor > 19-12-2009 20:14:53 |
Выложил на AMO: https://addons.mozilla.org/ru/thunderbird/addon/55539 |
Rosenfeld > 19-12-2009 20:31:41 |
+1 Хорошо, что сделали его пока что экспериментальным: может выявится конфликт с другими дополнениями или утечка памяти. Пусть себе потестируется. |