Ticket #4548: 4548_6.patch

File 4548_6.patch, 6.2 KB (added by garry.yao, 5 years ago)
  • _source/plugins/drupalbreaks/plugin.js

     
     1/* 
     2Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 
     3For licensing, see LICENSE.html or http://ckeditor.com/license 
     4*/ 
     5 
     6/** 
     7 * @file Plugin for creating Drupal teasers(fake object).  
     8 */ 
     9CKEDITOR.plugins.add( 'drupalbreaks', 
     10{ 
     11        requires  : [ 'fakeobjects', 'htmldataprocessor' ], 
     12        init : function( editor ) 
     13        { 
     14                // Add the style that renders our fake objects. 
     15                editor.addCss( 
     16                        'img.cke_drupal_pagebreak,img.cke_drupal_break' + 
     17                        '{' + 
     18                                'background-image: url(' + CKEDITOR.getUrl( this.path + 'images/placeholder.gif' ) + ');' + 
     19                            '-webkit-background-size: 20px 20px;' + 
     20                            '-o-background-size: 20px 20px;' + 
     21                                'background-position: center center;' + 
     22                                'background-repeat: no-repeat;' + 
     23                                'display: inline;' + 
     24                                'width: 20px;' + 
     25                                'vertical-align: middle;' + 
     26                                'border: #999999 1px dotted;' + 
     27                        '}' ); 
     28 
     29                editor.ui.addButton( 'DrupalPageBreak', 
     30                        { 
     31                                label : editor.lang.drupalPageBreak, 
     32                                command : 'drupalpagebreak' 
     33                        }); 
     34 
     35                editor.ui.addButton( 'DrupalBreak', 
     36                        { 
     37                                label : editor.lang.drupalBreak, 
     38                                command : 'drupalbreak' 
     39                        }); 
     40 
     41                function insertComment( editor, text ) 
     42                { 
     43                        var ranges = editor.getSelection().getRanges(), 
     44                                range = ranges[ 0 ], 
     45                                bookmark; 
     46                        range.splitBlock( 'p' ); 
     47                        bookmark = range.createBookmark(); 
     48                        var fakeComment = CKEDITOR.dom.element.createFromHtml( editor.dataProcessor.toHtml( '<!--' + text + '-->' ) ); 
     49                        range.insertNode( fakeComment ); 
     50                        range.moveToElementEditStart( fakeComment.getNext() ); 
     51                        range.select(); 
     52                        return fakeComment; 
     53                } 
     54 
     55                editor.addCommand( 'drupalpagebreak', 
     56                { 
     57                        exec : function( editor ) 
     58                        { 
     59                                insertComment( editor, 'pagebreak' ); 
     60                        } 
     61                } ); 
     62 
     63                var singleton; 
     64                editor.addCommand( 'drupalbreak', 
     65                { 
     66                        exec : function( editor ) 
     67                        { 
     68                                // There should be only one drupal-break in document. 
     69                                singleton && singleton.remove(); 
     70                                singleton = insertComment( editor, 'break' ); 
     71                        } 
     72                } ); 
     73        }, 
     74 
     75        afterInit : function( editor ) 
     76        { 
     77                var dataProcessor = editor.dataProcessor, 
     78                        dataFilter = dataProcessor.dataFilter, 
     79                        htmlFilter = dataProcessor.htmlFilter, 
     80                        // Borrow the comment output filters to restore them. 
     81                        commentFilters = htmlFilter._.comment, 
     82                        filter = commentFilters && ( commentFilters.filter || commentFilters[ 0 ] ); 
     83 
     84                // DataFilter for creating fake objects from HTML comment. 
     85                dataFilter.addRules( 
     86                        { 
     87                                comment : function( value ) 
     88                                { 
     89                                        var cdata = filter( value ); 
     90 
     91                                        // CData instance is received. 
     92                                        if ( cdata.value ) 
     93                                        { 
     94                                                var fakeElement; 
     95                                                // Is it actually a comment and match the desired pattern? 
     96                                                cdata.value.replace( /<!--([\s\S]*?)-->/, function( match, content ) 
     97                                                { 
     98                                                        if( content == 'pagebreak' || content == 'break' ) 
     99                                                        { 
     100                                                                var displayName = content; 
     101                                                                var fakeWrapper = new CKEDITOR.htmlParser.element( displayName, {} ); 
     102                                                                fakeWrapper.add( cdata ); 
     103                                                                fakeElement = editor.createFakeParserElement( 
     104                                                                                fakeWrapper, 
     105                                                                                'cke_drupal_' + CKEDITOR.tools.escapeCssSelector( displayName ), 
     106                                                                                displayName, 
     107                                                                                false ); 
     108                                                        } 
     109 
     110                                                } ); 
     111 
     112                                                if ( fakeElement ) 
     113                                                { 
     114                                                        return fakeElement; 
     115                                                } 
     116                                        } 
     117                                        return value; 
     118                                } 
     119                        } ); 
     120 
     121                // HtmlFilter rules for outputting fake comment. 
     122                function fakeCommentFilter( element ) 
     123                { 
     124                        delete element.name; 
     125                } 
     126 
     127                htmlFilter.addRules( 
     128                { 
     129                        elements : 
     130                        { 
     131                                'break': fakeCommentFilter, 
     132                                'pagebreak': fakeCommentFilter 
     133                        } 
     134                } ); 
     135        } 
     136} ); 
  • _source/core/config.js

     
    198198         * @type String 
    199199         * @example 
    200200         */ 
    201         plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc', 
     201        plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,colordialog,contextmenu,drupalbreaks,elementspath,enterkey,entities,filebrowser,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,popup,preview,print,removeformat,resize,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc', 
    202202 
    203203        /** 
    204204         * List of additional plugins to be loaded. This is a tool setting which 
  • _source/plugins/toolbar/plugin.js

     
    367367        ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'], 
    368368        ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'], 
    369369        ['Link','Unlink','Anchor'], 
    370         ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'], 
     370        ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak', 'DrupalPageBreak', 'DrupalBreak' ], 
    371371        '/', 
    372372        ['Styles','Format','Font','FontSize'], 
    373373        ['TextColor','BGColor'], 
  • _source/lang/en.js

     
    681681                highlight : 'Highlight', 
    682682                selected : 'Selected', 
    683683                clear : 'Clear' 
    684         } 
     684        }, 
     685 
     686        drupalPageBreak : 'Drupal Page Break', 
     687        drupalBreak : 'Drupal Break' 
    685688}; 
© 2003 – 2012 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy