eat-js-sdk 2.2.8 → 2.2.10
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/dist/interaction-builder.mjs +84 -12
- package/package.json +1 -1
|
@@ -19098,31 +19098,103 @@ const decodeNbsp = (text) => text.replace(/ /g, " ").replace(/ /g,
|
|
|
19098
19098
|
const stripTags = (s) => s.replace(/<[^>]+>/g, "");
|
|
19099
19099
|
const hasHtmlTags = (s) => /<[^>]/.test(s);
|
|
19100
19100
|
const getTagName = (tag) => tag.replace(/^<\/?([^\s>]+).*$/, "$1").toLowerCase();
|
|
19101
|
+
const isSuperSubTag = (tag) => {
|
|
19102
|
+
const name = getTagName(tag);
|
|
19103
|
+
return name === "sup" || name === "sub";
|
|
19104
|
+
};
|
|
19101
19105
|
const extractHtmlWords = (htmlText) => {
|
|
19102
|
-
const re = /(<\/[^>]+>)|(<[^>]+>)|([^\s<>]+)/g;
|
|
19106
|
+
const re = /(\s+)|(<\/[^>]+>)|(<[^>]+>)|([^\s<>]+)/g;
|
|
19103
19107
|
const tokens = [];
|
|
19104
19108
|
let m;
|
|
19105
19109
|
while ((m = re.exec(htmlText)) !== null) {
|
|
19106
|
-
if (m[1]) tokens.push({ type: "
|
|
19107
|
-
else if (m[2]) tokens.push({ type: "
|
|
19108
|
-
else tokens.push({ type: "
|
|
19110
|
+
if (m[1]) tokens.push({ type: "space", value: m[1] });
|
|
19111
|
+
else if (m[2]) tokens.push({ type: "close", value: m[2] });
|
|
19112
|
+
else if (m[3]) tokens.push({ type: "open", value: m[3] });
|
|
19113
|
+
else tokens.push({ type: "word", value: m[4] });
|
|
19109
19114
|
}
|
|
19110
19115
|
const words = [];
|
|
19111
19116
|
const openStack = [];
|
|
19112
|
-
|
|
19117
|
+
const pendingMergeStack = [];
|
|
19118
|
+
let lastWasSpace = true;
|
|
19119
|
+
let mergingIntoLast = false;
|
|
19120
|
+
let mergeDepth = 0;
|
|
19121
|
+
for (let i = 0; i < tokens.length; i++) {
|
|
19122
|
+
const tok = tokens[i];
|
|
19123
|
+
if (tok.type === "space") {
|
|
19124
|
+
for (const t2 of pendingMergeStack) openStack.push(t2);
|
|
19125
|
+
pendingMergeStack.length = 0;
|
|
19126
|
+
lastWasSpace = true;
|
|
19127
|
+
continue;
|
|
19128
|
+
}
|
|
19113
19129
|
if (tok.type === "open") {
|
|
19114
|
-
|
|
19115
|
-
|
|
19116
|
-
|
|
19117
|
-
|
|
19118
|
-
if (
|
|
19119
|
-
|
|
19120
|
-
|
|
19130
|
+
if (mergingIntoLast) {
|
|
19131
|
+
mergeDepth++;
|
|
19132
|
+
words[words.length - 1].value += tok.value;
|
|
19133
|
+
} else if (!lastWasSpace && words.length > 0) {
|
|
19134
|
+
if (isSuperSubTag(tok.value)) {
|
|
19135
|
+
const pendingDepth = pendingMergeStack.length;
|
|
19136
|
+
for (const t2 of pendingMergeStack) {
|
|
19137
|
+
words[words.length - 1].value += t2;
|
|
19138
|
+
}
|
|
19139
|
+
pendingMergeStack.length = 0;
|
|
19140
|
+
mergingIntoLast = true;
|
|
19141
|
+
mergeDepth = pendingDepth + 1;
|
|
19142
|
+
words[words.length - 1].value += tok.value;
|
|
19143
|
+
} else {
|
|
19144
|
+
pendingMergeStack.push(tok.value);
|
|
19145
|
+
}
|
|
19146
|
+
} else {
|
|
19147
|
+
for (const t2 of pendingMergeStack) openStack.push(t2);
|
|
19148
|
+
pendingMergeStack.length = 0;
|
|
19149
|
+
openStack.push(tok.value);
|
|
19150
|
+
}
|
|
19151
|
+
continue;
|
|
19152
|
+
}
|
|
19153
|
+
if (tok.type === "close") {
|
|
19154
|
+
if (mergingIntoLast) {
|
|
19155
|
+
words[words.length - 1].value += tok.value;
|
|
19156
|
+
mergeDepth--;
|
|
19157
|
+
if (mergeDepth <= 0) {
|
|
19158
|
+
mergingIntoLast = false;
|
|
19159
|
+
mergeDepth = 0;
|
|
19160
|
+
}
|
|
19161
|
+
} else if (pendingMergeStack.length > 0) {
|
|
19162
|
+
const closingName = getTagName(tok.value);
|
|
19163
|
+
let found = false;
|
|
19164
|
+
for (let j = pendingMergeStack.length - 1; j >= 0; j--) {
|
|
19165
|
+
if (getTagName(pendingMergeStack[j]) === closingName) {
|
|
19166
|
+
pendingMergeStack.splice(j, 1);
|
|
19167
|
+
found = true;
|
|
19168
|
+
break;
|
|
19169
|
+
}
|
|
19170
|
+
}
|
|
19171
|
+
if (!found) {
|
|
19172
|
+
for (let j = openStack.length - 1; j >= 0; j--) {
|
|
19173
|
+
if (getTagName(openStack[j]) === closingName) {
|
|
19174
|
+
openStack.splice(j, 1);
|
|
19175
|
+
break;
|
|
19176
|
+
}
|
|
19177
|
+
}
|
|
19178
|
+
}
|
|
19179
|
+
} else {
|
|
19180
|
+
const closingName = getTagName(tok.value);
|
|
19181
|
+
for (let j = openStack.length - 1; j >= 0; j--) {
|
|
19182
|
+
if (getTagName(openStack[j]) === closingName) {
|
|
19183
|
+
openStack.splice(j, 1);
|
|
19184
|
+
break;
|
|
19185
|
+
}
|
|
19121
19186
|
}
|
|
19122
19187
|
}
|
|
19188
|
+
continue;
|
|
19189
|
+
}
|
|
19190
|
+
if (mergingIntoLast) {
|
|
19191
|
+
words[words.length - 1].value += tok.value;
|
|
19123
19192
|
} else {
|
|
19193
|
+
for (const t2 of pendingMergeStack) openStack.push(t2);
|
|
19194
|
+
pendingMergeStack.length = 0;
|
|
19124
19195
|
words.push({ value: tok.value, openStack: [...openStack] });
|
|
19125
19196
|
}
|
|
19197
|
+
lastWasSpace = false;
|
|
19126
19198
|
}
|
|
19127
19199
|
return words.map(({ value, openStack: openStack2 }) => {
|
|
19128
19200
|
const open = openStack2.join("");
|