enterkey.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178
  1. ///import core
  2. ///import plugins/undo.js
  3. ///commands 设置回车标签p或br
  4. ///commandsName EnterKey
  5. ///commandsTitle 设置回车标签p或br
  6. /**
  7. * @description 处理回车
  8. * @author zhanyi
  9. */
  10. UE.plugins['enterkey'] = function() {
  11. var hTag,
  12. me = this,
  13. tag = me.options.enterTag;
  14. me.addListener('keyup', function(type, evt) {
  15. var keyCode = evt.keyCode || evt.which;
  16. if (keyCode == 13) {
  17. var range = me.selection.getRange(),
  18. start = range.startContainer,
  19. doSave;
  20. //修正在h1-h6里边回车后不能嵌套p的问题
  21. if (!browser.ie) {
  22. if (/h\d/i.test(hTag)) {
  23. if (browser.gecko) {
  24. var h = domUtils.findParentByTagName(start, [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote'], true);
  25. if (!h) {
  26. me.document.execCommand('formatBlock', false, '<p>');
  27. doSave = 1;
  28. }
  29. } else {
  30. //chrome remove div
  31. if (start.nodeType == 1) {
  32. var tmp = me.document.createTextNode(''),div;
  33. range.insertNode(tmp);
  34. div = domUtils.findParentByTagName(tmp, 'div', true);
  35. if (div) {
  36. var p = me.document.createElement('p');
  37. while (div.firstChild) {
  38. p.appendChild(div.firstChild);
  39. }
  40. div.parentNode.insertBefore(p, div);
  41. domUtils.remove(div);
  42. range.setStartBefore(tmp).setCursor();
  43. doSave = 1;
  44. }
  45. domUtils.remove(tmp);
  46. }
  47. }
  48. if (me.undoManger && doSave) {
  49. me.undoManger.save()
  50. }
  51. }
  52. }
  53. setTimeout(function() {
  54. me.selection.getRange().scrollToView(me.autoHeightEnabled, me.autoHeightEnabled ? domUtils.getXY(me.iframe).y : 0);
  55. }, 50)
  56. }
  57. });
  58. me.addListener('keydown', function(type, evt) {
  59. var keyCode = evt.keyCode || evt.which;
  60. if (keyCode == 13) {//回车
  61. if (me.undoManger) {
  62. me.undoManger.save()
  63. }
  64. hTag = '';
  65. var range = me.selection.getRange();
  66. if (!range.collapsed) {
  67. //跨td不能删
  68. var start = range.startContainer,
  69. end = range.endContainer,
  70. startTd = domUtils.findParentByTagName(start, 'td', true),
  71. endTd = domUtils.findParentByTagName(end, 'td', true);
  72. if (startTd && endTd && startTd !== endTd || !startTd && endTd || startTd && !endTd) {
  73. evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false);
  74. return;
  75. }
  76. }
  77. me.currentSelectedArr && domUtils.clearSelectedArr(me.currentSelectedArr);
  78. if (tag == 'p') {
  79. if (!browser.ie) {
  80. start = domUtils.findParentByTagName(range.startContainer, ['ol','ul','p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote'], true);
  81. if (!start) {
  82. me.document.execCommand('formatBlock', false, '<p>');
  83. if (browser.gecko) {
  84. range = me.selection.getRange();
  85. start = domUtils.findParentByTagName(range.startContainer, 'p', true);
  86. start && domUtils.removeDirtyAttr(start);
  87. }
  88. } else {
  89. hTag = start.tagName;
  90. start.tagName.toLowerCase() == 'p' && browser.gecko && domUtils.removeDirtyAttr(start);
  91. }
  92. }
  93. } else {
  94. evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false);
  95. if (!range.collapsed) {
  96. range.deleteContents();
  97. start = range.startContainer;
  98. if (start.nodeType == 1 && (start = start.childNodes[range.startOffset])) {
  99. while (start.nodeType == 1) {
  100. if (dtd.$empty[start.tagName]) {
  101. range.setStartBefore(start).setCursor();
  102. if (me.undoManger) {
  103. me.undoManger.save()
  104. }
  105. return false;
  106. }
  107. if (!start.firstChild) {
  108. var br = range.document.createElement('br');
  109. start.appendChild(br);
  110. range.setStart(start, 0).setCursor();
  111. if (me.undoManger) {
  112. me.undoManger.save()
  113. }
  114. return false;
  115. }
  116. start = start.firstChild
  117. }
  118. if (start === range.startContainer.childNodes[range.startOffset]) {
  119. br = range.document.createElement('br');
  120. range.insertNode(br).setCursor();
  121. } else {
  122. range.setStart(start, 0).setCursor();
  123. }
  124. } else {
  125. br = range.document.createElement('br');
  126. range.insertNode(br).setStartAfter(br).setCursor();
  127. }
  128. } else {
  129. br = range.document.createElement('br');
  130. range.insertNode(br);
  131. var parent = br.parentNode;
  132. if (parent.lastChild === br) {
  133. br.parentNode.insertBefore(br.cloneNode(true), br);
  134. range.setStartBefore(br)
  135. } else {
  136. range.setStartAfter(br)
  137. }
  138. range.setCursor();
  139. }
  140. }
  141. }
  142. });
  143. };