]> source.dussan.org Git - gitea.git/commitdiff
Fixed setting of wrong position (#16148)
authorKN4CK3R <admin@oldschoolhack.me>
Mon, 14 Jun 2021 20:42:58 +0000 (22:42 +0200)
committerGitHub <noreply@github.com>
Mon, 14 Jun 2021 20:42:58 +0000 (22:42 +0200)
web_src/js/markup/tasklist.js

index 5a7291b4d0083667d5dddba42c91f664c1e4174e..24b29ddb7afc3052df77d8406522b17f453a603b 100644 (file)
@@ -14,7 +14,10 @@ export function initMarkupTasklist() {
     const checkboxes = el.querySelectorAll(`.task-list-item input[type=checkbox]`);
 
     for (const checkbox of checkboxes) {
-      if (checkbox.dataset.editable) return;
+      if (checkbox.dataset.editable) {
+        return;
+      }
+
       checkbox.dataset.editable = 'true';
       checkbox.addEventListener('input', async () => {
         const checkboxCharacter = checkbox.checked ? 'x' : ' ';
@@ -22,8 +25,15 @@ export function initMarkupTasklist() {
 
         const rawContent = container.querySelector('.raw-content');
         const oldContent = rawContent.textContent;
-        const newContent = oldContent.substring(0, position) + checkboxCharacter + oldContent.substring(position + 1);
-        if (newContent === oldContent) return;
+
+        const encoder = new TextEncoder();
+        const buffer = encoder.encode(oldContent);
+        buffer.set(encoder.encode(checkboxCharacter), position);
+        const newContent = new TextDecoder().decode(buffer);
+
+        if (newContent === oldContent) {
+          return;
+        }
 
         // Prevent further inputs until the request is done. This does not use the
         // `disabled` attribute because it causes the border to flash on click.