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

Пользователи не любят читать документацию. Станьте оригинальным, будьте не как все. Ознакомьтесь с нашей базой знаний.

№108-08-2016 20:50:48

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

[CB]Открыть все закладки из одного сайта

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

Выделить код

Код:

// Открыть все закладки из одного сайта, от 03.08.2016. ..................
(()=> {
   var deletePlaces = false;   // удалять закладки 
   var notLoading = true;      // открывать закладки не загружая страниц
   var showAlert = false;      // показать в сообщение количество открытых закладок
   var maxOpenBook = 30;       // максимальное количество одновременно открываемых закладок

   var library = "chrome://browser/content/places/places.xul";
   var alertsService = Cc["@mozilla.org/alerts-service;1"].getService(Ci.nsIAlertsService);  


   // Создать новый пункт в контекстном меню закладок ....
   function setMenuitem(doc) {
      var sep = doc.getElementById("placesContext_openSeparator");
      var con = doc.getElementById('placesContext');
      var mItem = con.insertBefore(document.createElement("menuitem"), sep);
      mItem.setAttribute("label", "Открыть все закладки из одного сайта");
      //mItem.setAttribute("class", "menuitem-iconic");
      //mItem.setAttribute("src", "chrome://custombuttons/skin/stdicons/rbutton.png");
      mItem.setAttribute("selectiontype", "any");
      mItem.setAttribute("hideifnoinsertionpoint", "true");
      mItem.onclick =()=> openPlaces(doc, mItem);
      addDestructor(()=> mItem.remove());
   };
   setMenuitem(document);
   
   
   // Открыть все закладки домен которых совпадает с доменом выделенный закладки ....
   function openPlaces(doc, mItem) {
      var node = PlacesUIUtils.getViewForNode(doc.popupNode).selectedNode;
      var domain = getDomain(node.uri);
      var array = [];

      // получить массив с данными о закладках домен которых совпадает с доменом выделенный закладки
      function chooseBookmarks(id = 1) {
         var folder = PlacesUtils.getFolderContents(id).root;

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

         for ( var i = 0; i < folder.childCount; i++ ) {
               var child = folder.getChild(i), uri = child.uri;
   
               PlacesUtils.nodeIsFolder(child)
               ? chooseBookmarks(child.itemId)
               : uri.startsWith("http") && getDomain(uri) == domain && array.push(child);
               }
                       
         folder.containerOpen = false;
      }
      chooseBookmarks();

      // через подтверждение удалить все закладки id которых находится в массиве
      deletePlaces && alertsService.showAlertNotification(mItem.getAttribute('src') || self.image, "Кликни чтобы удалить все " + array.length + " закладки сайта закладки!", domain, true, "", (s, t)=> { 
         t == 'alertclickcallback' && array.forEach(m=> PlacesUtils.bookmarks.removeItem(m.itemId));
      }, "");
      
      // открыть закладки из массива в вкладках, с паузами если закладок очень много
      function f() {
         for ( var i = 0; i < array.length; ++i ) {
               var {uri, title, icon} = array[i];    
               
               // добавить вкладку с указанными данными не загружая страницу
               if ( notLoading ) {
                   var tab = gBrowser.addTab();
                   var ss = Cc["@mozilla.org/browser/sessionstore;1"].getService(Ci.nsISessionStore);
                   ss.setTabState(tab, JSON.stringify({entries: [{ url: uri, title: (!title ? uri : title)}], lastAccessed: 0, index: 1, hidden: false, attributes: {} }));
                   icon && tab.setAttribute("image", icon);
                   }
               else 
                   gBrowser.addTab(uri); // добавить вкладку загружая страницу

               // пауза в цикле через установленное количество циклов 
               if ( i && i % maxOpenBook == 0 ) {
                    setTimeout(()=> gen.next(), 150);
                    yield 0;
                    }
               
               // всплывающая подсказка показывает количество открытых закладок    
               if ( showAlert && !deletePlaces && array.length == i+1 && i > maxOpenBook )
                    alertsService.showAlertNotification(mItem.getAttribute('src') || self.image, "Открыл " + array.length + " закладки", null);
               }
               yield 0;
      }
      var gen = f();
      gen.next(); 
   };
   
   
   // Получить домен из адреса ....
   function getDomain(uri) { 
      try { return Services.eTLD.getBaseDomain(Services.io.newURI(uri, null, null)) } 
      catch(e) { return "" };
   };


   // Наблюдатель следит за открытием библиотеки в окне и добавляет там новый пункт в контекстном меню закладок ....
   function observer(subject) {
      subject.addEventListener("load", (e, doc = e.target)=> {
         doc.URL == library && setMenuitem(doc);
      });
   };
   Services.ww.registerNotification(observer);
   addDestructor(()=> Services.ww.unregisterNotification(observer) );


   // Обработчик следит за открытием библиотеки в вкладке и добавляет там новый пункт в контекстном меню закладок ....
   addEventListener("DOMContentLoaded", (e, doc = e.target)=> {
      doc.location == library && !doc.hidden && setMenuitem(doc);
   }, false, gBrowser);
})();

Отсутствует

 

№210-08-2016 09:25:44

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: [CB]Открыть все закладки из одного сайта

bunda1 пишет

Kод добавляет в контекстное меню закладок новый пункт Открыть все закладки из одного сайта

Добрый день. Установил кнопку всё работает корректно , открывает все закладки из одного сайта. Но есть небольшая проблема , закладки вызывает но не загружает, пока не откроешь вкладку. Очень похоже на режим " Не загружать без запроса ". Как сделать загрузку открываемых закладок сразу после команды "Открыть все закладки из одного сайта". Заранее спасибо.

Отсутствует

 

№310-08-2016 10:48:50

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

Re: [CB]Открыть все закладки из одного сайта

Duche пишет

Как сделать загрузку открываемых закладок сразу после команды "Открыть все закладки из одного сайта".

В вначале кода в:

Выделить код

Код:

var notLoading = true;      // открывать закладки не загружая страниц

Измени true на false

Отсутствует

 

№410-08-2016 11:14:49

Duche
Участник
 
Группа: Members
Зарегистрирован: 07-02-2016
Сообщений: 208
UA: Firefox 38.0

Re: [CB]Открыть все закладки из одного сайта

bunda1 пишет

Измени true на false

Отлично . Спасибо за работу!

Отсутствует

 

Board footer

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