Podświetlanie składni w edytorze XML dzięki editArea. Closes #17. Niestety dla tekstó...
[redakcja.git] / project / static / js / keyboard.js
diff --git a/project/static/js/keyboard.js b/project/static/js/keyboard.js
new file mode 100755 (executable)
index 0000000..71b3a7c
--- /dev/null
@@ -0,0 +1,145 @@
+var EA_keys = {8:"Retour arriere",9:"Tabulation",12:"Milieu (pave numerique)",13:"Entrer",16:"Shift",17:"Ctrl",18:"Alt",19:"Pause",20:"Verr Maj",27:"Esc",32:"Space",33:"Page up",34:"Page down",35:"End",36:"Begin",37:"Left",38:"Up",39:"Right",40:"Down",44:"Impr ecran",45:"Inser",46:"Suppr",91:"Menu Demarrer Windows / touche pomme Mac",92:"Menu Demarrer Windows",93:"Menu contextuel Windows",112:"F1",113:"F2",114:"F3",115:"F4",116:"F5",117:"F6",118:"F7",119:"F8",120:"F9",121:"F10",122:"F11",123:"F12",144:"Verr Num",145:"Arret defil"};\r
+\r
+\r
+\r
+function keyDown(e){\r
+       if(!e){ // if IE\r
+               e=event;\r
+       }\r
+       \r
+       // send the event to the plugins\r
+       for(var i in editArea.plugins){\r
+               if(typeof(editArea.plugins[i].onkeydown)=="function"){\r
+                       if(editArea.plugins[i].onkeydown(e)===false){ // stop propaging\r
+                               if(editArea.isIE)\r
+                                       e.keyCode=0;\r
+                               return false;\r
+                       }\r
+               }\r
+       }\r
+\r
+       var target_id=(e.target || e.srcElement).id;\r
+       var use=false;\r
+       if (EA_keys[e.keyCode])\r
+               letter=EA_keys[e.keyCode];\r
+       else\r
+               letter=String.fromCharCode(e.keyCode);\r
+       \r
+       var low_letter= letter.toLowerCase();\r
+                       \r
+       if(letter=="Page up" && !editArea.isOpera){\r
+               editArea.execCommand("scroll_page", {"dir": "up", "shift": ShiftPressed(e)});\r
+               use=true;\r
+       }else if(letter=="Page down" && !editArea.isOpera){\r
+               editArea.execCommand("scroll_page", {"dir": "down", "shift": ShiftPressed(e)});\r
+               use=true;\r
+       }else if(editArea.is_editable==false){\r
+               // do nothing but also do nothing else (allow to navigate with page up and page down)\r
+               return true;\r
+       }else if(letter=="Tabulation" && target_id=="textarea" && !CtrlPressed(e) && !AltPressed(e)){   \r
+               if(ShiftPressed(e))\r
+                       editArea.execCommand("invert_tab_selection");\r
+               else\r
+                       editArea.execCommand("tab_selection");\r
+               \r
+               use=true;\r
+               if(editArea.isOpera || (editArea.isFirefox && editArea.isMac) ) // opera && firefox mac can't cancel tabulation events...\r
+                       setTimeout("editArea.execCommand('focus');", 1);\r
+       }else if(letter=="Entrer" && target_id=="textarea"){\r
+               if(editArea.press_enter())\r
+                       use=true;\r
+       }else if(letter=="Entrer" && target_id=="area_search"){\r
+               editArea.execCommand("area_search");\r
+               use=true;\r
+       }else  if(letter=="Esc"){\r
+               editArea.execCommand("close_all_inline_popup", e);\r
+               use=true;\r
+       }else if(CtrlPressed(e) && !AltPressed(e) && !ShiftPressed(e)){\r
+               switch(low_letter){\r
+                       case "f":                               \r
+                               editArea.execCommand("area_search");\r
+                               use=true;\r
+                               break;\r
+                       case "r":\r
+                               editArea.execCommand("area_replace");\r
+                               use=true;\r
+                               break;\r
+                       case "q":\r
+                               editArea.execCommand("close_all_inline_popup", e);\r
+                               use=true;\r
+                               break;\r
+                       case "h":\r
+                               editArea.execCommand("change_highlight");                       \r
+                               use=true;\r
+                               break;\r
+                       case "g":\r
+                               setTimeout("editArea.execCommand('go_to_line');", 5);   // the prompt stop the return false otherwise\r
+                               use=true;\r
+                               break;\r
+                       case "e":\r
+                               editArea.execCommand("show_help");\r
+                               use=true;\r
+                               break;\r
+                       case "z":\r
+                               use=true;\r
+                               editArea.execCommand("undo");\r
+                               break;\r
+                       case "y":\r
+                               use=true;\r
+                               editArea.execCommand("redo");\r
+                               break;\r
+                       default:\r
+                               break;                  \r
+               }               \r
+       }               \r
+       \r
+       // check to disable the redo possibility if the textarea content change\r
+       if(editArea.next.length > 0){\r
+               setTimeout("editArea.check_redo();", 10);\r
+       }\r
+       \r
+       setTimeout("editArea.check_file_changes();", 10);\r
+       \r
+       \r
+       if(use){\r
+               // in case of a control that sould'nt be used by IE but that is used => THROW a javascript error that will stop key action\r
+               if(editArea.isIE)\r
+                       e.keyCode=0;\r
+               return false;\r
+       }\r
+       //alert("Test: "+ letter + " ("+e.keyCode+") ALT: "+ AltPressed(e) + " CTRL "+ CtrlPressed(e) + " SHIFT "+ ShiftPressed(e));\r
+       \r
+       return true;\r
+       \r
+};\r
+\r
+\r
+// return true if Alt key is pressed\r
+function AltPressed(e) {\r
+       if (window.event) {\r
+               return (window.event.altKey);\r
+       } else {\r
+               if(e.modifiers)\r
+                       return (e.altKey || (e.modifiers % 2));\r
+               else\r
+                       return e.altKey;\r
+       }\r
+};\r
+\r
+// return true if Ctrl key is pressed\r
+function CtrlPressed(e) {\r
+       if (window.event) {\r
+               return (window.event.ctrlKey);\r
+       } else {\r
+               return (e.ctrlKey || (e.modifiers==2) || (e.modifiers==3) || (e.modifiers>5));\r
+       }\r
+};\r
+\r
+// return true if Shift key is pressed\r
+function ShiftPressed(e) {\r
+       if (window.event) {\r
+               return (window.event.shiftKey);\r
+       } else {\r
+               return (e.shiftKey || (e.modifiers>3));\r
+       }\r
+};\r