pagebreak.js 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. ///import core
  2. ///commands 添加分页功能
  3. ///commandsName PageBreak
  4. ///commandsTitle 分页
  5. /**
  6. * @description 添加分页功能
  7. * @author zhanyi
  8. */
  9. UE.plugins['pagebreak'] = function () {
  10. var me = this,
  11. notBreakTags = ['td'];
  12. function fillNode(node){
  13. if(domUtils.isEmptyBlock(node)){
  14. var firstChild = node.firstChild,tmpNode;
  15. while(firstChild && firstChild.nodeType == 1 && domUtils.isEmptyBlock(firstChild)){
  16. tmpNode = firstChild;
  17. firstChild = firstChild.firstChild;
  18. }
  19. !tmpNode && (tmpNode = node);
  20. domUtils.fillNode(me.document,tmpNode);
  21. }
  22. }
  23. function isHr(node){
  24. return node && node.nodeType == 1 && node.tagName == 'HR' && node.className == 'pagebreak';
  25. }
  26. me.commands['pagebreak'] = {
  27. execCommand:function () {
  28. var range = me.selection.getRange(),hr = me.document.createElement('hr');
  29. domUtils.setAttributes(hr,{
  30. 'class' : 'pagebreak',
  31. noshade:"noshade",
  32. size:"5"
  33. });
  34. domUtils.unselectable(hr);
  35. //table单独处理
  36. var node = domUtils.findParentByTagName(range.startContainer, notBreakTags, true),
  37. parents = [], pN;
  38. if (node) {
  39. switch (node.tagName) {
  40. case 'TD':
  41. pN = node.parentNode;
  42. if (!pN.previousSibling) {
  43. var table = domUtils.findParentByTagName(pN, 'table');
  44. table.parentNode.insertBefore(hr, table);
  45. parents = domUtils.findParents(hr, true);
  46. } else {
  47. pN.parentNode.insertBefore(hr, pN);
  48. parents = domUtils.findParents(hr);
  49. }
  50. pN = parents[1];
  51. if (hr !== pN) {
  52. domUtils.breakParent(hr, pN);
  53. }
  54. domUtils.clearSelectedArr(me.currentSelectedArr);
  55. }
  56. } else {
  57. if (!range.collapsed) {
  58. range.deleteContents();
  59. var start = range.startContainer;
  60. while ( !domUtils.isBody(start) && domUtils.isBlockElm(start) && domUtils.isEmptyNode(start)) {
  61. range.setStartBefore(start).collapse(true);
  62. domUtils.remove(start);
  63. start = range.startContainer;
  64. }
  65. }
  66. range.insertNode(hr);
  67. var pN = hr.parentNode, nextNode;
  68. while (!domUtils.isBody(pN)) {
  69. domUtils.breakParent(hr, pN);
  70. nextNode = hr.nextSibling;
  71. if (nextNode && domUtils.isEmptyBlock(nextNode)) {
  72. domUtils.remove(nextNode)
  73. }
  74. pN = hr.parentNode;
  75. }
  76. nextNode = hr.nextSibling;
  77. var pre = hr.previousSibling;
  78. if(isHr(pre)){
  79. domUtils.remove(pre)
  80. }else{
  81. pre && fillNode(pre);
  82. }
  83. if(!nextNode){
  84. var p = me.document.createElement('p');
  85. hr.parentNode.appendChild(p);
  86. domUtils.fillNode(me.document,p);
  87. range.setStart(p,0).collapse(true)
  88. }else{
  89. if(isHr(nextNode)){
  90. domUtils.remove(nextNode)
  91. }else{
  92. fillNode(nextNode);
  93. }
  94. range.setEndAfter(hr).collapse(false)
  95. }
  96. range.select(true)
  97. }
  98. },
  99. queryCommandState:function () {
  100. return this.highlight ? -1 : 0;
  101. }
  102. }
  103. };