From 78753fb816d3d02be2da61dd9c4214729c4a36fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Fri, 2 Nov 2018 07:59:55 +0100 Subject: [PATCH 01/11] Remove stripping: https://github.com/vaeth/bookmarkdupes/issues/72 --- ChangeLog | 9 ++- README.md | 21 ++---- _locales/de/messages.json | 84 ---------------------- _locales/en/messages.json | 84 ---------------------- _locales/es/messages.json | 84 ---------------------- _locales/ru/messages.json | 84 ---------------------- _locales/uk/messages.json | 84 ---------------------- _locales/zh_CN/messages.json | 84 ---------------------- data/tab/dupes.js | 133 +++++++++-------------------------- manifest.json | 2 +- 10 files changed, 46 insertions(+), 623 deletions(-) diff --git a/ChangeLog b/ChangeLog index f02599c..05b215e 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,18 @@ # ChangeLog for bookmarkdupes -*bookmarkdupes-5.9: +*bookmarkdupes-6.0: + Martin Väth : + - Remove support for stripping descriptions: + Descriptions are no longer handled by firefox + +*bookmarkdupes-6.9: Martin Väth : - Add option to move dupes/empty folders instead of removing - Fix error message display when removing - Place button for removal more towards the end, see https://addons.mozilla.org/de/firefox/addon/bookmark-dupes/reviews/1170320/ + - Remove support for stripping descriptions: + Descriptions are no longer handled by firefox Juan Salvador Aleixandre Talens: - Update es locales diff --git a/README.md b/README.md index 5fcc8b8..ef13439 100644 --- a/README.md +++ b/README.md @@ -16,18 +16,15 @@ Then select what you want to display: 1. Bookmark duplicates 2. Empty folders -3. All bookmarks After this, you will be offered the list of bookmarks with checkboxes; in case 1 the numbers indicate the order in which matching bookmarks were added according to the internally stored date. There are also buttons to select/unselect convenient sets of checkboxes. -Finally, there are buttons to remove the selected bookmarks in cases 1 and 2 -or to strip the descriptions of the selected bookmarks in case 3. -(The latter has some side effects, see section **Known Bugs**). +Finally, there are buttons to remove the selected bookmarks. -**Be aware that removing bookmarks or stripping descriptions is irreversible!** +**Be aware that removing bookmarks is irreversible!** *It is recommended to make backups of your bookmarks first!* Currently, there is no working version of the extension available for android @@ -37,9 +34,7 @@ Currently, there is no working version of the extension available for android When you reorganized/added/removed bookmarks, make sure to update the displayed list (by pressing the corresponding button) before removing -bookmarks or stripping descriptions! -In particular, stripping descriptions with an outdated list will move -the corresponding bookmarks to their previous location in the bookmark menu! +bookmarks! ## Permissions @@ -180,18 +175,12 @@ Explanation: First replace the URL by its full name path, and then omit the last 1. Live bookmarks are falsely recognized as empty folders, see https://github.com/vaeth/bookmarkdupes/issues/4 -2. Stripping of descriptions works by replacing the bookmark by a freshly - created one. In particular, it updates the bookmark creation date. -3. Stripping of descriptions creates bookmarks in the place where it was when - the displayed list was calculated, see - https://github.com/vaeth/bookmarkdupes/issues/11 and the second part of - https://github.com/vaeth/bookmarkdupes/issues/8 -4. In some firefox versions (e.g. 55.0.3) it has been reported that pressing +2. In some firefox versions (e.g. 55.0.3) it has been reported that pressing the duplicate stars does not open a new tab. You can try to use the link in the options page of the extension instead if you have this problem. The reason for the problem is still unknown, see https://github.com/vaeth/bookmarkdupes/issues/38 -5. Android lacks the bookmark API necessary for bookmarkdupes: +3. Android lacks the bookmark API necessary for bookmarkdupes: https://github.com/vaeth/bookmarkdupes/issues/53 ## Contributors diff --git a/_locales/de/messages.json b/_locales/de/messages.json index 5e8e56a..d042242 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -219,14 +219,6 @@ "message": "Berechne (erneut) die Liste leerer Ordner. Das Ergebnis kann fälschlicherweise auch Live-Lesezeichen enthalten.", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "Alle Lesezeichen", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "Berechne (erneut) die Liste aller Lesezeichen zum Entfernen von Beschreibungen. Die Liste besteht aus allen Lesezeichen mit einer nichtleeren URL.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "Alle außer Gruppenersten markieren", "description": "Button for marking all but first" @@ -407,18 +399,6 @@ "message": "Markierte Lesezeichen nach „{0}“ verschieben", "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Beschreibungen markierter Lesezeichen entfernen", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Entfernung von Beschreibungen aktualisiert das intern gespeicherte Erzeugungsdatum des Lesezeichens. Außerdem verschiebt es das Lesezeichen an die Stelle, an der es beim Drücken des Knopfes zur Berechnung dieser Liste war.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Löschen abbrechen!", "description": "Button for emergency stop of bookmark removing" @@ -427,10 +407,6 @@ "message": "Verschieben abbrechen!", "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Entfernen abbrechen!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "URL anzeigen. Die URL wird in jedem Fall sichtbar, wenn die Maus über dem Lesezeichen steht.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -489,20 +465,6 @@ "message": "Die Liste kann fälschlicherweise auch Live-Lesezeichen enthalten.", "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "$TOTAL$ Lesezeichen gefunden", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "Die Liste besteht aus allen Lesezeichen mit einer nichtleeren URL.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Suche", "description": "Report that calculation started" @@ -612,51 +574,5 @@ "errorNoBookmarkFolderFound": { "message": "Kein Lesezeichenordner gefunden.", "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Beschreibungen markierter Lesezeichen werden entfernt.", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ von $TODO$ Beschreibungen entfernt", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ Beschreibungen entfernt!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Fehler nach Entfernen von $TOTAL$ Beschreibungen: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "Fehlerbeschreibung" - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 1161341..2743a2f 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -219,14 +219,6 @@ "message": "(Re)calculate the list of empty folders. The result might falsely contain live bookmarks.", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "All bookmarks", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "(Re)calculate the list of all bookmarks for stripping descriptions. The list consists of those bookmarks with a nonempty URL.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "Mark all but first in each group", "description": "Button for marking all but first" @@ -407,18 +399,6 @@ "message": "Move marked bookmarks to “{0}”", "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Strip descriptions of marked bookmarks", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Stripping of descriptions will update the internal bookmark generation date. Moreover, it will move the bookmark to the location where it was since you last pressed the button to calculate this list.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Stop removing!", "description": "Button for emergency stop of bookmark removing" @@ -427,10 +407,6 @@ "message": "Stop moving!", "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Stop stripping!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Display URL in listing. In any case the URL will appear if you hover over the bookmark.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -489,20 +465,6 @@ "message": "The list might falsely contain live bookmarks.", "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "$TOTAL$ bookmarks found", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "The list consists of those bookmarks with a nonempty URL.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Searching", "description": "Report that calculation started" @@ -612,51 +574,5 @@ "errorNoBookmarkFolderFound": { "message": "No bookmark folder found", "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Stripping descriptions of marked bookmarks", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ of $TODO$ descriptions stripped", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ descriptions stripped!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Error after stripping $TOTAL$ descriptions: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "error description" - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/_locales/es/messages.json b/_locales/es/messages.json index 219137f..a3bb885 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -219,14 +219,6 @@ "message": "(Re)calcule la lisa de varpetas vacías. El resultado, falsamente, puede contener marcadores dinámicos.", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "Todos los marcadores", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "(Re)calcule la lista de todos los marcadores para quitar descripciones. La lista consta de los marcadores con una URL no vacía.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "Marcar todos los primeros de cada grupo", "description": "Button for marking all but first" @@ -407,18 +399,6 @@ "message": "Mover los marcadores marcados a “{0}”", "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Eliminar las descripciones de los marcadores marcados", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "La eliminación de descripciones actualizará la fecha de generación de marcador interno. Además, moverá el marcador a la ubicación donde estaba la última vez que se presionó el botón para obtener esta lista.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Parar de eliminar!", "description": "Button for emergency stop of bookmark removing" @@ -427,10 +407,6 @@ "message": "Parar me mover!", "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Parar de eliminar descripciones!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Mostrar URL en el listado. En cualquier caso, la URL aparecerá si pasa el puntero sobre el marcador.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -489,20 +465,6 @@ "message": "La lista puede contener falsamente marcadores vivos.", "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "$TOTAL$ marcadores encontrados", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "La lista consta de esos marcadores con una URL no vacía.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Buscando", "description": "Report that calculation started" @@ -612,51 +574,5 @@ "errorNoBookmarkFolderFound": { "message": "No se ha encontrado la carpeta de marcadores", "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Eliminando descripciones de marcadores marcados", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ de $TODO$ descripciones eliminadas", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ descripciones eliminadas!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Error después de eliminar $TOTAL$ descripciones: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "error description" - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index a413355..46db38f 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -219,14 +219,6 @@ "message": "(Пере)определить список пустых папок. Результат может ошибочно содержать Живые закладки (RSS).", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "Все закладки", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "(Пере)определить список всех закладок для очистки описания. Список состоит из закладок с заполненным URL-адресом.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "В каждой группе выбрать все кроме верхней", "description": "Button for marking all but first" @@ -407,18 +399,6 @@ "message": "Move marked bookmarks to “{0}”", // new "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Очистить описания отмеченных закладок", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Очистка описания обновит дату создания закладки. Кроме того, это возвратит закладку в то место, где она была, когда вы в последний раз нажимали кнопку, вычисляя этот список.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Прекратить удаление!", "description": "Button for emergency stop of bookmark removing" @@ -427,10 +407,6 @@ "message": "Stop moving!", // new "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Прекратить очистку!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Показывать URL-ы в списке. В любом случае URL-адрес появится, если вы наведете курсор на закладку.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -489,20 +465,6 @@ "message": "Этот список может ошибочно содержать Живые закладки (RSS).", "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "$TOTAL$ закладок найдено", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "Список состоит из закладок с заполненным URL-адресом.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Поиск", "description": "Report that calculation started" @@ -612,51 +574,5 @@ "errorNoBookmarkFolderFound": { "message": "No bookmark folder found", // new "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Очистка описаний отмеченных закладок", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ из $TODO$ описаний очищено", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ описаний очищено!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Ошибка после очистки $TOTAL$ описаний: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "описание ошибки" - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/_locales/uk/messages.json b/_locales/uk/messages.json index 2f4ff75..07f80b4 100644 --- a/_locales/uk/messages.json +++ b/_locales/uk/messages.json @@ -219,14 +219,6 @@ "message": "(Пере)визначити список порожніх папок. Результат може помилково містити Живі закладки (RSS).", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "Всі закладки", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "(Пере)визначити список всіх закладок для очищення опису. Список складається із закладок з заповненою URL-адресою.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "В кожній групі обрати всі крім верхньої", "description": "Button for marking all but first" @@ -407,18 +399,6 @@ "message": "Move marked bookmarks to “{0}”", // new "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Очистити описи позначених закладок", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Очищення опису оновить дату створення закладки. Крім того, це поверне закладку в те місце, де вона була, коли ви востаннє натискали кнопку, вираховуючи цей список.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Припинити видалення!", "description": "Button for emergency stop of bookmark removing" @@ -427,10 +407,6 @@ "message": "Stop moving!", // new "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Зупинити очищення!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Показувати URL-и у списку. В будь-якому випадку URL-адреса з'явиться, якщо навести курсор на закладку.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -489,20 +465,6 @@ "message": "Цей список може помилково містити Живі закладки (RSS).", "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "$TOTAL$ закладок знайдено", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "Список складається із закладок з заповненою URL-адресою.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Пошук", "description": "Report that calculation started" @@ -612,51 +574,5 @@ "errorNoBookmarkFolderFound": { "message": "No bookmark folder found", // new "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Очищення опису позначених закладок", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ із $TODO$ описів очищено", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ описів очищено!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Помилка після очищення $TOTAL$ описів: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "опис помилки" - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index a5a383c..4b16cba 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -223,14 +223,6 @@ "message": "(Re)calculate the list of empty folders. The result might falsely contain live bookmarks.", // new "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, - "buttonListAll": { - "message": "所有书签", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "(Re)calculate the list of all bookmarks for stripping descriptions. The list consists of those bookmarks with a nonempty URL.", // new - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "全部选中,除了每个组中第一项", "description": "Button for marking all but first" @@ -411,18 +403,6 @@ "message": "Move marked bookmarks to “{0}”", // new "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", // new - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "剥离选中书签的描述", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Stripping of descriptions will update the internal bookmark generation date. Moreover, it will move the bookmark to the location where it was since you last pressed the button to calculate this list.", // new - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "停止移除!", "description": "Button for emergency stop of bookmark removing" @@ -431,10 +411,6 @@ "message": "Stop moving!", // new "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "停止剥离!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Display URL in listing. In any case the URL will appear if you hover over the bookmark.", // new "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -495,20 +471,6 @@ "message": "The list might falsely contain live bookmarks.", // new "description": "Explain that the list might falsely contain live bookmarks" }, - "messageAll": { - "message": "找到 $TOTAL$ 个书签", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "The list consists of those bookmarks with a nonempty URL.", // new - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "正在搜索", "description": "Report that calculation started" @@ -618,51 +580,5 @@ "errorNoBookmarkFolderFound": { "message": "No bookmark folder found", // new "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "剥离已选中书签的描述", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$%) $TOTAL$ / $TODO$ 个描述已剥离", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ 描述已剥离!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "剥离 $TOTAL$ 个描述时出错:$ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "error description" // new - }, - "total": { - "content": "$2", - "example": "0" - } - } } } diff --git a/data/tab/dupes.js b/data/tab/dupes.js index 5cd4ce4..5d95789 100644 --- a/data/tab/dupes.js +++ b/data/tab/dupes.js @@ -569,29 +569,27 @@ function addButtonsBase() { const row = document.createElement("TR"); appendCol(row, appendButton, "buttonListDupes", "titleButtonListDupes"); appendCol(row, appendButton, "buttonListEmpty", "titleButtonListEmpty"); - appendCol(row, appendButton, "buttonListAll", "titleButtonListAll"); appendX(parent, "TABLE", row); } -function addButtonRemove(warningId, buttonId, titleId, mode) { +function addButtonRemove() { const row = document.createElement("TR"); - const title = browser.i18n.getMessage(titleId); + const title = browser.i18n.getMessage("titleButtonRemoveMarked"); row.title = title; const col = document.createElement("TD"); col.width = "50pt"; col.style.height = "50pt"; col.style.textAlign = "center"; - const text = document.createTextNode(browser.i18n.getMessage(warningId)); + const text = document.createTextNode( + browser.i18n.getMessage("warningRemoveMarked")); const strong = document.createElement("STRONG"); strong.appendChild(text); col.appendChild(strong); row.appendChild(col); - appendCol(row, appendButton, buttonId); - if (mode < 2) { - appendCol(row, appendButton, "buttonMoveMarked", null, - browser.i18n.getMessage("buttonMoveMarked").replace(/\{0\}/g, - browser.i18n.getMessage("trashFolder"))); - } + appendCol(row, appendButton, "buttonRemoveMarked"); + appendCol(row, appendButton, "buttonMoveMarked", null, + browser.i18n.getMessage("buttonMoveMarked").replace(/\{0\}/g, + browser.i18n.getMessage("trashFolder"))); appendX(getButtonsRemove(), "TABLE", row); } @@ -704,13 +702,7 @@ function addButtonsMark(mode) { } function addButtonsMode(mode) { - if (mode == 2) { - addButtonRemove("warningStripMarked", - "buttonStripMarked", "titleButtonStripMarked", mode); - } else { - addButtonRemove("warningRemoveMarked", - "buttonRemoveMarked", "titleButtonRemoveMarked", mode); - } + addButtonRemove(); addButtonsMark(mode); } @@ -1728,33 +1720,6 @@ function calculate(command, state, callback) { result.push(bookmark); } - function handleAll(node, parent, index) { - const title = node.title; - const url = node.url - if (rulesFilter(compiledRules, folders, parent, title, url)) { - return; - } - const id = node.id; - parentUsed(parent, id); - const bookmarkResult = { - id: id, - parent: parent, - text: title, - url: url - }; - result.push(bookmarkResult); - const bookmark = { - parentId: node.parentId, - title: title, - url: url, - index: ((node.index !== undefined) ? node.index : index) - }; - if (node.type !== undefined) { - bookmark.type = node.type; - } - state.bookmarkMap.set(id, bookmark); - } - function recurse(node) { function recurseMain(node, parent, index) { if (!node.children || !node.children.length) { @@ -1943,25 +1908,6 @@ function calculate(command, state, callback) { calculateFinish(); } - function calculateAll(nodes) { - state.bookmarkMap = new Map(); - recurse(nodes[0]); - const total = result.length; - const title = browser.i18n.getMessage("titleMessageAll"); - if (total) { - addButtons(2); - addCheckboxExtra(title); - } - displayMessage(browser.i18n.getMessage("messageAll", String(total)), - title); - if (total) { - createCount(title); - entryList = []; - addBookmarks(result, true); - } - calculateFinish(); - } - clearWindow(); displayMessage(browser.i18n.getMessage("messageCalculating")); let mainFunction; @@ -1978,11 +1924,6 @@ function calculate(command, state, callback) { mainFunction = calculateEmpty; handleFunction = handleEmpty; break; - case "all": - compiledRules = compileRules(-1); - mainFunction = calculateAll; - handleFunction = handleAll; - break; default: // should not happen return; // it is a bug if we get here } @@ -2003,12 +1944,6 @@ function moveFolder(id, destination, callback, errorCallback) { return browser.bookmarks.move(id, destination).then(callback, errorCallback); } -function stripBookmark(id, bookmarkData, callback, errorCallback) { - return browser.bookmarks.create(bookmarkData).then(function () { - browser.bookmarks.remove(id).then(callback, errorCallback); - }, errorCallback); -} - function getFirstFolder(parent, title) { for (let node of parent.children) { if (!node.url && (node.type !== "bookmark")) { @@ -2020,12 +1955,29 @@ function getFirstFolder(parent, title) { return null; } - -function processMarked(stopPressed, callback, moveToTrash, bookmarkMap) { +function processMarked(stopPressed, callback, moveToTrash) { const marked = getMarked(); const todo = marked.length; let total = 0; + function progress() { + displayProgress("messageRemoveProgress", "buttonStopRemoving", + total, todo); + return stopPressed(); + } + + function process(id, next) { + removeFolder(id, next, function () { + displayEndProgress("messageRemoveError", total); + callback(); + }); + } + + function finish() { + displayEndProgress("messageRemoveSuccess", total); + callback(); + } + let finishId; let progress; let process; @@ -2046,23 +1998,7 @@ function processMarked(stopPressed, callback, moveToTrash, bookmarkMap) { process(id, recurse); } - if (bookmarkMap) { - displayMessage(browser.i18n.getMessage("messageStripMarked")); - finishId = "messageStripSuccess"; - progress = function () { - displayProgress("messageStripProgress", "buttonStopStripping", - total, todo); - return stopPressed(); - }; - finishError = function (error) { - displayEndProgress("messageStripError", total, error); - callback(); - }; - process = function (id, next) { - stripBookmark(id, bookmarkMap.get(id), next, finishError); - }; - mainAction = recurse; - } else if (!moveToTrash) { + if (!moveToTrash) { displayMessage(browser.i18n.getMessage("messageRemoveMarked")); finishId = "messageRemoveSuccess"; progress = function () { @@ -2129,6 +2065,7 @@ function processMarked(stopPressed, callback, moveToTrash, bookmarkMap) { finish(); return; } + displayMessage(browser.i18n.getMessage("messageRemoveMarked")); mainAction(); } @@ -2365,10 +2302,10 @@ function initMain() { }); } - function processWrapper(moveToTrash, bookmarkMap) { + function processWrapper(moveToTrash) { startLock(); setTimeout(function () { - processMarked(stopPressed, endLockReset, moveToTrash, bookmarkMap); + processMarked(stopPressed, endLockReset, moveToTrash); }); } @@ -2401,18 +2338,12 @@ function initMain() { case "buttonListEmpty": calculateWrapper("empty"); return; - case "buttonListAll": - calculateWrapper("all"); - return; case "buttonRemoveMarked": processWrapper(false); return; case "buttonMoveMarked": processWrapper(true); return; - case "buttonStripMarked": - processWrapper(false, state.bookmarkMap); - return; case "buttonMarkAll": markWrapper(mark, true); return; diff --git a/manifest.json b/manifest.json index 9787557..5d5acbe 100644 --- a/manifest.json +++ b/manifest.json @@ -3,7 +3,7 @@ "short_name": "bookmarkdupes", "description": "__MSG_extensionDescription__", "author": "Martin Väth", - "version": "5.9", + "version": "6.0", "manifest_version": 2, "homepage_url": "https://addons.mozilla.org/en-US/firefox/addon/bookmark-dupes/", "default_locale": "en", From 835008f411f099a947e298f3dc2124d04b15a8c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Thu, 2 Jan 2020 11:04:38 +0100 Subject: [PATCH 02/11] Fix duplicate progress/process from some previous merging with description case --- data/tab/dupes.js | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/data/tab/dupes.js b/data/tab/dupes.js index d48ff24..c7c616d 100644 --- a/data/tab/dupes.js +++ b/data/tab/dupes.js @@ -2075,19 +2075,6 @@ function processMarked(stopPressed, callback, moveToTrash) { const todo = marked.length; let total = 0; - function progress() { - displayProgress("messageRemoveProgress", "buttonStopRemoving", - total, todo); - return stopPressed(); - } - - function process(id, next) { - removeFolder(id, next, function () { - displayEndProgress("messageRemoveError", total); - callback(); - }); - } - function finish() { displayEndProgress("messageRemoveSuccess", total); callback(); From 6d1864680a9aec423a3bfc747aade45df3bad565 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Thu, 2 Jan 2020 12:39:45 +0100 Subject: [PATCH 03/11] Use String(count) for display --- data/tab/dupes.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/data/tab/dupes.js b/data/tab/dupes.js index cb107c9..ebe9ccd 100644 --- a/data/tab/dupes.js +++ b/data/tab/dupes.js @@ -2286,7 +2286,7 @@ function marked(state, id) { return; } state.lastCount = count; - displayCount(compatible.getMessage("messageCount", count)); + displayCount(compatible.getMessage("messageCount", String(count))); } function storageListener(changes, storageArea) { From a1364dd936ede34c9d40c9c9872dec7d526f4013 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Wed, 29 Jan 2020 05:45:23 +0100 Subject: [PATCH 04/11] Fix package description: No longer claim that descriptions can be removed --- _locales/de/messages.json | 2 +- _locales/en/messages.json | 2 +- _locales/es/messages.json | 2 +- _locales/ru/messages.json | 2 +- _locales/uk/messages.json | 2 +- _locales/zh_CN/messages.json | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/_locales/de/messages.json b/_locales/de/messages.json index cb0fb69..1ac6ac4 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Anzeige/Entfernung doppelter Lesezeichen, leerer Ordner oder Beschreibungen", + "message": "Anzeige/Entfernung doppelter Lesezeichen oder leerer Ordner", "description": "Description of the extension" }, "errorNoBookmarks": { diff --git a/_locales/en/messages.json b/_locales/en/messages.json index 46a3b52..b28a296 100644 --- a/_locales/en/messages.json +++ b/_locales/en/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Display/Remove duplicate bookmarks, empty folders, or descriptions", + "message": "Display/Remove duplicate bookmarks or empty folders", "description": "Description of the extension" }, "errorNoBookmarks": { diff --git a/_locales/es/messages.json b/_locales/es/messages.json index e4879c5..fe8038e 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Mostrar/Eliminar marcadores duplicados, carpetas vacías, o descripciones", + "message": "Mostrar/Eliminar marcadores duplicados o carpetas vacías", // new (modified): removed o descripciones "description": "Description of the extension" }, "errorNoBookmarks": { diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index 82c4de3..6a9b801 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Поиск, отображение и удаление дублей закладок, пустых папок, описаний", + "message": "Поиск, отображение и удаление дублей закладок и пустых папок", // new (modified): removed описаний "description": "Description of the extension" }, "errorNoBookmarks": { diff --git a/_locales/uk/messages.json b/_locales/uk/messages.json index 5e6f0e0..c0335b9 100644 --- a/_locales/uk/messages.json +++ b/_locales/uk/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Пошук, відображення та видалення дублів закладок, порожніх папок або описів", + "message": "Пошук, відображення та видалення дублів закладок або порожніх папок", // new (modified): removed або описів "description": "Description of the extension" }, "errorNoBookmarks": { diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index 467b77a..ad883a8 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "显示/移除重复的书签、空文件夹或描述", + "message": "显示/移除重复的书签或空文件夹", // new: modified from "显示/移除重复的书签、空文件夹或描述" "description": "Description of the extension" }, "errorNoBookmarks": { From 8369fa6153fef861d23e8b5dd3512cbb360f0a84 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Thu, 2 Jan 2020 11:39:41 +0100 Subject: [PATCH 05/11] Initial chrome version --- ChangeLog | 4 ++-- README.md | 14 +------------- data/icons/128.png | Bin 0 -> 4206 bytes data/icons/16.png | Bin 0 -> 517 bytes data/icons/32.png | Bin 0 -> 986 bytes data/icons/48.png | Bin 0 -> 1511 bytes data/tab/dupes.js | 4 ++-- manifest.json | 40 +++++++++------------------------------- 8 files changed, 14 insertions(+), 48 deletions(-) create mode 100644 data/icons/128.png create mode 100644 data/icons/16.png create mode 100644 data/icons/32.png create mode 100644 data/icons/48.png diff --git a/ChangeLog b/ChangeLog index 8e9b65b..fefdf17 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,11 +1,11 @@ # ChangeLog for bookmarkdupes *bookmarkdupes-7.0: - Martin Väth : + Martin Väth : - Remove support for stripping descriptions *bookmarkdupes-6.1: - Martin Väth : + Martin Väth : - Provide chrome compatibility layer in javascript - Slight clarification in English formulation for non-dupe bookmarks diff --git a/README.md b/README.md index 21450a9..7f83e43 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # bookmarkdupes -(C) Martin Väth , +(C) Martin Väth , This project is under the GNU Public License 2.0. @@ -172,18 +172,6 @@ Explanation: Replace all bookmark URLs by the corresponding bookmark title when Explanation: First replace the URL by its full name path, and then omit the last component of this path by cutting of the longest sequence of non-`\0`-symbols at the end. -## Known Bugs - -1. Live bookmarks are falsely recognized as empty folders, see - https://github.com/vaeth/bookmarkdupes/issues/4 -2. In some firefox versions (e.g. 55.0.3) it has been reported that pressing - the duplicate stars does not open a new tab. You can try to use the link - in the options page of the extension instead if you have this problem. - The reason for the problem is still unknown, see - https://github.com/vaeth/bookmarkdupes/issues/38 -3. Android lacks the bookmark API necessary for bookmarkdupes: - https://github.com/vaeth/bookmarkdupes/issues/53 - ## Contributors (in alphabetical order) diff --git a/data/icons/128.png b/data/icons/128.png new file mode 100644 index 0000000000000000000000000000000000000000..666fbb2b6279aefca42ab5a394cf3fe7b898ab21 GIT binary patch literal 4206 zcmZ`dby(An)1Pg`=#Ux+j3LMXVbU^5sY!}-j!tO-$1e4^k+YHm06>LNQ_{Vbxc>-Ba?Sf>tv+815^Hr; zCE)5mEbJ&x0{~iXjFN($|EvAHKp*|-yuq$6Z?}ATWetC#c%!>CicauY#OTmt9k{~y z>jz-SFh+;;GF#lGQS?3UrRe1D6l{z^h%EXRwKdM5wPF9uw(e~Gdli8^Ez?xo%v$lP z#ReB*!}D;i>zq5B>qGKU`&Rysb3&H)>G{5;SJ&JH;m_s%GU)#QfkiD((@DMe5@$OY z<3%aYRL09&+^Lh)cx46kb;^u$&&g<&SVo;`RY4CV5@QS+`tqa43}i227dw3da5M~5 zY;fBVcSoKOY4E!`<=Ww+Ih}wi5>!k1Q+oEbc+R;}jON9#;sDd=r-keSs?mo4{qBEZ;$2D_csb?Jn2JbNYl zGv#i1YF7FUppIe3>dDusEjDrCO%It{sOV(Ye(w)lhcE33>JqvSf%7|oyx<_i$Yegv z4lCK@k(Txk@D1g9NP#oqwFnso2~tb>MEB2c;_@TL`8XvRSy~pBP7f&OHg{P+@_anW zq8XiSEhDzn7s#tQ_1%a*O$0n7w>=872}$I2LYP-3ImDc5WmBy*v1s1X;j=3WOQ*vz zlz9Q2+0Tvo#JWuk2z+)-QM#%?Zl_db_V~Os!k%KH!Aq*3U^wnLWm{TT5#SjaDTeV) zj)|d_WIh)K4_$gLlN8!b>nOGg^IY4bmFJ9_1=MDzvXOt8Z(GYMQP-uhn)V~P0N$CS zk5$N%i%CR?N~T!kdPBLJYpcIWhMy5K_$yVBwD<9KY4-)!`G=#*Kyo2cC<2SWc`s zgEXAnz7qMDhMC@GYCh;Xnx|=ZATXd3OOl3Jj6!_xR5QtE)`arl9;qCB@5xbAVr1!z zs-&_u)P__u0g=D%%M26_DJ&p##hBWjv7)j>_Ti-=q4U!k_}h!X}8y87PI)s(iTSaTi# zGx6g51|*^2GN%5E=6|Y%$SO4Tj!vEYtNPxTjwK3Ia##magEdwVL!*SIL*ZCu-m~36 zmf>K776x|aeJWaDL-K;cuBaHUA!<{p_m5UPX8y(Jtg2sM`#7M75Hp2`KTl_yBPjkH za`K$_hjg2T_px+_b4F3G3r$ZbGtvAwyQlQma^g?25ct6nDEsZ3#$Pp{`^0ds-3Ag{ zCOlmTm1&=QSa(_bNi8MG&s*TI!^blHjR|x&6w4aLg|I!sU{uCwNX>j)=)o0I<@IbL zjOHkaI`y5}PKeVs=_Ao_`-TJ9!su@bqD7aoEo2Z!+h3YhYC18Sfj%j7_}f?M2i0nv zpT-Z!FOM?>CjHVm+P$3gNN~?k*|L9NcIysaWSzszo}>lh*1dgvkq?G8FPvOfG>&;$ z`J9hxAd?`Jo5=bo$%#3^{7PWPz1N?ThjQict;Ekhe=6}SL*|Bk;S{AasC+<@HkD20 z8C3hU(MC{K(q@2LdJ71NbdIQTa;kJO5_WTEK?VeA0y3^&nn43A-m zk?YX$fPlR(G4t+sy4Cdsy{^3n27wl!U8x>lp&GrKQPyj!009z~X;=Fy|X z49$PHD9V_vMD7)9?Dx|A4PA?hAJ~EXvMC{YnYie>iyfNU%KxmH)<+5w6t~$jkWDrZ zj!7A{c=IMrTb=+%_B20djb$ZqUhS>3F&ure=;Ptq5(6?JiU@C2n)AoxN7V(vly8b# z|6-wB*F5X@dUr2yA`$jEDVmWJ->gDw0whY<3{o(z_hJJ`CUUyCJ_Z>ilsZ5Xa!;2) z#?s^i%_I06q1InD|6))tb^oaC+_LIa~d@IF5|WTgz+rWn0N{+UcKWHC85r4u@}3q5&t-egiH6s{GJ>RA5fD# z#@8Q)fK9CGYx_)2n$HHuMpK5Z67H)bvZ)n|oON4kc#GO1vtp5MF1h@XQsmfZ7<#fF zMlikN(pXDidbTN*+w4)*|AJNFaqdge_k72KP}31SY(&Oi#E0c*`n1Yx1jbUJ*xOe^ zWTEXdo5U2yFFj^Nw$?FbyyJ}`8kqTMiiZVEm%c_^k#jwT$b?ic#4WMc&>Ku`77#0_ z(q7zQ_cVT!-%E3myvBQMv|)@uHAT7bBvAk?P{vZ)4o3;lQ+msO(SO1%TzZrsyh>x3 zK{-1nzSycA;~efqJT)^!A=ks(=tge8W&a<{<7RwdS68s zinHn*Dk2)Nw&K6XJD#XyS@Sl=LcqfefE-?Y%=2U$c&!wac=NIsoJe?D?#&!Et3@n|6c>f*e&RMF~u)-^!1$L=0*EE-V^=5uo6pz1}u_x*h@ z*7UrcQHY0Qc+RQ&5$ITb^}-5ax5ujf?f6)ZfmgL65zP-+^-RhEivnhX09IOZL+j}~ z??EEe)6)Y=ut9dCXqfP8zVq2joAsk_hkCO~WZiy`H$_;2)@QMqv0A5`LUvmg606xj ztktlKp?Tw9<~(A;o|39>-7C6o`H`z>`;o;+jxY8js;g-*n5<{P4R$mF=hUqIiu9-d zd*4q}X(@A=KF>%!cyIdH6X{ruuO)Z%$wiFqwUKI==tQvS_o4|Idwc9I%40Tff+0^nd(`6lmxE7Jc1aZR%^E^f)n0)TD#XO3m4o5Ubqs z|1D$!&X=P%4!J4*luUG7YsM$4)`Xq|9*Up(B6b@6jU_ThIM}oZVksUVTEY2?W~(FB zs7Mk^Sd+aTms%h9lrSG8^yMYIGs_~395S2TYIqhWhU=c zfVq&o@<6e_;Y3L6Ipk9hH%#2$qH{q+4!9M>sF{w+5mK2@A9_0Iu)Jdb*QLA7D1jq<&^$y@#5p~Dt`?&^KDsyi;q6}#fCjBwDN8;t`!Kic0$L~Qw!KRl7TMv=X9Z4?vY|?>K}V7i zlvHQ7?d+Vl?%!}b2HMk{AvE7~+@fO970$kQCuIOiPQh*Ed6Rb(QxDb{fkgL5yeL(; z6&NcbO*k5)_cT_`&`qXd(@R;^ETN`dR&MMuA7}M>QY|ag`&$sqF1G!nh!Amk^Bq|y z`Q{-&C?E+oACk*=eHR^WK##!bcFD1!^bnib45{i`di?Gn;9_uznuSk6)e(a6OQk0S zx0l^+cI#Mtr2o$xr4MQ;dVjlMQMd{WyramEqBkS^sU`0xBgeVX8R<&RqXZb%mt+9- zPZuXhu?`M)PtW6?EC`u(eM((YE*b41FqaVVpBOA|FPeRON1ji$;`g_8C<@Vps)Eojw)G2c8S}HYE569jjypjclYaFZR@t8 zq1}o0N}4_R%$;h4TT9BNe?kP|)K`bl zu`fv@;`_N&acX^X>=C1eiVsgs2V}$s5BYz5_0=<2jtR5dcwKiXUE9=fdwwaH9%k&_ zLsvxAN8vbM8%S>C*Qc%2_CE00`(sWsnRDGXwr#$fO!58WjJ!AVLtiE~1G&)Hj z{;PgnyGW3}$sY!zT=nb1Nw+Omkmk>5z6f~6D?e)!Y(J6r?>g%0a3|jGuGWx8QBQ8i zxZc3g&KmS@i>J11^k!oSO#5i#_@J}H6LiA@k0RT ztxi%PzF-+W5=-??HTyc|SPPQ1Ah&$$U2_ex(v}XHj+Ro)5rLU1#4SkZN@~>S1Xa$5 v?+VpZP%qvQvvwO|KinX*ruqLM>-UwL91FxF5VLdrKmahxT1wT5*zo@W?4q^m literal 0 HcmV?d00001 diff --git a/data/icons/16.png b/data/icons/16.png new file mode 100644 index 0000000000000000000000000000000000000000..13149e629ac4a716c5448fedbe50e413b834e175 GIT binary patch literal 517 zcmV+g0{Z=lP)F7H(?%zlu7`d+#~- zoXds(ghVx(v+1@#g4Zt=FNFllEiyR!%r@sm2{@_)CB8kT>T8I~e!wc={Kng1Ac;yJ z(61@`tkprw*o|Gru+t;lgkXRen;Q}^`{1t}7~}Q<>@n}w1F@B&_FIj{N7FqbI@O?y z^~1&6wCab*R27&3(hck_uTo##sTI37N#2+WKO7Iyqx`sIl6 z?6nP|>;~vEGnVBvX}W%UqySRY3wYafUK`CE01ur;M!m!e9l+2VEubWU&lif*Ss+BY zIOGqUz2YDEe%U{G3;2l2A*(>g$Vjz-U#8r?*SuMSIz4i_ka~GyXc$KmlU`>vs_nqC zUf)``DqdSIS3^GU0_fG)+RA=&CR2;5XbML&8*5h|=pXR|$K{iHulu@K00000NkvXX Hu0mjf#{Bfi literal 0 HcmV?d00001 diff --git a/data/icons/32.png b/data/icons/32.png new file mode 100644 index 0000000000000000000000000000000000000000..e855bdbe5b7a7b6cbafdad6e5fc37aa6745891b9 GIT binary patch literal 986 zcmV<0110>4P)M zV;e~K%1d}Gl_!UXqh3L8l=oA#=M+k6bqT-DtL=zJ%#;MT|*f44!X$ouK^LVkX zzIJ8wt&S_6yYqkl=l}fPb52eUT(2Ukadc#PuBLC_es?ihRxy)|ZSQEB;jwHvsJ8_i?$4qzF&0TAx1jYsd) zX!#vL%M^&+Gw%S1c4Q~31~FC_;FMSxHsuY~fV64swt#DZ+GSNO zOkYL-3TL*akDqdSjL5tFC0kzlRc^HvVbt5gX8+coL4I`D{G@&Dt^q_$_T{5+cxUEF z+d@(e)6xZmO`h<%&0lZXzRRHPz*&HAttB;Ke_uD~d)cr#w&BVE5Cqb|bEo?TI(joF zTA8}IPTwy$3i3aNMeHm%)i%AOs{4HfSXO>nkrneSD+|D8b0X ziO|!pBBH1SQ5izUTV-J4m)tpH{r$fu`UW-tJAm~7GB_SbtouREu&Cm}EB)-Os@)%5 zQ5%b84~{CL!{r4BH0~c+*?8zsNp}A3sxp16qPbvz>vb*bZt>1VfV z5R+DY$7?=M1xyMAe5$g<^hM@(a9$iX1LSG1cfnHu&AliDGF4@f15+uGMw^y+$?2&8 zqrFHFit~cO^q5^0L1`~sWr?Spo@J`8HdKuT04V)wzBKceFOW4A81e7bEDdBQ{h_;s zX999ZXU_l~7Q0q6u8q_vjSEe~iZ1Yq*Sj51N)s+EDIpj%0T2>@6Cz8!qV-0AstCF; z!6ppNxqfx32C@r)(Y6({bm#C)FQ`2cFmBJzDIg>4b`xEMrKJu_e6&S8X(LYrsNq;7 zDq4!@V#h^-CvD`30D+FrePE0>jskL%ESuv+8+BX2_`N$H1s-zp&5hJ{w$w*7@>F;E zyDdP~xqSfUSe*(0rQ0vH?zd2q9v^94B*zMMwR)~@9XYUD^ka7I8samfAA-)ZJ10fY zv#Bk}5N+xX$6bP+LZVB}OGl1ee`L+1gUwg^^#Y~?5({ZC25{8OCr=v~u9yG6T020u zlR0>~l%KyM@#efe+ZR~EUSL4H-BgP;krTWS`3gb*(^73{L3OoMg?GgaVvoq(yM3$( zhfpTieKVtVywQ4?eze@}LY?qC2BqQ;eI0M?AOK)^a8sZAu4imjVTIi{N-wgx^&=j( z!gr}oM|^?ma;XY8+8vGpV#wXI!!M%m0qODfzS_!bZAU1I{@`()9iYIQWQNwsGNMia zoeBWR+4ufrLybeg19soC=r^ouJ%-OYcX!c*%1Wtf__VX2E(JjQq`_>Jg9vl%z5?q4 zn{Ecl;_96i>V%(w#ZnpS;!T*M004qPbNr3V>lIm#?FE=gGjH8I#5C(y*OfX{bQEru zNyX(WsfD{l-rgNcEc6q*-BgPWk)te*oOYWst{UBlKfGRCJgZ$FB_dcCo$OIDxJqxg z=@OyFB{#*x9S9IH7AEt}ik@|wE)lA(KXTj)P<1>4=U5>|=q0!5Y{_}t?Zm>BfN}c+ z1;B$&zS<n^ehQqE@k+1@3mh>ZE-lo(KTJRU5f%A?LARw)HnT+V#=mn)FJ6f_b`o zRLW0-lm+DO-Zl!D=;WJi)pdGGjf%mRv_hWf{R#)nsa;WJ(AH9zYF(-CfN3QEbd1(o z$$SmcpYrtQ+2SkY2I;(>Ud-C`(Y!(W8Amde1*)mNWK$9_ao@HqV48z#|FPD0-xe@!_7>2!zKZ&i zljSd00*ir!Pr74aYFYP2cALvW_+5K6m2$e}$xH(y_lZDlh+VYBOQEM*H02rpPebg?i z8pDLbMWAbeHeiBo9cmv6yBDA>X+;P(MRZwRxxeg>WiQ>h Date: Sun, 2 Feb 2020 13:44:55 +0100 Subject: [PATCH 06/11] Remove all references to webpages. --- AUTHORS | 6 +++--- README.md | 28 ++++++++++------------------ background.js | 3 --- data/tab/dupes.js | 5 ----- manifest.json | 1 - 5 files changed, 13 insertions(+), 30 deletions(-) diff --git a/AUTHORS b/AUTHORS index d3da4cb..4b9a589 100644 --- a/AUTHORS +++ b/AUTHORS @@ -3,6 +3,6 @@ Martin Väth (initial author and all coding) Contributions (alphabetical order): -Henaro aka Ironwool https://github.com/perdolka (Russian and Ukrainian translation; redesign icon in svg; provide favicon) -Juan Salvador Aleixandre Talens https://github.com/juaalta (Spanish translation) -YFdyh000 https://github.com/yfdyh000 (Simplified Chinese translation) +Henaro aka Ironwool (perdolka on github) (Russian and Ukrainian translation; redesign icon in svg; provide favicon) +Juan Salvador Aleixandre Talens (juaalta on github) (Spanish translation) +YFdyh000 (yfdyh000 on github) (Simplified Chinese translation) diff --git a/README.md b/README.md index 7f83e43..b83e3d6 100644 --- a/README.md +++ b/README.md @@ -44,8 +44,7 @@ The extension requires the following permissions for these reasons: 1. “bookmarks” to read/modify bookmarks 2. “storage” to store/restore the customized rules in expert mode. Unfortunately, “storage” is not one of the optional permissions which might - be required only if that feature is actually requested by the user, see - https://developer.mozilla.org/en-US/Add-ons/WebExtensions/manifest.json/optional_permissions + be required only if that feature is actually requested by the user. ## Expert Mode @@ -71,11 +70,7 @@ expressions must be nonempty or that filter rules will not apply either.) The 4 regular expressions refer to the bookmark's name or url, respectively, and the regular expressions must either match or not match, respectively. -- The term “regular expression” refers to a javascript type regular expression - as described e.g. in - https://wiki.selfhtml.org/wiki/JavaScript/Objekte/RegExp - or - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions +- The term “regular expression” refers to a javascript type regular expression. - The bookmark's name refers to the full bookmark path as it appears in the browser with folder names separated by the null character. For instance, if you have in “Bookmark Menu” a folder “Collection” @@ -93,10 +88,7 @@ If a URL modification rule applies, a text replacement will occur: All parts matching a specified regular expression are substituted by a replacement text (which might be empty). The rules for this correspond to the javascript String.prototype.replace -function with the global modifier, see e.g. -https://wiki.selfhtml.org/wiki/JavaScript/Objekte/String/replace -or -https://developer.mozilla.org/de/docs/Web/JavaScript/Reference/Global_Objects/String/replace +function with the global modifier. In particular, the replacement text can contain symbols like `$&` or `$1` to refer to the whole matched text or to the @@ -155,14 +147,14 @@ in all URLs. Explanation: If a bookmark is in a folder named “Mr. Dupe”, its full name (path) will contain the text “\0Mr. Dupe\0”; so match that text. Since the “.” symbol has a special meaning for regular expressions, we have to quote it. This can be done by either `\.` or by looking for a character class `[…]` which contains only the single symbol `.`. -4. Use the replacement rule: “Replace URL matches” `.+` “by” `http://dummy` +4. Use the replacement rule: “Replace URL matches” `.+` “by” `constant` -Explanation: Pretend that every bookmark has the URL `http://dummy` by replacing all characters (`.+`) of the original URL by that text. +Explanation: Pretend that every bookmark has the URL `constant` by replacing all characters (`.+`) of the original URL by that text. -5. Use the replacement rule: “Name Matches” `^Bookmark Menu\0Remove\0` “Replace URL matches” `.+` “by” `http://dummy` +5. Use the replacement rule: “Name Matches” `^Bookmark Menu\0Remove\0` “Replace URL matches” `.+` “by” `constant` As in 4, but only for bookmarks whose full name starts with the matching path. -This works only if the folder contains at least 2 bookmarks (because otherwise `http://dummy` is not a duplicate URL). Of course, one might use an actually duplicate URL instead of `http://dummy` to work around this limitation. +This works only if the folder contains at least 2 bookmarks (because otherwise `constant` is not a duplicate URL). Of course, one might use an actually duplicate URL instead of `constant` to work around this limitation. 6. Use the replacement rule: “Replace URL matches” `.+` “by” `$TITLE` @@ -176,6 +168,6 @@ Explanation: First replace the URL by its full name path, and then omit the last (in alphabetical order) -- Henaro aka Ironwool https://github.com/perdolka (Russian and Ukrainian translation; redesign icon in svg; provide favicon) -- Juan Salvador Aleixandre Talens https://github.com/juaalta (Spanish translation) -- YFdyh000 https://github.com/yfdyh000 (Simplified Chinese translation) +- Henaro aka Ironwool (Russian and Ukrainian translation; redesign icon in svg; provide favicon) +- Juan Salvador Aleixandre Talens (Spanish translation) +- YFdyh000 (Simplified Chinese translation) diff --git a/background.js b/background.js index a74bf6c..7bacc7b 100644 --- a/background.js +++ b/background.js @@ -4,9 +4,6 @@ "use strict"; -// For documentation on the tab API see e.g. -// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/tabs - const compatible = (typeof(browser) != "undefined" && Object.getPrototypeOf(browser) === Object.prototype) ? { browser: browser diff --git a/data/tab/dupes.js b/data/tab/dupes.js index 8508dd3..79b924e 100644 --- a/data/tab/dupes.js +++ b/data/tab/dupes.js @@ -2,11 +2,6 @@ * This project is under the GNU public license 2.0 */ -// For documentation on the bookmark API see e.g. -// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/bookmarks/ -// For documentation on the storage API see e.g. -// https://developer.mozilla.org/en-US/Add-ons/WebExtensions/API/storage/ - "use strict"; const compatible = (typeof(browser) != "undefined" diff --git a/manifest.json b/manifest.json index 1c2f955..1dd9105 100644 --- a/manifest.json +++ b/manifest.json @@ -5,7 +5,6 @@ "author": "Martin Väth", "version": "7.0", "manifest_version": 2, - "homepage_url": "https://addons.mozilla.org/en-US/firefox/addon/bookmark-dupes/", "default_locale": "en", "permissions": [ From d3d778d1ae640e9e9e22e3e4215fea8458908eda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Sun, 6 Sep 2020 16:00:22 +0200 Subject: [PATCH 07/11] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index b309ee7..4bd074c 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ This project is under the GNU Public License 2.0. -A WebExtension which can display/remove duplicate bookmarks, empty folders, or descriptions +A WebExtension which can display/remove duplicate bookmarks or empty folders. After installing bookmarkdupes, the usage is rather simple: From cf55561855d37a5c2a2b4516d0fdcec38719ceb9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Sat, 23 Jul 2022 00:23:19 +0200 Subject: [PATCH 08/11] Manifest v3 --- background.js | 8 +++++--- data/options/options.js | 4 ++-- manifest.json | 10 ++++------ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/background.js b/background.js index 81f4d0d..8411dd3 100644 --- a/background.js +++ b/background.js @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Martin Väth +/* Copyright (C) 2017-2022 Martin Väth * This project is under the GNU public license 2.0 */ @@ -11,9 +11,11 @@ const compatible = (typeof(browser) != "undefined" browser: chrome }; -compatible.browser.browserAction.onClicked.addListener(function () { +((typeof(compatible.browser.action) != "undefined") + ? compatible.browser.action : compatible.browser.browserAction ) +.onClicked.addListener(function () { compatible.browser.tabs.create({ - url: compatible.browser.extension.getURL("data/tab/index.html"), + url: compatible.browser.runtime.getURL("data/tab/index.html"), active: true }); }); diff --git a/data/options/options.js b/data/options/options.js index 75ecac1..f06ed98 100644 --- a/data/options/options.js +++ b/data/options/options.js @@ -1,4 +1,4 @@ -/* Copyright (C) 2017-2020 Martin Väth +/* Copyright (C) 2017-2022 Martin Väth * This project is under the GNU public license 2.0 */ @@ -25,7 +25,7 @@ function createLink(title) { return; } const link = document.createElement("A"); - const url = compatible.browser.extension.getURL("data/tab/index.html"); + const url = compatible.browser.runtime.getURL("data/tab/index.html"); link.href = url; link.target = "_blank"; link.textContent = title; diff --git a/manifest.json b/manifest.json index 1dd9105..73da6df 100644 --- a/manifest.json +++ b/manifest.json @@ -3,8 +3,8 @@ "short_name": "bookmarkdupes", "description": "__MSG_extensionDescription__", "author": "Martin Väth", - "version": "7.0", - "manifest_version": 2, + "version": "7.1", + "manifest_version": 3, "default_locale": "en", "permissions": [ @@ -13,12 +13,10 @@ ], "background": { - "scripts": [ - "background.js" - ] + "service_worker": "background.js" }, - "browser_action": { + "action": { "default_icon": { "16": "data/icons/16.png", "32": "data/icons/32.png", From f93133ac4da821c7b443a918a51516fcc65a1d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Fri, 29 Jul 2022 07:09:43 +0200 Subject: [PATCH 09/11] Arabic translations: Remove messages unused in chrome version --- _locales/ar/messages.json | 84 --------------------------------------- 1 file changed, 84 deletions(-) diff --git a/_locales/ar/messages.json b/_locales/ar/messages.json index 437686f..6e4b6fe 100644 --- a/_locales/ar/messages.json +++ b/_locales/ar/messages.json @@ -227,14 +227,6 @@ "message" : "(Re) تقوم بحساب كشف علامات التوقف non-dupe bookmark. علامات التوقف تعتبر dupes اذا كانت URLs الخاصة بها تتلاقى. في نمط الخبراء ، يتم تطبيق قواعد تجهيز عنوان URL المحددة (الاحلال) قبل مقارنة عناوين URL. ", "description" : "قم بتوضيح أنه سيتم حساب كشف كل علامات التوقف الغير-dupe (اعادة) ، وكيف يتم تعريف عمليات التوقف لعلامة التوقف " }, - "buttonListAll" : { - "message" : "كل علامات التوقف ", - "description" : "اختيار لعرض كل علامات التوقف " - }, - "titleButtonListAll" : { - "message" : "(Re) يقوم بحساب كشف بكل علامات التوقف للمواصفات snoitpircsed strikce. يتكون الكشف من علامات التوقف ذات عنوان URL غير خالي. ", - "description" : "شرح أن كشف كل علامات التوقف سيتم احتسابه (اعادة) لتوصيف التعري وأنه يتكون من علامات التوقف ذات عنوان URL غير خالي. " - }, "buttonMarkButFirst" : { "message" : "تعليم الكل لكن أولا في كل مجموعة ", "description" : "مفتاح لتعليم كل ولكن أولا " @@ -415,18 +407,6 @@ "message" : "نقل علامات توقف تم تعليمها الى \"{ 0 }\" ", "description" : "مفتاح لنقل علامات التوقف المعلمة الى حافظة المحذوفات. يجب أن يكون اسم حافظة المحذوفات في النص هو { 0 } " }, - "warningStripMarked" : { - "message" : "⚠ ", - "description" : "النص الموجود أمام الاختيار لوصف الوصف الخاص بعلامات التوقف التي تم تعليمها " - }, - "buttonStripMarked" : { - "message" : "وصف القطاع لعلامات التوقف التي تم تعليمها ", - "description" : "اختيار لوصف الوصف الخاص بعلامات التوقف التي تم تعليمها " - }, - "titleButtonStripMarked" : { - "message" : "سيؤدي وضع الوصف الى تعديل تاريخ تكوين علامة التوقف الداخلي. بالاضافة الى ذلك ، ستقوم بنقل علامة التوقف الى المكان الذي كانت به منذ آخر مرة قمت فيها بالضغط على الاختيار لاحتساب هذه القائمة. ", - "description" : "قم بشرح التأثيرات الجانبية التي يقوم بتحديث تاريخ علامات التوقف ونقلها الى المكان الخاص بآخر حساب للكشف " - }, "buttonStopRemoving" : { "message" : "توقف عن الازالة ! ", "description" : "اختيار للايقاف الطارئ لازالة علامة التوقف " @@ -435,10 +415,6 @@ "message" : "! توقف عن الحركة ", "description" : "اختيار للايقاف الطارئ لنقل علامة التوقف " }, - "buttonStopStripping" : { - "message" : "! توقف عن التعري ", - "description" : "اختيار للايقاف الطارئ للمواصفات الخاصة بالتعري " - }, "checkboxFullUrl" : { "message" : "عرض عنوان URL في الكشف. في أي حالة ، سيظهر عنوان URL اذا قمت بعرض علامة التوقف. ", "description" : "مربع اختيار لعرض عنوان URL في الكشف. شرح أن عنوان URL سيظهر كعنوان على أي حال " @@ -515,20 +491,6 @@ "message" : "كشف بعلامات التوقف non-dupe علامات التوقف ", "description" : "يتم عرض كشف بعلامات التوقف non-dupe علامات التوقف. " }, - "messageAll" : { - "message" : "تم ايجاد علامات التوقف $TOTAL$ ", - "description" : "التقرير المحدد لعدد علامات التوقف ", - "placeholders" : { - "total" : { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll" : { - "message" : "يتكون الكشف من علامات التوقف ذات عنوان URL غير خالي. ", - "description" : "شرح أن الكشف يتكون من علامات التوقف ذات عنوان URL غير خالي " - }, "messageCalculating" : { "message" : "جاري البحث ", "description" : "التقرير الذي قام ببدء العملية الحسابية " @@ -638,51 +600,5 @@ "errorNoBookmarkFolderFound" : { "message" : "لم يتم ايجاد حافظة علامات توقف ", "description" : "تقرير أنه لم يتم ايجاد حافظة علامة توقف " - }, - "messageStripMarked" : { - "message" : "تحديد وصف علامات التوقف التي تم تعليمها ", - "description" : "التقرير الذي تم بدء تشغيل الوصف الخاص به " - }, - "messageStripProgress" : { - "message" : "($ECEGAGE$%) تم تجريد $TOTAL$ من $TODO$ الأوصاف ", - "description" : "التقرير الذي تم فيه تجريد العدد / المجموع / النسبة المئوية للمواصفات ", - "placeholders" : { - "total" : { - "content" : "$1", - "example" : "0 " - }, - "todo" : { - "content" : "$2 ", - "example" : "1 " - }, - "percentage" : { - "content" : "$3", - "example" : "0 " - } - } - }, - "messageStripSuccess" : { - "message" : "تم تجريد وصف $TOTAL$ ! ", - "description" : "تسجيل نجاح التقرير عند تحديد عدد الأوصاف المحدد ", - "placeholders" : { - "total" : { - "content" : "$1", - "example" : "0 " - } - } - }, - "messageStripError" : { - "message" : "حدث خطأ بعد تجريد وصف $TOTAL$ : $ERROR$ ", - "description" : "التقرير الذي تم تحديده خطأ بعد تجريد عدد محدد من الوصف ", - "placeholders" : { - "error" : { - "content" : "$1", - "example" : "وصف الخطأ " - }, - "total" : { - "content" : "$2 ", - "example" : "0" - } - } } } From 0439fa5e9ca0162f82fc88b67fb56ee63d1e66bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Mon, 1 Aug 2022 09:13:17 +0200 Subject: [PATCH 10/11] Remove comments from _locales files --- _locales/de/messages.json | 2 +- _locales/es/messages.json | 4 +- _locales/ru/messages.json | 4 +- _locales/uk/messages.json | 4 +- _locales/zh_CN/messages.json | 232 +++++++++++++++++------------------ 5 files changed, 120 insertions(+), 126 deletions(-) diff --git a/_locales/de/messages.json b/_locales/de/messages.json index 566e297..fea6994 100644 --- a/_locales/de/messages.json +++ b/_locales/de/messages.json @@ -96,7 +96,7 @@ "description": "Input field for the replacement text for the regular expression matches. The text should be short" }, "titleRuleReplace": { - "message": "Der Ersetzungstext für den passenden Teil des regulären Ausdrucks. Symbole wie $$& oder $$1 können benutzt werden, um auf Treffer oder Klammern zu verweisen. Die speziellen Texte \\L$$& und \\U$$& bedeuten eine klein- bzw. großgeschriebene Version der Treffer. Die speziellen Texte $$URL, $$NAME und $$TITLE bedeuten die ursprüngliche (unmodifizierte) URL bzw. den Lesezeichennamen/-Titel (mit bzw. ohne vollen Pfad). Den letzten drei kann ein $$& vor- oder nachgestellt sein, um den Treffer vorne oder hinten anzuhängen.", // new + "message": "Der Ersetzungstext für den passenden Teil des regulären Ausdrucks. Symbole wie $$& oder $$1 können benutzt werden, um auf Treffer oder Klammern zu verweisen. Die speziellen Texte \\L$$& und \\U$$& bedeuten eine klein- bzw. großgeschriebene Version der Treffer. Die speziellen Texte $$URL, $$NAME und $$TITLE bedeuten die ursprüngliche (unmodifizierte) URL bzw. den Lesezeichennamen/-Titel (mit bzw. ohne vollen Pfad). Den letzten drei kann ein $$& vor- oder nachgestellt sein, um den Treffer vorne oder hinten anzuhängen.", "description": "Explain that the text will be used as replacement text for the regular expression matches" }, "buttonRuleUp": { diff --git a/_locales/es/messages.json b/_locales/es/messages.json index c022753..ac5d15a 100644 --- a/_locales/es/messages.json +++ b/_locales/es/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Mostrar/Eliminar marcadores duplicados o carpetas vacías", // new (modified): removed o descripciones + "message": "Mostrar/Eliminar marcadores duplicados o carpetas vacías", "description": "Description of the extension" }, "errorNoBookmarks": { @@ -96,7 +96,7 @@ "description": "Input field for the replacement text for the regular expression matches. The text should be short" }, "titleRuleReplace": { - "message": "El texto de reemplazo para la expresión regular coincide. Se pueden usar símbolos como $$& o $$1 para referirse a la coincidencia o un contenido de corchete. Los textos especiales \\L$$& y \\U$$& significan una versión en mayúsculas y minúsculas de las coincidencias, respectivamente. Los textos especiales $$URL, $$NAME y $$TITLE significan la URL original (sin modificar) y el nombre completo / título del marcador (con / sin ruta), respectivamente. The latter three can be preceeded or followed by $$& to prepend or append the original match", // new + "message": "El texto de reemplazo para la expresión regular coincide. Se pueden usar símbolos como $$& o $$1 para referirse a la coincidencia o un contenido de corchete. Los textos especiales \\L$$& y \\U$$& significan una versión en mayúsculas y minúsculas de las coincidencias, respectivamente. Los textos especiales $$URL, $$NAME y $$TITLE significan la URL original (sin modificar) y el nombre completo / título del marcador (con / sin ruta), respectivamente. The latter three can be preceeded or followed by $$& to prepend or append the original match", "description": "Explain that the text will be used as replacement text for the regular expression matches" }, "buttonRuleUp": { diff --git a/_locales/ru/messages.json b/_locales/ru/messages.json index d861db8..e361f02 100644 --- a/_locales/ru/messages.json +++ b/_locales/ru/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Поиск, отображение и удаление дублей закладок и пустых папок", // new (modified): removed описаний + "message": "Поиск, отображение и удаление дублей закладок и пустых папок", "description": "Description of the extension" }, "errorNoBookmarks": { @@ -96,7 +96,7 @@ "description": "Input field for the replacement text for the regular expression matches. The text should be short" }, "titleRuleReplace": { - "message": "Текст замены по соответствию регулярному выражению. Символы типа $$& или $$1 могут использоваться для обозначения соответствий или содержимого скобок (). Специальные тексты \\L$$& и \\U$$& означают нижний и верхний регистр соответствий. Специальные тексты $$URL, $$NAME, $$TITLE означают начальные (немодифицированные) URL-ы и полные названия/заголовки закладок (с/без пути) соответственно. The latter three can be preceeded or followed by $$& to prepend or append the original match", // new + "message": "Текст замены по соответствию регулярному выражению. Символы типа $$& или $$1 могут использоваться для обозначения соответствий или содержимого скобок (). Специальные тексты \\L$$& и \\U$$& означают нижний и верхний регистр соответствий. Специальные тексты $$URL, $$NAME, $$TITLE означают начальные (немодифицированные) URL-ы и полные названия/заголовки закладок (с/без пути) соответственно. The latter three can be preceeded or followed by $$& to prepend or append the original match", "description": "Explain that the text will be used as replacement text for the regular expression matches" }, "buttonRuleUp": { diff --git a/_locales/uk/messages.json b/_locales/uk/messages.json index e7de62f..81c7ebd 100644 --- a/_locales/uk/messages.json +++ b/_locales/uk/messages.json @@ -4,7 +4,7 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "Пошук, відображення та видалення дублів закладок або порожніх папок", // new (modified): removed або описів + "message": "Пошук, відображення та видалення дублів закладок або порожніх папок", "description": "Description of the extension" }, "errorNoBookmarks": { @@ -96,7 +96,7 @@ "description": "Input field for the replacement text for the regular expression matches. The text should be short" }, "titleRuleReplace": { - "message": "Текст заміни по відповідності регулярному виразу. Символи типу $$& чи $$1 можуть використовуватися для позначення відповідностей чи вмісту дужок (). Спеціальні тексти \\L$$& та \\U$$& означають нижній та верхній регістр відповідно. Спеціальні тексти $$URL, $$NAME, $$TITLE означають початкові (немодифіковані) URL-и і повні назви/заголовки закладок (з/без шляху) відповідно. The latter three can be preceeded or followed by $$& to prepend or append the original match", // new + "message": "Текст заміни по відповідності регулярному виразу. Символи типу $$& чи $$1 можуть використовуватися для позначення відповідностей чи вмісту дужок (). Спеціальні тексти \\L$$& та \\U$$& означають нижній та верхній регістр відповідно. Спеціальні тексти $$URL, $$NAME, $$TITLE означають початкові (немодифіковані) URL-и і повні назви/заголовки закладок (з/без шляху) відповідно. The latter three can be preceeded or followed by $$& to prepend or append the original match", "description": "Explain that the text will be used as replacement text for the regular expression matches" }, "buttonRuleUp": { diff --git a/_locales/zh_CN/messages.json b/_locales/zh_CN/messages.json index faad439..267fa5a 100644 --- a/_locales/zh_CN/messages.json +++ b/_locales/zh_CN/messages.json @@ -4,215 +4,211 @@ "description": "Name of the extension" }, "extensionDescription": { - "message": "显示/移除重复的书签或空文件夹", // new: modified from "显示/移除重复的书签、空文件夹或描述" + "message": "显示/移除重复的书签或空文件夹", "description": "Description of the extension" }, "errorNoBookmarks": { - "message": "This browser version is lacking the required bookmarks API. Bookmark Dupes and similar extensions cannot work without that API. Sorry.", // new + "message": "This browser version is lacking the required bookmarks API. Bookmark Dupes and similar extensions cannot work without that API. Sorry.", "description": "Report that the extension will not work on that browser" }, "warningExpertStrong": { - "message": "\u26A0\u00A0", // new + "message": "\u26A0\u00A0", "description": "First part of warning to enable expert mode: strong" }, "warningExpertText": { - "message": "Do not enable expert mode unless you fully understand the consequences!", // new + "message": "Do not enable expert mode unless you fully understand the consequences!", "description": "Second part of warning to enable expert mode: normal" }, "checkboxRules": { - "message": "Expert mode: use customized rules to match similar bookmarks or to ignore bookmarks when searching.", // new + "message": "Expert mode: use customized rules to match similar bookmarks or to ignore bookmarks when searching.", "description": "Checkbox text for switching on/off regexp rules" }, "titleCheckboxRules": { - "message": "With this option bookmarks can be ignored or similar bookmarks can be found. The details are specified in terms of regular expressions.", // new + "message": "With this option bookmarks can be ignored or similar bookmarks can be found. The details are specified in terms of regular expressions.", "description": "Explain what regular expresssions are used for" }, "radioFilter": { - "message": "Filter", // new + "message": "Filter", "description": "Radio button for filtering a bookmark. The text should be short" }, "titleRadioFilter": { - "message": "Bookmarks matching the criteria will be ignored.", // new + "message": "Bookmarks matching the criteria will be ignored.", "description": "Explain that by choosing that button the corresponding bookmark will be ignored" }, "radioUrl": { - "message": "Modify", // new + "message": "Modify", "description": "Radio button for preprocessing a URL. The text should be short" }, "titleRadioUrl": { - "message": "Before checking URLs to find bookmark dupes, the URL of matching bookmarks will be preprocessed according to the specified rule.", // new + "message": "Before checking URLs to find bookmark dupes, the URL of matching bookmarks will be preprocessed according to the specified rule.", "description": "Explain that by choosing that button the url of matching bookmarks will be preprocessed" }, "radioOff": { - "message": "Off", // new + "message": "Off", "description": "Radio button for ignoring the rule. The text should be short" }, "titleRadioOff": { - "message": "This rule has no effect.", // new + "message": "This rule has no effect.", "description": "Explain that by choosing that button the rule has no effect" }, "ruleName": { - "message": "Name matches", // new + "message": "Name matches", "description": "Input field for matching the name. The text should be short" }, "titleRuleName": { - "message": "The rule applies to a bookmark if the bookmark path (folders + name) matches the regular expression. The separator for folders is \\0 or \\x00.", // new + "message": "The rule applies to a bookmark if the bookmark path (folders + name) matches the regular expression. The separator for folders is \\0 or \\x00.", "description": "Explain that bookmarks whose name matches the regular expression will be selected and that folders names are separated by \\0 or \\x00" }, "ruleNameNegation": { - "message": "Name does not match", // new + "message": "Name does not match", "description": "Input field for not matching the name. The text should be short" }, "titleRuleNameNegation": { - "message": "The rule applies to a bookmark if the bookmark path (folders + name) does not match the regular expression. The separator for folders is \\0 or \\x00.", // new + "message": "The rule applies to a bookmark if the bookmark path (folders + name) does not match the regular expression. The separator for folders is \\0 or \\x00.", "description": "Explain that bookmarks whose names does not match the regular expression will be selected and that folders names are separated by \\0 or \\x00" }, "ruleUrl": { - "message": "URL matches", // new + "message": "URL matches", "description": "Input field for matching the URL. The text should be short" }, "titleRuleUrl": { - "message": "The rule applies to a bookmark if its URL matches the regular expression.", // new + "message": "The rule applies to a bookmark if its URL matches the regular expression.", "description": "Explain that bookmarks whose URL matches the regular expression will be selected" }, "ruleUrlNegation": { - "message": "URL does not match", // new + "message": "URL does not match", "description": "Input field for matching the URL. The text should be short" }, "titleRuleUrlNegation": { - "message": "The rule applies to a bookmark if its URL does not match the regular expression.", // new + "message": "The rule applies to a bookmark if its URL does not match the regular expression.", "description": "Explain that bookmarks whose URL does not match the regular expression will be selected" }, "ruleSearch": { - "message": "Replace URL matches", // new + "message": "Replace URL matches", "description": "Input field for the search part of the URL. The text should be short" }, "titleRuleSearch": { - "message": "When comparing URLs the parts matching the regular expression will be replaced by the subsequent text.", // new + "message": "When comparing URLs the parts matching the regular expression will be replaced by the subsequent text.", "description": "Explain that the corresponding parts of the URL will be replaced for comparison" }, "ruleReplace": { - "message": "by", // new + "message": "by", "description": "Input field for the replacement text for the regular expression matches. The text should be short" }, "titleRuleReplace": { - "message": "The replacement text for the regular expresssion matches. Symbols like $$& or $$1 can be used to refer to the match or a brace content. The special texts \\L$$& and \\U$$& mean a lower and upper case version of the matches, respectively. The special texts $$URL, $$NAME, and $$TITLE mean the original (unmodified) URL and the bookmark full name/title (with/without path), respectively. The latter three can be preceeded or followed by $$& to prepend or append the original match", // new + "message": "The replacement text for the regular expresssion matches. Symbols like $$& or $$1 can be used to refer to the match or a brace content. The special texts \\L$$& and \\U$$& mean a lower and upper case version of the matches, respectively. The special texts $$URL, $$NAME, and $$TITLE mean the original (unmodified) URL and the bookmark full name/title (with/without path), respectively. The latter three can be preceeded or followed by $$& to prepend or append the original match", "description": "Explain that the text will be used as replacement text for the regular expression matches" }, "buttonRuleUp": { - "message": "\u21E7", // new + "message": "\u21E7", "description": "Button for moving a rule up. The text should be short" }, "buttonRuleUpFontWeight": { - "message": "bolder", // new (keep unless buttonRuleUp is changed) + "message": "bolder", "description": "font-weight property for buttonRuleUp" }, "titleButtonRuleUp": { - "message": "\u21E7", // new (until it is translated the symbol is perhaps better than English) -// "message": "The rule will be moved up.", + "message": "\u21E7", "description": "Explain that the rule will be moved up" }, "buttonRuleDown": { - "message": "\u21E9", // new + "message": "\u21E9", "description": "Button for moving a rule down. The text should be short" }, "buttonRuleDownFontWeight": { - "message": "bolder", // new (keep unless buttonRuleDown is changed) + "message": "bolder", "description": "font-weight property for buttonRuleDown" }, "titleButtonRuleDown": { - "message": "\u21E9", // new (until it is translated the symbol is perhaps better than English) -// "message": "The rule will be moved down.", + "message": "\u21E9", "description": "Explain that the rule will be moved down" }, "buttonRuleSub": { - "message": "\u2716", // new + "message": "\u2716", "description": "Button for removing a rule. The text should be short" }, "titleButtonRuleSub": { - "message": "Remove this rule.", // new + "message": "Remove this rule.", "description": "Explain that the rule will be removed" }, "buttonRuleAdd": { - "message": "\u2795", // new + "message": "\u2795", "description": "Button for inserting a new rule. The text should be short" }, "titleButtonRuleAdd": { - "message": "Insert a new rule.", // new + "message": "Insert a new rule.", "description": "Explain that a new rule will be inserted" }, "trashFolder": { - "message": "Dupes", // new + "message": "Dupes", "description": "The name of the trash folder. Should match regExpTrashFolder" }, "regExpTrashFolder": { - "message": "Dupes", // new + "message": "Dupes", "description": "A regular expression matching trashFolder; symbols like .?\\[]()* should be quoted by \\ or surrounded by []" }, "buttonRulesDefault": { - "message": "\u21D0 default rules", // new + "message": "\u21D0 default rules", "description": "Button for restoring default rules. The text should be short" }, "titleButtonRulesDefault": { - "message": "Replace the currently displayed rules by default rules.", // new + "message": "Replace the currently displayed rules by default rules.", "description": "Explain that current rules will be replaced by default rules" }, "buttonRulesStoreLocal": { - "message": "\u21D2 local storage", // new + "message": "\u21D2 local storage", "description": "Button for putting rules to local storage. The text should be short" }, "titleButtonRulesStoreLocal": { - "message": "Put the current rules to the browser's local storage area, possibly replacing earlier stored rules.", // new + "message": "Put the current rules to the browser's local storage area, possibly replacing earlier stored rules.", "description": "Explain that current rules will replace those in the browser's local storage area" }, "buttonRulesRestoreLocal": { - "message": "\u21D0 local storage", // new + "message": "\u21D0 local storage", "description": "Button for restoring rules from local storage. The text should be short" }, "titleButtonRulesRestoreLocal": { - "message": "Replace the currently displayed rules by those from the browser's local storage area.", // new + "message": "Replace the currently displayed rules by those from the browser's local storage area.", "description": "Explain that current rules will be replaced by those from the browser's local storage area" }, "buttonRulesCleanLocal": { - "message": "\u2716 local storage", // new + "message": "\u2716 local storage", "description": "Button for cleaning local storage. The text should be short" }, "titleButtonRulesCleanLocal": { - "message": "The browser's local storage area will be cleaned from stored rules. The stored rules will be lost.", // new + "message": "The browser's local storage area will be cleaned from stored rules. The stored rules will be lost.", "description": "Explain that the browser's local storage area will be cleaned from stored rules" }, "buttonRulesStoreSync": { - "message": "\u21D2 sync storage", // new + "message": "\u21D2 sync storage", "description": "Button for putting rules to sync storage. The text should be short" }, "titleButtonRulesStoreSync": { - "message": "Put the current rules to the browser's sync storage area, possibly replacing earlier stored rules.", // new + "message": "Put the current rules to the browser's sync storage area, possibly replacing earlier stored rules.", "description": "Explain that current rules will replace those in the browser's sync storage area" }, "buttonRulesRestoreSync": { - "message": "\u21D0 sync storage", // new + "message": "\u21D0 sync storage", "description": "Button for restoring rules from sync storage. The text should be short" }, "titleButtonRulesRestoreSync": { - "message": "Replace the currently displayed rules by those from the browser's sync storage area.", // new + "message": "Replace the currently displayed rules by those from the browser's sync storage area.", "description": "Explain that current rules will be replaced by those from the browser's sync storage area" }, "buttonRulesCleanSync": { - "message": "\u2716 sync storage", // new + "message": "\u2716 sync storage", "description": "Button for cleaning sync storage. The text should be short" }, "titleButtonRulesCleanSync": { - "message": "The browser's sync storage area will be cleaned from stored rules. The stored rules will be lost.", // new + "message": "The browser's sync storage area will be cleaned from stored rules. The stored rules will be lost.", "description": "Explain that the sync browser's storage area will be cleaned from stored rules" }, "buttonListDupes": { - "message": "Dupes", // new -// changed "Exact dupes" -// "message": "完全重复", + "message": "Dupes", "description": "Button for listing dupes" }, "titleButtonListDupes": { - "message": "(Re)calculate the list of bookmark dupes. Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", // new + "message": "(Re)calculate the list of bookmark dupes. Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", "description": "Explain that the list of bookmark dupes will be (re)calculated, and how bookmark dupes are defined" }, "buttonListEmpty": { @@ -220,15 +216,15 @@ "description": "Button for listing empty folders" }, "titleButtonListEmpty": { - "message": "(Re)calculate the list of empty folders. The result might falsely contain live bookmarks.", // new + "message": "(Re)calculate the list of empty folders. The result might falsely contain live bookmarks.", "description": "Explain that the list of empty folders will be (re)calculated, and that the result might falsely contain live bookmarks" }, "buttonListSingles": { - "message": "Non-Dupes", // new + "message": "Non-Dupes", "description": "Button for listing all non-dupe bookmarks" }, "titleButtonListSingles": { - "message": "(Re)calculate the list of non-dupe bookmark. Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", // new + "message": "(Re)calculate the list of non-dupe bookmark. Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", "description": "Explain that the list of all non-dupe bookmarks will be (re)calculated, and how bookmark dupes are defined" }, "buttonMarkButFirst": { @@ -236,7 +232,7 @@ "description": "Button for marking all but first" }, "titleButtonMarkButFirst": { - "message": "Additionally the first bookmark in each group will be unmarked.", // new + "message": "Additionally the first bookmark in each group will be unmarked.", "description": "Explain that additionally the first bookmark in each group will be unmarked" }, "buttonMarkButLast": { @@ -244,23 +240,23 @@ "description": "Button for marking all but last" }, "titleButtonMarkButLast": { - "message": "Additionally the last bookmark in each group will be unmarked.", // new + "message": "Additionally the last bookmark in each group will be unmarked.", "description": "Explain that additionally the last bookmark in each group will be unmarked" }, "buttonMarkButOldest": { - "message": "Mark all but oldest in each group", // new + "message": "Mark all but oldest in each group", "description": "Button for marking all but oldest" }, "titleButtonMarkButOldest": { - "message": "Additionally the oldest bookmark in each group will be unmarked.", // new + "message": "Additionally the oldest bookmark in each group will be unmarked.", "description": "Explain that additionally the oldest bookmark in each group will be unmarked" }, "buttonMarkButNewest": { - "message": "Mark all but newest in each group", // new + "message": "Mark all but newest in each group", "description": "Button for marking all but newest" }, "titleButtonMarkButNewest": { - "message": "Additionally the newest bookmark in each group will be unmarked.", // new + "message": "Additionally the newest bookmark in each group will be unmarked.", "description": "Explain that additionally the newest bookmark in each group will be unmarked" }, "buttonMarkAll": { @@ -268,7 +264,7 @@ "description": "Button for marking all" }, "titleButtonMarkAll": { - "message": "Mark all bookmarks.", // new + "message": "Mark all bookmarks.", "description": "Explain that all bookmarks will be marked" }, "buttonUnmarkAll": { @@ -276,127 +272,127 @@ "description": "Button for unmarking all" }, "titleButtonUnmarkAll": { - "message": "Unmark all bookmarks.", // new + "message": "Unmark all bookmarks.", "description": "Explain that all bookmarks will be unmarked" }, "optionNonFolder": { - "message": "-- Select a folder to get corresponding buttons for marking --", // new + "message": "-- Select a folder to get corresponding buttons for marking --", "description": "Name of the non-folder. It might indicate that buttons for markings appear if another name is selected." }, "optionSameFolder": { - "message": "-- Identical folders in the same group --", // new + "message": "-- Identical folders in the same group --", "description": "Name of a special folder selection: Identical folders in the same group" }, "titleSelectFolder": { - "message": "If a folder is selected corresponding buttons will appear for marking.", // new + "message": "If a folder is selected corresponding buttons will appear for marking.", "description": "Explain that selecting a folder will provide corresponding buttons for marking" }, "buttonMarkFolder": { - "message": "Mark all from selected folder", // new + "message": "Mark all from selected folder", "description": "Button for marking all of the selected folder" }, "titleButtonMarkFolder": { - "message": "Mark all bookmarks from the selected folder.", // new + "message": "Mark all bookmarks from the selected folder.", "description": "Explain that all bookmarks of selected folder will be marked" }, "buttonUnmarkFolder": { - "message": "Unmark all from selected folder", // new + "message": "Unmark all from selected folder", "description": "Button for unmarking all of selected folder" }, "titleButtonUnmarkFolder": { - "message": "Unmark all bookmarks from selected folder.", // new + "message": "Unmark all bookmarks from selected folder.", "description": "Explain that all bookmarks of selected folder will be unmarked" }, "buttonMarkFolderOther": { - "message": "In groups with selected folder mark all but these", // new + "message": "In groups with selected folder mark all but these", "description": "Button for marking all but selected folder in groups with it" }, "titleButtonMarkFolderOther": { - "message": "Additionally the bookmarks from the selected folder will be unmarked.", // new + "message": "Additionally the bookmarks from the selected folder will be unmarked.", "description": "Explain that all bookmarks of selected folder will be unmarked" }, "buttonMarkFolderButFirst": { - "message": "In groups with selected folder unmark all others or first", // new + "message": "In groups with selected folder unmark all others or first", "description": "Button for unmarking all but selected folder or first in groups with it" }, "titleButtonMarkFolderButFirst": { - "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the first.", // new + "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the first.", "description": "Explain that in groups with selected folder all bookmarks from that folder will be marked and all others unmarked; if there are no others, the first is unmarked" }, "buttonMarkFolderButLast": { - "message": "In groups with selected folder unmark all others or last", // new + "message": "In groups with selected folder unmark all others or last", "description": "Button for unmarking all but selected folder or last in groups with it" }, "titleButtonMarkFolderButLast": { - "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the last.", // new + "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the last.", "description": "Explain that in groups with selected folder all bookmarks from that folder will be marked and all others unmarked; if there are no others, the last is unmarked" }, "buttonMarkFolderButOldest": { - "message": "In groups with selected folder unmark all others or oldest", // new + "message": "In groups with selected folder unmark all others or oldest", "description": "Button for unmarking all but selected folder or oldest in groups with it" }, "titleButtonMarkFolderButOldest": { - "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the oldest.", // new + "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the oldest.", "description": "Explain that in groups with selected folder all bookmarks from that folder will be marked and all others unmarked; if there are no others, the oldest is unmarked" }, "buttonMarkFolderButNewest": { - "message": "In groups with selected folder unmark all others or newest", // new + "message": "In groups with selected folder unmark all others or newest", "description": "Button for unmarking all but selected folder or newest in groups with it" }, "titleButtonMarkFolderButNewest": { - "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the newest.", // new + "message": "In groups with selected folder mark all bookmarks from that folder and unmark all others. If there are no others, unmark the newest.", "description": "Explain that in groups with selected folder all bookmarks from that folder will be marked and all others unmarked; if there are no others, the newest is unmarked" }, "buttonMarkSame": { - "message": "Mark all identical folders in same group", // new + "message": "Mark all identical folders in same group", "description": "Button for marking all of the same folders in the same group" }, "titleButtonMarkSame": { - "message": "Mark all bookmarks from identical folders in the same group.", // new + "message": "Mark all bookmarks from identical folders in the same group.", "description": "Explain that all bookmarks of identical folders in the same group will be marked" }, "buttonUnmarkSame": { - "message": "Unmark all identical folders in same group", // new + "message": "Unmark all identical folders in same group", "description": "Button for unmarking all of the same folders in the same group" }, "titleButtonUnmarkSame": { - "message": "Unmark all bookmarks from identical folders in the same group.", // new + "message": "Unmark all bookmarks from identical folders in the same group.", "description": "Explain that all bookmarks of identical folders in the same group will be unmarked" }, "buttonMarkSameButFirst": { - "message": "Mark all but first of identical folders in same group", // new + "message": "Mark all but first of identical folders in same group", "description": "Button for marking all but the first of identical folders in the same group" }, "titleButtonMarkSameButFirst": { - "message": "Additionally the first of identical folders in the same group will be unmarked.", // new + "message": "Additionally the first of identical folders in the same group will be unmarked.", "description": "Explain that additionally for identical folders in the same group the first will be unmarked" }, "buttonMarkSameButLast": { - "message": "Mark all but last of identical folders in same group", // new + "message": "Mark all but last of identical folders in same group", "description": "Button for marking all but the last of identical folders in the same group" }, "titleButtonMarkSameButLast": { - "message": "Additionally the last of identical folders in the same group will be unmarked.", // new + "message": "Additionally the last of identical folders in the same group will be unmarked.", "description": "Explain that additionally for identical folders in the same group the last will be unmarked" }, "buttonMarkSameButOldest": { - "message": "Mark all but oldest of identical folders in same group", // new + "message": "Mark all but oldest of identical folders in same group", "description": "Button for marking all but the oldest of identical folders in the same group" }, "titleButtonMarkSameButOldest": { - "message": "Additionally the oldest of identical folders in the same group will be unmarked.", // new + "message": "Additionally the oldest of identical folders in the same group will be unmarked.", "description": "Explain that additionally for identical folders in the same group the oldest will be unmarked" }, "buttonMarkSameButNewest": { - "message": "Mark all but newest of identical folders in same group", // new + "message": "Mark all but newest of identical folders in same group", "description": "Button for marking all but the newest of identical folders in the same group" }, "titleButtonMarkSameButNewest": { - "message": "Additionally the newest of identical folders in the same group will be unmarked.", // new + "message": "Additionally the newest of identical folders in the same group will be unmarked.", "description": "Explain that additionally for identical folders in the same group the newest will be unmarked" }, "warningRemoveMarked": { - "message": "\u26A0", // new + "message": "\u26A0", "description": "Text in front of button for removing marked bookmarks" }, "buttonRemoveMarked": { @@ -404,11 +400,11 @@ "description": "Button for removing marked bookmarks" }, "titleButtonRemoveMarked": { - "message": "Marked bookmarks refer to those since you last pressed the button to calculate the list.", // new + "message": "Marked bookmarks refer to those since you last pressed the button to calculate the list.", "description": "Explain that bookmarks refer to those of last update of the list" }, "buttonMoveMarked": { - "message": "Move marked bookmarks to “{0}”", // new + "message": "Move marked bookmarks to “{0}”", "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, "buttonStopRemoving": { @@ -416,19 +412,19 @@ "description": "Button for emergency stop of bookmark removing" }, "buttonStopMoving": { - "message": "Stop moving!", // new + "message": "Stop moving!", "description": "Button for emergency stop of bookmark moving" }, "checkboxFullUrl": { - "message": "Display URL in listing. In any case the URL will appear if you hover over the bookmark.", // new + "message": "Display URL in listing. In any case the URL will appear if you hover over the bookmark.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" }, "checkboxExtra": { - "message": "Display replaced URL content in listing", // new + "message": "Display replaced URL content in listing", "description": "Checkbox for displaying the replaced URL content in listing" }, "messageCount": { - "message": "$TOTAL$ bookmarks marked", // new + "message": "$TOTAL$ bookmarks marked", "description": "Report specified number of marked bookmarks", "placeholders": { "total": { @@ -438,13 +434,11 @@ } }, "messageNoCount": { - "message": "Number of marked bookmarks not displayed for speed reasons", // new + "message": "Number of marked bookmarks not displayed for speed reasons", "description": "Report that marks are not counted for speed reasons" }, "messageMatches": { - "message": "$TOTAL$ (of $ALL$) dupes in $GROUPS$ groups", // new -// changed "$TOTAL$ (of $ALL$) exact dupes in $GROUPS$ groups" -// "message": "$TOTAL$ / $ALL$ 个完全重复,共 $GROUPS$ 组", + "message": "$TOTAL$ (of $ALL$) dupes in $GROUPS$ groups", "description": "Report specified numbers of matches and groups of all", "placeholders": { "total": { @@ -462,7 +456,7 @@ } }, "titleMessageMatches": { - "message": "Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", // new + "message": "Two bookmarks are considered to be dupes if their URLs coincide. In expert mode, the selected URL preprocessing (substitution) rules are applied before the URLs are compared.", "description": "Explain how bookmark dupes are defined" }, "messageEmpty": { @@ -476,11 +470,11 @@ } }, "titleMessageEmpty": { - "message": "The list might falsely contain live bookmarks.", // new + "message": "The list might falsely contain live bookmarks.", "description": "Explain that the list might falsely contain live bookmarks" }, "messageSingles": { - "message": "$TOTAL$ (of $ALL$) non-dupe bookmarks found", // new + "message": "$TOTAL$ (of $ALL$) non-dupe bookmarks found", "description": "Report specified number of non-dupe bookmarks", "placeholders": { "total": { @@ -494,7 +488,7 @@ } }, "titleMessageSingles": { - "message": "List of non-dupe bookmarks", // new + "message": "List of non-dupe bookmarks", "description": "Explain that list of non-dupe bookmarks is shown" }, "messageCalculating": { @@ -507,7 +501,7 @@ "placeholders": { "error": { "content": "$1", - "example": "error description" // new + "example": "error description" } } }, @@ -549,7 +543,7 @@ "placeholders": { "error": { "content": "$1", - "example": "error description" // new + "example": "error description" }, "total": { "content": "$2", @@ -558,11 +552,11 @@ } }, "messageMoveMarked": { - "message": "Moving marked bookmarks", // new + "message": "Moving marked bookmarks", "description": "Report that moving of marked bookmarks started" }, "messageMoveProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ of $TODO$ bookmarks moved", // new + "message": "($PERCENTAGE$ %) $TOTAL$ of $TODO$ bookmarks moved", "description": "Report that specified number/total/percentage of bookmarks are moved", "placeholders": { "total": { @@ -580,7 +574,7 @@ } }, "messageMoveSuccess": { - "message": "$TOTAL$ bookmarks moved!", // new + "message": "$TOTAL$ bookmarks moved!", "description": "Report success when moving specified number of bookmarks", "placeholders": { "total": { @@ -590,12 +584,12 @@ } }, "messageMoveError": { - "message": "Error after moving $TOTAL$ bookmarks: $ERROR$", // new + "message": "Error after moving $TOTAL$ bookmarks: $ERROR$", "description": "Report specified error after moving specified number of bookmarks", "placeholders": { "error": { "content": "$1", - "example": "error description" // new + "example": "error description" }, "total": { "content": "$2", @@ -604,7 +598,7 @@ } }, "errorNoBookmarkFolderFound": { - "message": "No bookmark folder found", // new + "message": "No bookmark folder found", "description": "Report that no bookmark folder was found" } } From c1aabd17d9af5dcc94f7fdf02f0b7ad2b0bf96ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20V=C3=A4th?= Date: Mon, 1 Aug 2022 21:22:13 +0200 Subject: [PATCH 11/11] Remove swedish translations unused for Chrome --- _locales/sv_SE/messages.json | 84 ------------------------------------ 1 file changed, 84 deletions(-) diff --git a/_locales/sv_SE/messages.json b/_locales/sv_SE/messages.json index aa3597f..bb888a1 100644 --- a/_locales/sv_SE/messages.json +++ b/_locales/sv_SE/messages.json @@ -227,14 +227,6 @@ "message": "Beräkna (om) listan över icke-bokmärkesdubbletter. Två bokmärken anses vara dubbletter om deras webbadresser sammanfaller. I expertläge tillämpas de valda webbadressförbehandlingsreglerna (ersättningsreglerna) innan webbadresserna jämförs.", "description": "Explain that the list of all non-dupe bookmarks will be (re)calculated, and how bookmark dupes are defined" }, - "buttonListAll": { - "message": "Alla bokmärken", - "description": "Button for listing all bookmarks" - }, - "titleButtonListAll": { - "message": "Beräkna (om) listan över alla bokmärken för att ta bort beskrivningar. Listan består av de bokmärken med en icke-tom webbadress.", - "description": "Explain that the list of all bookmarks will be (re)calculated for stripping descriptions and that it consists of those bookmarks with a nonempty URL" - }, "buttonMarkButFirst": { "message": "Markera alla utom den första i varje grupp", "description": "Button for marking all but first" @@ -415,18 +407,6 @@ "message": "Flytta markerade bokmärken till “{0}”", "description": "Button for moving marked bookmarks to trash folder. The trash folder name in the text should be {0}" }, - "warningStripMarked": { - "message": "\u26A0", - "description": "Text in front of button for stripping descriptions of marked bookmarks" - }, - "buttonStripMarked": { - "message": "Rensa beskrivningar av markerade bokmärken", - "description": "Button for stripping descriptions of marked bookmarks" - }, - "titleButtonStripMarked": { - "message": "Rensning av beskrivningar uppdaterar bokmärkets interna genereringsdatum. Dessutom kommer den att flytta bokmärket till den plats där det var sedan du senast tryckte på knappen för att beräkna denna listan.", - "description": "Explain the side effects that stripping updates the date of bookmarks and moves them to the location of the last calculation of the list" - }, "buttonStopRemoving": { "message": "Stoppa borttagningen!", "description": "Button for emergency stop of bookmark removing" @@ -435,10 +415,6 @@ "message": "Stoppa flyttningen!", "description": "Button for emergency stop of bookmark moving" }, - "buttonStopStripping": { - "message": "Stoppa rensningen!", - "description": "Button for emergency stop of description stripping" - }, "checkboxFullUrl": { "message": "Visa webbadressen i listan. Webbadressen visas om du håller muspekaren över bokmärket.", "description": "Checkbox for displaying URL in listing. Explain that the URL will appear as title anyway" @@ -515,20 +491,6 @@ "message": "Lista över bokmärken som är icke-dubbletter", "description": "Explain that list of non-dupe bookmarks is shown" }, - "messageAll": { - "message": "Hittade $TOTAL$ bokmärken", - "description": "Report specified number of bookmarks", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "titleMessageAll": { - "message": "Listan består av bokmärken som har en webbadress.", - "description": "Explain that the list consists of those bookmarks with a nonempty URL" - }, "messageCalculating": { "message": "Söker", "description": "Report that calculation started" @@ -638,51 +600,5 @@ "errorNoBookmarkFolderFound": { "message": "Hittade inga bokmärkesmappar", "description": "Report that no bookmark folder was found" - }, - "messageStripMarked": { - "message": "Rensar beskrivning av markerade bokmärken", - "description": "Report that description stripping started" - }, - "messageStripProgress": { - "message": "($PERCENTAGE$ %) $TOTAL$ av $TODO$ beskrivningar rensade", - "description": "Report that specified number/total/percentage of descriptions are stripped", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - }, - "todo": { - "content": "$2", - "example": "1" - }, - "percentage": { - "content": "$3", - "example": "0" - } - } - }, - "messageStripSuccess": { - "message": "$TOTAL$ beskrivningar rensade!", - "description": "Report success when stripping specified number of descriptions", - "placeholders": { - "total": { - "content": "$1", - "example": "0" - } - } - }, - "messageStripError": { - "message": "Fel efter rensning av $TOTAL$ beskrivningar: $ERROR$", - "description": "Report specified error after stripping specified number of descriptions", - "placeholders": { - "error": { - "content": "$1", - "example": "error description" - }, - "total": { - "content": "$2", - "example": "0" - } - } } }