浏览代码

Refactor options page and add "Bookmarks > ignored folders" option

Gildas 5 年之前
父节点
当前提交
b7dcd632dc

+ 18 - 2
_locales/de/messages.json

@@ -295,6 +295,14 @@
 		"message": "Audioquellen entfernen",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Datei-Ziel",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Automatische Speicherung",
 		"description": "Options sub-title: 'Auto-save'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "In die Zwischenablage speichern",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "Existenzberechtigung hinzufügen",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "In Google Drive speichern",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "Die Seite eines neu angelegten Bookmark speichern",
@@ -479,6 +491,10 @@
 		"message": "Das neue Bookmark mit der gespeicherten Seite verlinken",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "Ignorierte Ordner",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "Hilfe",
 		"description": "Options help link"

+ 20 - 4
_locales/en/messages.json

@@ -295,6 +295,14 @@
 		"message": "remove audio sources",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Auto-save",
 		"description": "Options sub-title: 'Auto-save'"
@@ -456,8 +464,12 @@
 		"description": "Options page label: 'save raw page'"
 	},
 	"optionSaveToClipboard": {
-		"message": "save to clipboard",
-		"description": "Options page label: 'save to clipboard'"
+		"message": "copy to clipboard",
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "add proof of existence",
@@ -468,8 +480,8 @@
 		"description": "Popup text displayed wen enabling the option 'add proof of existence'"
 	},
 	"optionSaveToGDrive": {
-		"message": "save to Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"message": "upload to Google Drive",
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "save the page of a newly created bookmark",
@@ -479,6 +491,10 @@
 		"message": "link the new bookmark to the saved page",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "help",
 		"description": "Options help link"

+ 19 - 3
_locales/es/messages.json

@@ -295,6 +295,14 @@
 		"message": "eliminar fuentes de audio",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destino",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Marcadores",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Auto-guardado",
 		"description": "Options sub-title: 'Auto-save'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "guardar en el portapapeles",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "añadir prueba de existencia",
@@ -468,8 +480,8 @@
 		"description": "Popup text displayed wen enabling the option 'add proof of existence'"
 	},
 	"optionSaveToGDrive": {
-		"message": "save en Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"message": "subir a Google Drive",
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "guardar la página de un marcador recién creado",
@@ -479,6 +491,10 @@
 		"message": "enlazar el nuevo marcador a la página guardada",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "carpetas ignoradas",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "ayuda",
 		"description": "Options help link"

+ 20 - 4
_locales/fr/messages.json

@@ -295,6 +295,14 @@
 		"message": "supprimer les sources audio",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Signets",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Auto-sauvegarde",
 		"description": "Options sub-title: 'Auto-save'"
@@ -456,8 +464,12 @@
 		"description": "Options page label: 'save raw page'"
 	},
 	"optionSaveToClipboard": {
-		"message": "sauvegarder dans le presse-papiers",
-		"description": "Options page label: 'save to clipboard'"
+		"message": "copier dans le presse-papiers",
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "enregistrer dans le système de fichiers",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "ajouter une preuve d'existence",
@@ -468,8 +480,8 @@
 		"description": "Popup text displayed wen enabling the option 'add proof of existence'"
 	},
 	"optionSaveToGDrive": {
-		"message": "sauvegarder dans Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"message": "téléverser sur Google Drive",
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "sauvegarder la page d'un signet nouvellement créé",
@@ -479,6 +491,10 @@
 		"message": "lier le nouveau signet à la page sauvegardée",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "dossiers ignorés",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "aide (anglais)",
 		"description": "Options help link"

+ 27 - 11
_locales/ja/messages.json

@@ -3,14 +3,14 @@
 		"message": "完全なページを単一の HTML ファイルに保存する",
 		"description": "Description of the extension."
 	},
-    "commandSaveSelectedTabs": {
-        "message": "Save the selected tabs or their selected contents",
-        "description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
-    },
-    "commandSaveAllTabs": {
-        "message": "すべてのタブを保存",
-        "description": "Command (Ctrl+Shift+U): 'Save all tabs'"
-    },
+	"commandSaveSelectedTabs": {
+		"message": "Save the selected tabs or their selected contents",
+		"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
+	},
+	"commandSaveAllTabs": {
+		"message": "すべてのタブを保存",
+		"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
+	},
 	"menuSavePage": {
 		"message": "SingleFile でページを保存",
 		"description": "Menu entry: 'Save page with SingleFile'"
@@ -295,6 +295,14 @@
 		"message": "オーディオソースを削除する",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "自動保存",
 		"description": "Options sub-title: 'Auto-save'"
@@ -382,7 +390,7 @@
 	"optionAutoSaveExternalSave": {
 		"message": "save the page with SingleFile Companion",
 		"description": "Options page label: 'save the page with SingleFile Companion'"
-	},	
+	},
 	"optionsEditorSubTitle": {
 		"message": "注釈エディタ",
 		"description": "Options sub-title: 'Annotation editor'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "クリップボードに保存する",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "ブロックチェーン証明を追加する",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "Google Drive に保存",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "新しく作成したブックマークのページを保存する",
@@ -479,6 +491,10 @@
 		"message": "新しいブックマークを保存したページにリンクさせることを可能にする",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "ヘルプ",
 		"description": "Options help link"

+ 27 - 11
_locales/pl/messages.json

@@ -3,14 +3,14 @@
 		"message": "Zapisuj kompletną stronę w pojedynczym pliku HTML.",
 		"description": "Description of the extension."
 	},
