pagebreak.js 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  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. //分页符样式添加
  24. me.ready(function(){
  25. utils.cssRule('pagebreak','.pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}',me.document);
  26. });
  27. function isHr(node){
  28. return node && node.nodeType == 1 && node.tagName == 'HR' && node.className == 'pagebreak';
  29. }
  30. me.commands['pagebreak'] = {
  31. execCommand:function () {
  32. var range = me.selection.getRange(),hr = me.document.createElement('hr');
  33. domUtils.setAttributes(hr,{
  34. 'class' : 'pagebreak',
  35. noshade:"noshade",
  36. size:"5"
  37. });
  38. domUtils.unSelectable(hr);
  39. //table单独处理
  40. var node = domUtils.findParentByTagName(range.startContainer, notBreakTags, true),
  41. parents = [], pN;
  42. if (node) {
  43. switch (node.tagName) {
  44. case 'TD':
  45. pN = node.parentNode;
  46. if (!pN.previousSibling) {
  47. var table = domUtils.findParentByTagName(pN, 'table');
  48. // var tableWrapDiv = table.parentNode;
  49. // if(tableWrapDiv && tableWrapDiv.nodeType == 1
  50. // && tableWrapDiv.tagName == 'DIV'
  51. // && tableWrapDiv.getAttribute('dropdrag')
  52. // ){
  53. // domUtils.remove(tableWrapDiv,true);
  54. // }
  55. table.parentNode.insertBefore(hr, table);
  56. parents = domUtils.findParents(hr, true);
  57. } else {
  58. pN.parentNode.insertBefore(hr, pN);
  59. parents = domUtils.findParents(hr);
  60. }
  61. pN = parents[1];
  62. if (hr !== pN) {
  63. domUtils.breakParent(hr, pN);
  64. }
  65. //table要重写绑定一下拖拽
  66. me.fireEvent('afteradjusttable',me.document);
  67. }
  68. } else {
  69. if (!range.collapsed) {
  70. range.deleteContents();
  71. var start = range.startContainer;
  72. while ( !domUtils.isBody(start) && domUtils.isBlockElm(start) && domUtils.isEmptyNode(start)) {
  73. range.setStartBefore(start).collapse(true);
  74. domUtils.remove(start);
  75. start = range.startContainer;
  76. }
  77. }
  78. range.insertNode(hr);
  79. var pN = hr.parentNode, nextNode;
  80. while (!domUtils.isBody(pN)) {
  81. domUtils.breakParent(hr, pN);
  82. nextNode = hr.nextSibling;
  83. if (nextNode && domUtils.isEmptyBlock(nextNode)) {
  84. domUtils.remove(nextNode);
  85. }
  86. pN = hr.parentNode;
  87. }
  88. nextNode = hr.nextSibling;
  89. var pre = hr.previousSibling;
  90. if(isHr(pre)){
  91. domUtils.remove(pre);
  92. }else{
  93. pre && fillNode(pre);
  94. }
  95. if(!nextNode){
  96. var p = me.document.createElement('p');
  97. hr.parentNode.appendChild(p);
  98. domUtils.fillNode(me.document,p);
  99. range.setStart(p,0).collapse(true);
  100. }else{
  101. if(isHr(nextNode)){
  102. domUtils.remove(nextNode);
  103. }else{
  104. fillNode(nextNode);
  105. }
  106. range.setEndAfter(hr).collapse(false);
  107. }
  108. range.select(true);
  109. }
  110. }
  111. };
  112. };