Показать адрес существующей закладки при наведении на звездочку (Firefox Australis)

Автор: Inko7, bunda1, Dumby
Описание: Когда звездочка добавления в закладки показывает, что текущая открытая страница уже есть в закладках (звездочка закрашена), можно подвести курсор к звездочке и во всплывающей подсказке увидеть адрес (полный путь к папке) расположения этой закладки
Использование: создать новую CB кнопку или положить код в инициализацию другой кнопки

Выделить код

Код:

/*Initialization Code*/

// ПОКАЗАТЬ АДРЕС СУЩЕСТВУЮЩЕЙ ЗАКЛАДКИ ПРИ НАВЕДЕНИИ НА ЗВЕЗДОЧКУ

var starbutt = document.getAnonymousElementByAttribute(document.getElementById('bookmarks-menu-button'), "anonid", "button");

starbutt.onmouseover = function() {
    var {bookmarks, placesRootId, tagsFolderId} = PlacesUtils, result = [];
    for(var id of BookmarkingUI._itemIds) {
    var arr = [];
    while((id = bookmarks.getFolderIdForItem(id)) != placesRootId) {
        if (id == tagsFolderId) { arr = []; break; }
        arr.unshift(bookmarks.getItemTitle(id) || "(без заголовка)");
        }
    arr.length && result.push(arr.join("\\"));
    }
    if (result.join()) starbutt.tooltipText = "Адрес закладки:" + "\n" + result.join("\n");
};

Для старших версий, а также бравзера PaleMoon надобно заменить первую строку с переменной на:

Выделить код

Код:

var starbutt = document.getElementById('star-button');

Вроде бы с 44-й версии появился небольшой глюк:
если первый раз подвести курсор к звездочке, то выскакивает немного некорректный тултип
5685c31ceeaf.jpg
но если подвести второй раз и далее, то все отображается правильно
42420b7f3df3.jpg
если перейти на другую вкладку и вновь вернуться на эту, то история повторится - первый раз некорректный
и на пустой вкладке теперь отображается такое
bdf0f00b9b44.jpg
раньше была только первая строка, второй не было...
подскажите, что это за беда и как это починить

Inko7 пишет

раньше была только первая строка, второй не было...
подскажите, что это за беда и как это починить

Странно, но я такой глюк на FF45 не наблюдаю. И без твоего кода путь к закладке в подсказке не вижу месте с предложением редактировать.

bunda1
да, действительно, на пустом профиле код работает нормально
выяснил и оказалось, что как-то влияет дополнение Add Bookmark Here ² 41.0.20160302. Наверное, это оно обновилось и что-то поменялось...
Можно их как-то подружить?

Inko7 пишет

Можно их как-то подружить?

Я думаю что не нужно их подружить, потому что твой код дублирует возможность которую добавляет Add Bookmark. Но можешь просто заменить:

Выделить код

Код:

starbutt.tooltipText = "Адрес закладки:" + "\n" + result.join("\n");

на

Выделить код

Код:

starbutt.tooltipText = "Редактировать эту закладку (Ctrl+D)" + "\n➥" + result.join("\n➠");

bunda1
наверное мы немного о разном говорим...
начну с начала - изначально код должен показывать в тултипе путь к сохраненной закладке (если она сохранена)
например, вот так:
42420b7f3df3.jpg
и больше никаких других надписей
если закладка не сохранена, то тултип имел простой вид - "Добавить страницу в закладки..."
если звездочка неактивка (на пустой вкладке), то тултипа вообще не было
а теперь всё перемешалось...
наверняка виноват аддон, но он мне нужен...
вот и я спрашивал, как подружить код с аддоном, чтоб они друг другу не мешали...

Inko7 пишет

bunda1
наверное мы немного о разном говорим...
начну с начала - изначально код должен показывать в тултипе путь к сохраненной закладке (если она сохранена)
например, вот так:
http://s017.radikal.ru/i441/1603/36/42420b7f3df3.jpg
и больше никаких других надписей
если закладка не сохранена, то тултип имел простой вид - "Добавить страницу в закладки..."
если звездочка неактивка (на пустой вкладке), то тултипа вообще не было
а теперь всё перемешалось...
наверняка виноват аддон, но он мне нужен...
вот и я спрашивал, как подружить код с аддоном, чтоб они друг другу не мешали...

В  своё время я попросил автора аддона добавить индикацию пути к сохранённой закладке по наведению курсора. Ему тогда это понравилось и он добавил. Теперь это конфликтует с Вашей аналогичной функцией. Имхо, конечно.

difabor
разве Add Bookmark умеет показывать путь к закладке? никогда этого не знал
и что нужно для этого сделать, куда подвести? в настройках аддона ничего похожего не нахожу, поэтому и просил кнопкописателей помочь
всё прекрасно работало до недавнего времени...

06-03-2016 17:06:27
Да, действительно теперь есть такая функция у аддона! Автор добавил её как раз месяц назад...
Тогда вопрос по кнопке пока снимается...

Inko7 пишет

Тогда вопрос по кнопке пока снимается...

Ну вот, а я уже переделал код чтоб была как раньше:

Выделить код

Код:

BookmarkingUI.star.onmouseenter =e=> {
   var {bookmarks, placesRootId, tagsFolderId} = PlacesUtils, result = []; 
   for( var id of BookmarkingUI._itemIds ) {
        var arr = [];
        while((id = bookmarks.getFolderIdForItem(id)) != placesRootId) {
              if (id == tagsFolderId) { arr = []; break; }
              arr.unshift(bookmarks.getItemTitle(id) || "(без заголовка)");
              }
   arr.length && result.push(arr.join("\\"));
   }
   if (result.join()) e.target.tooltipText = "Адрес закладки:\n" + result.join("\n"); 
};

bunda1
А можно сделать, чтобы показывала адрес при наведение на вкладку, которая в закладках?

bunda1
Большое спасибо! :beer:
Для меня код привычнее, чем тултип аддона...

voqabuhe пишет

bunda1
А можно сделать, чтобы показывала адрес при наведение на вкладку, которая в закладках?

:/

Выделить код

Код:

// Показывать в подсказке вкладки адрес закладки в папках закладок, от 06.03.2016. .................
(()=> {
   var src = "gBrowser.createTooltip = " + gBrowser.createTooltip.toString(),
       res = src.replace('label);', 'label + getBookPath(tab));');
   eval(res);
   addDestructor(()=> eval(src) );

   function getBookPath(tab) {
      var {bookmarks, placesRootId, tagsFolderId} = PlacesUtils, result = [],
           uri = tab.linkedBrowser.currentURI;
      for( var id of PlacesUtils.getBookmarksForURI(uri) ) {
           var arr = [];
           while( id = PlacesUtils.bookmarks.getFolderIdForItem(id) ) {
                  if (id == PlacesUtils.placesRootId) break;
                  arr.unshift(bookmarks.getItemTitle(id) || "(без заголовка)");
                  }
           result.push(arr.join("\\"));
           }
      return str = result.join() ? "\n\nАдрес закладки:\n" + result.join("\n") : ""; 
   }
})();

bunda1
У классно как получилось. Спасибо.
ПС Попутно, а с этим делом можно что-нибудь сделать? №1121

Inko7
Можно положить:

Выделить код

Код:

result.sort((a, b)=> { return a.length - b.length });

перед:

Выделить код

Код:

if (result.join()) starbutt.tooltipText = "Адрес закладки:" + "\n" + result.join("\n");

тогда адреса закладок будет сортироваться по длине.