Ticket #4548: 4548_6.patch

File 4548_6.patch, 6.2 KB (added by garry.yao, 6 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 – 2015 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy