eventbinder.js 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. (function() {
  2. Trex.WysiwygEventBinder = Trex.Class.create({
  3. initialize: function(win, doc, canvas) {
  4. this.win = win;
  5. this.doc = doc;
  6. this.canvas = canvas;
  7. },
  8. bindEvents : function() {
  9. this.translateDocumentEventToCanvas("keyup", 'onKeyUp');
  10. this.translateDocumentEventToCanvas('keydown', 'onKeyDown');
  11. this.translateDocumentEventToCanvas('mouseover', 'onMouseOver');
  12. this.translateDocumentEventToCanvas('mousemove', 'onMouseMove');
  13. this.translateDocumentEventToCanvas('mouseout', 'onMouseOut');
  14. this.translateDocumentEventToCanvas('click', 'onClick');
  15. this.translateDocumentEventToCanvas('dblclick', 'onDoubleClick');
  16. this.translateDocumentEventToCanvas('mousedown', 'onMouseDown');
  17. this.translateDocumentEventToCanvas('mouseup', 'onMouseUp');
  18. this.translateWindowEventToCanvas('scroll', 'onScroll');
  19. this.translateBodyEventToCanvas('paste', 'onPaste');
  20. this.triggerQueryStatusWhenTenConsecutiveKeyPressesDetected();
  21. },
  22. translateDocumentEventToCanvas: function(eventName, canvasMethodName) {
  23. this.translateEventToCanvas(this.doc, eventName, canvasMethodName);
  24. },
  25. translateWindowEventToCanvas: function(eventName, canvasMethodName) {
  26. this.translateEventToCanvas(this.win, eventName, canvasMethodName);
  27. },
  28. translateBodyEventToCanvas: function(eventName, canvasMethodName) {
  29. this.translateEventToCanvas(this.doc.body, eventName, canvasMethodName);
  30. },
  31. translateEventToCanvas: function(element, eventName, canvasMethodName) {
  32. var canvas = this.canvas;
  33. $tx.observe(element, eventName, function(e) {
  34. canvas[canvasMethodName](e);
  35. }, _FALSE);
  36. },
  37. triggerQueryStatusWhenTenConsecutiveKeyPressesDetected: function() {
  38. var canvas = this.canvas;
  39. observeTenConsecutiveKeyPresses(this.doc, function() {
  40. canvas.triggerQueryStatus();
  41. });
  42. }
  43. });
  44. var observeTenConsecutiveKeyPresses = function(element, handler) {
  45. var count = 0, previousKeyCode = -1,
  46. keyPressEvent = 'keydown';//($tx.msie || $tx.webkit) ? "keydown" : "keypress";
  47. $tx.observe(element, keyPressEvent, function(event) {
  48. var newKeyCode = event.keyCode;
  49. if (!shouldIgnore(newKeyCode) && previousKeyCode !== newKeyCode) {
  50. if (count >= 9) {
  51. handler();
  52. count = 0;
  53. } else {
  54. count++;
  55. }
  56. previousKeyCode = newKeyCode;
  57. }
  58. }, _FALSE);
  59. };
  60. var shouldIgnore = function(keyCode) {
  61. return QUERY_TRIGGER_IGNORE_KEYCODES.contains(keyCode);
  62. };
  63. var QUERY_TRIGGER_IGNORE_KEYCODES = new $tx.Set(8, 16, 17, 18, 32, 33, 34, 37, 38, 39, 40, 46, 229/* hangul */);
  64. })();