Kaynağa Gözat

Edit-attention fixes

missionfloyd 1 yıl önce
ebeveyn
işleme
e34949be52
1 değiştirilmiş dosya ile 35 ekleme ve 21 silme
  1. 35 21
      javascript/edit-attention.js

+ 35 - 21
javascript/edit-attention.js

@@ -26,6 +26,7 @@ function keyupEditAttention(event) {
 
 
         // Set the selection to the text between the parenthesis
         // Set the selection to the text between the parenthesis
         const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);
         const parenContent = text.substring(beforeParen + 1, selectionStart + afterParen);
+        if (!/.*:[\d.]+/.test(parenContent)) return false;
         const lastColon = parenContent.lastIndexOf(":");
         const lastColon = parenContent.lastIndexOf(":");
         selectionStart = beforeParen + 1;
         selectionStart = beforeParen + 1;
         selectionEnd = selectionStart + lastColon;
         selectionEnd = selectionStart + lastColon;
@@ -66,40 +67,53 @@ function keyupEditAttention(event) {
     var closeCharacter = ')';
     var closeCharacter = ')';
     var delta = opts.keyedit_precision_attention;
     var delta = opts.keyedit_precision_attention;
 
 
-    if (selectionStart > 0 && text[selectionStart - 1] == '<') {
+    if (selectionStart > 0 && /<.*:[\d.]+>/.test(text.slice(selectionStart - 1, selectionEnd + text.slice(selectionEnd).indexOf(">") + 1))) {
         closeCharacter = '>';
         closeCharacter = '>';
         delta = opts.keyedit_precision_extra;
         delta = opts.keyedit_precision_extra;
-    } else if (selectionStart == 0 || text[selectionStart - 1] != "(") {
-
+    } else if (selectionStart > 0 && /\(.*\)|\[.*\]/.test(text.slice(selectionStart - 1, selectionEnd + 1))) {
+        closeCharacter = null;
+        if (isPlus) {
+            text = text.slice(0, selectionStart) + text[selectionStart - 1] + text.slice(selectionStart, selectionEnd) + text[selectionEnd] + text.slice(selectionEnd);
+            selectionStart++;
+            selectionEnd++;
+        } else {
+            text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + 1);
+            selectionStart--;
+            selectionEnd--;
+        }
+    } else if (selectionStart == 0 || !/\(.*:[\d.]+\)/.test(text.slice(selectionStart - 1, selectionEnd + text.slice(selectionEnd).indexOf(")") + 1))) {
         // do not include spaces at the end
         // do not include spaces at the end
         while (selectionEnd > selectionStart && text[selectionEnd - 1] == ' ') {
         while (selectionEnd > selectionStart && text[selectionEnd - 1] == ' ') {
-            selectionEnd -= 1;
+            selectionEnd--;
         }
         }
+
         if (selectionStart == selectionEnd) {
         if (selectionStart == selectionEnd) {
             return;
             return;
         }
         }
 
 
         text = text.slice(0, selectionStart) + "(" + text.slice(selectionStart, selectionEnd) + ":1.0)" + text.slice(selectionEnd);
         text = text.slice(0, selectionStart) + "(" + text.slice(selectionStart, selectionEnd) + ":1.0)" + text.slice(selectionEnd);
 
 
-        selectionStart += 1;
-        selectionEnd += 1;
+        selectionStart++;
+        selectionEnd++;
     }
     }
 
 
-    var end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;
-    var weight = parseFloat(text.slice(selectionEnd + 1, selectionEnd + end));
-    if (isNaN(weight)) return;
-
-    weight += isPlus ? delta : -delta;
-    weight = parseFloat(weight.toPrecision(12));
-    if (String(weight).length == 1) weight += ".0";
-
-    if (closeCharacter == ')' && weight == 1) {
-        var endParenPos = text.substring(selectionEnd).indexOf(')');
-        text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + endParenPos + 1);
-        selectionStart--;
-        selectionEnd--;
-    } else {
-        text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + end);
+    if (closeCharacter) {
+        var end = text.slice(selectionEnd + 1).indexOf(closeCharacter) + 1;
+        var weight = parseFloat(text.slice(selectionEnd + 1, selectionEnd + end));
+        if (isNaN(weight)) return;
+
+        weight += isPlus ? delta : -delta;
+        weight = parseFloat(weight.toPrecision(12));
+        if (String(weight).length == 1) weight += ".0";
+
+        if (closeCharacter == ')' && weight == 1) {
+            var endParenPos = text.substring(selectionEnd).indexOf(')');
+            text = text.slice(0, selectionStart - 1) + text.slice(selectionStart, selectionEnd) + text.slice(selectionEnd + endParenPos + 1);
+            selectionStart--;
+            selectionEnd--;
+        } else {
+            text = text.slice(0, selectionEnd + 1) + weight + text.slice(selectionEnd + end);
+        }
     }
     }
 
 
     target.focus();
     target.focus();