Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№103-08-2014 15:59:02

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

[CB]Удалить дубликаты закладок

Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок( Firefox 17 + )
Автор: bunda1
Версия: от 09.08.2014.
Описание: Kод добавляет новый пункт Удалить дубликаты закладок в меню папок закладок, который удаляет все закладки которые дублирует по адресу закладки из проверяемой папки и также показывает количество удалённых дубликатов в всплывающей подсказке.
Использование: положите код в любую Custom Buttons кнопку, в инициализацию. Не обязательно создавать новую CB кнопку, можно использовать уже существующую.

Выделить код

Код:

// Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок, от 09.08.2014. ................................
(function() {
   // Создать новый пункт в меню ....
   var menuitem = document.createElement("menuitem");
   menuitem.id = "placesContext_deleteDuplicates";
   menuitem.setAttribute("label", "Удалить дубликаты закладок");
   menuitem.setAttribute("selection", "folder");
   menuitem.setAttribute("closemenu", "single");   
  
   menuitem.setAttribute("oncommand", "this.run(document)"); // если клик или команда на пункте меню
   menuitem.run = function(doc) {      
      // получить Id и контент папки закладок  
      var node = PlacesUIUtils.getViewForNode( doc.popupNode ).selectedNode;
      var checkFolderId = node.folderItemId ? node.folderItemId : node.itemId;
      var contents = PlacesUtils.getFolderContents( checkFolderId, false, false ).root;
      
      // создать список закладок проверяемый папки, удалить дубликаты закладок в проверяемой папке
      for ( var checkList = [], deleted = 0, i = 0; i < contents.childCount; ++i ) {
            var item = contents.getChild(i); 
            var uri = item.uri.replace(/\/$/,""); //       
                         
            if ( !PlacesUtils.nodeIsSeparator( item ) && checkList[uri] )             
                 PlacesUtils.bookmarks.removeItem( item.itemId ), i--, deleted++;
            checkList[uri] = true;
            }            
            
      // сравнить все закладки( кроме закладок проверяемой папки ) со списоком для проверки и удалить дубликаты
      function chooseBookmarks( folderId ) {
         var folder = PlacesUtils.getFolderContents( folderId ).root;

         folder.QueryInterface(Ci.nsINavHistoryContainerResultNode);
         folder.containerOpen = true;

         for ( var i = 0; i < folder.childCount; i++ ) {
               var child = folder.getChild(i);
               var uri = child.uri.replace(/\/$/,""); 
                              
               if ( PlacesUtils.nodeIsFolder( child ) && folderId !== PlacesUtils.tagsFolderId )
                    chooseBookmarks( child.itemId );
               else          
                    if ( !PlacesUtils.nodeIsSeparator( item ) && folderId !== checkFolderId && checkList[uri] )
                         PlacesUtils.bookmarks.removeItem( child.itemId ), i--, deleted++;
               }
                       
         folder.containerOpen = false;
      }
      chooseBookmarks(1);      

      // показать количество удалённых дубликатов в всплывающей подсказке ....       
      switch( deleted ) {
         case 0: var notification = "Дубликаты закладок не обнаружены"; break;
         case 1: var notification = "Удален: " + deleted + " дубликат закладок"; break;
         default: var notification = "Удалены: " + deleted + " дубликата закладок";
      }                        
      custombuttons.alertSlide( notification, '');  
   };
   
  
   // Добавить новый пункт во все меню папок закладок ....
   function handlePopup(e) {     
      var node = e.target;
      if ( node.id !== 'placesContext' ) return;
      
      var sortByName = node.getElementsByAttribute("id", "placesContext_sortBy:name")[0];    
      setTimeout(function() { menuitem.setAttribute("disabled", sortByName.disabled ) }, 50 ); // отключать, если 'Сортировать по имени' отключено 
      
      if ( node.getElementsByAttribute("id", "placesContext_deleteDuplicates")[0] ) return;    // блокировать дублирование пункта    
      node.insertBefore( menuitem, sortByName );            
   };     
   addEventListener("popupshowing", handlePopup, true, window );
   addDestructor(function() menuitem.parentNode && menuitem.parentNode.removeChild(menuitem) );   
      

   // Добавить новый пункт во все меню папок закладок библиотеки ....
   function winObs( subject ) {  
   
      subject.addEventListener("load", function(e) {
         this.removeEventListener( e.type, arguments.callee );         
         
         if ( subject.location.href !== 'chrome://browser/content/places/places.xul' ) return; // стоп, если не библиотека        

         // добавлять и удалять обработчик для добавления в меню папок закладок новый пункт
         addEventListener("popupshowing", handlePopup, true, subject );          
         this.addEventListener("unload", function(e) {
             this.removeEventListener(e.type, arguments.callee );
             removeEventListener("popupshowing", handlePopup, true, subject );
         })  
      })
   };
   Services.ww.registerNotification(winObs);
   addDestructor(function() { Services.ww.unregisterNotification(winObs) });
   
})();