-    "commandSaveSelectedTabs": {
-        "message": "Zapisz wybrane karty lub ich wybraną zawartość",
-        "description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
-    },
-    "commandSaveAllTabs": {
-        "message": "Zapisz wszystkie karty",
-        "description": "Command (Ctrl+Shift+U): 'Save all tabs'"
-    },
+	"commandSaveSelectedTabs": {
+		"message": "Zapisz wybrane karty lub ich wybraną zawartość",
+		"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
+	},
+	"commandSaveAllTabs": {
+		"message": "Zapisz wszystkie karty",
+		"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
+	},
 	"menuSavePage": {
 		"message": "Zapisz stronę z SingleFile",
 		"description": "Menu entry: 'Save page with SingleFile'"
@@ -295,6 +295,14 @@
 		"message": "usuwaj źródła audio",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Automatyczny zapis",
 		"description": "Options sub-title: 'Auto-save'"
@@ -382,7 +390,7 @@
 	"optionAutoSaveExternalSave": {
 		"message": "zapisuj stronę z SingleFile Companion",
 		"description": "Options page label: 'save the page with SingleFile Companion'"
-	},	
+	},
 	"optionsEditorSubTitle": {
 		"message": "Edytor adnotacji",
 		"description": "Options sub-title: 'Annotation editor'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "zapisuj do schowka",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "dodawaj dowód istnienia",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "zapisuj na Dysku Google",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "zapisuj stronę nowo utworzonej zakładki",
@@ -479,6 +491,10 @@
 		"message": "łącz nową zakładkę z zapisaną stroną",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "pomoc (w języku angielskim)",
 		"description": "Options help link"

+ 19 - 3
_locales/ru/messages.json

@@ -295,6 +295,14 @@
 		"message": "удалить источники аудио",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Автосохранение",
 		"description": "Options sub-title: 'Auto-save'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "сохранить в буфер обмена",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "добавить доказательство существования",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "сохранить на Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "сохранить страницу недавно созданной закладки",
@@ -479,6 +491,10 @@
 		"message": "связать новую закладку с сохранённой страницей",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "помощь",
 		"description": "Options help link"
@@ -703,4 +719,4 @@
 		"message": "Отмена",
 		"description": "Add URLs popup cancel button: 'Cancel'"
 	}
-}
+}

+ 28 - 12
_locales/uk/messages.json

@@ -3,14 +3,14 @@
 		"message": "Зберегти всю сторінку в один HTML-файл",
 		"description": "Description of the extension."
 	},
-    "commandSaveSelectedTabs": {
-        "message": "Save the selected tabs or their selected contents",
-        "description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
-    },
-    "commandSaveAllTabs": {
-        "message": "Зберегти всі вкладки",
-        "description": "Command (Ctrl+Shift+U): 'Save all tabs'"
-    },
+	"commandSaveSelectedTabs": {
+		"message": "Save the selected tabs or their selected contents",
+		"description": "Command (Ctrl+Shift+Y): 'Save the selected tabs or their selected contents'"
+	},
+	"commandSaveAllTabs": {
+		"message": "Зберегти всі вкладки",
+		"description": "Command (Ctrl+Shift+U): 'Save all tabs'"
+	},
 	"menuSavePage": {
 		"message": "Зберегти сторінку з допомогою SingleFile",
 		"description": "Menu entry: 'Save page with SingleFile'"
@@ -295,6 +295,14 @@
 		"message": "видалити джерела аудіо",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "Автозбереження",
 		"description": "Options sub-title: 'Auto-save'"
@@ -382,7 +390,7 @@
 	"optionAutoSaveExternalSave": {
 		"message": "save the page with SingleFile Companion",
 		"description": "Options page label: 'save the page with SingleFile Companion'"
-	},	
+	},
 	"optionsEditorSubTitle": {
 		"message": "Annotation editor",
 		"description": "Options sub-title: 'Annotation editor'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "зберегти в буфер обміну",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "add proof of existence",
@@ -468,8 +480,8 @@
 		"description": "Popup text displayed wen enabling the option 'add proof of existence'"
 	},
 	"optionSaveToGDrive": {
-		"message": "save to Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"message": "upload to Google Drive",
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "save the page of a newly created bookmark",
@@ -479,6 +491,10 @@
 		"message": "link the new bookmark to the saved page",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "допомога",
 		"description": "Options help link"

+ 19 - 3
_locales/zh_CN/messages.json

@@ -295,6 +295,14 @@
 		"message": "移除音频资源",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "自动保存",
 		"description": "Options sub-title: 'Auto-save'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "保存到剪切板",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "添加证明文件存在的指纹",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "保存到 Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "将该页面保存到一个新创建的书签",
@@ -479,6 +491,10 @@
 		"message": "将新书签的链接指向已保存页面",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "帮助",
 		"description": "Options help link"
@@ -703,4 +719,4 @@
 		"message": "取消",
 		"description": "Add URLs popup cancel button: 'Cancel'"
 	}
-}
+}

+ 19 - 3
_locales/zh_TW/messages.json

@@ -295,6 +295,14 @@
 		"message": "移除音頻資源",
 		"description": "Options page label: 'remove audio sources'"
 	},
+	"optionsDestionationSubTitle": {
+		"message": "Destination",
+		"description": "Options sub-title: 'Destination'"
+	},
+	"optionsBookmarkSubTitle": {
+		"message": "Bookmarks",
+		"description": "Options sub-title: 'Bookmarks'"
+	},
 	"optionsAutoSaveSubTitle": {
 		"message": "自動保存",
 		"description": "Options sub-title: 'Auto-save'"
@@ -457,7 +465,11 @@
 	},
 	"optionSaveToClipboard": {
 		"message": "保存到剪切板",
-		"description": "Options page label: 'save to clipboard'"
+		"description": "Options page label: 'copy to clipboard'"
+	},
+	"optionSaveToFilesystem": {
+		"message": "save to filesystem",
+		"description": "Options page label: 'save to filesystem'"
 	},
 	"optionAddProof": {
 		"message": "添加證明文件存在的指紋",
@@ -469,7 +481,7 @@
 	},
 	"optionSaveToGDrive": {
 		"message": "保存到 Google Drive",
-		"description": "Options page label: 'save to Google Drive'"
+		"description": "Options page label: 'upload to Google Drive'"
 	},
 	"optionSaveCreatedBookmarks": {
 		"message": "將該頁面保存到一個新創建的書籤",
@@ -479,6 +491,10 @@
 		"message": "將新書籤的鏈接指向已保存頁面",
 		"description": "Options page label: 'link the new bookmark to the saved page'"
 	},
