Files
tubestation/waterfox/browser/components/sidebar/background/browser-action-menu.js
2025-11-06 14:13:52 +00:00

2444 lines
102 KiB
JavaScript

/*
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
'use strict';
import {
log as internalLogger,
configs,
sanitizeAccesskeyMark,
} from '/common/common.js';
import * as ApiTabs from '/common/api-tabs.js';
import * as Constants from '/common/constants.js';
import * as Permissions from '/common/permissions.js';
function log(...args) {
internalLogger('background/browser-action-menu', ...args);
}
const delimiter = browser.i18n.getMessage('config_terms_delimiter');
function indent(level = 1) {
let result = '';
for (let i = 0, maxi = level; i < maxi; i++) {
result += '\u00A0\u00A0\u00A0';
}
return result;
}
const mItems = [
{
title: browser.i18n.getMessage('config_appearance_caption'),
children: [
{
title: browser.i18n.getMessage('config_sidebarPosition_caption'),
children: [
{
title: browser.i18n.getMessage('config_sidebarPosition_left'),
key: 'sidebarPosition',
value: Constants.kTABBAR_POSITION_LEFT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_sidebarPosition_right'),
key: 'sidebarPosition',
value: Constants.kTABBAR_POSITION_RIGHT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_sidebarPosition_auto'),
key: 'sidebarPosition',
value: Constants.kTABBAR_POSITION_AUTO,
type: 'radio'
},
]
},
{
title: browser.i18n.getMessage('config_style_caption'),
children: [
{
title: browser.i18n.getMessage('config_style_proton'),
key: 'style',
value: 'proton',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_style_photon'),
key: 'style',
value: 'photon',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_style_sidebar'),
key: 'style',
value: 'sidebar',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_style_highcontrast'),
key: 'style',
value: 'highcontrast',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_style_none'),
key: 'style',
value: 'none',
type: 'radio'
}
]
},
{
title: browser.i18n.getMessage('config_animation_label'),
key: 'animation',
type: 'checkbox'
},
{
title: indent() + browser.i18n.getMessage('config_animationForce_label'),
key: 'animationForce',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_labelOverflowStyle_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_labelOverflowStyle_fade'),
key: 'labelOverflowStyle',
value: 'fade',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_labelOverflowStyle_crop'),
key: 'labelOverflowStyle',
value: 'crop',
type: 'radio'
}
],
},
{
title: browser.i18n.getMessage('config_faviconizePinnedTabs_label'),
key: 'faviconizePinnedTabs',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_tabPreviewTooltip_label'),
key: 'tabPreviewTooltip',
type: 'checkbox',
permissions: Permissions.ALL_URLS,
get canRevoke() {
return !configs.tabPreviewTooltip && !configs.skipCollapsedTabsForTabSwitchingShortcuts;
},
},
{
title: indent() + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_before') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_anywhere') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_after'),
key: 'tabPreviewTooltipRenderIn',
value: Constants.kIN_CONTENT_PANEL_RENDER_IN_ANYWHERE,
type: 'radio',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_before') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_content') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_after'),
key: 'tabPreviewTooltipRenderIn',
value: Constants.kIN_CONTENT_PANEL_RENDER_IN_CONTENT,
type: 'radio',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_before') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_sidebar') + browser.i18n.getMessage('config_tabPreviewTooltipRenderIn_label_after'),
key: 'tabPreviewTooltipRenderIn',
value: Constants.kIN_CONTENT_PANEL_RENDER_IN_SIDEBAR,
type: 'radio',
expert: true
},
{
title: browser.i18n.getMessage('config_showCollapsedDescendantsByTooltip_label'),
key: 'showCollapsedDescendantsByTooltip',
type: 'checkbox',
expert: true
},
{
dynamicTitle: true,
get title() {
return browser.i18n.getMessage('config_shiftTabsForScrollbarDistance_label_before') + configs.shiftTabsForScrollbarDistance + browser.i18n.getMessage('config_shiftTabsForScrollbarDistance_label_after')
},
enabled: false,
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_shiftTabsForScrollbarOnlyOnHover_label'),
key: 'shiftTabsForScrollbarOnlyOnHover',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_suppressGapFromShownOrHiddenToolbar_caption'),
enabled: false,
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_suppressGapFromShownOrHiddenToolbarOnFullScreen_label'),
key: 'suppressGapFromShownOrHiddenToolbarOnFullScreen',
type: 'checkbox',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_suppressGapFromShownOrHiddenToolbarOnNewTab_label'),
key: 'suppressGapFromShownOrHiddenToolbarOnNewTab',
type: 'checkbox',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_suppressGapFromShownOrHiddenToolbarOnlyOnMouseOperation_label'),
key: 'suppressGapFromShownOrHiddenToolbarOnlyOnMouseOperation',
type: 'checkbox',
expert: true
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_showDialogInSidebar_label'),
key: 'showDialogInSidebar',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_renderHiddenTabs_label'),
key: 'renderHiddenTabs',
type: 'checkbox',
expert: true,
},
]
},
{
title: browser.i18n.getMessage('config_context_caption'),
children: [
{
title: browser.i18n.getMessage('config_extraItems_tabs_topLevel'),
enabled: false,
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleSticky_command'),
key: 'context_topLevel_toggleSticky',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_reloadTree_command'),
key: 'context_topLevel_reloadTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_reloadDescendants_command'),
key: 'context_topLevel_reloadDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_unblockAutoplayTree_command'),
key: 'context_topLevel_unblockAutoplayTree',
type: 'checkbox',
get visible() {
return configs.exposeUnblockAutoplayFeatures;
},
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_unblockAutoplayDescendants_command'),
key: 'context_topLevel_unblockAutoplayDescendants',
type: 'checkbox',
get visible() {
return configs.exposeUnblockAutoplayFeatures;
},
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleMuteTree_command'),
key: 'context_topLevel_toggleMuteTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleMuteDescendants_command'),
key: 'context_topLevel_toggleMuteDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeTree_command'),
key: 'context_topLevel_closeTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeDescendants_command'),
key: 'context_topLevel_closeDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeOthers_command'),
key: 'context_topLevel_closeOthers',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseTree_command'),
key: 'context_topLevel_collapseTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseTreeRecursively_command'),
key: 'context_topLevel_collapseTreeRecursively',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseAll_command'),
key: 'context_topLevel_collapseAll',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandTree_command'),
key: 'context_topLevel_expandTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandTreeRecursively_command'),
key: 'context_topLevel_expandTreeRecursively',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandAll_command'),
key: 'context_topLevel_expandAll',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_bookmarkTree_command'),
key: 'context_topLevel_bookmarkTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_sendTreeToDevice_command'),
key: 'context_topLevel_sendTreeToDevice',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_requestPermissions_bookmarks'),
type: 'checkbox',
permissions: Permissions.BOOKMARKS
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_extraItems_tabs_subMenu'),
enabled: false,
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleSticky_command'),
key: 'context_toggleSticky',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_reloadTree_command'),
key: 'context_reloadTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_reloadDescendants_command'),
key: 'context_reloadDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_unblockAutoplayTree_command'),
key: 'context_unblockAutoplayTree',
type: 'checkbox',
get visible() {
return configs.exposeUnblockAutoplayFeatures;
},
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_unblockAutoplayDescendants_command'),
key: 'context_unblockAutoplayDescendants',
type: 'checkbox',
get visible() {
return configs.exposeUnblockAutoplayFeatures;
},
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleMuteTree_command'),
key: 'context_toggleMuteTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_toggleMuteDescendants_command'),
key: 'context_toggleMuteDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeTree_command'),
key: 'context_closeTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeDescendants_command'),
key: 'context_closeDescendants',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_closeOthers_command'),
key: 'context_closeOthers',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseTree_command'),
key: 'context_collapseTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseTreeRecursively_command'),
key: 'context_collapseTreeRecursively',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_collapseAll_command'),
key: 'context_collapseAll',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandTree_command'),
key: 'context_expandTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandTreeRecursively_command'),
key: 'context_expandTreeRecursively',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_expandAll_command'),
key: 'context_expandAll',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_bookmarkTree_command'),
key: 'context_bookmarkTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('context_sendTreeToDevice_command'),
key: 'context_sendTreeToDevice',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_showTreeCommandsInTabsContextMenuGlobally_label'),
key: 'showTreeCommandsInTabsContextMenuGlobally',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_extraItems_bookmarks_caption'),
enabled: false,
expert: true,
},
{
title: indent() + sanitizeAccesskeyMark(browser.i18n.getMessage('context_openAllBookmarksWithStructure_label')),
key: 'context_openAllBookmarksWithStructure',
type: 'checkbox',
expert: true,
},
{
title: indent() + sanitizeAccesskeyMark(browser.i18n.getMessage('context_openAllBookmarksWithStructureRecursively_label')),
key: 'context_openAllBookmarksWithStructureRecursively',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true, },
{
title: indent() + browser.i18n.getMessage('config_openAllBookmarksWithStructureDiscarded_label'),
key: 'openAllBookmarksWithStructureDiscarded',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_suppressGroupTabForStructuredTabsFromBookmarks_label'),
key: 'suppressGroupTabForStructuredTabsFromBookmarks',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true },
{
title: indent() + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_before'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_nextSiblingWithInheritedContainer') + delimiter + browser.i18n.getMessage('config_autoAttachOnContextNewTabCommand_after') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'autoAttachOnContextNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING_WITH_INHERITED_CONTAINER,
type: 'radio'
}
]
},
]
},
{
title: browser.i18n.getMessage('config_newTabWithOwner_caption'),
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_before'),
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_childNextToLastRelatedTab') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_CHILD_NEXT_TO_LAST_RELATED_TAB,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedWithOwner_after'),
key: 'autoAttachOnOpenedWithOwner',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio',
},
],
},
{
title: browser.i18n.getMessage('config_insertNewTabFromFirefoxViewAt_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_insertNewTabFromFirefoxViewAt_noControl'),
key: 'insertNewTabFromFirefoxViewAt',
value: Constants.kINSERT_NO_CONTROL,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromFirefoxViewAt_nextToLastRelatedTab') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'insertNewTabFromFirefoxViewAt',
value: Constants.kINSERT_NEXT_TO_LAST_RELATED_TAB,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromFirefoxViewAt_top'),
key: 'insertNewTabFromFirefoxViewAt',
value: Constants.kINSERT_TOP,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromFirefoxViewAt_end'),
key: 'insertNewTabFromFirefoxViewAt',
value: Constants.kINSERT_END,
type: 'radio',
},
],
},
//{ type: 'separator' },
{
title: browser.i18n.getMessage('config_autoGroupNewTabsFromFirefoxView_label'),
key: 'autoGroupNewTabsFromFirefoxView',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_groupTabTemporaryStateForChildrenOfFirefoxView_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForChildrenOfFirefoxView',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForChildrenOfFirefoxView',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForChildrenOfFirefoxView',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
}
],
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_insertNewTabFromPinnedTabAt_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_insertNewTabFromPinnedTabAt_noControl'),
key: 'insertNewTabFromPinnedTabAt',
value: Constants.kINSERT_NO_CONTROL,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromPinnedTabAt_nextToLastRelatedTab') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'insertNewTabFromPinnedTabAt',
value: Constants.kINSERT_NEXT_TO_LAST_RELATED_TAB,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromPinnedTabAt_top'),
key: 'insertNewTabFromPinnedTabAt',
value: Constants.kINSERT_TOP,
type: 'radio',
},
{
title: browser.i18n.getMessage('config_insertNewTabFromPinnedTabAt_end'),
key: 'insertNewTabFromPinnedTabAt',
value: Constants.kINSERT_END,
type: 'radio',
},
],
},
//{ type: 'separator' },
{
title: browser.i18n.getMessage('config_autoGroupNewTabsFromPinned_label'),
key: 'autoGroupNewTabsFromPinned',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_groupTabTemporaryStateForChildrenOfPinned_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForChildrenOfPinned',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForChildrenOfPinned',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForChildrenOfPinned',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
}
]
},
]
},
{
title: browser.i18n.getMessage('config_newTab_caption'),
children: [
{
title: browser.i18n.getMessage('config_newTabAction_caption'),
enabled: false
},
{
title: indent() + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_before'),
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabCommand_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabCommand_after'),
key: 'autoAttachOnNewTabCommand',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_inheritContextualIdentityToChildTabMode_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToChildTabMode_default'),
key: 'inheritContextualIdentityToChildTabMode',
value: Constants.kCONTEXTUAL_IDENTITY_DEFAULT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToChildTabMode_parent'),
key: 'inheritContextualIdentityToChildTabMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_PARENT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToChildTabMode_lastActive'),
key: 'inheritContextualIdentityToChildTabMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_LAST_ACTIVE,
type: 'radio'
}
]
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_newTabButton_caption'),
enabled: false,
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_before'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_nextSiblingWithInheritedContainer') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonMiddleClick_after') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'autoAttachOnNewTabButtonMiddleClick',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING_WITH_INHERITED_CONTAINER,
type: 'radio'
}
],
},
{
title: indent() + browser.i18n.getMessage('config_middleClickPasteURLOnNewTabButton_label'),
expert: true,
key: 'middleClickPasteURLOnNewTabButton',
type: 'checkbox',
permissions: Permissions.CLIPBOARD_READ,
},
{
title: indent() + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_before'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_nextSiblingWithInheritedContainer') + delimiter + browser.i18n.getMessage('config_autoAttachOnNewTabButtonAccelClick_after') + ' ' + browser.i18n.getMessage('config_firefoxCompatible_choice'),
key: 'autoAttachOnNewTabButtonAccelClick',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING_WITH_INHERITED_CONTAINER,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_longPressOnNewTabButton_before'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_longPressOnNewTabButton_newTabAction') + delimiter + browser.i18n.getMessage('config_longPressOnNewTabButton_after'),
key: 'longPressOnNewTabButton',
value: 'newtab-action-selector',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_longPressOnNewTabButton_contextualIdentities') + delimiter + browser.i18n.getMessage('config_longPressOnNewTabButton_after'),
key: 'longPressOnNewTabButton',
value: 'contextual-identities-selector',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_longPressOnNewTabButton_none') + delimiter + browser.i18n.getMessage('config_longPressOnNewTabButton_after'),
key: 'longPressOnNewTabButton',
value: '',
type: 'radio'
}
],
},
{
title: browser.i18n.getMessage('config_showNewTabActionSelector_label'),
key: 'showNewTabActionSelector',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_showContextualIdentitiesSelector_label'),
key: 'showContextualIdentitiesSelector',
type: 'checkbox',
expert: true,
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_autoAttachWithURL_caption'),
enabled: false,
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_autoAttachOnDuplicated_before'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnDuplicated_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnDuplicated_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachOnDuplicated',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_sameSiteOrphan_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_independent') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachSameSiteOrphan_before') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachSameSiteOrphan_after'),
key: 'autoAttachSameSiteOrphan',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToSameSiteOrphanMode_label'),
children: [
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToSameSiteOrphanMode_default'),
key: 'inheritContextualIdentityToSameSiteOrphanMode',
value: Constants.kCONTEXTUAL_IDENTITY_DEFAULT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToSameSiteOrphanMode_parent'),
key: 'inheritContextualIdentityToSameSiteOrphanMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_PARENT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToSameSiteOrphanMode_lastActive'),
key: 'inheritContextualIdentityToSameSiteOrphanMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_LAST_ACTIVE,
type: 'radio'
}
]
}
]
},
{
title: indent() + browser.i18n.getMessage('config_fromExternal_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnOpenedFromExternal_after'),
key: 'autoAttachOnOpenedFromExternal',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromExternalMode_label'),
children: [
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromExternalMode_default'),
key: 'inheritContextualIdentityToTabsFromExternalMode',
value: Constants.kCONTEXTUAL_IDENTITY_DEFAULT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromExternalMode_parent'),
key: 'inheritContextualIdentityToTabsFromExternalMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_PARENT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromExternalMode_lastActive'),
key: 'inheritContextualIdentityToTabsFromExternalMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_LAST_ACTIVE,
type: 'radio'
}
]
}
]
},
{ type: 'separator',
expert: true, },
{
title: indent() + browser.i18n.getMessage('config_anyOtherTrigger_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_noControl') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after') + ' ' + browser.i18n.getMessage('config_recommended_choice'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_DO_NOTHING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_independent') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_OPEN_AS_ORPHAN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_childTop') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_OPEN_AS_CHILD_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_childEnd') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_OPEN_AS_CHILD_END,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_sibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_OPEN_AS_SIBLING,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_before') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_nextSibling') + delimiter + browser.i18n.getMessage('config_autoAttachOnAnyOtherTrigger_after'),
key: 'autoAttachOnAnyOtherTrigger',
value: Constants.kNEWTAB_OPEN_AS_NEXT_SIBLING,
type: 'radio'
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromAnyOtherTriggerMode_label'),
get enabled() {
return configs.autoAttachOnAnyOtherTrigger != Constants.kNEWTAB_DO_NOTHING;
},
children: [
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromAnyOtherTriggerMode_default'),
key: 'inheritContextualIdentityToTabsFromAnyOtherTriggerMode',
value: Constants.kCONTEXTUAL_IDENTITY_DEFAULT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromAnyOtherTriggerMode_parent'),
key: 'inheritContextualIdentityToTabsFromAnyOtherTriggerMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_PARENT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_inheritContextualIdentityToTabsFromAnyOtherTriggerMode_lastActive'),
key: 'inheritContextualIdentityToTabsFromAnyOtherTriggerMode',
value: Constants.kCONTEXTUAL_IDENTITY_FROM_LAST_ACTIVE,
type: 'radio'
}
]
}
]
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_groupTab_caption'),
enabled: false,
expert: true,
},
{
dynamicTitle: true,
get title() {
return indent() + browser.i18n.getMessage('config_tabBunchesDetectionTimeout_before') + delimiter + configs.tabBunchesDetectionTimeout + delimiter + browser.i18n.getMessage('config_tabBunchesDetectionTimeout_after');
},
enabled: false,
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_autoGroupNewTabsFromBookmarks_label'),
key: 'autoGroupNewTabsFromBookmarks',
type: 'checkbox',
expert: true
},
{
title: indent(2) + browser.i18n.getMessage('config_restoreTreeForTabsFromBookmarks_label'),
key: 'restoreTreeForTabsFromBookmarks',
type: 'checkbox',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_autoGroupNewTabsFromOthers_label'),
key: 'autoGroupNewTabsFromOthers',
type: 'checkbox',
expert: true
},
{
title: indent(2) + browser.i18n.getMessage('config_warnOnAutoGroupNewTabs_label'),
key: 'warnOnAutoGroupNewTabs',
type: 'checkbox',
expert: true
},
{
title: indent(4) + browser.i18n.getMessage('config_warnOnAutoGroupNewTabsWithListing_label'),
key: 'warnOnAutoGroupNewTabsWithListing',
type: 'checkbox',
expert: true
},
{ type: 'separator',
expert: true },
{
title: indent() + browser.i18n.getMessage('config_renderTreeInGroupTabs_label'),
key: 'renderTreeInGroupTabs',
type: 'checkbox',
expert: true
},
{ type: 'separator',
expert: true },
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_caption'),
enabled: false,
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_groupTabTemporaryStateForNewTabsFromBookmarks_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForNewTabsFromBookmarks',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForNewTabsFromBookmarks',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForNewTabsFromBookmarks',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_groupTabTemporaryStateForNewTabsFromOthers_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForNewTabsFromOthers',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForNewTabsFromOthers',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForNewTabsFromOthers',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_groupTabTemporaryStateForOrphanedTabs_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForOrphanedTabs',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForOrphanedTabs',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForOrphanedTabs',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_groupTabTemporaryStateForAPI_label'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_groupTabTemporaryState_option_default'),
key: 'groupTabTemporaryStateForAPI',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_NOTHING,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporary_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForAPI',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_PASSIVE,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_before')}${browser.i18n.getMessage('groupTab_temporaryAggressive_label')}${browser.i18n.getMessage('config_groupTabTemporaryState_option_checked_after')}`,
key: 'groupTabTemporaryStateForAPI',
value: Constants.kGROUP_TAB_TEMPORARY_STATE_AGGRESSIVE,
type: 'radio'
},
],
},
],
},
{
title: browser.i18n.getMessage('config_treeBehavior_caption'),
children: [
{
title: browser.i18n.getMessage('config_autoCollapseExpandSubtreeOnAttach_label'),
key: 'autoCollapseExpandSubtreeOnAttach',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_autoCollapseExpandSubtreeOnSelect_label'),
key: 'autoCollapseExpandSubtreeOnSelect',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_autoCollapseExpandSubtreeOnSelectExceptActiveTabRemove_label'),
key: 'autoCollapseExpandSubtreeOnSelectExceptActiveTabRemove',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_unfocusableCollapsedTab_label'),
key: 'unfocusableCollapsedTab',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_autoDiscardTabForUnexpectedFocus_label'),
key: 'autoDiscardTabForUnexpectedFocus',
type: 'checkbox',
expert: true
},
{
title: browser.i18n.getMessage('config_avoidDiscardedTabToBeActivatedIfPossible_label'),
key: 'avoidDiscardedTabToBeActivatedIfPossible',
type: 'checkbox',
expert: true,
},
{
title: browser.i18n.getMessage('config_requestPermissions_allUrls_ctrlTabTracking'),
key: 'skipCollapsedTabsForTabSwitchingShortcuts',
type: 'checkbox',
permissions: Permissions.ALL_URLS,
get canRevoke() {
return !configs.tabPreviewTooltip && !configs.skipCollapsedTabsForTabSwitchingShortcuts;
},
},
{
dynamicTitle: true,
get title() {
return indent() + browser.i18n.getMessage('config_autoExpandOnTabSwitchingShortcutsDelay_before') + delimiter + configs.autoExpandOnTabSwitchingShortcutsDelay + delimiter + browser.i18n.getMessage('config_autoExpandOnTabSwitchingShortcutsDelay_after');
},
key: 'autoExpandOnTabSwitchingShortcuts',
type: 'checkbox',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_accelKey_label'),
enabled: false,
expert: true
},
{
title: indent(2) + browser.i18n.getMessage('config_accelKey_auto'),
key: 'accelKey',
value: '',
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_accelKey_alt'),
key: 'accelKey',
value: 'alt',
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_accelKey_control'),
key: 'accelKey',
value: 'control',
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_accelKey_meta'),
key: 'accelKey',
value: 'meta',
type: 'radio',
expert: true,
},
{ type: 'separator', expert: true },
{
title: browser.i18n.getMessage('config_treeDoubleClickBehavior_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_treeDoubleClickBehavior_toggleCollapsed'),
key: 'treeDoubleClickBehavior',
value: Constants.kTREE_DOUBLE_CLICK_BEHAVIOR_TOGGLE_COLLAPSED,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_treeDoubleClickBehavior_toggleSticky'),
key: 'treeDoubleClickBehavior',
value: Constants.kTREE_DOUBLE_CLICK_BEHAVIOR_TOGGLE_STICKY,
type: 'radio'
},
{
title: `${browser.i18n.getMessage('config_treeDoubleClickBehavior_close')}${browser.i18n.getMessage('config_treeDoubleClickBehavior_close_note')}`,
key: 'treeDoubleClickBehavior',
value: Constants.kTREE_DOUBLE_CLICK_BEHAVIOR_CLOSE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_treeDoubleClickBehavior_none'),
key: 'treeDoubleClickBehavior',
value: Constants.kTREE_DOUBLE_CLICK_BEHAVIOR_NONE,
type: 'radio'
}
]
},
{
title: browser.i18n.getMessage('config_successorTabControlLevel_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_successorTabControlLevel_inTree'),
key: 'successorTabControlLevel',
value: Constants.kSUCCESSOR_TAB_CONTROL_IN_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_successorTabControlLevel_simulateDefault'),
key: 'successorTabControlLevel',
value: Constants.kSUCCESSOR_TAB_CONTROL_SIMULATE_DEFAULT,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_successorTabControlLevel_never'),
key: 'successorTabControlLevel',
value: Constants.kSUCCESSOR_TAB_CONTROL_NEVER,
type: 'radio'
}
]
},
{
title: browser.i18n.getMessage('config_simulateSelectOwnerOnClose_label'),
key: 'simulateSelectOwnerOnClose',
type: 'checkbox',
get visible() {
return typeof browser.tabs.moveInSuccession == 'function';
},
expert: true,
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehaviorMode_caption'),
children: [
{
title: browser.i18n.getMessage('config_parentTabOperationBehaviorMode_parallel'),
key: 'parentTabOperationBehaviorMode',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_MODE_PARALLEL,
type: 'radio'
},
{
title: indent() + browser.i18n.getMessage('config_closeParentBehavior_insideSidebar'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteFirst'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteAll'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteIntelligently'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_closeParentBehavior_outsideSidebar'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteFirst'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteAll'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteIntelligently'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
}
]
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_parentTabOperationBehaviorMode_consistent'),
key: 'parentTabOperationBehaviorMode',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_MODE_CONSISTENT,
type: 'radio'
},
{
title: indent() + browser.i18n.getMessage('config_parentTabOperationBehaviorMode_consistent_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteFirst'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteAll'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_parentTabOperationBehavior_promoteIntelligently'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
}
]
},
{ type: 'separator',
expert: true, },
{
title: browser.i18n.getMessage('config_parentTabOperationBehaviorMode_custom'),
key: 'parentTabOperationBehaviorMode',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_MODE_CUSTOM,
type: 'radio',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_closeParentBehavior_insideSidebar_expanded_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_closeParentBehavior_entireTree'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteFirst'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteAll'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteIntelligently'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_detach'),
key: 'closeParentBehavior_insideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_closeParentBehavior_outsideSidebar_collapsed_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_closeParentBehavior_entireTree'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteFirst'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteAll'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteIntelligently'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_detach'),
key: 'closeParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent(2) + browser.i18n.getMessage('config_closeParentBehavior_noSidebar_collapsed_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_closeParentBehavior_entireTree'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteFirst'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteAll'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteIntelligently'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_detach'),
key: 'closeParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_closeParentBehavior_outsideSidebar_expanded_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_closeParentBehavior_entireTree'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteFirst'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteAll'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteIntelligently'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_detach'),
key: 'closeParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent(2) + browser.i18n.getMessage('config_closeParentBehavior_noSidebar_expanded_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_closeParentBehavior_entireTree'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_replaceWithGroupTab'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteFirst'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteAll'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_promoteIntelligently'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_closeParentBehavior_detach'),
key: 'closeParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_moveParentBehavior_outsideSidebar_collapsed_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_moveParentBehavior_entireTree'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_replaceWithGroupTab'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteFirst'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteAll'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteIntelligently'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_detach'),
key: 'moveParentBehavior_outsideSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent(2) + browser.i18n.getMessage('config_moveParentBehavior_noSidebar_collapsed_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_moveParentBehavior_entireTree'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_replaceWithGroupTab'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteFirst'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteAll'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteIntelligently'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_detach'),
key: 'moveParentBehavior_noSidebar_collapsed',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_moveParentBehavior_outsideSidebar_expanded_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_moveParentBehavior_entireTree'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_replaceWithGroupTab'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteFirst'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteAll'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteIntelligently'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_detach'),
key: 'moveParentBehavior_outsideSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
},
{
title: indent(2) + browser.i18n.getMessage('config_moveParentBehavior_noSidebar_expanded_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_moveParentBehavior_entireTree'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_ENTIRE_TREE,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_replaceWithGroupTab'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_REPLACE_WITH_GROUP_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteFirst'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_FIRST_CHILD,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteAll'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_ALL_CHILDREN,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_promoteIntelligently'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_PROMOTE_INTELLIGENTLY,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_moveParentBehavior_detach'),
key: 'moveParentBehavior_noSidebar_expanded',
value: Constants.kPARENT_TAB_OPERATION_BEHAVIOR_DETACH_ALL_CHILDREN,
type: 'radio'
}
]
}
]
},
{
title: browser.i18n.getMessage('config_fixupTreeOnTabVisibilityChanged_caption'),
children: [
{
title: browser.i18n.getMessage('config_fixupTreeOnTabVisibilityChanged_fix'),
key: 'fixupTreeOnTabVisibilityChanged',
value: true,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_fixupTreeOnTabVisibilityChanged_keep'),
key: 'fixupTreeOnTabVisibilityChanged',
value: false,
type: 'radio'
}
]
},
{
title: browser.i18n.getMessage('config_insertNewChildAt_caption'),
expert: true,
children: [
{
title: browser.i18n.getMessage('config_insertNewChildAt_noControl'),
key: 'insertNewChildAt',
value: Constants.kINSERT_NO_CONTROL,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_insertNewChildAt_nextToLastRelatedTab'),
key: 'insertNewChildAt',
value: Constants.kINSERT_NEXT_TO_LAST_RELATED_TAB,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_insertNewChildAt_top'),
key: 'insertNewChildAt',
value: Constants.kINSERT_TOP,
type: 'radio'
},
{
title: browser.i18n.getMessage('config_insertNewChildAt_end'),
key: 'insertNewChildAt',
value: Constants.kINSERT_END,
type: 'radio'
}
]
},
]
},
{
title: browser.i18n.getMessage('config_more_caption'),
children: [
{
title: browser.i18n.getMessage('config_drag_caption'),
enabled: false,
},
//{ type: 'separator' },
{
title: indent() + browser.i18n.getMessage('config_tabDragBehavior_caption'),
enabled: false,
},
// These options are too complex to put in the menu UI, so I simply redirect to the options page.
{
title: indent(2) + browser.i18n.getMessage('config_tabDragBehavior_label') + '...',
url: `${Constants.kSHORTHAND_URIS.options}#tabDragBehaviorConfigsGroup`,
},
{
title: indent(2) + browser.i18n.getMessage('config_tabDragBehaviorShift_label') + '...',
url: `${Constants.kSHORTHAND_URIS.options}#tabDragBehaviorConfigsGroup`,
},
{
title: indent(2) + browser.i18n.getMessage('config_showTabDragBehaviorNotification_label'),
key: 'showTabDragBehaviorNotification',
type: 'checkbox',
expert: true,
},
//{ type: 'separator' },
{
title: indent() + browser.i18n.getMessage('config_dropLinksOnTabBehavior_caption'),
enabled: false,
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_dropLinksOnTabBehavior_ask'),
key: 'dropLinksOnTabBehavior',
value: Constants.kDROPLINK_ASK,
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_dropLinksOnTabBehavior_load'),
key: 'dropLinksOnTabBehavior',
value: Constants.kDROPLINK_LOAD,
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_dropLinksOnTabBehavior_newtab'),
key: 'dropLinksOnTabBehavior',
value: Constants.kDROPLINK_NEWTAB,
type: 'radio',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_simulateTabsLoadInBackgroundInverted_label'),
type: 'checkbox',
key: 'simulateTabsLoadInBackgroundInverted',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_tabsLoadInBackgroundDiscarded_label'),
type: 'checkbox',
key: 'tabsLoadInBackgroundDiscarded',
expert: true,
},
//{ type: 'separator', expert: true },
{
title: indent() + browser.i18n.getMessage('config_insertDroppedTabsAt_caption'),
enabled: false,
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_insertDroppedTabsAt_inherit'),
key: 'insertDroppedTabsAt',
value: Constants.kINSERT_INHERIT,
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_insertDroppedTabsAt_first'),
key: 'insertDroppedTabsAt',
value: Constants.kINSERT_TOP,
type: 'radio',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_insertDroppedTabsAt_end'),
key: 'insertDroppedTabsAt',
value: Constants.kINSERT_END,
type: 'radio',
expert: true,
},
//{ type: 'separator', expert: true },
{
dynamicTitle: true,
get title() {
return indent() + browser.i18n.getMessage('config_autoExpandOnLongHoverDelay_before') + delimiter + configs.autoExpandOnLongHoverDelay + delimiter + browser.i18n.getMessage('config_autoExpandOnLongHoverDelay_after');
},
key: 'autoExpandOnLongHover',
type: 'checkbox',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_autoExpandOnLongHoverRestoreIniitalState_label'),
key: 'autoExpandOnLongHoverRestoreIniitalState',
type: 'checkbox',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_autoExpandIntelligently_label'),
key: 'autoExpandIntelligently',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_ignoreTabDropNearSidebarArea_label'),
key: 'ignoreTabDropNearSidebarArea',
type: 'checkbox',
expert: true,
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_advanced_caption'),
enabled: false
},
{
title: indent() + browser.i18n.getMessage('config_warnOnCloseTabs_label'),
key: 'warnOnCloseTabs',
type: 'checkbox'
},
{
title: indent(2) + browser.i18n.getMessage('config_warnOnCloseTabsByClosebox_label'),
key: 'warnOnCloseTabsByClosebox',
type: 'checkbox',
},
{
title: indent(2) + browser.i18n.getMessage('config_warnOnCloseTabsWithListing_label'),
key: 'warnOnCloseTabsWithListing',
type: 'checkbox',
expert: true
},
{
title: indent() + browser.i18n.getMessage('config_useCachedTree_label'),
key: 'useCachedTree',
type: 'checkbox',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_persistCachedTree_label'),
key: 'persistCachedTree',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_tabGroupsEnabled_label'),
key: 'tabGroupsEnabled',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_undoMultipleTabsClose_label'),
key: 'undoMultipleTabsClose',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_requestPermissions_bookmarks_context'),
type: 'checkbox',
permissions: Permissions.BOOKMARKS
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_debug_caption'),
enabled: false
},
{
title: indent() + browser.i18n.getMessage('config_colorScheme_caption'),
children: [
{
title: browser.i18n.getMessage('config_colorScheme_photon'),
key: 'colorScheme',
value: 'photon',
type: 'radio'
},
{
title: browser.i18n.getMessage('config_colorScheme_systemColor'),
key: 'colorScheme',
value: 'system-color',
type: 'radio'
}
]
},
{
title: indent() + browser.i18n.getMessage('config_enableLinuxBehaviors_label'),
key: 'enableLinuxBehaviors',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_enableMacOSBehaviors_label'),
key: 'enableMacOSBehaviors',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_enableWindowsBehaviors_label'),
key: 'enableWindowsBehaviors',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_loggingQueries_label'),
key: 'loggingQueries',
type: 'checkbox',
expert: true,
},
{
title: indent(2) + browser.i18n.getMessage('config_loggingConnectionMessages_label'),
key: 'loggingConnectionMessages',
type: 'checkbox',
expert: true,
},
{
title: indent() + browser.i18n.getMessage('config_debug_label'),
key: 'debug',
type: 'checkbox'
},
{ type: 'separator' },
{
title: browser.i18n.getMessage('config_showExpertOptions_label'),
key: 'showExpertOptions',
type: 'checkbox'
}
]
}
];
const mItemsById = new Map();
const mUpdatableItemsById = new Map();
const mExpertItems = new Set();
const MENU_CONTEXT = browser.browserAction ?
'browser_action' : // Manifest V2
'action'; // Manifest V3
function createItem(id, item, parent) {
if (item.visible === false)
return;
const parentId = parent ? parent.id : null ;
item.id = id;
mItemsById.set(id, item);
if (item.dynamicTitle) {
item.lastTitle = item.title;
mUpdatableItemsById.set(id, item);
}
if (item.type == 'checkbox' || item.type == 'radio') {
mUpdatableItemsById.set(id, item);
}
const params = {
id,
title: item.title?.replace(/^:|:$/g, ''),
type: item.type || 'normal',
contexts: [MENU_CONTEXT],
parentId
};
if ('enabled' in item)
params.enabled = item.enabled;
log('create: ', params);
id = browser.menus.create(params);
if (item.expert)
mExpertItems.add(id);
if (item.children) {
for (let i = 0, maxi = item.children.length; i < maxi; i++) {
const child = item.children[i];
createItem(`${id}:${i}`, child, item);
}
}
}
if (browser.action/* Manifest V2 */ || browser.browserAction/* Manifest V3 */) {
for (let i = 0, maxi = mItems.length; i < maxi; i++) {
createItem(`browserActionItem:${i}`, mItems[i]);
}
browser.menus.onShown.addListener((info, _tab) => {
if (!info.contexts.includes(MENU_CONTEXT))
return;
let updated = false;
for (const item of mUpdatableItemsById.values()) {
const params = {};
if (item.dynamicTitle) {
const title = item.title;
if (title != item.lastTitle) {
item.lastTitle = title;
params.title = title;
}
}
if (item.type == 'checkbox' || item.type == 'radio') {
const checkedFromConfigs = 'value' in item ? configs[item.key] == item.value : configs[item.key];
params.checked = checkedFromConfigs;
if (item.permissions) {
Permissions.isGranted(item.permissions)
.then(async granted => {
const checked = granted && (!('key' in item) || checkedFromConfigs);
if (checked == granted &&
params.checked == granted)
return;
item.checked = checked;
await browser.menus.update(item.id, { checked }).catch(ApiTabs.createErrorSuppressor());
await browser.menus.refresh().catch(ApiTabs.createErrorSuppressor());
});
delete params.checked;
}
}
if ('visible' in item)
params.visible = item.visible;
if ('checked' in params || 'title' in params) {
browser.menus.update(item.id, params).catch(ApiTabs.createErrorSuppressor());
updated = true;
}
}
if (updated)
browser.menus.refresh().catch(ApiTabs.createErrorSuppressor());
});
browser.menus.onClicked.addListener((info, _tab) => {
const item = mItemsById.get(info.menuItemId);
log('onClicked ', { id: info.menuItemId, item });
if (!item)
return;
if (item.url) {
browser.tabs.create({ url: item.url });
return;
}
if (item.key) {
if (info.checked)
configs[item.key] = 'value' in item ? item.value : true;
else if (!('value' in item))
configs[item.key] = false;
}
if (item.permissions) {
if (!info.checked) {
if (item.canRevoke !== false)
browser.permissions.remove(item.permissions).catch(ApiTabs.createErrorSuppressor());
}
else {
browser.permissions.request(item.permissions)
.then(async granted => {
if (granted === undefined)
granted = await Permissions.isGranted(item.permissions);
if (granted) {
browser.runtime.sendMessage({
type: Constants.kCOMMAND_NOTIFY_PERMISSIONS_GRANTED,
permissions: item.permissions
}).catch(_error => {});
}
})
.catch(ApiTabs.createErrorHandler());
}
}
});
function updateExpertOptionsVisibility() {
for (const id of mExpertItems) {
browser.menus.update(id, { visible: configs.showExpertOptions });
}
browser.menus.refresh();
}
configs.$addObserver(key => {
if (key == 'showExpertOptions')
updateExpertOptionsVisibility();
});
configs.$loaded.then(updateExpertOptionsVisibility);
}