Называется расширение Total bookmarks, т.к. его интерфейс почти полностью позаимствован у Total commander’а.
Зачем вообще его нужно было делать?
Действительно, многие люди складывают закладки в заранее созданные папки и никогда не сталкиваются с завалами, в которых трудно что-то найти. К сожалению, в один прекрасный момент я осознал, что к ним не отношусь. Если мне попадается интересная статья, которую сейчас некогда читать, то я складываю закладку прямо в корень, чтобы не забыть, а потом забываю и про саму статью и про закладку. И однажды, прокручивая список закладок около 15 секунд я понял, что пора разобраться с этим завалом. Проблема была в том, что стандартный интерфейс Firefox совершенно не приспособлен для таких задач. Например если я захочу важные закладки переместить из конца списка в начало, то придется тянуть их мышкой теже 15 секунд или больше. А учитывая, сколько у меня накопилось закладок, весь процесс мог занять часы с таким темпом. Единственным удобным интерфейсом в этой ситуации мне показался двухпанельных интерфейс TC, а никаких реализаций его на просторах интернета я найти не смог. Собственно так лень перед тупой и нудной работой по перетаскиванию закладок мышкой заставила меня потратить гораздо большее количество времени на более интеллектуальную работу, которая решит проблему раз и навсегда.
Почему такой странный (и многие скажут тормозной) выбор, как ExtJS?
Дело в том, что стандартный XUL, хоть и быстрый, но крайне бедный и нерасширяемый. Например мне понадобилась таблица, строки которой могут содержать многострочный текст с разным форматированием для каждой из этих строк. В багтрекере Firefox даже есть задача: сделать строки таблицы многострочными, но висит она там много лет, а самому такую поддержку добавить невозможно. Кроме того, по богатству палитры компонентов с ExtJS врядли сравниться какая-то другая библиотека. Ну и кроме того в тот момент я как раз её осваивал в связи с другим проектом.
Есть конечно у ExtJS один серьезный недостаток, который существенно портит жизнь. И я не про тормознутость, с которой борются и сами разработчики, и при правильном использовании которую можно минимизировать или вообще скрыть. Я про негласную политику Sencha: не выпускать релиз, пока в проект не будет добавлено фиксированное (и не такое уж незначительное) количество багов, с которыми вам, как пользователю библиотеки придется разбираться самостоятельно. Даже если вы активно пишите багрепорты, то не стоит думать, что с выходом новой версии что-то изменится, т.к. *см. негласную политику компании 🙂
Тем не менее плюсы перевешивают минусы.
О функционале
Почти весь функционал виден на скриншоте. Расширение в основном предназначено для удобного манипулирования группами закладок. Перечислю некоторые основные моменты:
- Работа может вестись полностью с клавиатуры, т. к. есть куча горячих клавиш на все случаи жизни.
- Работа может происходить только мыщью, т. к. есть drag & drop и чекбоксы в каждой строке.
- Есть возможность открыть группу закладок удобнее, чем в стандартном интерфейсе (т. к. там либо один элемент, либо всю папку).
- Кроме того изменено поведение, которое всегда раздражало в TC: выделение со строк не снимается, если вы переходите в другую папку; также есть возможность в один клик открыть в соседней панели ту же папку, что и в текущей.
- Расширение следит за изменениями в составе закладок и автоматически синхронизируется, поэтому вам за этим следить не надо. Кроме того, за счет буферизации всех изменений, не возникает проблем или заметных тормозов при работе других расширений типа Xmarks.
Отдельно только хочу отметить, что тестирование под macOS проводил после готовности почти всего функционала (точнее на хакинтоше под виртуалкой, т. к. мака под рукой не было) и заметил, что F9, назначенная на удаление в маке уже занята чем-то системным, поэтому маководам надо будет нажимать ещё ctrl. Если у кого-то F9 не перехватывается, то будет работать как и на других осях.
Немного о реализации
Как известно, напрямую использовать большинство JS-библиотек в XUL не получится. Есть некоторые форки для jQuery и пр., но всё это далеко от стабильного результата. Однако есть выход для тех расширений, которые не взаимодействуют посредством подключаемых библиотек с XUL-частью интерфейса. Нужно просто создать iframe на все окно и в нем уже работать с обычным html и привычными JS-библиотеками.
Для сборки в документации Mozilla предлагается использовать make, но т. к. я до этого работал с gradle, то использовал его. Считаю, что он в любом случае удобнее, т. к. можно прямо в скрипте подключать стандартные java-библиотеки. В моем случае, я даже не знаю на чем ещё можно было бы реализовать сборку без написания отдельных утилит, т. к. пришлось делать простую замену SenchaCMD по причине *см. негласную политику компании Sencha.