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

Move caret to the end of pasted content #21755

Merged
merged 8 commits into from
Apr 28, 2020
Merged

Conversation

adamziel
Copy link
Contributor

@adamziel adamziel commented Apr 21, 2020

Description

When you paste a couple paragraphs into Gutenberg, your cursor remains at the beginning of the last paragraph you pasted. I expect it to be at the end of the last paragraph pasted. This PR updates initialPosition to -1 which, in turn, moves the caret to the end of the paragraph.

Solves #5317

How has this been tested?

Tested locally:

  1. Open the editor
  2. Paste two paragraphs of content
  3. Confirm that with this PR the caret is at the end of the last paragraph

Types of changes

Bug fix (non-breaking change which fixes an issue)

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@adamziel adamziel added [Type] Bug An existing feature does not function as intended Needs Technical Feedback Needs testing from a developer perspective. labels Apr 21, 2020
@github-actions
Copy link

github-actions bot commented Apr 21, 2020

Size Change: +64 B (0%)

Total Size: 816 kB

Filename Size Change
build/block-editor/index.js 106 kB +64 B (0%)
ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.02 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 4.08 kB 0 B
build/autop/index.js 2.82 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.23 kB 0 B
build/block-directory/style-rtl.css 760 B 0 B
build/block-directory/style.css 761 B 0 B
build/block-editor/style-rtl.css 10.2 kB 0 B
build/block-editor/style.css 10.2 kB 0 B
build/block-library/editor-rtl.css 7.04 kB 0 B
build/block-library/editor.css 7.04 kB 0 B
build/block-library/index.js 114 kB 0 B
build/block-library/style-rtl.css 7.14 kB 0 B
build/block-library/style.css 7.14 kB 0 B
build/block-library/theme-rtl.css 683 B 0 B
build/block-library/theme.css 685 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 179 kB 0 B
build/components/style-rtl.css 16.9 kB 0 B
build/components/style.css 16.9 kB 0 B
build/compose/index.js 6.66 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.44 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 772 B 0 B
build/dom-ready/index.js 568 B 0 B
build/dom/index.js 3.1 kB 0 B
build/edit-navigation/index.js 3.54 kB 0 B
build/edit-navigation/style-rtl.css 485 B 0 B
build/edit-navigation/style.css 485 B 0 B
build/edit-post/index.js 27.6 kB 0 B
build/edit-post/style-rtl.css 12.2 kB 0 B
build/edit-post/style.css 12.2 kB 0 B
build/edit-site/index.js 10.9 kB 0 B
build/edit-site/style-rtl.css 5.11 kB 0 B
build/edit-site/style.css 5.11 kB 0 B
build/edit-widgets/index.js 7.49 kB 0 B
build/edit-widgets/style-rtl.css 4.67 kB 0 B
build/edit-widgets/style.css 4.66 kB 0 B
build/editor/editor-styles-rtl.css 428 B 0 B
build/editor/editor-styles.css 431 B 0 B
build/editor/index.js 43.4 kB 0 B
build/editor/style-rtl.css 3.27 kB 0 B
build/editor/style.css 3.27 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.63 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 622 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 710 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.29 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.4 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.67 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/server-side-render/index.js 2.68 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.02 kB 0 B
build/viewport/index.js 1.84 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.18 kB 0 B

compressed-size-action

@gziolo
Copy link
Member

gziolo commented Apr 21, 2020

This fix is so anticipated, thanks for working on it 👍

There are two unit tests to fix, see https://travis-ci.com/github/WordPress/gutenberg/jobs/321645821 for more details.

It would be a great follow-up task to add e2e test that covers this fix as another PR.

@adamziel adamziel force-pushed the fix/caret-position-after-paste branch from 7884c55 to 2e51bda Compare April 23, 2020 08:05
@adamziel
Copy link
Contributor Author

adamziel commented Apr 23, 2020

@gziolo All checks are green now. Agreed about the e2e tests - will look into it once this one lands.

@ellatrix
Copy link
Member

Could an e2e test be added as part of this PR, please? Otherwise it will be easy for this to regress with selection and rich text refactorings.

typeof action.initialPosition === 'number'
) {
return action.initialPosition;
} else if ( action.type === 'SELECT_BLOCK' ) {
Copy link
Member

Choose a reason for hiding this comment

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

Why is the type check needed above, but not here?

Copy link
Contributor Author

@adamziel adamziel Apr 23, 2020

Choose a reason for hiding this comment

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

This PR adds a numeric initialPosition to the REPLACE_BLOCKS action in some circumstances only which means it may or may not be present. It doesn't do anything to SELECT_BLOCK action so I left that code branch untouched - I assume there's always initialPosition available.

Copy link
Member

Choose a reason for hiding this comment

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

Aside: you could consolidate those two if statements into one that uses ||.

Copy link
Contributor Author

@adamziel adamziel Apr 24, 2020

Choose a reason for hiding this comment

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

If you insist I will, but I think it's more readable like that with a dedicated branch for each action :-)

Copy link
Member

Choose a reason for hiding this comment

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

I respect your preference, if ESLint doesn’t complain it’s fine as is 😃

@adamziel
Copy link
Contributor Author

@gziolo @ellatrix Travis is happy now - your review are highly appreciated :-)

Copy link
Member

@gziolo gziolo left a comment

Choose a reason for hiding this comment

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

I have just tested it. It feels amazing. Small but impactful change 💯

Edit: feel free to merge after rebase. It looks like there are now some conflicting changes in one of the files.

@adamziel adamziel force-pushed the fix/caret-position-after-paste branch from fd322c7 to 5240e71 Compare April 28, 2020 09:20
@adamziel adamziel merged commit 6e901d0 into master Apr 28, 2020
@adamziel adamziel deleted the fix/caret-position-after-paste branch April 28, 2020 09:49
@github-actions github-actions bot added this to the Gutenberg 8.1 milestone Apr 28, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Needs Technical Feedback Needs testing from a developer perspective. [Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants