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

Хотите узнать больше о расширениях? Посмотрите ролики, рассказывающие о работе с расширениями Firefox.

№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
Сообщений: 2447
UA: Firefox 42.0

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

foraldo пишет:

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

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

Отсутствует

 

№2809-08-2015 12:23:00

bunda1
Moderator
 
Группа: Moderators
Откуда: Латвия
Зарегистрирован: 09-02-2010
Сообщений: 4620
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]Удалить дубликаты закладок

скрытый текст
https://dl.dropboxusercontent.com/u/22024366/Service/dupl.bmp

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

Отсутствует

 

№3001-11-2015 13:18:53

voqabuhe
Участник
 
Группа: Members
Зарегистрирован: 06-12-2011
Сообщений: 2447
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
Сообщений: 21
UA: Firefox 47.0

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

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

Отсутствует

 

Board footer

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