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

fix(Textbox) Textbox inputs with new lines #9192

Merged
merged 14 commits into from
Sep 9, 2023
Merged

Conversation

asturur
Copy link
Member

@asturur asturur commented Aug 31, 2023

Motivation

This PR reverts the part of broken code in #9097.
The code doesn't make sense, and we need a test to be sure we don't break it again.

The regression is happening only for splitByGrapheme set to true.

There is still a style issue that i still don't know from which commits originates, also only for splitByGrapheme, and i m looking into it

closes #9190

To add a test the following addition have been done to the CanvasUtil:

  • add a press method that takes a key
  • add a ctrlC and ctrlV method.

ctrlC and ctrlV require permissions for clipboard handling and need to treat macos differently.

@asturur asturur changed the title fix() Textbox inputs with new lines fix(Textbox) Textbox inputs with new lines Aug 31, 2023
const graphemeArray = splitByGrapheme
? [word]
: this.graphemeSplit(word);
const graphemeArray = splitByGrapheme ? word : this.graphemeSplit(word);
Copy link
Member Author

Choose a reason for hiding this comment

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

this line and line 349 are both necessary to unbreak the textbox.

@github-actions
Copy link
Contributor

github-actions bot commented Aug 31, 2023

Build Stats

file / KB (diff) bundled minified
fabric 915.100 (+0.058) 305.428 (+0.017)

@ShaMan123
Copy link
Contributor

ShaMan123 commented Sep 1, 2023

Please try the fix I did to styles and onInput
#9096

@asturur
Copy link
Member Author

asturur commented Sep 1, 2023

i found this bug trying to merge the test from exactly that PR, that is the only thing that will likely get merged.
That pr won't be merged since:

  • removes methods without explaining why
  • renames methods together with the fix
  • does not explain where the fix is.

i would gladly merge the fix if i could individuate it

@asturur
Copy link
Member Author

asturur commented Sep 1, 2023

but yes the style bug is the same that is reported in #9028, so i don't need to investigate it.

@asturur
Copy link
Member Author

asturur commented Sep 1, 2023

added a test that covers inputing new lines with both splitByGrapheme true and false

@ShaMan123
Copy link
Contributor

If the description is the problem I can amend that.

@asturur
Copy link
Member Author

asturur commented Sep 1, 2023

no @ShaMan123 that pr is a large mix refactor that is not going anywhere for me. if you identified the style bug we can fix it, otherwise we will have to find the bugged code first.

@ShaMan123
Copy link
Contributor

I wrote what the bug is.
A mix between the wrapped and non wrapped use of line/char index
That is why I renamed stuff.
A lot like with getPointer.
And removed the methods that existed to work around all the mix.

@asturur
Copy link
Member Author

asturur commented Sep 1, 2023

We talked about this more than once.
What you do is this code is terrible, i ll write a bunch of new code that works
I can't accept PRs like that. Not to fix a bug.
And anyway is unrelated from this PR.

@asturur
Copy link
Member Author

asturur commented Sep 4, 2023

@ShaMan123 i would like either a request for change or an approval when you have time, so i can move forward with the other stacked fixes

@ShaMan123
Copy link
Contributor

In the weekend I will get to it

@asturur
Copy link
Member Author

asturur commented Sep 5, 2023

ok i ll let text rest this week then. I ll move to look at the layout pr.

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

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

Sorry @asturur but it seems to me you are redoing at least part of #9096 in #9197 (and not fixing all it fixes) instead of merging it.
I really do not understand why you are against that PR. Yes, it removes many methods because they are not needed, all seem to have been written to patch the exisiting situation.
The test in #9096 is more extensive than the tests you wrote here because it also deletes lines.

@@ -339,17 +345,16 @@ export class Textbox<
: this.wordSplit(line);