+	"optionIgnoredBookmarkFolders": {
+		"message": "ignored folders",
+		"description": "Options page label: 'ignored folders'"
+	},
 	"optionsHelpLink": {
 		"message": "幫助",
 		"description": "Options help link"
@@ -703,4 +719,4 @@
 		"message": "取消",
 		"description": "Add URLs popup cancel button: 'Cancel'"
 	}
-}
+}

+ 24 - 25
extension/ui/bg/ui-options.js

@@ -36,6 +36,7 @@
 	const removeScriptsLabel = document.getElementById("removeScriptsLabel");
 	const saveRawPageLabel = document.getElementById("saveRawPageLabel");
 	const saveToClipboardLabel = document.getElementById("saveToClipboardLabel");
+	const saveToFilesystemLabel = document.getElementById("saveToFilesystemLabel");
 	const addProofLabel = document.getElementById("addProofLabel");
 	const saveToGDriveLabel = document.getElementById("saveToGDriveLabel");
 	const compressHTMLLabel = document.getElementById("compressHTMLLabel");
@@ -73,6 +74,7 @@
 	const saveCreatedBookmarksLabel = document.getElementById("saveCreatedBookmarksLabel");
 	const passReferrerOnErrorLabel = document.getElementById("passReferrerOnErrorLabel");
 	const replaceBookmarkURLLabel = document.getElementById("replaceBookmarkURLLabel");
+	const ignoredBookmarkFoldersLabel = document.getElementById("ignoredBookmarkFoldersLabel");
 	const titleLabel = document.getElementById("titleLabel");
 	const userInterfaceLabel = document.getElementById("userInterfaceLabel");
 	const filenameLabel = document.getElementById("filenameLabel");
@@ -81,6 +83,8 @@
 	const stylesheetsLabel = document.getElementById("stylesheetsLabel");
 	const fontsLabel = document.getElementById("fontsLabel");
 	const otherResourcesLabel = document.getElementById("otherResourcesLabel");
+	const destinationLabel = document.getElementById("destinationLabel");
+	const bookmarksLabel = document.getElementById("bookmarksLabel");
 	const autoSaveLabel = document.getElementById("autoSaveLabel");
 	const autoSettingsLabel = document.getElementById("autoSettingsLabel");
 	const autoSettingsUrlLabel = document.getElementById("autoSettingsUrlLabel");
@@ -120,6 +124,7 @@
 	const saveToClipboardInput = document.getElementById("saveToClipboardInput");
 	const addProofInput = document.getElementById("addProofInput");
 	const saveToGDriveInput = document.getElementById("saveToGDriveInput");
+	const saveToFilesystemInput = document.getElementById("saveToFilesystemInput");
 	const compressHTMLInput = document.getElementById("compressHTMLInput");
 	const compressCSSInput = document.getElementById("compressCSSInput");
 	const loadDeferredImagesInput = document.getElementById("loadDeferredImagesInput");
@@ -151,6 +156,7 @@
 	const saveCreatedBookmarksInput = document.getElementById("saveCreatedBookmarksInput");
 	const passReferrerOnErrorInput = document.getElementById("passReferrerOnErrorInput");
 	const replaceBookmarkURLInput = document.getElementById("replaceBookmarkURLInput");
+	const ignoredBookmarkFoldersInput = document.getElementById("ignoredBookmarkFoldersInput");
 	const groupDuplicateImagesInput = document.getElementById("groupDuplicateImagesInput");
 	const infobarTemplateInput = document.getElementById("infobarTemplateInput");
 	const includeInfobarInput = document.getElementById("includeInfobarInput");
@@ -450,6 +456,7 @@
 	removeScriptsLabel.textContent = browser.i18n.getMessage("optionRemoveScripts");
 	saveRawPageLabel.textContent = browser.i18n.getMessage("optionSaveRawPage");
 	saveToClipboardLabel.textContent = browser.i18n.getMessage("optionSaveToClipboard");
+	saveToFilesystemLabel.textContent = browser.i18n.getMessage("optionSaveToFilesystem");
 	addProofLabel.textContent = browser.i18n.getMessage("optionAddProof");
 	saveToGDriveLabel.textContent = browser.i18n.getMessage("optionSaveToGDrive");
 	compressHTMLLabel.textContent = browser.i18n.getMessage("optionCompressHTML");
@@ -487,6 +494,7 @@
 	saveCreatedBookmarksLabel.textContent = browser.i18n.getMessage("optionSaveCreatedBookmarks");
 	passReferrerOnErrorLabel.textContent = browser.i18n.getMessage("optionPassReferrerOnError");
 	replaceBookmarkURLLabel.textContent = browser.i18n.getMessage("optionReplaceBookmarkURL");
+	ignoredBookmarkFoldersLabel.textContent = browser.i18n.getMessage("optionIgnoredBookmarkFolders");
 	groupDuplicateImagesLabel.textContent = browser.i18n.getMessage("optionGroupDuplicateImages");
 	titleLabel.textContent = browser.i18n.getMessage("optionsTitle");
 	userInterfaceLabel.textContent = browser.i18n.getMessage("optionsUserInterfaceSubTitle");
@@ -496,6 +504,8 @@
 	stylesheetsLabel.textContent = browser.i18n.getMessage("optionsStylesheetsSubTitle");
 	fontsLabel.textContent = browser.i18n.getMessage("optionsFontsSubTitle");
 	otherResourcesLabel.textContent = browser.i18n.getMessage("optionsOtherResourcesSubTitle");
+	destinationLabel.textContent = browser.i18n.getMessage("optionsDestionationSubTitle");
+	bookmarksLabel.textContent = browser.i18n.getMessage("optionsBookmarkSubTitle");
 	autoSaveLabel.textContent = browser.i18n.getMessage("optionsAutoSaveSubTitle");
 	miscLabel.textContent = browser.i18n.getMessage("optionsMiscSubTitle");
 	helpLabel.textContent = browser.i18n.getMessage("optionsHelpLink");
