Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(blocks): add keyboard shortcuts for modifiers #18581

Merged
merged 6 commits into from
Oct 31, 2023

Conversation

madhurisandbhor
Copy link
Contributor

What does it do?

Added keyboard shortcuts for modifiers

How to test it?

User should be able to use common shortcuts like:

  • Ctrl(Cmd) + b: Transform the selection into bold.

  • Ctrl(Cmd) + i: Transform the selection into italic.

  • Ctrl(Cmd) + u: Transform the selection into underline.

  • Ctrl(Cmd) + v: Add a link to the selection.

  • Ctrl(Cmd) + e: Transform the selection into inline code.

  • Ctrl(Cmd) + Shift + s: Transform the selection into strikethrough.

@madhurisandbhor madhurisandbhor added source: core:content-manager Source is core/content-manager package pr: feature This PR adds a new feature labels Oct 26, 2023
@madhurisandbhor madhurisandbhor self-assigned this Oct 26, 2023
@madhurisandbhor madhurisandbhor changed the title feat(blocks): added keyboard shortcuts for modifiers feat(blocks): add keyboard shortcuts for modifiers Oct 26, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Oct 26, 2023

Size Change: -55.7 kB (-4%)

Total Size: 1.48 MB

Filename Size Change
packages/core/admin/build/content-manager.********.chunk.js 72.2 kB +154 B (0%)
packages/core/admin/build/main.********.js 623 kB -909 B (0%)
packages/core/admin/build/runtime~main.********.js 4.87 kB -50 B (-1%)
packages/core/admin/build/strapi-plugin-cloud.********.chunk.js 0 B -54.9 kB (removed) 🏆
ℹ️ View Unchanged
Filename Size Change
packages/core/admin/build/Admin_homePage.********.chunk.js 8.32 kB 0 B
packages/core/admin/build/Admin_InternalErrorPage.********.chunk.js 526 B 0 B
packages/core/admin/build/Admin_marketplace.********.chunk.js 6.37 kB 0 B
packages/core/admin/build/Admin_pluginsPage.********.chunk.js 1.17 kB 0 B
packages/core/admin/build/Admin_profilePage.********.chunk.js 3.47 kB 0 B
packages/core/admin/build/Admin_settingsPage.********.chunk.js 8.65 kB 0 B
packages/core/admin/build/Admin-authenticatedApp.********.chunk.js 8.03 kB 0 B
packages/core/admin/build/admin-edit-roles-page.********.chunk.js 16.2 kB 0 B
packages/core/admin/build/admin-edit-users.********.chunk.js 4.04 kB 0 B
packages/core/admin/build/admin-roles-list.********.chunk.js 3.1 kB 0 B
packages/core/admin/build/admin-users.********.chunk.js 5.79 kB 0 B
packages/core/admin/build/api-tokens-create-page.********.chunk.js 260 B 0 B
packages/core/admin/build/api-tokens-edit-page.********.chunk.js 259 B 0 B
packages/core/admin/build/api-tokens-list-page.********.chunk.js 2.87 kB 0 B
packages/core/admin/build/ar-json.********.chunk.js 19.6 kB 0 B
packages/core/admin/build/audit-logs-sales-page.********.chunk.js 628 B 0 B
packages/core/admin/build/audit-logs-settings-page.********.chunk.js 4.06 kB 0 B
packages/core/admin/build/bb4d0d527bdfb161bc5a.svg 2.33 kB 0 B
packages/core/admin/build/ca-json.********.chunk.js 13 kB 0 B
packages/core/admin/build/content-type-builder-list-view.********.chunk.js 6.35 kB 0 B
packages/core/admin/build/content-type-builder-translation-ar-json.********.chunk.js 1.37 kB 0 B
packages/core/admin/build/content-type-builder-translation-cs-json.********.chunk.js 2.89 kB 0 B
packages/core/admin/build/content-type-builder-translation-de-json.********.chunk.js 4.21 kB 0 B
packages/core/admin/build/content-type-builder-translation-dk-json.********.chunk.js 3.76 kB 0 B
packages/core/admin/build/content-type-builder-translation-en-json.********.chunk.js 4.16 kB 0 B
packages/core/admin/build/content-type-builder-translation-es-json.********.chunk.js 3.98 kB 0 B
packages/core/admin/build/content-type-builder-translation-fr-json.********.chunk.js 1.68 kB 0 B
packages/core/admin/build/content-type-builder-translation-id-json.********.chunk.js 3.35 kB 0 B
packages/core/admin/build/content-type-builder-translation-it-json.********.chunk.js 3.48 kB 0 B
packages/core/admin/build/content-type-builder-translation-ja-json.********.chunk.js 1.23 kB 0 B
packages/core/admin/build/content-type-builder-translation-ko-json.********.chunk.js 4.38 kB 0 B
packages/core/admin/build/content-type-builder-translation-ms-json.********.chunk.js 3.29 kB 0 B
packages/core/admin/build/content-type-builder-translation-nl-json.********.chunk.js 3.31 kB 0 B
packages/core/admin/build/content-type-builder-translation-pl-json.********.chunk.js 4.17 kB 0 B
packages/core/admin/build/content-type-builder-translation-pt-BR-json.********.chunk.js 4.18 kB 0 B
packages/core/admin/build/content-type-builder-translation-pt-json.********.chunk.js 1.1 kB 0 B
packages/core/admin/build/content-type-builder-translation-ru-json.********.chunk.js 4.7 kB 0 B
packages/core/admin/build/content-type-builder-translation-sk-json.********.chunk.js 3.75 kB 0 B
packages/core/admin/build/content-type-builder-translation-sv-json.********.chunk.js 4.19 kB 0 B
packages/core/admin/build/content-type-builder-translation-th-json.********.chunk.js 4.37 kB 0 B
packages/core/admin/build/content-type-builder-translation-tr-json.********.chunk.js 3.85 kB 0 B
packages/core/admin/build/content-type-builder-translation-uk-json.********.chunk.js 4.38 kB 0 B
packages/core/admin/build/content-type-builder-translation-zh-Hans-json.********.chunk.js 3.51 kB 0 B
packages/core/admin/build/content-type-builder-translation-zh-json.********.chunk.js 4.51 kB 0 B
packages/core/admin/build/content-type-builder.********.chunk.js 27.1 kB 0 B
packages/core/admin/build/cs-json.********.chunk.js 5.88 kB 0 B
packages/core/admin/build/de-json.********.chunk.js 12.8 kB 0 B
packages/core/admin/build/dk-json.********.chunk.js 10.5 kB 0 B
packages/core/admin/build/email-settings-page.********.chunk.js 2.26 kB 0 B
packages/core/admin/build/en-json.********.chunk.js 16.1 kB 0 B
packages/core/admin/build/es-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/eu-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/fr-json.********.chunk.js 12.6 kB 0 B
packages/core/admin/build/gu-json.********.chunk.js 14.2 kB 0 B
packages/core/admin/build/he-json.********.chunk.js 6.48 kB 0 B
packages/core/admin/build/hi-json.********.chunk.js 16.4 kB 0 B
packages/core/admin/build/highlight.js.********.chunk.js 842 B 0 B
packages/core/admin/build/hu-json.********.chunk.js 15.4 kB 0 B
packages/core/admin/build/i18n-settings-page.********.chunk.js 3.88 kB 0 B
packages/core/admin/build/i18n-translation-de-json.********.chunk.js 1.62 kB 0 B
packages/core/admin/build/i18n-translation-dk-json.********.chunk.js 1.62 kB 0 B
packages/core/admin/build/i18n-translation-en-json.********.chunk.js 1.57 kB 0 B
packages/core/admin/build/i18n-translation-es-json.********.chunk.js 1.68 kB 0 B
packages/core/admin/build/i18n-translation-fr-json.********.chunk.js 1.73 kB 0 B
packages/core/admin/build/i18n-translation-ko-json.********.chunk.js 1.86 kB 0 B
packages/core/admin/build/i18n-translation-pl-json.********.chunk.js 1.8 kB 0 B
packages/core/admin/build/i18n-translation-ru-json.********.chunk.js 2.39 kB 0 B
packages/core/admin/build/i18n-translation-tr-json.********.chunk.js 1.7 kB 0 B
packages/core/admin/build/i18n-translation-zh-Hans-json.********.chunk.js 1.64 kB 0 B
packages/core/admin/build/i18n-translation-zh-json.********.chunk.js 1.73 kB 0 B
packages/core/admin/build/id-json.********.chunk.js 7.46 kB 0 B
packages/core/admin/build/index.html 263 B -1 B (0%)
packages/core/admin/build/it-json.********.chunk.js 7.93 kB 0 B
packages/core/admin/build/ja-json.********.chunk.js 12.3 kB 0 B
packages/core/admin/build/ko-json.********.chunk.js 11.6 kB 0 B
packages/core/admin/build/ml-json.********.chunk.js 17.3 kB 0 B
packages/core/admin/build/ms-json.********.chunk.js 6.16 kB 0 B
packages/core/admin/build/nl-json.********.chunk.js 14.4 kB 0 B
packages/core/admin/build/no-json.********.chunk.js 5.48 kB 0 B
packages/core/admin/build/pl-json.********.chunk.js 13.2 kB 0 B
packages/core/admin/build/pt-BR-json.********.chunk.js 13.9 kB 0 B
packages/core/admin/build/pt-json.********.chunk.js 5.71 kB 0 B
packages/core/admin/build/review-workflows-sales-page.********.chunk.js 594 B 0 B
packages/core/admin/build/review-workflows-settings-create-view.********.chunk.js 2.24 kB 0 B
packages/core/admin/build/review-workflows-settings-edit-view.********.chunk.js 2.53 kB 0 B
packages/core/admin/build/review-workflows-settings-list-view.********.chunk.js 5.26 kB 0 B
packages/core/admin/build/ru-json.********.chunk.js 21.6 kB 0 B
packages/core/admin/build/sa-json.********.chunk.js 16.9 kB 0 B
packages/core/admin/build/sk-json.********.chunk.js 11.8 kB 0 B
packages/core/admin/build/sso-sales-page.********.chunk.js 610 B 0 B
packages/core/admin/build/sso-settings-page.********.chunk.js 1.94 kB 0 B
packages/core/admin/build/sv-json.********.chunk.js 14.1 kB 0 B
packages/core/admin/build/th-json.********.chunk.js 9.01 kB 0 B
packages/core/admin/build/tr-json.********.chunk.js 13.8 kB 0 B
packages/core/admin/build/transfer-tokens-create-page.********.chunk.js 261 B 0 B
packages/core/admin/build/transfer-tokens-edit-page.********.chunk.js 262 B 0 B
packages/core/admin/build/transfer-tokens-list-page.********.chunk.js 3.03 kB 0 B
packages/core/admin/build/uk-json.********.chunk.js 7.71 kB 0 B
packages/core/admin/build/Upload_ConfigureTheView.********.chunk.js 1.74 kB 0 B
packages/core/admin/build/upload-settings.********.chunk.js 1.93 kB 0 B
packages/core/admin/build/upload-translation-ca-json.********.chunk.js 2.48 kB 0 B
packages/core/admin/build/upload-translation-de-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/upload-translation-dk-json.********.chunk.js 1.96 kB 0 B
packages/core/admin/build/upload-translation-en-json.********.chunk.js 2.58 kB 0 B
packages/core/admin/build/upload-translation-es-json.********.chunk.js 2.45 kB 0 B
packages/core/admin/build/upload-translation-fr-json.********.chunk.js 2.86 kB 0 B
packages/core/admin/build/upload-translation-he-json.********.chunk.js 1.84 kB 0 B
packages/core/admin/build/upload-translation-it-json.********.chunk.js 1.56 kB 0 B
packages/core/admin/build/upload-translation-ja-json.********.chunk.js 1.92 kB 0 B
packages/core/admin/build/upload-translation-ko-json.********.chunk.js 2.5 kB 0 B
packages/core/admin/build/upload-translation-ms-json.********.chunk.js 1.41 kB 0 B
packages/core/admin/build/upload-translation-pl-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/upload-translation-pt-BR-json.********.chunk.js 1.61 kB 0 B
packages/core/admin/build/upload-translation-pt-json.********.chunk.js 1.61 kB 0 B
packages/core/admin/build/upload-translation-ru-json.********.chunk.js 2.02 kB 0 B
packages/core/admin/build/upload-translation-sk-json.********.chunk.js 2.58 kB 0 B
packages/core/admin/build/upload-translation-th-json.********.chunk.js 1.99 kB 0 B
packages/core/admin/build/upload-translation-tr-json.********.chunk.js 2.35 kB 0 B
packages/core/admin/build/upload-translation-uk-json.********.chunk.js 1.96 kB 0 B
packages/core/admin/build/upload-translation-zh-Hans-json.********.chunk.js 3.12 kB 0 B
packages/core/admin/build/upload-translation-zh-json.********.chunk.js 2.65 kB 0 B
packages/core/admin/build/upload.********.chunk.js 7.12 kB 0 B
packages/core/admin/build/users-advanced-settings-page.********.chunk.js 2.29 kB 0 B
packages/core/admin/build/users-email-settings-page.********.chunk.js 2.34 kB 0 B
packages/core/admin/build/users-permissions-translation-ar-json.********.chunk.js 1.51 kB 0 B
packages/core/admin/build/users-permissions-translation-cs-json.********.chunk.js 1.46 kB 0 B
packages/core/admin/build/users-permissions-translation-de-json.********.chunk.js 1.58 kB 0 B
packages/core/admin/build/users-permissions-translation-dk-json.********.chunk.js 1.92 kB 0 B
packages/core/admin/build/users-permissions-translation-en-json.********.chunk.js 1.81 kB 0 B
packages/core/admin/build/users-permissions-translation-es-json.********.chunk.js 2.05 kB 0 B
packages/core/admin/build/users-permissions-translation-fr-json.********.chunk.js 1.41 kB 0 B
packages/core/admin/build/users-permissions-translation-id-json.********.chunk.js 1.49 kB 0 B
packages/core/admin/build/users-permissions-translation-it-json.********.chunk.js 1.57 kB 0 B
packages/core/admin/build/users-permissions-translation-ja-json.********.chunk.js 1.53 kB 0 B
packages/core/admin/build/users-permissions-translation-ko-json.********.chunk.js 2.23 kB 0 B
packages/core/admin/build/users-permissions-translation-ms-json.********.chunk.js 1.27 kB 0 B
packages/core/admin/build/users-permissions-translation-nl-json.********.chunk.js 1.32 kB 0 B
packages/core/admin/build/users-permissions-translation-pl-json.********.chunk.js 2.11 kB 0 B
packages/core/admin/build/users-permissions-translation-pt-BR-json.********.chunk.js 1.21 kB 0 B
packages/core/admin/build/users-permissions-translation-pt-json.********.chunk.js 1.3 kB 0 B
packages/core/admin/build/users-permissions-translation-ru-json.********.chunk.js 2.75 kB 0 B
packages/core/admin/build/users-permissions-translation-sk-json.********.chunk.js 1.38 kB 0 B
packages/core/admin/build/users-permissions-translation-sv-json.********.chunk.js 2.01 kB 0 B
packages/core/admin/build/users-permissions-translation-th-json.********.chunk.js 2.01 kB 0 B
packages/core/admin/build/users-permissions-translation-tr-json.********.chunk.js 2.07 kB 0 B
packages/core/admin/build/users-permissions-translation-uk-json.********.chunk.js 1.75 kB 0 B
packages/core/admin/build/users-permissions-translation-vi-json.********.chunk.js 1.51 kB 0 B
packages/core/admin/build/users-permissions-translation-zh-Hans-json.********.chunk.js 2.19 kB 0 B
packages/core/admin/build/users-permissions-translation-zh-json.********.chunk.js 2.1 kB 0 B
packages/core/admin/build/users-providers-settings-page.********.chunk.js 3.52 kB 0 B
packages/core/admin/build/users-roles-settings-page.********.chunk.js 6.79 kB 0 B
packages/core/admin/build/vi-json.********.chunk.js 5.98 kB 0 B
packages/core/admin/build/webhook-edit-page.********.chunk.js 6.01 kB 0 B
packages/core/admin/build/webhook-list-page.********.chunk.js 3.14 kB 0 B
packages/core/admin/build/zh-Hans-json.********.chunk.js 17.1 kB 0 B
packages/core/admin/build/zh-json.********.chunk.js 15.2 kB 0 B