if (wordsOrGraphemes.length === 0) {
return [];
// @ts-expect-error
wordsOrGraphemes.push([]);
Copy link
Contributor

@ShaMan123 ShaMan123 Sep 9, 2023

Choose a reason for hiding this comment

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

why?
If it must return something then so be it.

Copy link
Contributor

Choose a reason for hiding this comment

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

Copy link
Contributor

@ShaMan123 ShaMan123 left a comment

Choose a reason for hiding this comment

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

Please explain why snapshot 3 is so different when splitByGrapheme is true/false
The style is applied differently to the pasted text, right?

e2e/tests/text/adding-text/index.spec.ts Show resolved Hide resolved
@ShaMan123
Copy link
Contributor

ShaMan123 commented Sep 9, 2023

I have commited 4803a19 - feel free to revert it.
It is a PR review suggestion I wanted to make.
If it works and you agree to it we can change the GraphemeData type back to string[] only

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

@ShaMan123 because i m not doing refactors on text now or later to fix a bug that is a regression and that gets fixed removing the code that introduce the bug. This pr reverts the offending code that broke the functionality. period.

i will check your commit and if is not another refactor we can keep it.

the methods you deleted in your pr are user facing functionalities, are not used by fabricjs ( like cleanStyle )

@ShaMan123
Copy link
Contributor

I was sure cleanStyle was internal.
I do not see a use for it since stylesToArray has come but I might be missing something

@ShaMan123
Copy link
Contributor

ShaMan123 commented Sep 9, 2023

@ShaMan123 because i m not doing refactors on text now or later to fix a bug that is a regression and that gets fixed removing the code that introduce the bug. This pr reverts the offending code that broke the functionality. period.

Yes, but there are other bugs with style that PR fixes and these do not and are not regressions

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

I was sure cleanStyle was internal. I do not see a use for it since stylesToArray has come but I might be missing something

cleanStyle allows you to remove styles that are identical to the object main properties. It reduce the quantity of style applied to an object.

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

@ShaMan123 because i m not doing refactors on text now or later to fix a bug that is a regression and that gets fixed removing the code that introduce the bug. This pr reverts the offending code that broke the functionality. period.

Yes, but there are other bugs with style that PR fixes and these do not and are not regressions

I m sure i talked about this with you already.
There is a bug, we find the bug we fix the bug. Rewriting a bunch of code to fix a bug is wrong.
I can't accept it.
I m not going to put in discussion a complicated piece of code like onInput because there is a style shift somewhere else ( that is fixed by another PR ).
When there are bugs we fix them as patches on the current codebase.

In this case we should have remove the breaking PR entirely but is not possible and remove a lot of TS work that is just types. So i just undid the lines that introduced the issue.

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

Please explain why snapshot 3 is so different when splitByGrapheme is true/false The style is applied differently to the pasted text, right?

snapshot 3 is different because this PR doesn't fix the style shift.
That will be fixed by the other PR and the snapshot will have to be updated

@@ -22,7 +22,7 @@ export const textboxDefaultValues: Partial<TClassProperties<Textbox>> = {

export type GraphemeData = {
wordsData: {
word: string[];
word: string[] | string;
Copy link
Contributor

Choose a reason for hiding this comment

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

Suggested change
word: string[] | string;
word: string[];

???

@@ -327,6 +327,12 @@ export class Textbox<
*
*/
getGraphemeDataForRender(lines: string[]): GraphemeData {
// this method has issues.
// it has been typed after some small refactors and is unclear how is working
// graphemeArray is either a string or a string[].
Copy link
Contributor

Choose a reason for hiding this comment

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

this is also wrong now

@github-actions
Copy link
Contributor

github-actions bot commented Sep 9, 2023

Coverage after merging fix-textbox-regression into master will be

82.97%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
index.node.ts7.69%100%0%14.29%17, 20, 23, 35, 38, 41
src
   ClassRegistry.ts100%100%100%100%
   Collection.ts94.71%94.64%86.67%97.09%101, 104, 207–208, 233–234
   CommonMethods.ts96.55%87.50%100%100%9
   Intersection.ts100%100%100%100%
   Observable.ts87.76%85.29%87.50%89.58%134–135, 160–161, 32–33, 41, 50, 78, 89
   Point.ts100%100%100%100%
   Shadow.ts98.36%95.65%100%100%178
   cache.ts97.06%90%100%100%57
   config.ts75%66.67%66.67%82.76%130, 138, 138, 138, 138, 138–140, 151–153
   constants.ts100%100%100%100%
src/Pattern
   Pattern.ts92.31%91.89%90%93.55%118, 129, 138, 31, 94
src/brushes
   BaseBrush.ts100%100%100%100%
   CircleBrush.ts0%0%0%0%108, 108, 108, 110, 112, 114–116, 118–121, 128–129, 13, 136, 138, 23–24, 32–36, 40–44, 51–54, 62–66, 68, 76, 76, 76, 76, 76–77, 79, 79, 79–82, 84, 92–93, 95, 97–99
   PatternBrush.ts97.06%87.50%100%100%21
   PencilBrush.ts91.06%82.35%100%93.81%122–123, 152, 152–154, 176, 176, 276, 280, 285–286, 68–69, 84–85
   SprayBrush.ts0%0%0%0%107, 107, 107, 107, 107–108, 110–111, 118–119, 121, 123–127, 136, 140–141, 141, 149, 149, 149–152, 154–157, 161–162, 164, 166–169, 17, 172, 179, 18, 180, 182, 184–185, 187, 194–195, 197–198, 20, 201, 201, 208, 208, 21, 212, 22, 22, 22–24, 28, 32, 39, 46, 53, 60, 67, 84–86, 94–96, 98–99
src/canvas
   Canvas.ts79.12%77.68%83.05%79.61%1000, 1003–1004, 1004, 1004, 1006, 1014, 1014, 1014–1016, 1016, 1016, 1023–1024, 1032–1033, 1033, 1033–1034, 1040, 1042, 1073–1075, 1078–1079, 1083–1084, 1197–1199, 1202–1203, 1276, 1395, 1517, 157, 182, 292–293, 296–300, 305, 328–329, 334–339, 359, 359, 359–360, 360, 360–361, 369, 37, 374–375, 375, 375–376, 378, 387, 393–394, 394, 394, 41, 437, 445, 449, 449, 449–450, 452, 535–536, 536, 536–537, 543, 543, 543–545, 565, 567, 567, 567–568, 568, 568, 571, 571, 571–572, 575, 584–585, 587–588, 590, 590–591, 593–594, 606–607, 607, 607–608, 610–615, 621, 628, 665, 665, 665, 667, 669–674, 680, 686, 686, 686–687, 689, 692, 697, 710, 738, 738, 796–797, 797, 797–798, 800, 803–804, 804, 804–805, 807–808, 811, 811–813, 816–817, 887, 899, 906, 927, 959, 980–981, 997–998, 998, 998–999
   CanvasOptions.ts100%100%100%100%
   SelectableCanvas.ts94.44%92.28%94.23%96.17%1098, 1100, 1102–1103, 301, 477–478, 480–481, 481, 481, 530–531, 592–593, 646–648, 680, 685–686, 713–714, 898, 898–899, 902, 922, 922, 971, 979
   StaticCanvas.ts96.78%93.09%100%98.53%1030, 1040, 1092–1093, 1096, 1131–1132, 1208, 1217, 1217, 1221, 1221, 1268–1269, 185–186, 202, 570, 582–583, 913–914, 914, 914–915
   StaticCanvasOptions.ts100%100%100%100%
   TextEditingManager.ts84.31%71.43%91.67%88%17–18, 18, 18–19, 19, 19
src/canvas/DOMManagers
   CanvasDOMManager.ts95.52%70%100%100%21–22, 29
   StaticCanvasDOMManager.ts100%100%100%100%
   util.ts86.67%80.56%83.33%93.94%14, 26, 63–64, 67, 67, 74, 93–94
src/color
   Color.ts94.96%91.67%96.30%96.05%233, 258–259, 267–268, 48
   color_map.ts100%100%100%100%
   constants.ts100%100%100%100%
   util.ts85.71%76.92%100%89.74%55–56, 56, 58, 58, 58–59, 61–62, 89
src/controls
   Control.ts93.33%87.88%91.67%97.78%175, 240, 327, 327, 362
   changeWidth.ts100%100%100%100%
   commonControls.ts100%100%100%100%
   controlRendering.ts81.63%78%100%84.78%106, 111, 121, 121, 45, 50, 61, 61, 65–72, 81–82
   drag.ts100%100%100%100%
   fireEvent.ts88.89%75%100%100%13
   polyControl.ts6.06%0%0%11.43%103, 117, 117, 117, 117, 117, 119–122, 122, 125, 132, 17, 25–29, 29, 29, 29, 29, 29, 29, 29, 50–56, 56, 56, 56, 56, 58, 63–64, 66, 76, 82–84, 84, 86, 89–90, 90, 90, 90, 90, 92, 97
   rotate.ts19.57%12.50%50%21.43%41, 45, 51, 51, 51–52, 55–57, 59, 59, 59, 59, 59–61, 61, 61–63, 65, 65, 65–67, 67, 67–68, 73, 73, 73–74, 76, 78, 80–81
   scale.ts93.57%92.94%100%93.67%129–130, 132–134, 148–149, 181–183, 42
   scaleSkew.ts78.79%64.29%100%85.71%27, 29, 29, 29, 31, 33, 35
   skew.ts91.03%79.31%100%97.67%131–132, 163–164, 171, 177, 179
   util.ts100%100%100%100%
   wrapWithFireEvent.ts100%100%100%100%
   wrapWithFixedAnchor.ts100%100%100%100%
src/env
   browser.ts<

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

the line you changed seems to unbreak the issue anyway and is more consistent with how we planned that function in #9097 so we keep it.

@asturur
Copy link
Member Author

asturur commented Sep 9, 2023

The test in #9096 is more extensive than the tests you wrote here because it also deletes lines.

Yes because this PR is fixing a line adding bug, so it is testing that.

Regarding redoing #9096 in the other PR, i don't think it is true.
I m fixing the different bugs you found in the issue, on the current codebase, patching the current code.
There are 3 different bugs, so i ll need 3 smalls prs.
The third i didn't do yet because they are stacked all on top of each other anyway.

@asturur asturur merged commit 5ee3fe2 into master Sep 9, 2023
24 checks passed
@asturur asturur deleted the fix-textbox-regression branch September 9, 2023 15:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug]: Textbox input seems completely off
2 participants