diff --git a/app/assets/javascripts/behaviors/shortcuts/keybindings.js b/app/assets/javascripts/behaviors/shortcuts/keybindings.js index 10c22609858cbdd97807c68b73282f8cda28c398..c7ee7699d9ca5848818cdc0b7caf64421da79694 100644 --- a/app/assets/javascripts/behaviors/shortcuts/keybindings.js +++ b/app/assets/javascripts/behaviors/shortcuts/keybindings.js @@ -388,9 +388,12 @@ export const PROJECT_FILES_GO_BACK = { defaultKeys: ['esc'], }; +const { blobOverflowMenu } = gon.features ?? {}; export const PROJECT_FILES_GO_TO_PERMALINK = { id: 'projectFiles.goToFilePermalink', - description: __('Go to file permalink (while viewing a file)'), + description: blobOverflowMenu + ? __('Copy file permalink') + : __('Go to file permalink (while viewing a file)'), defaultKeys: ['y'], }; diff --git a/app/assets/javascripts/behaviors/shortcuts/shortcuts_blob.js b/app/assets/javascripts/behaviors/shortcuts/shortcuts_blob.js index 9f8d7272e5c52e9afca92f48934fc8844a9ab850..13ecfaf1a5493dff78cdeeceef43a29c28ae1388 100644 --- a/app/assets/javascripts/behaviors/shortcuts/shortcuts_blob.js +++ b/app/assets/javascripts/behaviors/shortcuts/shortcuts_blob.js @@ -3,6 +3,12 @@ import { moveToFilePermalink } from '~/blob/utils'; export default class ShortcutsBlob { constructor(shortcuts) { + const { blobOverflowMenu } = gon.features ?? {}; + if (blobOverflowMenu) { + // TODO: Remove ShortcutsBlob entirely once these feature flags are removed. + return; + } + shortcuts.add(PROJECT_FILES_GO_TO_PERMALINK, moveToFilePermalink); } } diff --git a/locale/gitlab.pot b/locale/gitlab.pot index dda9e0349d59211b0b97778575cb2f094ec9633c..1c648d7eff94def6a862a3b34583b3aee8f091e7 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -16881,6 +16881,9 @@ msgstr "" msgid "Copy file path" msgstr "" +msgid "Copy file permalink" +msgstr "" + msgid "Copy image URL" msgstr "" diff --git a/spec/frontend/behaviors/shortcuts/shortcuts_blob_spec.js b/spec/frontend/behaviors/shortcuts/shortcuts_blob_spec.js new file mode 100644 index 0000000000000000000000000000000000000000..3bb992636ee0753061ba2e9bd01de98c90676d2a --- /dev/null +++ b/spec/frontend/behaviors/shortcuts/shortcuts_blob_spec.js @@ -0,0 +1,56 @@ +import ShortcutsBlob from '~/behaviors/shortcuts/shortcuts_blob'; +import { PROJECT_FILES_GO_TO_PERMALINK } from '~/behaviors/shortcuts/keybindings'; +import { moveToFilePermalink } from '~/blob/utils'; + +describe('ShortcutsBlob', () => { + const shortcuts = { + add: jest.fn(), + }; + + const init = () => { + return new ShortcutsBlob(shortcuts); + }; + + beforeEach(() => { + shortcuts.add.mockClear(); + window.gon = {}; + }); + + describe('constructor', () => { + describe('when shortcuts should be added', () => { + it('adds the permalink shortcut when gon.features is undefined', () => { + init(); + + expect(shortcuts.add).toHaveBeenCalledWith( + PROJECT_FILES_GO_TO_PERMALINK, + moveToFilePermalink, + ); + }); + + it('adds shortcuts when blobOverflowMenu is false', () => { + window.gon.features = { + blobOverflowMenu: false, + }; + + init(); + + expect(shortcuts.add).toHaveBeenCalledWith( + PROJECT_FILES_GO_TO_PERMALINK, + moveToFilePermalink, + ); + }); + }); + + describe('when shortcuts should not be added', () => { + it('does not add shortcuts when blobOverflowMenu is true', () => { + window.gon.features = { + blobOverflowMenu: true, + }; + + init(); + + expect(shortcuts.add).not.toHaveBeenCalled(); + }); + }); + }); +});