Отредактировано bunda1 (09-08-2014 20:01:21)

Отсутствует

 

№203-08-2014 22:13:36

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 3231
UA: Firefox 34.0

Re: [CB]Удалить дубликаты закладок

bunda1
А она выбор даёт, какой из дубликатов удалить, или сама решает?

Отсутствует

 

№303-08-2014 23:04:56

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

voqabuhe пишет

bunda1
А она выбор даёт, какой из дубликатов удалить, или сама решает?

Выбора нет, смысл в том чтобы закладка с уникальном адресом была только той папке из контекстного меню которой запущен код.

Отсутствует

 

№404-08-2014 11:40:18

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

А URLы типа http://aaa/bbb/ccc и http://aaa/bbb/ccc/ он рассматривает как один URL или нет?


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№504-08-2014 12:05:00

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor пишет

А URLы типа http://aaa/bbb/ccc и http://aaa/bbb/ccc/ он рассматривает как один URL или нет?

Интересно, но оказывается что нет. Спасибо, буду думать как исправить. Может еще будут замечания :)

Отсутствует

 

№605-08-2014 22:18:03

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor пишет

А URLы типа http://aaa/bbb/ccc и http://aaa/bbb/ccc/ он рассматривает как один URL или нет?

Исправил Удалить дубликаты закладок

Отсутствует

 

№705-08-2014 23:54:23

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

Проблема дупликатных закладок в том, что их может быть много и юзер не знает толком где они.
Эта проблема усугубляется тем, что при древовидной иерархической структуре фолдеров их тоже может быть много да ещё с различной степенью вложенности.
В этой связи у меня есть 2 вопроса и 1 предложение.
Вопросы:
1. Проверяются только закладки фолдера или его подфолдеров тоже?
Если только фолдера без подфолдеров то почистить все закладки - можно умаяться.
Если же рекурсивно, то толком не знаешь где осталась закладка, а где - уничтожили.
2. Если в одном фолдере имеются дупликаты - что происходит?

Предложение: если некоторая закладка продублирована в фолдерах Ф1, Ф2 и Ф3 и удаляются закладки в фолдерах Ф2 и Ф3, то было бы полезно, чтобы оставшаяся в фолдере Ф1 закладка получала бы метки Ф2 и Ф3.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№806-08-2014 10:22:50

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor

1. Проверяются только закладки фолдера или его подфолдеров тоже

Проверяются подфолдеров тоже, в общем проверяется все закладки.

2. Если в одном фолдере имеются дубликаты - что происходит?

Тоже удаляются. Смысл в том чтобы одна закладка с уникальном адресом была только той папке из контекстного меню которой запущен код.
Похоже что описание кода не удалась, раз такие вопросы.

Предложение: если некоторая закладка продублирована в фолдерах Ф1, Ф2 и Ф3 и удаляются закладки в фолдерах Ф2 и Ф3, то было бы полезно, чтобы оставшаяся в фолдере Ф1 закладка получала бы метки Ф2 и Ф3.

Я подумаю что тут можно сделать, хотя это сильно усложнит код. И разве возможны две метки у закладки?

Отсутствует

 

№906-08-2014 12:47:49

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

okkamas_knife
Понятно, а зачем нужны метки?

Отсутствует

 

№1006-08-2014 15:33:03

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

Сгенерировать таблицу в новой странице + галочку - перенос меток. Можно попробовать, хотя я не знаю как сделать такую страницу.

Отсутствует

 

№1106-08-2014 21:19:42

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

okkamas_knife
Спасибо, посмотрим что у меня получится.

Отсутствует

 

№1207-08-2014 15:51:17

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

bunda1 пишет

okkamas_knife
Понятно, а зачем нужны метки?

Метки - это некая альтернатива фолдерам - можно искать по меткам, а можно - по фолдерам.
Допустим, у меня есть фолдер "Животные" и фолдер "Актуалии".
Куда поместить закладку о молодом жирафе, которого умертвили в датском зоопарке потому что не могли найти ему пару?
По идее - в "Животные". Но сама проблема - актуальна...


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1309-08-2014 02:01:58

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor пишет

