]> matita.cs.unibo.it Git - helm.git/blobdiff - matitaB/matita/matitaweb.js
more keyboard events tests.
[helm.git] / matitaB / matita / matitaweb.js
index e6286085a1a828f50e976b1045e22bdacc32ffb8..4b99a23a286a471ca341f67c8fd4f4da25f3d8be 100644 (file)
@@ -81,6 +81,12 @@ function keyval(n)
     return s;
 }
  
+function string_of_key(n)
+{
+    if (n == null) return 'undefined';
+    return String.fromCharCode(n);
+}
+
 function pressmesg(w,e)
 {
    debug(w + '  keyCode=' + keyval(e.keyCode) +
@@ -106,7 +112,45 @@ function keypress(e)
 {
    if (!e) e= event;
    pressmesg('keypress',e);
-   return suppressdefault(e,/*document.testform.keypress.checked*/ true);
+   var s = string_of_key(e.charCode);
+   if (s == " ") {
+       j = getCursorPos();
+       i = unlocked.innerHTML.lastIndexOf('\\',j);
+               if (i >= 0) {
+         match = unlocked.innerHTML.substring(i,j);
+         pre = unlocked.innerHTML.substring(0,i);
+         post = unlocked.innerHTML.substring(j);
+         if (match == '\\to') {
+             unlocked.innerHTML = pre + "-> " + post;
+            unlocked.focus();
+             if (savedRange != null) {
+                 if (window.getSelection)//non IE and there is already a selection
+                 {
+                     var s = window.getSelection();
+                     if (s.rangeCount > 0) 
+                         s.removeAllRanges();
+                     s.addRange(savedRange);
+                 }
+                 else 
+                     if (document.createRange)//non IE and no selection
+                     {
+                         window.getSelection().addRange(savedRange);
+                     }
+                     else 
+                         if (document.selection)//IE
+                         {
+                             savedRange.select();
+                         }
+             }
+
+            return suppressdefault(e,true);
+         }
+         else return suppressdefault(e,false);
+       }
+       else return suppressdefault(e,false);
+   } else {
+       return suppressdefault(e,false);
+   }
 }
  
 function debug(txt)
@@ -594,19 +638,21 @@ function removeElement(id) {
   element.parentNode.removeChild(element);
 } 
 
+var savedRange;
+
 function getCursorPos() {
   var cursorPos;
   if (window.getSelection) {
     var selObj = window.getSelection();
-    var selRange = selObj.getRangeAt(0);
+    savedRange = selObj.getRangeAt(0);
     //cursorPos =  findNode(selObj.anchorNode.parentNode.childNodes, selObj.anchorNode) + selObj.anchorOffset;
     cursorPos =  findNode(unlocked.childNodes, selObj.anchorNode,0) + selObj.anchorOffset;
     /* FIXME the following works wrong in Opera when the document is longer than 32767 chars */
     return(cursorPos);
   }
   else if (document.selection) {
-    var range = document.selection.createRange();
-    var bookmark = range.getBookmark();
+    savedRange = document.selection.createRange();
+    var bookmark = savedRange.getBookmark();
     /* FIXME the following works wrong when the document is longer than 65535 chars */
     cursorPos = bookmark.charCodeAt(2) - 11; /* Undocumented function [3] */
     return(cursorPos);