Skip to content

Commit 2ffa2ba

Browse files
committed
impr(custom text): add option to not remove zero width characters
closes monkeytypegame#5919
1 parent 31d1d51 commit 2ffa2ba

File tree

3 files changed

+38
-3
lines changed

3 files changed

+38
-3
lines changed

frontend/src/html/popups.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -569,6 +569,20 @@
569569
</div>
570570
</div>
571571

572+
<div class="group" data-id="zeroWidth">
573+
<div class="title">
574+
<i class="fas fa-fw fa-text-width"></i>
575+
Remove zero-width characters
576+
</div>
577+
<div class="sub">Fully remove zero-width characters.</div>
578+
<div class="groupInputs">
579+
<div class="buttonGroup">
580+
<button value="false">no</button>
581+
<button value="true">yes</button>
582+
</div>
583+
</div>
584+
</div>
585+
572586
<div class="group" data-id="fancy">
573587
<div class="title">
574588
<i class="fas fa-fw fa-pen-fancy"></i>

frontend/src/styles/popups.scss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,7 @@ body.darkMode {
193193
width: 100%;
194194
border-radius: var(--roundness);
195195
resize: vertical;
196-
min-height: 477px;
196+
min-height: 589px;
197197
color: var(--text-color);
198198
overflow-x: hidden;
199199
overflow-y: scroll;

frontend/src/ts/modals/custom-text.ts

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ type State = {
2929
replaceControlCharactersEnabled: boolean;
3030
customTextPipeDelimiter: boolean;
3131
replaceNewlines: "off" | "space" | "periodSpace";
32+
removeZeroWidthCharactersEnabled: boolean;
3233
};
3334

3435
const state: State = {
@@ -47,6 +48,7 @@ const state: State = {
4748
replaceControlCharactersEnabled: true,
4849
customTextPipeDelimiter: false,
4950
replaceNewlines: "off",
51+
removeZeroWidthCharactersEnabled: true,
5052
};
5153

5254
function updateUI(): void {
@@ -115,6 +117,13 @@ function updateUI(): void {
115117
`${popup} .inputs .group[data-id="control"] button[value="${state.replaceControlCharactersEnabled}"]`
116118
).addClass("active");
117119

120+
$(`${popup} .inputs .group[data-id="zeroWidth"] button`).removeClass(
121+
"active"
122+
);
123+
$(
124+
`${popup} .inputs .group[data-id="zeroWidth"] button[value="${state.removeZeroWidthCharactersEnabled}"]`
125+
).addClass("active");
126+
118127
$(`${popup} .inputs .group[data-id="delimiter"] button`).removeClass(
119128
"active"
120129
);
@@ -264,8 +273,10 @@ function cleanUpText(): string[] {
264273
//replace any characters that look like a space with an actual space
265274
text = text.replace(/[\u2000-\u200A\u202F\u205F\u00A0]/g, " ");
266275

267-
//replace zero width characters
268-
text = text.replace(/[\u200B-\u200D\u2060\uFEFF]/g, "");
276+
if (state.removeZeroWidthCharactersEnabled) {
277+
//replace zero width characters
278+
text = text.replace(/[\u200B-\u200D\u2060\uFEFF]/g, "");
279+
}
269280

270281
if (state.replaceControlCharactersEnabled) {
271282
text = text.replace(/([^\\]|^)\\t/gm, "$1\t");
@@ -426,6 +437,16 @@ async function setup(modalEl: HTMLElement): Promise<void> {
426437
});
427438
}
428439

440+
for (const button of modalEl.querySelectorAll(
441+
".group[data-id='zeroWidth'] button"
442+
)) {
443+
button.addEventListener("click", (e) => {
444+
state.removeZeroWidthCharactersEnabled =
445+
(e.target as HTMLButtonElement).value === "true" ? true : false;
446+
updateUI();
447+
});
448+
}
449+
429450
for (const button of modalEl.querySelectorAll(
430451
".group[data-id='delimiter'] button"
431452
)) {

0 commit comments

Comments
 (0)