Метки - это некая альтернатива фолдерам - можно искать по меткам, а можно - по фолдерам.

Firefox дублирует закладки с метками в папке Метки, открой Библиотеку и увидишь.

Отсутствует

 

№1409-08-2014 09:49:16

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

bunda1 пишет
difabor пишет

Метки - это некая альтернатива фолдерам - можно искать по меткам, а можно - по фолдерам.

Firefox дублирует закладки с метками в папке Метки, открой Библиотеку и увидишь.

Это - результат поиска по меткам, а не дублирование.
Папка "Метки" - это псевдопапка, как впрочем, и псевдопапки меток внутри этой папки
Именно поэтому я и предложил добавлять имя фолдера как метку.


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1509-08-2014 14:57:57

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

Это - результат поиска по меткам, а не дублирование

Я по меткам поиск не вёл, но добавлял закладкам метки и они дублировались в папке Метки.

Именно поэтому я и предложил добавлять имя фолдера как метку.

Не было такого предложения, или ты сейчас предлагаешь, ну тогда поясни пожалуйста.

Отсутствует

 

№1609-08-2014 15:47:40

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

когда ты открываешь в библиотеке папку с метками и выбираешь какуюто метку то происходит поисковый запрос к базе по этой метке и справа тогда выводятся результаты поиска

А вот и нет, мой код удаляет закладки из папки Метки именно как дубликаты и после этого метка у проверяемой закладки удаляется.

если я правильно понял difabor действие должно быть таким
имеем три одинаковых закладки в папках ааа ббб ссс
удаляем те что в папках ббб ссс а закладке в папке ааа присваиваем метки ббб и ссс
зы имхо это неудобно и создаст перегруженность метками впрочем тебе решать

Я думаю легче будет просто не удалять закладки с метками.

Отсутствует

 

№1709-08-2014 17:46:56

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

bunda1 пишет

когда ты открываешь в библиотеке папку с метками и выбираешь какуюто метку то происходит поисковый запрос к базе по этой метке и справа тогда выводятся результаты поиска

А вот и нет, мой код удаляет закладки из папки Метки именно как дубликаты и после этого метка у проверяемой закладки удаляется.

Это нехорошо.
При таком подходе у закладок будут убраны все метки. Ведь метка не может быть в вакууме. Закладка с меткой всегда находится в каком-то фолдере/папке
Кстати, есть ещё псевдопапки "Недавно добавленные" и "Последние метки", если кнопка и их чистит, то это тоже нехорошо.

bunda1 пишет

если я правильно понял difabor действие должно быть таким
имеем три одинаковых закладки в папках ааа ббб ссс
удаляем те что в папках ббб ссс а закладке в папке ааа присваиваем метки ббб и ссс
зы имхо это неудобно и создаст перегруженность метками впрочем тебе решать

Я думаю легче будет просто не удалять закладки с метками.

Это снизит эффективность удалителя дупликатов.
По идее надо исключить просмотр псевдопапок, т.е. папок, имеющих родительской псевдопапку "Метки" а также "Недавно добавленные" и "Последние метки".
Кроме того надо все атрибуты удаляемых закладок (в частности, метки) добавлять в оставляемую закладку, добавив метку с именем папки/папок из которых эта закладка была удалена.
Насчёт перегрузки метками - не думаю, что это критично. Конечно, при добавлении меток надо проследить, чтобы они не дублировались.

Отредактировано difabor (09-08-2014 17:57:18)


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№1809-08-2014 18:12:21

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

При таком подходе у закладок будут убраны все метки. Ведь метка не может быть в вакууме. Закладка с меткой всегда находится в каком-то фолдере/папке

Я как раз работаю над этим.

Кроме того надо все атрибуты удаляемых закладок (в частности, метки) добавлять в оставляемую закладку, добавив метку с именем папки/папок из которых эта закладка была удалена.

Насчёт добавления атрибутов удаляемых закладок согласен но зачем метка с именем папки/папок.

Кстати, есть ещё псевдопапки "Недавно добавленные" и "Последние метки", если кнопка и их чистит, то это тоже нехорошо.

Не чистит.

Добавлено 09-08-2014 18:20:43
difabor
Упс, похоже у закладок с одинаковым адресом метки автоматически одинаковые :D

Отредактировано bunda1 (09-08-2014 18:22:06)

