PageRenderTime 52ms CodeModel.GetById 19ms RepoModel.GetById 1ms app.codeStats 0ms

/library/platform/uiIE6.py

http://pyjamas.googlecode.com/
Python | 129 lines | 127 code | 1 blank | 1 comment | 0 complexity | 63af2c1f2ef84289244bdd880962349f MD5 | raw file
Possible License(s): LGPL-2.1, Apache-2.0
  1. class PopupPanel:
  2. # PopupImpl.onShow
  3. def onShowImpl(self, popup):
  4. JS("""
  5. var frame = $doc.createElement('iframe');
  6. frame.scrolling = 'no';
  7. frame.frameBorder = 0;
  8. frame.style.position = 'absolute';
  9. popup.__frame = frame;
  10. frame.__popup = popup;
  11. frame.style.setExpression('left', 'this.__popup.offsetLeft');
  12. frame.style.setExpression('top', 'this.__popup.offsetTop');
  13. frame.style.setExpression('width', 'this.__popup.offsetWidth');
  14. frame.style.setExpression('height', 'this.__popup.offsetHeight');
  15. popup.parentElement.insertBefore(frame, popup);
  16. """)
  17. # PopupImpl.onHide
  18. def onHideImpl(self, popup):
  19. JS("""
  20. var frame = popup.__frame;
  21. frame.parentElement.removeChild(frame);
  22. popup.__frame = null;
  23. frame.__popup = null;
  24. """)
  25. class TextBoxBase:
  26. def getCursorPos(self):
  27. JS("""
  28. try {
  29. var elem = this.getElement();
  30. var tr = elem.document.selection.createRange();
  31. if (tr.parentElement().uniqueID != elem.uniqueID)
  32. return -1;
  33. return -tr.move("character", -65535);
  34. }
  35. catch (e) {
  36. return 0;
  37. }
  38. """)
  39. def getSelectionLength(self):
  40. JS("""
  41. try {
  42. var elem = this.getElement();
  43. var tr = elem.document.selection.createRange();
  44. if (tr.parentElement().uniqueID != elem.uniqueID)
  45. return 0;
  46. return tr.text.length;
  47. }
  48. catch (e) {
  49. return 0;
  50. }
  51. """)
  52. def setSelectionRange(self, pos, length):
  53. JS("""
  54. try {
  55. var elem = this.getElement();
  56. var tr = elem.createTextRange();
  57. tr.collapse(true);
  58. tr.moveStart('character', pos);
  59. tr.moveEnd('character', length);
  60. tr.select();
  61. }
  62. catch (e) {
  63. }
  64. """)
  65. class TextArea:
  66. def getCursorPos(self):
  67. JS("""
  68. try {
  69. var elem = this.getElement();
  70. var tr = elem.document.selection.createRange();
  71. var tr2 = tr.duplicate();
  72. tr2.moveToElementText(elem);
  73. tr.setEndPoint('EndToStart', tr2);
  74. return tr.text.length;
  75. }
  76. catch (e) {
  77. return 0;
  78. }
  79. """)
  80. class FormPanel:
  81. def getTextContents(self, iframe):
  82. JS("""
  83. try {
  84. if (!iframe.contentWindow.document)
  85. return null;
  86. return iframe.contentWindow.document.body.innerText;
  87. } catch (e) {
  88. return null;
  89. }
  90. """)
  91. def hookEvents(self, iframe, form, listener):
  92. JS("""
  93. if (iframe) {
  94. iframe.onreadystatechange = function() {
  95. if (!iframe.__formAction)
  96. return;
  97. if (iframe.readyState == 'complete') {
  98. listener.onFrameLoad();
  99. }
  100. };
  101. }
  102. form.onsubmit = function() {
  103. if (iframe)
  104. iframe.__formAction = form.action;
  105. return listener.onFormSubmit();
  106. };
  107. """)
  108. def unhookEvents(self, iframe, form):
  109. JS("""
  110. if (iframe)
  111. iframe.onreadystatechange = null;
  112. form.onsubmit = null;
  113. """)