@@ -634,46 +644,38 @@
 		profileNamesInput.value = selectedProfileName;
 		renameProfileButton.disabled = deleteProfileButton.disabled = profileNamesInput.value == DEFAULT_PROFILE_NAME;
 		const profileOptions = profiles[selectedProfileName];
-		removeHiddenElementsInput.checked = profileOptions.removeHiddenElements || profileOptions.saveRawPage;
-		removeHiddenElementsInput.disabled = profileOptions.saveRawPage;
+		removeHiddenElementsInput.checked = profileOptions.removeHiddenElements;
 		removeUnusedStylesInput.checked = profileOptions.removeUnusedStyles;
 		removeUnusedFontsInput.checked = profileOptions.removeUnusedFonts;
-		removeFramesInput.checked = profileOptions.removeFrames || profileOptions.saveRawPage;
-		removeFramesInput.disabled = profileOptions.saveRawPage;
+		removeFramesInput.checked = profileOptions.removeFrames;
 		removeImportsInput.checked = profileOptions.removeImports;
 		removeScriptsInput.checked = profileOptions.removeScripts;
 		saveRawPageInput.checked = profileOptions.saveRawPage;
-		saveToClipboardInput.checked = profileOptions.saveToClipboard && !profileOptions.saveToGDrive;
-		saveToClipboardInput.disabled = profileOptions.saveToGDrive;
+		saveToClipboardInput.checked = profileOptions.saveToClipboard;
 		addProofInput.checked = profileOptions.addProof;
-		saveToGDriveInput.checked = profileOptions.saveToGDrive && !profileOptions.saveToClipboard;
-		saveToGDriveInput.disabled = profileOptions.saveToClipboard;
+		saveToGDriveInput.checked = profileOptions.saveToGDrive;
+		saveToFilesystemInput.checked = !profileOptions.saveToGDrive && !saveToClipboardInput.checked;
 		compressHTMLInput.checked = profileOptions.compressHTML;
 		compressCSSInput.checked = profileOptions.compressCSS;
-		loadDeferredImagesInput.checked = profileOptions.loadDeferredImages && !profileOptions.saveRawPage;
-		loadDeferredImagesInput.disabled = profileOptions.saveRawPage;
+		loadDeferredImagesInput.checked = profileOptions.loadDeferredImages;
 		loadDeferredImagesMaxIdleTimeInput.value = profileOptions.loadDeferredImagesMaxIdleTime;
-		loadDeferredImagesKeepZoomLevelInput.checked = profileOptions.loadDeferredImagesKeepZoomLevel && !profileOptions.saveRawPage;
-		loadDeferredImagesKeepZoomLevelInput.disabled = !profileOptions.loadDeferredImages || profileOptions.saveRawPape;
-		loadDeferredImagesMaxIdleTimeInput.disabled = !profileOptions.loadDeferredImages || profileOptions.saveRawPage;
+		loadDeferredImagesKeepZoomLevelInput.checked = profileOptions.loadDeferredImagesKeepZoomLevel;
+		loadDeferredImagesKeepZoomLevelInput.disabled = !profileOptions.loadDeferredImages;
+		loadDeferredImagesMaxIdleTimeInput.disabled = !profileOptions.loadDeferredImages;
 		contextMenuEnabledInput.checked = profileOptions.contextMenuEnabled;
 		filenameTemplateInput.value = profileOptions.filenameTemplate;
 		filenameMaxLengthInput.value = profileOptions.filenameMaxLength;
-		filenameTemplateInput.disabled = profileOptions.saveToClipboard;
 		shadowEnabledInput.checked = profileOptions.shadowEnabled;
 		maxResourceSizeEnabledInput.checked = profileOptions.maxResourceSizeEnabled;
 		maxResourceSizeInput.value = profileOptions.maxResourceSize;
 		maxResourceSizeInput.disabled = !profileOptions.maxResourceSizeEnabled;
 		confirmFilenameInput.checked = profileOptions.confirmFilename;
-		confirmFilenameInput.disabled = profileOptions.saveToClipboard;
 		filenameConflictActionInput.value = profileOptions.filenameConflictAction;
-		filenameConflictActionInput.disabled = profileOptions.saveToClipboard || profileOptions.saveToGDrive;
 		removeAudioSrcInput.checked = profileOptions.removeAudioSrc;
 		removeVideoSrcInput.checked = profileOptions.removeVideoSrc;
 		displayInfobarInput.checked = profileOptions.displayInfobar;
 		displayStatsInput.checked = profileOptions.displayStats;
 		backgroundSaveInput.checked = profileOptions.backgroundSave;
-		backgroundSaveInput.disabled = profileOptions.saveToGDrive;
 		autoSaveDelayInput.value = profileOptions.autoSaveDelay;
 		autoSaveDelayInput.disabled = !profileOptions.autoSaveLoadOrUnload && !profileOptions.autoSaveLoad;
 		autoSaveLoadInput.checked = !profileOptions.autoSaveLoadOrUnload && profileOptions.autoSaveLoad;
@@ -693,8 +695,10 @@
 		removeAlternativeMediasInput.checked = profileOptions.removeAlternativeMedias;
 		saveCreatedBookmarksInput.checked = profileOptions.saveCreatedBookmarks;
 		passReferrerOnErrorInput.checked = profileOptions.passReferrerOnError;
-		replaceBookmarkURLInput.checked = profileOptions.saveCreatedBookmarks && profileOptions.backgroundSave && profileOptions.replaceBookmarkURL;
-		replaceBookmarkURLInput.disabled = !profileOptions.saveCreatedBookmarks || !profileOptions.backgroundSave || profileOptions.saveToClipboard || profileOptions.saveToGDrive;
+		replaceBookmarkURLInput.checked = profileOptions.replaceBookmarkURL;
+		replaceBookmarkURLInput.disabled = !profileOptions.saveCreatedBookmarks;
+		ignoredBookmarkFoldersInput.value = profileOptions.ignoredBookmarkFolders.map(folder => folder.replace(/,/g, "\\,")).join(","); // eslint-disable-line no-useless-escape
+		ignoredBookmarkFoldersInput.disabled = !profileOptions.saveCreatedBookmarks;
 		infobarTemplateInput.value = profileOptions.infobarTemplate;
 		includeInfobarInput.checked = profileOptions.includeInfobar;
 		confirmInfobarInput.checked = profileOptions.confirmInfobarContent;
