@expensify/react-native-live-markdown 0.1.12 → 0.1.14
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.
- package/android/src/main/java/com/expensify/livemarkdown/MarkdownBlockquoteSpan.java +10 -5
- package/android/src/main/java/com/expensify/livemarkdown/MarkdownUtils.java +11 -7
- package/ios/MarkdownLayoutManager.mm +11 -6
- package/ios/RCTMarkdownUtils.h +1 -1
- package/ios/RCTMarkdownUtils.mm +11 -7
- package/lib/commonjs/web/parserUtils.js +25 -14
- package/lib/commonjs/web/parserUtils.js.map +1 -1
- package/lib/module/web/parserUtils.js +25 -14
- package/lib/module/web/parserUtils.js.map +1 -1
- package/lib/parser/react-native-live-markdown-parser.js +4 -4
- package/lib/typescript/src/web/parserUtils.d.ts +2 -1
- package/lib/typescript/src/web/parserUtils.d.ts.map +1 -1
- package/package.json +1 -1
- package/parser/react-native-live-markdown-parser.js +4 -4
- package/src/web/parserUtils.ts +23 -15
|
@@ -15,17 +15,19 @@ public class MarkdownBlockquoteSpan implements MarkdownSpan, LeadingMarginSpan {
|
|
|
15
15
|
private final float borderWidth;
|
|
16
16
|
private final float marginLeft;
|
|
17
17
|
private final float paddingLeft;
|
|
18
|
+
private final int nestingLevel;
|
|
18
19
|
|
|
19
|
-
public MarkdownBlockquoteSpan(@ColorInt int borderColor, float borderWidth, float marginLeft, float paddingLeft) {
|
|
20
|
+
public MarkdownBlockquoteSpan(@ColorInt int borderColor, float borderWidth, float marginLeft, float paddingLeft, int nestingLevel) {
|
|
20
21
|
this.borderColor = borderColor;
|
|
21
22
|
this.borderWidth = PixelUtil.toPixelFromDIP(borderWidth);
|
|
22
23
|
this.marginLeft = PixelUtil.toPixelFromDIP(marginLeft);
|
|
23
24
|
this.paddingLeft = PixelUtil.toPixelFromDIP(paddingLeft);
|
|
25
|
+
this.nestingLevel = nestingLevel;
|
|
24
26
|
}
|
|
25
27
|
|
|
26
28
|
@Override
|
|
27
29
|
public int getLeadingMargin(boolean first) {
|
|
28
|
-
return (int) (marginLeft + borderWidth + paddingLeft);
|
|
30
|
+
return (int) (marginLeft + borderWidth + paddingLeft) * nestingLevel;
|
|
29
31
|
}
|
|
30
32
|
|
|
31
33
|
@Override
|
|
@@ -37,9 +39,12 @@ public class MarkdownBlockquoteSpan implements MarkdownSpan, LeadingMarginSpan {
|
|
|
37
39
|
p.setStyle(Paint.Style.FILL);
|
|
38
40
|
p.setColor(borderColor);
|
|
39
41
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
42
|
+
for (int level = 0; level < nestingLevel; level++) {
|
|
43
|
+
float shift = (marginLeft + borderWidth + paddingLeft) * level;
|
|
44
|
+
float left = x + dir * (marginLeft + shift);
|
|
45
|
+
float right = x + dir * (marginLeft + borderWidth + shift);
|
|
46
|
+
c.drawRect(left, top, right, bottom, p);
|
|
47
|
+
}
|
|
43
48
|
|
|
44
49
|
p.setStyle(originalStyle);
|
|
45
50
|
p.setColor(originalColor);
|
|
@@ -16,6 +16,7 @@ import com.facebook.soloader.SoLoader;
|
|
|
16
16
|
|
|
17
17
|
import org.json.JSONArray;
|
|
18
18
|
import org.json.JSONException;
|
|
19
|
+
import org.json.JSONObject;
|
|
19
20
|
|
|
20
21
|
import java.io.IOException;
|
|
21
22
|
import java.io.InputStream;
|
|
@@ -91,18 +92,20 @@ public class MarkdownUtils {
|
|
|
91
92
|
try {
|
|
92
93
|
JSONArray ranges = new JSONArray(output);
|
|
93
94
|
for (int i = 0; i < ranges.length(); i++) {
|
|
94
|
-
|
|
95
|
-
String type = range.getString(
|
|
96
|
-
int start = range.getInt(
|
|
97
|
-
int
|
|
98
|
-
|
|
95
|
+
JSONObject range = ranges.getJSONObject(i);
|
|
96
|
+
String type = range.getString("type");
|
|
97
|
+
int start = range.getInt("start");
|
|
98
|
+
int length = range.getInt("length");
|
|
99
|
+
int depth = range.optInt("depth", 1);
|
|
100
|
+
int end = start + length;
|
|
101
|
+
applyRange(ssb, type, start, end, depth);
|
|
99
102
|
}
|
|
100
103
|
} catch (JSONException e) {
|
|
101
104
|
// Do nothing
|
|
102
105
|
}
|
|
103
106
|
}
|
|
104
107
|
|
|
105
|
-
private void applyRange(SpannableStringBuilder ssb, String type, int start, int end) {
|
|
108
|
+
private void applyRange(SpannableStringBuilder ssb, String type, int start, int end, int depth) {
|
|
106
109
|
switch (type) {
|
|
107
110
|
case "bold":
|
|
108
111
|
setSpan(ssb, new MarkdownBoldSpan(), start, end);
|
|
@@ -154,7 +157,8 @@ public class MarkdownUtils {
|
|
|
154
157
|
mMarkdownStyle.getBlockquoteBorderColor(),
|
|
155
158
|
mMarkdownStyle.getBlockquoteBorderWidth(),
|
|
156
159
|
mMarkdownStyle.getBlockquoteMarginLeft(),
|
|
157
|
-
mMarkdownStyle.getBlockquotePaddingLeft()
|
|
160
|
+
mMarkdownStyle.getBlockquotePaddingLeft(),
|
|
161
|
+
depth);
|
|
158
162
|
setSpan(ssb, span, start, end);
|
|
159
163
|
break;
|
|
160
164
|
default:
|
|
@@ -7,9 +7,11 @@
|
|
|
7
7
|
|
|
8
8
|
[self enumerateLineFragmentsForGlyphRange:glyphsToShow usingBlock:^(CGRect rect, CGRect usedRect, NSTextContainer * _Nonnull textContainer, NSRange glyphRange, BOOL * _Nonnull stop) {
|
|
9
9
|
__block BOOL isBlockquote = NO;
|
|
10
|
+
__block int currentDepth = 0;
|
|
10
11
|
RCTMarkdownUtils *markdownUtils = [self valueForKey:@"markdownUtils"];
|
|
11
|
-
[markdownUtils.
|
|
12
|
-
NSRange range = [item rangeValue];
|
|
12
|
+
[markdownUtils.blockquoteRangesAndLevels enumerateObjectsUsingBlock:^(NSDictionary *item, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
13
|
+
NSRange range = [[item valueForKey:@"range"] rangeValue];
|
|
14
|
+
currentDepth = [[item valueForKey:@"depth"] unsignedIntegerValue];
|
|
13
15
|
NSUInteger start = range.location;
|
|
14
16
|
NSUInteger end = start + range.length;
|
|
15
17
|
NSUInteger location = glyphRange.location;
|
|
@@ -21,13 +23,16 @@
|
|
|
21
23
|
if (isBlockquote) {
|
|
22
24
|
CGFloat paddingLeft = markdownUtils.backedTextInputView.textContainerInset.left;
|
|
23
25
|
CGFloat paddingTop = markdownUtils.backedTextInputView.textContainerInset.top;
|
|
24
|
-
CGFloat x = paddingLeft + markdownUtils.markdownStyle.blockquoteMarginLeft;
|
|
25
26
|
CGFloat y = paddingTop + rect.origin.y;
|
|
26
27
|
CGFloat width = markdownUtils.markdownStyle.blockquoteBorderWidth;
|
|
27
28
|
CGFloat height = rect.size.height;
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
CGFloat shift = markdownUtils.markdownStyle.blockquoteMarginLeft + markdownUtils.markdownStyle.blockquoteBorderWidth + markdownUtils.markdownStyle.blockquotePaddingLeft;
|
|
30
|
+
for (int level = 0; level < currentDepth; level++) {
|
|
31
|
+
CGFloat x = paddingLeft + (level * shift) + markdownUtils.markdownStyle.blockquoteMarginLeft;
|
|
32
|
+
CGRect lineRect = CGRectMake(x, y, width, height);
|
|
33
|
+
[markdownUtils.markdownStyle.blockquoteBorderColor setFill];
|
|
34
|
+
UIRectFill(lineRect);
|
|
35
|
+
}
|
|
31
36
|
}
|
|
32
37
|
}];
|
|
33
38
|
}
|
package/ios/RCTMarkdownUtils.h
CHANGED
|
@@ -6,7 +6,7 @@ NS_ASSUME_NONNULL_BEGIN
|
|
|
6
6
|
@interface RCTMarkdownUtils : NSObject
|
|
7
7
|
|
|
8
8
|
@property (nonatomic) RCTMarkdownStyle *markdownStyle;
|
|
9
|
-
@property (nonatomic) NSMutableArray<
|
|
9
|
+
@property (nonatomic) NSMutableArray<NSDictionary *> *blockquoteRangesAndLevels;
|
|
10
10
|
@property (weak, nonatomic) UIView<RCTBackedTextInputViewProtocol> *backedTextInputView;
|
|
11
11
|
|
|
12
12
|
- (instancetype)initWithBackedTextInputView:(UIView<RCTBackedTextInputViewProtocol> *)backedTextInputView;
|
package/ios/RCTMarkdownUtils.mm
CHANGED
|
@@ -55,13 +55,14 @@
|
|
|
55
55
|
// This is a workaround that applies the NSUnderlineStyleNone to the string before iterating over ranges which resolves this problem.
|
|
56
56
|
[attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleNone] range:NSMakeRange(0, attributedString.length)];
|
|
57
57
|
|
|
58
|
-
|
|
58
|
+
_blockquoteRangesAndLevels = [NSMutableArray new];
|
|
59
59
|
|
|
60
60
|
[ranges enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
|
|
61
|
-
|
|
62
|
-
NSString *type = item
|
|
63
|
-
|
|
64
|
-
|
|
61
|
+
NSDictionary *item = obj;
|
|
62
|
+
NSString *type = [item valueForKey:@"type"];
|
|
63
|
+
NSInteger location = [[item valueForKey:@"start"] unsignedIntegerValue];
|
|
64
|
+
NSInteger length = [[item valueForKey:@"length"] unsignedIntegerValue];
|
|
65
|
+
NSInteger depth = [[item valueForKey:@"depth"] unsignedIntegerValue] ?: 1;
|
|
65
66
|
NSRange range = NSMakeRange(location, length);
|
|
66
67
|
|
|
67
68
|
if ([type isEqualToString:@"bold"] || [type isEqualToString:@"italic"] || [type isEqualToString:@"code"] || [type isEqualToString:@"pre"] || [type isEqualToString:@"h1"]) {
|
|
@@ -103,12 +104,15 @@
|
|
|
103
104
|
[attributedString addAttribute:NSUnderlineStyleAttributeName value:[NSNumber numberWithInteger:NSUnderlineStyleSingle] range:range];
|
|
104
105
|
[attributedString addAttribute:NSForegroundColorAttributeName value:_markdownStyle.linkColor range:range];
|
|
105
106
|
} else if ([type isEqualToString:@"blockquote"]) {
|
|
106
|
-
CGFloat indent = _markdownStyle.blockquoteMarginLeft + _markdownStyle.blockquoteBorderWidth + _markdownStyle.blockquotePaddingLeft;
|
|
107
|
+
CGFloat indent = (_markdownStyle.blockquoteMarginLeft + _markdownStyle.blockquoteBorderWidth + _markdownStyle.blockquotePaddingLeft) * depth;
|
|
107
108
|
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
|
|
108
109
|
paragraphStyle.firstLineHeadIndent = indent;
|
|
109
110
|
paragraphStyle.headIndent = indent;
|
|
110
111
|
[attributedString addAttribute:NSParagraphStyleAttributeName value:paragraphStyle range:range];
|
|
111
|
-
[
|
|
112
|
+
[_blockquoteRangesAndLevels addObject:@{
|
|
113
|
+
@"range": [NSValue valueWithRange:range],
|
|
114
|
+
@"depth": @(depth)
|
|
115
|
+
}];
|
|
112
116
|
} else if ([type isEqualToString:@"pre"]) {
|
|
113
117
|
[attributedString addAttribute:NSForegroundColorAttributeName value:_markdownStyle.preColor range:range];
|
|
114
118
|
NSRange rangeForBackground = [inputString characterAtIndex:range.location] == '\n' ? NSMakeRange(range.location + 1, range.length - 1) : range;
|
|
@@ -66,6 +66,24 @@ function addSubstringAsTextNode(root, text, startIndex, endIndex) {
|
|
|
66
66
|
root.appendChild(document.createTextNode(substring));
|
|
67
67
|
}
|
|
68
68
|
}
|
|
69
|
+
function ungroupRanges(ranges) {
|
|
70
|
+
const ungroupedRanges = [];
|
|
71
|
+
ranges.forEach(range => {
|
|
72
|
+
if (!range.depth) {
|
|
73
|
+
ungroupedRanges.push(range);
|
|
74
|
+
}
|
|
75
|
+
const {
|
|
76
|
+
depth,
|
|
77
|
+
...rangeWithoutDepth
|
|
78
|
+
} = range;
|
|
79
|
+
Array.from({
|
|
80
|
+
length: depth
|
|
81
|
+
}).forEach(() => {
|
|
82
|
+
ungroupedRanges.push(rangeWithoutDepth);
|
|
83
|
+
});
|
|
84
|
+
});
|
|
85
|
+
return ungroupedRanges;
|
|
86
|
+
}
|
|
69
87
|
function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineStyles = false) {
|
|
70
88
|
const root = document.createElement('span');
|
|
71
89
|
root.className = 'root';
|
|
@@ -74,7 +92,7 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
74
92
|
addSubstringAsTextNode(root, text, 0, textLength);
|
|
75
93
|
return root;
|
|
76
94
|
}
|
|
77
|
-
const stack =
|
|
95
|
+
const stack = ungroupRanges(ranges);
|
|
78
96
|
const nestedStack = [{
|
|
79
97
|
node: root,
|
|
80
98
|
endIndex: textLength
|
|
@@ -89,9 +107,9 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
89
107
|
if (!currentRoot) {
|
|
90
108
|
break;
|
|
91
109
|
}
|
|
92
|
-
const endOfCurrentRange = range.
|
|
93
|
-
const nextRangeStartIndex = stack.length > 0 && !!stack[0] ? stack[0].
|
|
94
|
-
addSubstringAsTextNode(currentRoot.node, text, lastRangeEndIndex, range.
|
|
110
|
+
const endOfCurrentRange = range.start + range.length;
|
|
111
|
+
const nextRangeStartIndex = stack.length > 0 && !!stack[0] ? stack[0].start || 0 : textLength;
|
|
112
|
+
addSubstringAsTextNode(currentRoot.node, text, lastRangeEndIndex, range.start); // add text with newlines before current range
|
|
95
113
|
|
|
96
114
|
const span = document.createElement('span');
|
|
97
115
|
if (disableInlineStyles) {
|
|
@@ -106,9 +124,9 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
106
124
|
node: span,
|
|
107
125
|
endIndex: endOfCurrentRange
|
|
108
126
|
});
|
|
109
|
-
lastRangeEndIndex = range.
|
|
127
|
+
lastRangeEndIndex = range.start;
|
|
110
128
|
} else {
|
|
111
|
-
addSubstringAsTextNode(span, text, range.
|
|
129
|
+
addSubstringAsTextNode(span, text, range.start, endOfCurrentRange);
|
|
112
130
|
currentRoot.node.appendChild(span);
|
|
113
131
|
lastRangeEndIndex = endOfCurrentRange;
|
|
114
132
|
|
|
@@ -141,14 +159,7 @@ function parseText(target, text, curosrPositionIndex, markdownStyle = {}, disabl
|
|
|
141
159
|
cursorPosition = CursorUtils.getCurrentCursorPosition(target).start;
|
|
142
160
|
}
|
|
143
161
|
const ranges = global.parseExpensiMarkToRanges(text);
|
|
144
|
-
const markdownRanges = ranges
|
|
145
|
-
const [type, startIndex, length] = range;
|
|
146
|
-
return {
|
|
147
|
-
type: type,
|
|
148
|
-
startIndex,
|
|
149
|
-
length
|
|
150
|
-
};
|
|
151
|
-
});
|
|
162
|
+
const markdownRanges = ranges;
|
|
152
163
|
targetElement.innerHTML = '';
|
|
153
164
|
targetElement.innerText = '';
|
|
154
165
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CursorUtils","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","addStyling","targetElement","type","markdownStyle","node","assign","style","syntax","fontWeight","fontStyle","textDecoration","mentionHere","mentionUser","link","code","pre","blockquote","borderLeftStyle","display","maxWidth","boxSizing","h1","addSubstringAsTextNode","root","text","startIndex","endIndex","substring","length","appendChild","document","createTextNode","
|
|
1
|
+
{"version":3,"names":["CursorUtils","_interopRequireWildcard","require","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","addStyling","targetElement","type","markdownStyle","node","assign","style","syntax","fontWeight","fontStyle","textDecoration","mentionHere","mentionUser","link","code","pre","blockquote","borderLeftStyle","display","maxWidth","boxSizing","h1","addSubstringAsTextNode","root","text","startIndex","endIndex","substring","length","appendChild","document","createTextNode","ungroupRanges","ranges","ungroupedRanges","forEach","range","depth","push","rangeWithoutDepth","Array","from","parseRangesToHTMLNodes","disableInlineStyles","createElement","className","textLength","stack","nestedStack","lastRangeEndIndex","shift","currentRoot","endOfCurrentRange","start","nextRangeStartIndex","span","prevRoot","pop","lastNestedNode","parseText","target","curosrPositionIndex","disableNewLinesInCursorPositioning","alwaysMoveCursorToTheEnd","cursorPosition","isFocused","activeElement","getCurrentCursorPosition","global","parseExpensiMarkToRanges","markdownRanges","innerHTML","innerText","dom","moveCursorToEnd","setCursorPosition"],"sourceRoot":"../../../src","sources":["web/parserUtils.ts"],"mappings":"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"}
|
|
@@ -57,6 +57,24 @@ function addSubstringAsTextNode(root, text, startIndex, endIndex) {
|
|
|
57
57
|
root.appendChild(document.createTextNode(substring));
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
|
+
function ungroupRanges(ranges) {
|
|
61
|
+
const ungroupedRanges = [];
|
|
62
|
+
ranges.forEach(range => {
|
|
63
|
+
if (!range.depth) {
|
|
64
|
+
ungroupedRanges.push(range);
|
|
65
|
+
}
|
|
66
|
+
const {
|
|
67
|
+
depth,
|
|
68
|
+
...rangeWithoutDepth
|
|
69
|
+
} = range;
|
|
70
|
+
Array.from({
|
|
71
|
+
length: depth
|
|
72
|
+
}).forEach(() => {
|
|
73
|
+
ungroupedRanges.push(rangeWithoutDepth);
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
return ungroupedRanges;
|
|
77
|
+
}
|
|
60
78
|
function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineStyles = false) {
|
|
61
79
|
const root = document.createElement('span');
|
|
62
80
|
root.className = 'root';
|
|
@@ -65,7 +83,7 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
65
83
|
addSubstringAsTextNode(root, text, 0, textLength);
|
|
66
84
|
return root;
|
|
67
85
|
}
|
|
68
|
-
const stack =
|
|
86
|
+
const stack = ungroupRanges(ranges);
|
|
69
87
|
const nestedStack = [{
|
|
70
88
|
node: root,
|
|
71
89
|
endIndex: textLength
|
|
@@ -80,9 +98,9 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
80
98
|
if (!currentRoot) {
|
|
81
99
|
break;
|
|
82
100
|
}
|
|
83
|
-
const endOfCurrentRange = range.
|
|
84
|
-
const nextRangeStartIndex = stack.length > 0 && !!stack[0] ? stack[0].
|
|
85
|
-
addSubstringAsTextNode(currentRoot.node, text, lastRangeEndIndex, range.
|
|
101
|
+
const endOfCurrentRange = range.start + range.length;
|
|
102
|
+
const nextRangeStartIndex = stack.length > 0 && !!stack[0] ? stack[0].start || 0 : textLength;
|
|
103
|
+
addSubstringAsTextNode(currentRoot.node, text, lastRangeEndIndex, range.start); // add text with newlines before current range
|
|
86
104
|
|
|
87
105
|
const span = document.createElement('span');
|
|
88
106
|
if (disableInlineStyles) {
|
|
@@ -97,9 +115,9 @@ function parseRangesToHTMLNodes(text, ranges, markdownStyle = {}, disableInlineS
|
|
|
97
115
|
node: span,
|
|
98
116
|
endIndex: endOfCurrentRange
|
|
99
117
|
});
|
|
100
|
-
lastRangeEndIndex = range.
|
|
118
|
+
lastRangeEndIndex = range.start;
|
|
101
119
|
} else {
|
|
102
|
-
addSubstringAsTextNode(span, text, range.
|
|
120
|
+
addSubstringAsTextNode(span, text, range.start, endOfCurrentRange);
|
|
103
121
|
currentRoot.node.appendChild(span);
|
|
104
122
|
lastRangeEndIndex = endOfCurrentRange;
|
|
105
123
|
|
|
@@ -132,14 +150,7 @@ function parseText(target, text, curosrPositionIndex, markdownStyle = {}, disabl
|
|
|
132
150
|
cursorPosition = CursorUtils.getCurrentCursorPosition(target).start;
|
|
133
151
|
}
|
|
134
152
|
const ranges = global.parseExpensiMarkToRanges(text);
|
|
135
|
-
const markdownRanges = ranges
|
|
136
|
-
const [type, startIndex, length] = range;
|
|
137
|
-
return {
|
|
138
|
-
type: type,
|
|
139
|
-
startIndex,
|
|
140
|
-
length
|
|
141
|
-
};
|
|
142
|
-
});
|
|
153
|
+
const markdownRanges = ranges;
|
|
143
154
|
targetElement.innerHTML = '';
|
|
144
155
|
targetElement.innerText = '';
|
|
145
156
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["CursorUtils","addStyling","targetElement","type","markdownStyle","node","Object","assign","style","syntax","fontWeight","fontStyle","textDecoration","mentionHere","mentionUser","link","code","pre","blockquote","borderLeftStyle","display","maxWidth","boxSizing","h1","addSubstringAsTextNode","root","text","startIndex","endIndex","substring","length","appendChild","document","createTextNode","
|
|
1
|
+
{"version":3,"names":["CursorUtils","addStyling","targetElement","type","markdownStyle","node","Object","assign","style","syntax","fontWeight","fontStyle","textDecoration","mentionHere","mentionUser","link","code","pre","blockquote","borderLeftStyle","display","maxWidth","boxSizing","h1","addSubstringAsTextNode","root","text","startIndex","endIndex","substring","length","appendChild","document","createTextNode","ungroupRanges","ranges","ungroupedRanges","forEach","range","depth","push","rangeWithoutDepth","Array","from","parseRangesToHTMLNodes","disableInlineStyles","createElement","className","textLength","stack","nestedStack","lastRangeEndIndex","shift","currentRoot","endOfCurrentRange","start","nextRangeStartIndex","span","prevRoot","pop","lastNestedNode","parseText","target","curosrPositionIndex","disableNewLinesInCursorPositioning","alwaysMoveCursorToTheEnd","cursorPosition","isFocused","activeElement","getCurrentCursorPosition","global","parseExpensiMarkToRanges","markdownRanges","innerHTML","innerText","dom","moveCursorToEnd","setCursorPosition"],"sourceRoot":"../../../src","sources":["web/parserUtils.ts"],"mappings":"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"}
|