Отсутствует

 

№1909-08-2014 20:23:25

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor
Я исправил проблему с меткам 03-08-2014 14:59:02, думаю остальные атрибуты переносить не имеет смысла их мало кто использует.

Отсутствует

 

№2009-08-2014 20:44:06

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

bunda1 пишет

При таком подходе у закладок будут убраны все метки. Ведь метка не может быть в вакууме. Закладка с меткой всегда находится в каком-то фолдере/папке

Я как раз работаю над этим.

Кроме того надо все атрибуты удаляемых закладок (в частности, метки) добавлять в оставляемую закладку, добавив метку с именем папки/папок из которых эта закладка была удалена.

Насчёт добавления атрибутов удаляемых закладок согласен но зачем метка с именем папки/папок.

Кстати, есть ещё псевдопапки "Недавно добавленные" и "Последние метки", если кнопка и их чистит, то это тоже нехорошо.

Не чистит.

Добавлено 09-08-2014 18:20:43
difabor
Упс, похоже у закладок с одинаковым адресом метки автоматически одинаковые :D

Да, метки одинаковые... Что более чем странно...
Основной источник появления дубликатов - импорт закладок. Но тогда что происходит с метками - неясно...
Теперь - попробую ответить на вопрос "зачем метка с именем папки/папок".
1. Сначала зададимся вопросом - а как вообще получились две закладки с одинаковым адресом в разных фолдерах?
а) Либо из-за импорта
б) Либо насильственным копированием.
Просто установкой закладки это невозможно.
В обоих случаях (а и б) эта закладка ассоциировалась с папками (фолдерами).
Если мы убираем закладку из одной из папок/фолдеров - вполне логично сохранить ассоциацию с её именем


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№2109-08-2014 20:50:07

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

Просто установкой закладки это невозможно.

Можно, смотря как устанавливать

Если мы убираем закладку из одной из папок/фолдеров - вполне логично сохранить ассоциацию с её именем

Да кто будет смотреть эти метки с именем папки/папок.

Отсутствует

 

№2209-08-2014 22:08:53

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

bunda1 пишет

Просто установкой закладки это невозможно.

Можно, смотря как устанавливать

Если мы убираем закладку из одной из папок/фолдеров - вполне логично сохранить ассоциацию с её именем

Да кто будет смотреть эти метки с именем папки/папок.

Тем, кто не пользуется метками - действительно это не нужно.
А те, кто пользуются - имеют соответствующие расширения, с соответствующими контекстными меню.
А вот как установить закладку, которая уже установлена - я не знаю...
Если с трюками - то всё можно, а если без трюков - то мне неизвестно...


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№2310-08-2014 01:50:05

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor пишет

А вот как установить закладку, которая уже установлена - я не знаю...
Если с трюками - то всё можно, а если без трюков - то мне неизвестно...

Пример:

Выделить код

Код:

// Двойным левым кликом на папке закладок добавлять закладку в папку закладок, от 12.05.2014. ................................
addEventListener("dblclick", function(e) {      
   var target = e.originalTarget;
              
   if ( e.button !== 0 || !target._placesNode || !PlacesUtils.nodeIsFolder( target._placesNode ) ) return;          
        var title = ( content.document.title || gBrowser.mCurrentTab.label ).slice(0, 100);
        var folderId = PlacesUtils.getConcreteItemId( target._placesNode );
        PlacesUtils.bookmarks.insertBookmark( folderId, gBrowser.currentURI, 0, title );  

        // всплывающая подсказка ....
        var icon = gBrowser.mCurrentTab.image || "chrome://global/skin/icons/Portrait.png";
        Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService)
        .showAlertNotification( icon, "Добавил в папку " + (target.label || "(без заголовка)") + ":", title );
});

Отсутствует

 

№2410-08-2014 10:46:21

difabor
Участник
 
Группа: Members
Зарегистрирован: 21-09-2013
Сообщений: 539
UA: Firefox 28.0
Веб-сайт

Re: [CB]Удалить дубликаты закладок

То есть для этого нужна специальная кнопка


Хорошо, когда у человека есть выбор, но плохо, когда он перед ним стоит ©

Отсутствует

 

№2510-08-2014 13:38:03

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4811
UA: Firefox 24.0

Re: [CB]Удалить дубликаты закладок

difabor пишет

То есть для этого нужна специальная кнопка

Можно в специальную кнопку или можно складывать в любую уже существующую кнопку.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]