@@ -704,12 +708,6 @@
 		defaultEditorModeInput.value = profileOptions.defaultEditorMode;
 		applySystemThemeInput.checked = profileOptions.applySystemTheme;
 		warnUnsavedPageInput.checked = profileOptions.warnUnsavedPage;
-		removeFramesInput.disabled = saveRawPageInput.checked;
-		removeFramesInput.checked = removeFramesInput.checked || saveRawPageInput.checked;
-		loadDeferredImagesInput.disabled = saveRawPageInput.checked;
-		if (saveRawPageInput.checked) {
-			loadDeferredImagesInput.checked = false;
-		}
 	}
 
 	function getProfileText(profileName) {
@@ -763,6 +761,7 @@
 				saveCreatedBookmarks: saveCreatedBookmarksInput.checked,
 				passReferrerOnError: passReferrerOnErrorInput.checked,
 				replaceBookmarkURL: replaceBookmarkURLInput.checked,
+				ignoredBookmarkFolders: ignoredBookmarkFoldersInput.value.replace(/([^\\]),/g, "$1 ,").split(/[^\\],/).map(folder => folder.replace(/\\,/g, ",")),
 				groupDuplicateImages: groupDuplicateImagesInput.checked,
 				infobarTemplate: infobarTemplateInput.value,
 				includeInfobar: includeInfobarInput.checked,

+ 106 - 89
extension/ui/pages/help.html

@@ -60,7 +60,7 @@
 					<li>Select "Save Selection" from the context menu without selecting any content first to display a
 						selector that will help you choose content by hovering over it with the mouse.</li>
 					<li>Right-click on the SingleFile button and select "Options" to open the options page.</li>
-					<li>Enable the option "Misc. &gt; save to Google Drive" to upload pages to Google Drive</li>
+					<li>Enable the option "Destination &gt; upload to Google Drive" to upload pages to Google Drive</li>
 					<li>You can use the customizable shortcut Ctrl+Shift+Y to save the current tab or the selected tabs.
 						Go to about:addons and select "Manage extension shortcuts" in the cogwheel menu to change it in
 						Firefox. Go to chrome://extensions/shortcuts to change it in Chrome..</li>
@@ -210,6 +210,11 @@
 							option to display the ℹ button at the top right of the page when viewing a saved page in a
 							browser where SingleFile is not installed.</p>
 					</li>
+					<li data-options-label="saveRawPageLabel"> <span class="option">Option: save raw page</span>
+						<p>Check this option to save the page without interpreting JavaScript. Checking this option may
+							alter the document.</p>
+						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
+					</li>
 				</ul>
 				<p>Stylesheets</p>
 				<ul>
@@ -301,45 +306,24 @@
 						<p class="notice">It is recommended to <u>check</u> this option</p>
 					</li>
 				</ul>
-				<p>Auto-save</p>
+				<p>Destination</p>
 				<ul>
-					<li data-options-label="autoSaveLoadOrUnloadLabel"> <span class="option">Option: auto-save after
-							page load or on page unload</span>
-						<p>Check this option to auto-save pages after being loaded. If you browse to another page before
-							the page is fully loaded then the page will be saved just before being unloaded. With this
-							option active, you are guaranteed pages will always be saved. Some frame contents may be
-							missing (if you unchecked "remove frames") when pages are saved before being unloaded. </p>
-					</li>
-					<li data-options-label="autoSaveLoadLabel"> <span class="option">Option: auto-save after page
-							load</span>
-						<p>Check this option to auto-save pages after being loaded.</p>
-					</li>
-					<li data-options-label="autoSaveUnloadLabel"> <span class="option">Option: auto-save on page
-							unload</span>
-						<p>Check this option to auto-save pages before being unloaded instead of saving pages after
-							being loaded. With this option active, you are guaranteed pages will always be saved but
-							some frame contents may be missing (if you unchecked "remove frames"). </p>
-					</li>
-					<li data-options-label="autoSaveDelayLabel"> <span class="option">Option: auto-save waiting delay
-							after load (s)</span>
-						<p>Specify the delay in seconds to wait before saving a page when the "auto-save on page load or
-							on page unload" or "auto-save on page load" is checked. </p>
-					</li>
-					<li data-options-label="autoSaveRepeatLabel"> <span class="option">Option: auto-save
-							periodically</span>
-						<p>Check this option to auto-save pages periodically after load.</p>
+					<li data-options-label="saveToFilesystemLabel"> <span class="option">Option: save to
+							filesystem</span>
+						<p>Check this option to save the downloaded page on the filesystem of your computer.</p>
+						<p class="notice">It is recommended to <u>check</u> this option</p>
 					</li>
-					<li data-options-label="autoSaveRepeatDelayLabel"> <span class="option">Option: period (s)</span>
-						<p>Specify the delay in seconds to wait before each page saving when the "auto-save
-							periodically" option is checked. </p>
+					<li data-options-label="saveToClipboardLabel"> <span class="option">Option: copy to clipboard</span>
+						<p>Check this option to copy the page to the clipboard.</p>
+						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
-					<li data-options-label="autoSaveExternalSaveLabel"> <span class="option">Option: save the page with
-							SingleFile Companion</span>
-						<p>Check this option to delegate the saving process to SingleFile Companion. It is a program
-							that runs outside the browser and can help to make the saving process more transparent. It
-							also allows the pages to be saved in another directory than the download directory. You can
-							find more info <a
-								href="https://github.com/gildas-lormeau/SingleFile/tree/master/companion">here</a></p>
+					<li data-options-label="saveToGDriveLabel"> <span class="option">Option: upload to Google
+							Drive</span>
+						<p>Check this option to save the page on Google Drive.</p>
+						<p>The permissions requested by SingleFile allow it to access only to the files and folders it
+							has created. When you uncheck this option, SingleFile revokes automatically its access to
+							your Google Drive account. </p>
+						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
 				</ul>
 				<p>Annotation editor</p>
@@ -385,23 +369,71 @@
 						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
 				</ul>
-				<p>Misc.</p>
+				<p>Bookmarks</p>
 				<ul>
-					<li data-options-label="backgroundSaveLabel"> <span class="option">Option: save pages in
-							background</span>
-						<p>Uncheck this option if you get invalid file names like
-							"37bec68b-446a-46a5-8642-19a89c231b46.html" or interrupted downloads when saving pages. You
-							can also uncheck this option if you want the "Save as" dialog to remember the last saved
-							path. Unchecking this option prevent using sub-directories in filename templates.</p>
-						<p class="notice">It is recommended to <u>check</u> this option</p>
+					<li data-options-label="saveCreatedBookmarksLabel"> <span class="option">Option: save the page of a
+							newly created bookmark</span>
+						<p>Check this option to save pages that you add into your bookmarks. Note that if the page is to
+							be saved is not already displayed in a tab, SingleFile will open temporarily a new tab to
+							save the page. </p>
+						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
-					<li data-options-label="displayStatsLabel"> <span class="option">Option: display stats in the
-							console after processing</span>
-						<p>Check this option to display stats about processing in the JavaScript developer tools of your
-							browser. Checking this option may increase the CPU consumption and the time needed to save a
-							page. </p>
+					<li data-options-label="replaceBookmarkURLLabel"> <span class="option">Option: link the new bookmark
+							to the saved page</span>
+						<p>Check this option to replace the URL of the page added into your bookmark with the file URI
+							of the saved page on your disk. </p>
 						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
+					<li data-options-label="ignoredBookmarkFoldersLabel"> <span class="option">Option: ignored
+							folders</span>
+						<p>Enter a list of bookmark folder names to ignore. The folder names must be separated with a
+							comma.
+						</p>
+					</li>
+				</ul>
+				<p>Auto-save</p>
+				<ul>
+					<li data-options-label="autoSaveLoadOrUnloadLabel"> <span class="option">Option: auto-save after
+							page load or on page unload</span>
+						<p>Check this option to auto-save pages after being loaded. If you browse to another page before
+							the page is fully loaded then the page will be saved just before being unloaded. With this
+							option active, you are guaranteed pages will always be saved. Some frame contents may be
+							missing (if you unchecked "remove frames") when pages are saved before being unloaded. </p>
+					</li>
+					<li data-options-label="autoSaveLoadLabel"> <span class="option">Option: auto-save after page
+							load</span>
+						<p>Check this option to auto-save pages after being loaded.</p>
+					</li>
+					<li data-options-label="autoSaveUnloadLabel"> <span class="option">Option: auto-save on page
+							unload</span>
+						<p>Check this option to auto-save pages before being unloaded instead of saving pages after
+							being loaded. With this option active, you are guaranteed pages will always be saved but
+							some frame contents may be missing (if you unchecked "remove frames"). </p>
+					</li>
+					<li data-options-label="autoSaveDelayLabel"> <span class="option">Option: auto-save waiting delay
+							after load (s)</span>
+						<p>Specify the delay in seconds to wait before saving a page when the "auto-save on page load or
+							on page unload" or "auto-save on page load" is checked. </p>
+					</li>
+					<li data-options-label="autoSaveRepeatLabel"> <span class="option">Option: auto-save
+							periodically</span>
+						<p>Check this option to auto-save pages periodically after load.</p>
+					</li>
+					<li data-options-label="autoSaveRepeatDelayLabel"> <span class="option">Option: period (s)</span>
+						<p>Specify the delay in seconds to wait before each page saving when the "auto-save
+							periodically" option is checked. </p>
+					</li>
+					<li data-options-label="autoSaveExternalSaveLabel"> <span class="option">Option: save the page with
+							SingleFile Companion</span>
+						<p>Check this option to delegate the saving process to SingleFile Companion. It is a program
+							that runs outside the browser and can help to make the saving process more transparent. It
+							also allows the pages to be saved in another directory than the download directory. You can
+							find more info <a
+								href="https://github.com/gildas-lormeau/SingleFile/tree/master/companion">here</a></p>
+					</li>
+				</ul>
+				<p>Misc.</p>
+				<ul>
 					<li data-options-label="setMaxResourceSizeLabel"> <span class="option">Option: set a maximum size
 							for embedded resources (MB)</span>
 						<p>Check this option to remove from the saved page embedded resources (i.e. images, stylesheets,
@@ -418,17 +450,6 @@
 							option if you cannot download resources blocked by a hotlink protection.</p>
 						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
-					<li data-options-label="saveRawPageLabel"> <span class="option">Option: save raw page</span>
-						<p>Check this option to save the page without interpreting JavaScript. Checking this option may
-							alter the document, will force the options "remove frames", "remove hidden elements" to be
-							enabled and "save deferred images" to be disabled.</p>
-						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
-					</li>
-					<li data-options-label="saveToClipboardLabel"> <span class="option">Option: save to clipboard</span>
-						<p>Check this option to copy the page to the clipboard instead of downloading it on your
-							computer. Checking this option will force the "File name" options to be disabled.</p>
-						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
-					</li>
 					<li data-options-label="addProofLabel"> <span class="option">Option: add proof od existence</span>
 						<p>Check this option to create a worldwide proof of the existence of the page you want to save.
 						</p>
@@ -447,28 +468,19 @@
 						</ul>
 						<p> More information <a href="https://doc.woleet.io">doc.woleet.io</a> </p>
 					</li>
-					<li data-options-label="saveToGDriveLabel"> <span class="option">Option: save to Google Drive</span>
-						<p>Check this option to save the page on Google Drive instead of downloading it on your
-							computer. Checking this option will force some "File name" options to be disabled. However,
-							you can change the value of the "File name &gt; template" option to save files into
-							sub-folders, e.g. "<code>SingleFile/{page-title} ({date-iso} {time-locale}).html</code>" to
-							save pages in the folder named "SingleFile". </p>
-						<p> The permissions requested by SingleFile allow it to access only to the files and folders it
-							has created. When you uncheck this option, SingleFile revokes automatically its access to
-							your Google Drive account. </p>
-						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
-					</li>
-					<li data-options-label="saveCreatedBookmarksLabel"> <span class="option">Option: save the page of a
-							newly created bookmark</span>
-						<p> Check this option to save pages that you add into your bookmarks. Note that if the page is
-							to be saved is not already displayed in a tab, SingleFile will open temporarily a new tab to
-							save the page. </p>
-						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
+					<li data-options-label="backgroundSaveLabel"> <span class="option">Option: save pages in
+							background</span>
+						<p>Uncheck this option if you get invalid file names like
+							"37bec68b-446a-46a5-8642-19a89c231b46.html" or interrupted downloads when saving pages. You
+							can also uncheck this option if you want the "Save as" dialog to remember the last saved
+							path. Unchecking this option prevent using sub-directories in filename templates.</p>
+						<p class="notice">It is recommended to <u>check</u> this option</p>
 					</li>
-					<li data-options-label="replaceBookmarkURLLabel"> <span class="option">Option: link the new bookmark
-							to the saved page</span>
-						<p> Check this option to replace the URL of the page added into your bookmark with the file URI
-							of the saved page on your disk. </p>
+					<li data-options-label="displayStatsLabel"> <span class="option">Option: display stats in the
+							console after processing</span>
+						<p>Check this option to display stats about processing in the JavaScript developer tools of your
+							browser. Checking this option may increase the CPU consumption and the time needed to save a
+							page. </p>
 						<p class="notice">It is recommended to <u>uncheck</u> this option</p>
 					</li>
 				</ul>
@@ -613,10 +625,10 @@
 					<li><code>{url-referrer-flat}</code>: the URI of the page that "linked" to the page with slashed
 						replaced (e.g. "http_example.com")</li>
 					<li><code>{bookmark-pathname}</code>: the path name of the newly created bookmark (e.g. "My
-						Bookmarks/Last Month") when the option "Misc &gt; save the page of a
+						Bookmarks/Last Month") when the option "Bookmarks &gt; save the page of a
 						newly created bookmark" is enabled</li>
 					<li><code>{bookmark-pathname-flat}</code>: the path name of the newly created bookmark with replaced
-						slashes (e.g. "My Bookmarks_Last Month") when the option "Misc &gt; save the page of a
+						slashes (e.g. "My Bookmarks_Last Month") when the option "Bookmarks &gt; save the page of a
 						newly created bookmark" is enabled</li>
 					<li><code>{tab-id}</code>: the unique identifier of the tab (e.g. "326")</li>
 					<li><code>{tab-index}</code>: the index of the tab in the window (e.g. "1")</li>
@@ -636,7 +648,8 @@
 			</li>
 			<li><a id="known-issues">Known issues</a>
 				<ul>
-					<li>All browsers <ul>
+					<li>All browsers
+						<ul>
 							<li>For security reasons, you cannot save pages hosted on https://chrome.google.com,
 								https://addons.mozilla.org and some other Mozilla domains. When this happens, 🚫 is
 								displayed on top of the SingleFile icon.</li>
@@ -648,9 +661,11 @@
 								&lt;, &gt;</li>
 						</ul>
 					</li>
-					<li>Chrome/Opera <ul>
+					<li>Chromium-based browsers
+						<ul>
 							<li>You must enable the option "Allow access to file URLs" in the extension page to display
-								the infobar when viewing a saved page, or to save a page stored on the filesystem.</li>
+								the infobar when viewing a saved page, to save or to annotate a page stored on the
+								filesystem.</li>
 							<li>If the filename of a saved page looks like "56833935-156b-4d8c-a00f-19599c6513d3",
 								disable the option "Misc. &gt; Save pages in background". Reinstalling the browser may
 								also fix this issue.</li>
@@ -659,8 +674,10 @@
 								chrome://settings/downloads</li>
 						</ul>
 					</li>
-					<li>Firefox <ul>
-							<li>The "file name conflict resolution" option does not work if set to "prompt for a name".
+					<li>Firefox
+						<ul>
+							<li>The "File name &gt; file name conflict resolution" option does not work if set to
+								"prompt for a name".
 							</li>
 							<li>Sometimes, SingleFile is unable to save the contents of sandboxed iframes.</li>
 							<li>When processing a page from the filesystem, external resources (e.g. images,

+ 58 - 44
extension/ui/pages/options.html

@@ -97,6 +97,10 @@
 				<label for="includeInfobarInput" id="includeInfobarLabel"></label>
 				<input type="checkbox" id="includeInfobarInput">
 			</div>
+			<div class="option">
+				<label for="saveRawPageInput" id="saveRawPageLabel"></label>
+				<input type="checkbox" id="saveRawPageInput">
+			</div>
 		</details>
 		<details>
 			<summary id="stylesheetsLabel"></summary>
@@ -163,34 +167,18 @@
 			</div>
 		</details>
 		<details>
-			<summary id="autoSaveLabel"></summary>
-			<div class="option">
-				<label for="autoSaveLoadOrUnloadInput" id="autoSaveLoadOrUnloadLabel"></label>
-				<input type="checkbox" id="autoSaveLoadOrUnloadInput">
-			</div>
+			<summary id="destinationLabel"></summary>
 			<div class="option">
-				<label for="autoSaveLoadInput" id="autoSaveLoadLabel"></label>
-				<input type="checkbox" id="autoSaveLoadInput">
+				<label for="saveToFilesystemInput" id="saveToFilesystemLabel"></label>
+				<input type="radio" id="saveToFilesystemInput" name="destinationInput">
 			</div>
 			<div class="option">
-				<label for="autoSaveUnloadInput" id="autoSaveUnloadLabel"></label>
-				<input type="checkbox" id="autoSaveUnloadInput">
-			</div>
-			<div class="option">
-				<label for="autoSaveDelayInput" id="autoSaveDelayLabel"></label>
-				<input type="number" id="autoSaveDelayInput" min="0">
-			</div>
-			<div class="option">
-				<label for="autoSaveRepeatInput" id="autoSaveRepeatLabel"></label>
-				<input type="checkbox" id="autoSaveRepeatInput">
-			</div>
-			<div class="option second-level">
-				<label for="autoSaveRepeatDelayInput" id="autoSaveRepeatDelayLabel"></label>
-				<input type="number" id="autoSaveRepeatDelayInput" min="1">
+				<label for="saveToClipboardInput" id="saveToClipboardLabel"></label>
+				<input type="radio" id="saveToClipboardInput" name="destinationInput">
 			</div>
 			<div class="option">
-				<label for="autoSaveExternalSaveInput" id="autoSaveExternalSaveLabel"></label>
-				<input type="checkbox" id="autoSaveExternalSaveInput">
+				<label for="saveToGDriveInput" id="saveToGDriveLabel"></label>
+				<input type="radio" id="saveToGDriveInput" name="destinationInput">
 			</div>
 		</details>
 		<details>
@@ -223,15 +211,53 @@
 			</div>
 		</details>
 		<details>
-			<summary id="miscLabel"></summary>
+			<summary id="bookmarksLabel"></summary>
 			<div class="option">
-				<label for="backgroundSaveInput" id="backgroundSaveLabel"></label>
-				<input type="checkbox" id="backgroundSaveInput">
+				<label for="saveCreatedBookmarksInput" id="saveCreatedBookmarksLabel"></label>
+				<input type="checkbox" id="saveCreatedBookmarksInput">
 			</div>
+			<div class="option second-level">
+				<label for="replaceBookmarkURLInput" id="replaceBookmarkURLLabel"></label>
+				<input type="checkbox" id="replaceBookmarkURLInput">
+			</div>
+			<div class="option second-level vertical">
+				<label for="ignoredBookmarkFoldersInput" id="ignoredBookmarkFoldersLabel"></label>
+				<input type="text" id="ignoredBookmarkFoldersInput">
+			</div>
+		</details>
+		<details>
+			<summary id="autoSaveLabel"></summary>
 			<div class="option">
-				<label for="displayStatsInput" id="displayStatsLabel"></label>
-				<input type="checkbox" id="displayStatsInput">
+				<label for="autoSaveLoadOrUnloadInput" id="autoSaveLoadOrUnloadLabel"></label>
+				<input type="checkbox" id="autoSaveLoadOrUnloadInput">
 			</div>
+			<div class="option">
+				<label for="autoSaveLoadInput" id="autoSaveLoadLabel"></label>
+				<input type="checkbox" id="autoSaveLoadInput">
+			</div>
+			<div class="option">
+				<label for="autoSaveUnloadInput" id="autoSaveUnloadLabel"></label>
+				<input type="checkbox" id="autoSaveUnloadInput">
+			</div>
+			<div class="option">
+				<label for="autoSaveDelayInput" id="autoSaveDelayLabel"></label>
+				<input type="number" id="autoSaveDelayInput" min="0">
+			</div>
+			<div class="option">
+				<label for="autoSaveRepeatInput" id="autoSaveRepeatLabel"></label>
+				<input type="checkbox" id="autoSaveRepeatInput">
+			</div>
+			<div class="option second-level">
+				<label for="autoSaveRepeatDelayInput" id="autoSaveRepeatDelayLabel"></label>
+				<input type="number" id="autoSaveRepeatDelayInput" min="1">
+			</div>
+			<div class="option">
+				<label for="autoSaveExternalSaveInput" id="autoSaveExternalSaveLabel"></label>
+				<input type="checkbox" id="autoSaveExternalSaveInput">
+			</div>
+		</details>
+		<details>
+			<summary id="miscLabel"></summary>
 			<div class="option">
 				<label for="maxResourceSizeEnabledInput" id="setMaxResourceSizeLabel"></label>
 				<input type="checkbox" id="maxResourceSizeEnabledInput">
@@ -244,29 +270,17 @@
 				<label for="passReferrerOnErrorInput" id="passReferrerOnErrorLabel"></label>
 				<input type="checkbox" id="passReferrerOnErrorInput">
 			</div>
-			<div class="option">
-				<label for="saveRawPageInput" id="saveRawPageLabel"></label>
-				<input type="checkbox" id="saveRawPageInput">
-			</div>
-			<div class="option">
-				<label for="saveToClipboardInput" id="saveToClipboardLabel"></label>
-				<input type="checkbox" id="saveToClipboardInput">
-			</div>
 			<div class="option">
 				<label for="addProofInput" id="addProofLabel"></label>
 				<input type="checkbox" id="addProofInput">
 			</div>
 			<div class="option">
-				<label for="saveToGDriveInput" id="saveToGDriveLabel"></label>
-				<input type="checkbox" id="saveToGDriveInput">
+				<label for="backgroundSaveInput" id="backgroundSaveLabel"></label>
+				<input type="checkbox" id="backgroundSaveInput">
 			</div>
 			<div class="option">
-				<label for="saveCreatedBookmarksInput" id="saveCreatedBookmarksLabel"></label>
-				<input type="checkbox" id="saveCreatedBookmarksInput">
-			</div>
-			<div class="option second-level">
-				<label for="replaceBookmarkURLInput" id="replaceBookmarkURLLabel"></label>
-				<input type="checkbox" id="replaceBookmarkURLInput">
+				<label for="displayStatsInput" id="displayStatsLabel"></label>
+				<input type="checkbox" id="displayStatsInput">
 			</div>
 		</details>
 		<details>