Procházet zdrojové kódy

added menu entry "Save page with profile" (fix #464)

Gildas před 5 roky
rodič
revize
4ba176ba95

+ 5 - 1
_locales/de/messages.json

@@ -19,6 +19,10 @@
 		"message": "Annotieren und Speichern der Webseite...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Speichern der Webseite mit Profil",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "Anzeigen der aktuellen Speichern...",
 		"description": "Menu entry: 'View pending saves...'"
@@ -370,7 +374,7 @@
 	"optionAutoSaveExternalSave": {
 		"message": "Speichern der Seite mit SingleFile Companion",
 		"description": "Options page label: 'save the page with SingleFile Companion'"
-	},	
+	},
 	"optionsEditorSubTitle": {
 		"message": "Annotation editor",
 		"description": "Options sub-title: 'Annotation editor'"

+ 4 - 0
_locales/en/messages.json

@@ -15,6 +15,10 @@
 		"message": "Annotate and save the page...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuSaveSelectedLinks": {
 		"message": "Save selected links",
 		"description": "Menu entry: 'Save selected links'"

+ 5 - 1
_locales/es/messages.json

@@ -19,6 +19,10 @@
 		"message": "Anotar y guardar la página",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Guardar página con el perfil",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "View pending saves...",
 		"description": "Menu entry: 'View pending saves...'"
@@ -370,7 +374,7 @@
 	"optionAutoSaveExternalSave": {
 		"message": "guardar la página con SingleFile Companion",
 		"description": "Options page label: 'save the page with SingleFile Companion'"
-	},	
+	},
 	"optionsEditorSubTitle": {
 		"message": "Annotation editor",
 		"description": "Options sub-title: 'Annotation editor'"

+ 4 - 0
_locales/fr/messages.json

@@ -19,6 +19,10 @@
 		"message": "Annoter et sauver la page...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Sauver la page avec le profil",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "Afficher les sauvegardes en cours...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/ja/messages.json

@@ -19,6 +19,10 @@
 		"message": "ページに注釈を付けて保存する...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "保留中の保存を表示...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/pl/messages.json

@@ -19,6 +19,10 @@
 		"message": "Adnotuj i zapisz stronę...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "Zobacz oczekujące zapisy...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/ru/messages.json

@@ -19,6 +19,10 @@
 		"message": "Аннотировать и сохранить страницу...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "Просмотр отложенных сохранений...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/uk/messages.json

@@ -19,6 +19,10 @@
 		"message": "Анотувати і зберегти сторінку...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "View pending saves...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/zh_CN/messages.json

@@ -19,6 +19,10 @@
 		"message": "标注并保存该页面...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "查看挂起的保存项...",
 		"description": "Menu entry: 'View pending saves...'"

+ 4 - 0
_locales/zh_TW/messages.json

@@ -19,6 +19,10 @@
 		"message": "標註並保存該頁面...",
 		"description": "Menu entry: 'Annotate and save the page...'"
 	},
+	"menuSaveWithProfile": {
+		"message": "Save page with profile",
+		"description": "Menu entry: 'Save with profile'"
+	},
 	"menuViewPendingSaves": {
 		"message": "查看掛起的保存項...",
 		"description": "Menu entry: 'View pending saves...'"

+ 37 - 1
extension/ui/bg/ui-menus.js

@@ -29,9 +29,11 @@ singlefile.extension.ui.bg.menus = (() => {
 	const BROWSER_MENUS_API_SUPPORTED = menus && menus.onClicked && menus.create && menus.update && menus.removeAll;
 	const MENU_ID_SAVE_PAGE = "save-page";
 	const MENU_ID_EDIT_AND_SAVE_PAGE = "edit-and-save-page";
+	const MENU_ID_SAVE_WITH_PROFILE = "save-with-profile";
 	const MENU_ID_SAVE_SELECTED_LINKS = "save-selected-links";
 	const MENU_ID_VIEW_PENDINGS = "view-pendings";
 	const MENU_ID_SELECT_PROFILE = "select-profile";
+	const MENU_ID_SAVE_WITH_PROFILE_PREFIX = "wasve-with-profile-";
 	const MENU_ID_SELECT_PROFILE_PREFIX = "select-profile-";
 	const MENU_ID_ASSOCIATE_WITH_PROFILE = "associate-with-profile";
 	const MENU_ID_ASSOCIATE_WITH_PROFILE_PREFIX = "associate-with-profile-";
@@ -52,6 +54,7 @@ singlefile.extension.ui.bg.menus = (() => {
 	const MENU_CREATE_DOMAIN_RULE_MESSAGE = browser.i18n.getMessage("menuCreateDomainRule");
 	const MENU_UPDATE_RULE_MESSAGE = browser.i18n.getMessage("menuUpdateRule");
 	const MENU_SAVE_PAGE_MESSAGE = browser.i18n.getMessage("menuSavePage");
+	const MENU_SAVE_WITH_PROFILE = browser.i18n.getMessage("menuSaveWithProfile");
 	const MENU_SAVE_SELECTED_LINKS = browser.i18n.getMessage("menuSaveSelectedLinks");
 	const MENU_EDIT_PAGE_MESSAGE = browser.i18n.getMessage("menuEditPage");
 	const MENU_EDIT_AND_SAVE_PAGE_MESSAGE = browser.i18n.getMessage("menuEditAndSavePage");
@@ -72,6 +75,7 @@ singlefile.extension.ui.bg.menus = (() => {
 	const MENU_TOP_VISIBLE_ENTRIES = [
 		MENU_ID_EDIT_AND_SAVE_PAGE,
 		MENU_ID_SAVE_SELECTED_LINKS,
+		MENU_ID_SAVE_WITH_PROFILE,
 		MENU_ID_VIEW_PENDINGS,
 		MENU_ID_SAVE_SELECTED,
 		MENU_ID_SAVE_FRAME,
@@ -144,6 +148,13 @@ singlefile.extension.ui.bg.menus = (() => {
 				contexts: options.contextMenuEnabled ? defaultContextsDisabled.concat(["selection"]) : defaultContextsDisabled,
 				title: MENU_SAVE_SELECTED_LINKS
 			});
+			if (Object.keys(profiles).length > 1) {
+				menus.create({
+					id: MENU_ID_SAVE_WITH_PROFILE,
+					contexts: defaultContexts,
+					title: MENU_SAVE_WITH_PROFILE
+				});
+			}
 			if (options.contextMenuEnabled) {
 				menus.create({
 					id: "separator-1",
@@ -214,6 +225,12 @@ singlefile.extension.ui.bg.menus = (() => {
 					title: MENU_SELECT_PROFILE_MESSAGE,
 					contexts: defaultContexts,
 				});
+				menus.create({
+					id: MENU_ID_SAVE_WITH_PROFILE_PREFIX + "default",
+					contexts: defaultContexts,
+					title: PROFILE_DEFAULT_SETTINGS_MESSAGE,
+					parentId: MENU_ID_SAVE_WITH_PROFILE
+				});
 				const defaultProfileId = MENU_ID_SELECT_PROFILE_PREFIX + "default";
 				const defaultProfileChecked = !tabsData.profileName || tabsData.profileName == config.DEFAULT_PROFILE_NAME;
 				menus.create({
@@ -261,7 +278,14 @@ singlefile.extension.ui.bg.menus = (() => {
 				profileIndexes = new Map();
 				Object.keys(profiles).forEach((profileName, profileIndex) => {
 					if (profileName != config.DEFAULT_PROFILE_NAME) {
-						let profileId = MENU_ID_SELECT_PROFILE_PREFIX + profileIndex;
+						let profileId = MENU_ID_SAVE_WITH_PROFILE_PREFIX + profileIndex;
+						menus.create({
+							id: profileId,
+							contexts: defaultContexts,
+							title: profileName,
+							parentId: MENU_ID_SAVE_WITH_PROFILE
+						});
+						profileId = MENU_ID_SELECT_PROFILE_PREFIX + profileIndex;
 						let profileChecked = tabsData.profileName == profileName;
 						menus.create({
 							id: profileId,
@@ -429,6 +453,18 @@ singlefile.extension.ui.bg.menus = (() => {
 					await tabsData.set(allTabsData);
 					refreshExternalComponents(tab);
 				}
+				if (event.menuItemId.startsWith(MENU_ID_SAVE_WITH_PROFILE_PREFIX)) {
+					const profiles = await config.getProfiles();
+					const profileId = event.menuItemId.split(MENU_ID_SAVE_WITH_PROFILE_PREFIX)[1];
+					let profileName;
+					if (profileId == "default") {
+						profileName = config.DEFAULT_PROFILE_NAME;
+					} else {
+						const profileIndex = Number(profileId);
+						profileName = Object.keys(profiles)[profileIndex];
+					}
+					business.saveTabs([tab], profiles[profileName]);
+				}
 				if (event.menuItemId.startsWith(MENU_ID_SELECT_PROFILE_PREFIX)) {
 					const [profiles, allTabsData] = await Promise.all([config.getProfiles(), tabsData.get()]);
 					const profileId = event.menuItemId.split(MENU_ID_SELECT_PROFILE_PREFIX)[1];