1 /** 2 * pagebreak functionality 3 * @author yiminghe@gmail.com 4 */ 5 KISSY.add("editor/plugin/pageBreak/index", function (S, Editor, fakeObjects) { 6 var Node = S.Node, 7 CLS = "ke_pagebreak", 8 TYPE = "div", 9 PAGE_BREAK_MARKUP = '<div' + 10 ' style="page-break-after: always; ">' + 11 '<span style="DISPLAY:none"> </span>' + 12 '</div>'; 13 14 function pageBreak() { 15 16 } 17 18 S.augment(pageBreak, { 19 renderUI:function (editor) { 20 21 fakeObjects.init(editor); 22 23 var dataProcessor = editor.htmlDataProcessor, 24 dataFilter = dataProcessor && dataProcessor.dataFilter; 25 26 dataFilter.addRules({ 27 tags:{ 28 div:function (element) { 29 var style = element.getAttribute("style"), 30 child; 31 32 if (style) { 33 var childNodes = element.childNodes; 34 for (var i = 0; i < childNodes.length; i++) { 35 if (childNodes[i].nodeType == 1) { 36 child = childNodes[i]; 37 } 38 } 39 } 40 41 var childStyle = child && 42 ( child.nodeName == 'span' ) && 43 child.getAttribute("style"); 44 45 if (childStyle && 46 ( /page-break-after\s*:\s*always/i ).test(style) && 47 ( /display\s*:\s*none/i ).test(childStyle)) { 48 return dataProcessor.createFakeParserElement(element, CLS, TYPE); 49 } 50 } 51 } 52 }); 53 54 editor.addButton("pageBreak", { 55 tooltip:"分页", 56 listeners:{ 57 click:function () { 58 59 var real = new Node(PAGE_BREAK_MARKUP, null, editor.get("document")[0]), 60 substitute = editor.createFakeElement(real, CLS, TYPE, 61 //不可缩放,也不用 62 false, 63 PAGE_BREAK_MARKUP); 64 65 editor.focus(); 66 67 var sel = editor.getSelection(), range = sel && sel.getRanges()[0]; 68 69 if (!range) { 70 return; 71 } 72 73 editor.execCommand("save"); 74 75 var start = range.startContainer, 76 pre = start; 77 78 while (start.nodeName() !== "body") { 79 pre = start; 80 start = start.parent(); 81 } 82 83 range.collapse(true); 84 85 range.splitElement(pre); 86 87 substitute.insertAfter(pre); 88 89 editor.execCommand("save"); 90 } 91 92 }, 93 mode:Editor.WYSIWYG_MODE 94 }); 95 } 96 }); 97 98 return pageBreak; 99 }, { 100 requires:["editor", "../fakeObjects/"] 101 });