compressed-size-action

@madhurisandbhor madhurisandbhor marked this pull request as ready for review October 26, 2023 09:00
* Modifier keyboard shortcuts
*/
const handleKeyboardShortcuts = (event) => {
const isMac = /Mac|iPod|iPhone|iPad/.test(navigator.userAgent);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The userAgent easily be modified by users (e.g. for privacy reasons). It looks like navigator.platform could be more solid

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do you need to know? Couldn't you just look for ctrl first then cmd? Or do you both think it's too loose. My experience with user agent is it's not as reliable as you want 😓

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Navigator platform is deprecated, https://developer.mozilla.org/en-US/docs/Web/API/Navigator/platform

If we check ctrl first and then cmd, so both options will work on all the devices.

* Modifier keyboard shortcuts
*/
const handleKeyboardShortcuts = (event) => {
const isCtrlOrCmd = event.metaKey || event.ctrlKey;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this would make the shortcut on windows "windows key + event.key", instead of "ctrl + event.key". Because on windows the metaKey is the windows key.

If it's confirmed then I would go back to your 1st implementation since navigator.platform is deprecated

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I would probably do the inverse of this, but pressing the windows key summons things on the OS level so I wouldn't be worried about it triggering. The issue with using a regex to detect a user agent is that you have to keep that up to date and you're actually only assuming there are two OS' which in fact for a desktop there are many iirc linux comes in many flavours.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agree about regex, I will confirm with product having both keys working.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I just confirmed with Yannis, its fine to have both combinations working.

Copy link
Contributor

@remidej remidej left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tested ✅

@madhurisandbhor madhurisandbhor merged commit db0360a into main Oct 31, 2023
28 checks passed
@madhurisandbhor madhurisandbhor deleted the blocks/keyboard-shortcuts branch October 31, 2023 10:13
@madhurisandbhor madhurisandbhor added this to the 4.15.2 milestone Nov 3, 2023
@alexandrebodin alexandrebodin modified the milestones: 4.15.2, 4.15.3 Nov 3, 2023
joshuaellis pushed a commit that referenced this pull request Nov 8, 2023
* feat: added keyboard shortcuts for modifiers

* fix: eventKeys are added per modifier, updated url validation with URL()

* fix: replaced eventKey with isValidEventKey() in modifier store

* refactor: moved insertData to withLinks plugin
@alexandrebodin alexandrebodin removed this from the 4.15.3 milestone Nov 8, 2023
@alexandrebodin alexandrebodin added this to the 4.15.2 milestone Nov 8, 2023
@joshuaellis joshuaellis modified the milestones: 4.15.2, 4.15.5 Nov 13, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
pr: feature This PR adds a new feature source: core:content-manager Source is core/content-manager package
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants