У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так?
Добавлено 09-08-2015 11:19:17
Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок( 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)
Отсутствует
У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так?
Что бы сказать, что ты делаешь не так, надо знать, что ты вообще делаешь.
Отсутствует
Положил код в инициализацию, кнопка есть, но как заставить её работать?
Для начала спрячь своё безобразие под spoiler, или сделай превьюшку. А потом скажи, как ты пытаешься "заставить её работать"?
Отредактировано voqabuhe (01-11-2015 13:19:24)
Отсутствует
Не работает код, нет такого пункта ни в контекстном меню, ни в меню закладок, нигде. Ну и сама кнопка, если ее создать и вытащить на панель, не работает, во всяком случае в х64
Отсутствует