yapp 4.0.227 → 4.0.229

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -3,42 +3,54 @@
3
3
  import withStyle from "easy-with-style"; ///
4
4
 
5
5
  import { React, Element } from "easy";
6
+ import { customEventTypes } from "easy-richtextarea";
6
7
 
7
8
  import GutterDiv from "./div/gutter";
8
- import OverlayDiv from "./div/overlay";
9
+ import PrettyDiv from "./div/pretty";
9
10
  import RichTextarea from "./richTextarea";
10
11
 
11
12
  import { getScrollbarThickness } from "./utilities/scrollbar";
12
13
 
14
+ const { CHANGE_CUSTOM_EVENT_TYPE } = customEventTypes;
15
+
13
16
  class PrettyPrinter extends Element {
14
- scrollHandler = (event, element) => {
17
+ customChangeHandler = (event, element) => {
18
+ const customEventType = CHANGE_CUSTOM_EVENT_TYPE; ///
19
+
20
+ this.callCustomHandlers(customEventType);
21
+ }
22
+
23
+ customScrollHandler = (event, element) => {
15
24
  const richTextarea = element, ///
16
25
  scrollTop = richTextarea.getScrollTop(),
17
26
  scrollLeft = richTextarea.getScrollLeft();
18
27
 
19
28
  this.scrollGutterDiv(scrollTop ,scrollLeft);
20
29
 
21
- this.scrollOverlayDiv(scrollTop, scrollLeft);
30
+ this.scrollPrettyDiv(scrollTop, scrollLeft);
22
31
  }
23
32
 
24
33
  update(tokens) {
25
34
  this.updateGutterDiv(tokens);
26
-
27
- this.updateOverlayDiv(tokens);
35
+ this.updatePrettyDiv(tokens);
28
36
  }
29
37
 
30
38
  childElements() {
31
- const { editable, onChange, hiddenGutter, fancyScrollbars, hiddenScrollbars } = this.properties,
32
- hidden = hiddenGutter, ///
39
+ const { editable, hiddenGutter, fancyScrollbars, hiddenScrollbars } = this.properties,
40
+ scrollbarThickness = getScrollbarThickness(hiddenScrollbars, fancyScrollbars),
33
41
  readOnly = !editable,
34
- changeHandler = onChange, ///
35
- scrollbarThickness = getScrollbarThickness(hiddenScrollbars, fancyScrollbars);
42
+ hidden = hiddenGutter; ///
36
43
 
37
44
  return ([
38
45
 
39
46
  <GutterDiv hidden={hidden} />,
40
- <OverlayDiv scrollbarThickness={scrollbarThickness} />,
41
- <RichTextarea onScroll={this.scrollHandler} onChange={changeHandler} fancyScrollbars={fancyScrollbars} hiddenScrollbars={hiddenScrollbars} readOnly={readOnly} />
47
+ <PrettyDiv scrollbarThickness={scrollbarThickness} />,
48
+ <RichTextarea readOnly={readOnly}
49
+ fancyScrollbars={fancyScrollbars}
50
+ hiddenScrollbars={hiddenScrollbars}
51
+ onCustomChange={this.customChangeHandler}
52
+ onCustomScroll={this.customScrollHandler}
53
+ />
42
54
 
43
55
  ]);
44
56
  }
@@ -57,8 +69,8 @@ class PrettyPrinter extends Element {
57
69
  this.assignContext([
58
70
  "updateGutterDiv",
59
71
  "scrollGutterDiv",
60
- "updateOverlayDiv",
61
- "scrollOverlayDiv"
72
+ "updatePrettyDiv",
73
+ "scrollPrettyDiv"
62
74
  ]);
63
75
  }
64
76
 
@@ -84,7 +96,7 @@ export default withStyle(PrettyPrinter)`
84
96
  display: grid;
85
97
  overflow: hidden;
86
98
  grid-template-rows: auto;
87
- grid-template-areas: "gutter overlay-rich-textarea";
99
+ grid-template-areas: "gutter pretty-rich-textarea";
88
100
  grid-template-columns: min-content auto;
89
101
 
90
102
  color: inherit;
@@ -39,13 +39,15 @@ export default withStyle(class extends RichTextarea {
39
39
  const getContent = this.getContent.bind(this), ///
40
40
  activateRichTextarea = this.activate.bind(this), ///
41
41
  getRichTextareaContent = this.getContent.bind(this), ///
42
- setRichTextareaContent = this.setContent.bind(this); ///
42
+ setRichTextareaContent = this.setContent.bind(this), ///
43
+ hasRichTextareaContentChanged = this.hasContentChanged.bind(this); ///
43
44
 
44
45
  return ({
45
46
  getContent,
46
47
  activateRichTextarea,
47
48
  getRichTextareaContent,
48
- setRichTextareaContent
49
+ setRichTextareaContent,
50
+ hasRichTextareaContentChanged
49
51
  });
50
52
  }
51
53
 
@@ -69,7 +71,7 @@ export default withStyle(class extends RichTextarea {
69
71
  tab-size: 2;
70
72
  overflow: scroll;
71
73
  position: relative;
72
- grid-area: overlay-rich-textarea;
74
+ grid-area: pretty-rich-textarea;
73
75
  white-space: pre;
74
76
  overflow-wrap: normal;
75
77
  background-color: transparent;
package/src/yapp.js CHANGED
@@ -9,6 +9,7 @@ import PrettyPrinter from "./prettyPrinter";
9
9
 
10
10
  import { getScrollbarThickness } from "./utilities/scrollbar";
11
11
  import { pluginFromLanguageAndPlugin } from "./utilities/plugin";
12
+ import { CONTENT_CHANGE_CUSTOM_EVENT_TYPE } from "./customEventTypes";
12
13
  import { propertiesFromContentLanguagePluginAndOptions } from "./utilities/properties";
13
14
  import { lineCountFromContent, contentFromChildElements } from "./utilities/content";
14
15
  import { colour, caretColour, borderColour, backgroundColour } from "./scheme/colour";
@@ -32,6 +33,13 @@ class Yapp extends Element {
32
33
  return content;
33
34
  }
34
35
 
36
+ hasContentChanged() {
37
+ const richTextareaContentChanged = this.hasRichTextareaContentChanged(),
38
+ contentChanged = richTextareaContentChanged; ///
39
+
40
+ return contentChanged;
41
+ }
42
+
35
43
  getInitialLineCount() {
36
44
  const content = this.getContent(),
37
45
  lineCount = lineCountFromContent(content),
@@ -40,6 +48,19 @@ class Yapp extends Element {
40
48
  return initialLineCount;
41
49
  }
42
50
 
51
+ customChangeHandler = (event, element) => {
52
+ const contentChanged = this.hasContentChanged();
53
+
54
+ if (contentChanged) {
55
+ const content = this.getContent(),
56
+ customEventType = CONTENT_CHANGE_CUSTOM_EVENT_TYPE;
57
+
58
+ this.update();
59
+
60
+ this.callCustomHandlers(customEventType, content);
61
+ }
62
+ }
63
+
43
64
  setLexer(lexer) { this.plugin.setLexer(lexer); }
44
65
 
45
66
  setParser(parser) { this.plugin.setParser(parser); }
@@ -52,24 +73,6 @@ class Yapp extends Element {
52
73
  this.removeClass("fira-code");
53
74
  }
54
75
 
55
- changeHandler = (event, element) => {
56
- const richTextarea = element, ///
57
- contentChanged = richTextarea.hasContentChanged();
58
-
59
- if (contentChanged) {
60
- const { onContentChange = null } = this.properties,
61
- contentChangeHandler = onContentChange; ///
62
-
63
- this.update();
64
-
65
- if (contentChangeHandler) {
66
- element = this; ///
67
-
68
- contentChangeHandler(event, element);
69
- }
70
- }
71
- }
72
-
73
76
  update() {
74
77
  const content = this.getContent();
75
78
 
@@ -111,11 +114,14 @@ class Yapp extends Element {
111
114
  }
112
115
 
113
116
  childElements() {
114
- const { editable = DEFAULT_EDITABLE, hiddenGutter = DEFAULT_HIDDEN_GUTTER, hiddenScrollbars = DEFAULT_HIDDEN_SCROLLBARS, fancyScrollbars = DEFAULT_FANCY_SCROLLBARS } = this.properties;
117
+ const { editable = DEFAULT_EDITABLE,
118
+ hiddenGutter = DEFAULT_HIDDEN_GUTTER,
119
+ fancyScrollbars = DEFAULT_FANCY_SCROLLBARS,
120
+ hiddenScrollbars = DEFAULT_HIDDEN_SCROLLBARS } = this.properties;
115
121
 
116
122
  return (
117
123
 
118
- <PrettyPrinter onChange={this.changeHandler} editable={editable} hiddenGutter={hiddenGutter} fancyScrollbars={fancyScrollbars} hiddenScrollbars={hiddenScrollbars} />
124
+ <PrettyPrinter onCustomChange={this.customChangeHandler} editable={editable} hiddenGutter={hiddenGutter} fancyScrollbars={fancyScrollbars} hiddenScrollbars={hiddenScrollbars} />
119
125
 
120
126
  );
121
127
  }
@@ -158,8 +164,7 @@ class Yapp extends Element {
158
164
  "autoHeight",
159
165
  "hiddenGutter",
160
166
  "noScrollbars",
161
- "fancyScrollbars",
162
- "onContentChange"
167
+ "fancyScrollbars"
163
168
  ];
164
169
 
165
170
  static fromContent(content, language, Plugin, options) {