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 });