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

Будьте в курсе последних изменений в мире Mozilla, следя за нашим микроблогом в Twitter.

№2609-08-2015 11:14:20

foraldo
Участник
 
Группа: Members
Зарегистрирован: 09-08-2015
Сообщений: 1
UA: Firefox 39.0

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

У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так?

Добавлено 09-08-2015 11:19:17

bunda1 пишет

Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок( 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) });
   
})();

У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так?

Отредактировано foraldo (09-08-2015 11:19:17)

Отсутствует

 

№2709-08-2015 11:39:39

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

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

foraldo пишет

У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так?

Что бы сказать, что ты делаешь не так, надо знать, что ты вообще делаешь.:)

Отсутствует

 

№2809-08-2015 12:23:00

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

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

foraldo
Наверно код не туда положил, надо в инициализацию кнопки.

Отсутствует

 

№2901-11-2015 10:10:50

vitkit3
Участник
 
Группа: Members
Зарегистрирован: 09-08-2009
Сообщений: 10
UA: Firefox 41.0

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

скрытый текст
dupl.bmp

Положил код в инициализацию, кнопка есть, но как заставить её работать?

Отсутствует

 

№3001-11-2015 13:18:53

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

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

vitkit3 пишет

Положил код в инициализацию, кнопка есть, но как заставить её работать?

Для начала спрячь своё безобразие под spoiler, или сделай превьюшку. А потом скажи, как ты пытаешься "заставить её работать"?

Отредактировано voqabuhe (01-11-2015 13:19:24)

Отсутствует

 

№3101-01-2017 14:19:17

Михеша
Участник
 
Группа: Members
Зарегистрирован: 30-07-2011
Сообщений: 32
UA: Firefox 47.0

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

не работает что-то у меня

Отсутствует

 

№3227-10-2019 10:46:19

ARG
Лисолюб
 
Группа: Members
Зарегистрирован: 22-06-2005
Сообщений: 389
UA: unknown 0.0

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

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

Отсутствует

 

Board footer

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