>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Сustom Buttons http://forum.mozilla-russia.org/viewforum.php?id=34 >[CB]Удалить дубликаты закладок http://forum.mozilla-russia.org/viewtopic.php?id=64435 |
bunda1 > 03-08-2014 15:59:02 |
Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок( Firefox 17 + ) Выделить код Код:// Добавить новый пункт "Удалить дубликаты закладок" в меню папок закладок, от 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) }); })(); |
voqabuhe > 03-08-2014 22:13:36 |
bunda1 |
bunda1 > 03-08-2014 23:04:56 |
voqabuhe пишет
Выбора нет, смысл в том чтобы закладка с уникальном адресом была только той папке из контекстного меню которой запущен код. |
difabor > 04-08-2014 11:40:18 |
А URLы типа http://aaa/bbb/ccc и http://aaa/bbb/ccc/ он рассматривает как один URL или нет? |
bunda1 > 04-08-2014 12:05:00 |
difabor пишет
Интересно, но оказывается что нет. Спасибо, буду думать как исправить. Может еще будут замечания |
bunda1 > 05-08-2014 22:18:03 |
difabor пишет
Исправил Удалить дубликаты закладок |
difabor > 05-08-2014 23:54:23 |
Проблема дупликатных закладок в том, что их может быть много и юзер не знает толком где они. Предложение: если некоторая закладка продублирована в фолдерах Ф1, Ф2 и Ф3 и удаляются закладки в фолдерах Ф2 и Ф3, то было бы полезно, чтобы оставшаяся в фолдере Ф1 закладка получала бы метки Ф2 и Ф3. |
bunda1 > 06-08-2014 10:22:50 |
difabor
Проверяются подфолдеров тоже, в общем проверяется все закладки.
Тоже удаляются. Смысл в том чтобы одна закладка с уникальном адресом была только той папке из контекстного меню которой запущен код.
Я подумаю что тут можно сделать, хотя это сильно усложнит код. И разве возможны две метки у закладки? |
bunda1 > 06-08-2014 12:47:49 |
okkamas_knife |
bunda1 > 06-08-2014 15:33:03 |
Сгенерировать таблицу в новой странице + галочку - перенос меток. Можно попробовать, хотя я не знаю как сделать такую страницу. |
bunda1 > 06-08-2014 21:19:42 |
okkamas_knife |
difabor > 07-08-2014 15:51:17 |
bunda1 пишет
Метки - это некая альтернатива фолдерам - можно искать по меткам, а можно - по фолдерам. |
bunda1 > 09-08-2014 02:01:58 |
difabor пишет
Firefox дублирует закладки с метками в папке Метки, открой Библиотеку и увидишь. |
difabor > 09-08-2014 09:49:16 |
bunda1 пишет
Это - результат поиска по меткам, а не дублирование. |
bunda1 > 09-08-2014 14:57:57 |
Я по меткам поиск не вёл, но добавлял закладкам метки и они дублировались в папке Метки.
Не было такого предложения, или ты сейчас предлагаешь, ну тогда поясни пожалуйста. |
bunda1 > 09-08-2014 15:47:40 |
А вот и нет, мой код удаляет закладки из папки Метки именно как дубликаты и после этого метка у проверяемой закладки удаляется.
Я думаю легче будет просто не удалять закладки с метками. |
difabor > 09-08-2014 17:46:56 |
bunda1 пишет
Это нехорошо. bunda1 пишет
Это снизит эффективность удалителя дупликатов. |
bunda1 > 09-08-2014 18:12:21 |
Я как раз работаю над этим.
Насчёт добавления атрибутов удаляемых закладок согласен но зачем метка с именем папки/папок.
Не чистит. 09-08-2014 18:20:43 |
bunda1 > 09-08-2014 20:23:25 |
difabor |
difabor > 09-08-2014 20:44:06 |
bunda1 пишет
Да, метки одинаковые... Что более чем странно... |
bunda1 > 09-08-2014 20:50:07 |
Можно, смотря как устанавливать
Да кто будет смотреть эти метки с именем папки/папок. |
difabor > 09-08-2014 22:08:53 |
bunda1 пишет
Тем, кто не пользуется метками - действительно это не нужно. |
bunda1 > 10-08-2014 01:50:05 |
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 ); }); |
difabor > 10-08-2014 10:46:21 |
То есть для этого нужна специальная кнопка |
bunda1 > 10-08-2014 13:38:03 |
difabor пишет
Можно в специальную кнопку или можно складывать в любую уже существующую кнопку. |
foraldo > 09-08-2015 11:14:20 |
У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так? 09-08-2015 11:19:17 bunda1 пишет
У меня никакого пункта "Удалить дубликаты закладок" не в каком меню не появляется. Что я делаю не так? |
voqabuhe > 09-08-2015 11:39:39 |
foraldo пишет
Что бы сказать, что ты делаешь не так, надо знать, что ты вообще делаешь. |
bunda1 > 09-08-2015 12:23:00 |
foraldo |
vitkit3 > 01-11-2015 10:10:50 |
скрытый текст Положил код в инициализацию, кнопка есть, но как заставить её работать? |
voqabuhe > 01-11-2015 13:18:53 |
vitkit3 пишет
Для начала спрячь своё безобразие под spoiler, или сделай превьюшку. А потом скажи, как ты пытаешься "заставить её работать"? |
Михеша > 01-01-2017 14:19:17 |
не работает что-то у меня |
ARG > 27-10-2019 10:46:19 |
Не работает код, нет такого пункта ни в контекстном меню, ни в меню закладок, нигде. Ну и сама кнопка, если ее создать и вытащить на панель, не работает, во всяком случае в х64 |