Ticket #3496: 3496.2.patch

File 3496.2.patch, 29.9 KB (added by Artur Formella, 10 years ago)
  • _source/core/config.js

     
    150150         * config.plugins = 'basicstyles,button,htmldataprocessor,toolbar,wysiwygarea';
    151151         */
    152152
    153         plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
     153        plugins : 'about,basicstyles,blockquote,button,clipboard,colorbutton,contextmenu,elementspath,enterkey,entities,find,flash,font,format,forms,horizontalrule,htmldataprocessor,image,indent,justify,keystrokes,link,list,maximize,newpage,pagebreak,pastefromword,pastetext,preview,print,removeformat,save,scayt,smiley,showblocks,sourcearea,stylescombo,table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc',
    154154
    155155        /**
    156156         * List of additional plugins to be loaded. This is a tool setting which
  • _source/lang/en.js

     
    620620                'FFF' : 'White'
    621621        },
    622622
     623        scayt :
     624        {
     625                title : 'Spell Check As You Type',
     626                enable : 'Enable SCAYT',
     627                disable : 'Enable SCAYT',
     628                about : 'About SCAYT',
     629                toggle : 'Toggle SCAYT',
     630                options : 'Options',
     631                langs : 'Languages',
     632                moreSuggestions : 'More suggestions',
     633                ignore : 'Ignore',
     634                ignoreAll : 'Ignore All',
     635                addWord : 'Add Word',
     636                emptyDic : 'Dictionary name should not be empty.',
     637                optionsTab : 'Options',
     638                languagesTab : 'Languages',
     639                dictionariesTab : 'Dictionaries',
     640                aboutTab : 'About'
     641        },
     642
    623643        about :
    624644        {
    625645                title : 'About CKEditor',
  • _source/plugins/panelbutton/plugin.js

     
    125125
    126126                        editor.on( 'mode', function()
    127127                                {
    128                                         this.setState( this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED );
     128                                        this.setState( ( this.state ) ?
     129                                                        this.state.apply( this )
     130                                                :
     131                                                        this.modes[ editor.mode ] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
     132                                                );
    129133                                },
    130134                                this );
    131135
     
    163167                                '</a>' +
    164168                                '</span>' );
    165169
     170                        if ( this.onRender )
     171                                this.onRender();
     172
    166173                        return instance;
    167174                },
    168175
     
    183190                                        if ( me.className )
    184191                                                this.element.getFirst().addClass( me.className + '_panel' );
    185192
     193                                        _.oldState = me._.state;
    186194                                        me.setState( CKEDITOR.TRISTATE_ON );
    187195
    188196                                        _.on = 1;
     
    196204                                        if ( me.className )
    197205                                                this.element.getFirst().removeClass( me.className + '_panel' );
    198206
    199                                         me.setState( CKEDITOR.TRISTATE_OFF );
     207                                        me.setState( _.oldState );
    200208
    201209                                        _.on = 0;
    202210
  • _source/plugins/scayt/dialogs/cke_scayt.css

    Property changes on: _source\plugins\scayt
    ___________________________________________________________________
    Added: bugtraq:label
       + Ticket
    Added: bugtraq:url
       + http://dev.fckeditor.net/ticket/%BUGID%
    Added: webviewer:pathrevision
       + http://dev.fckeditor.net/browser/%PATH%?rev=%REVISION% 
    Added: webviewer:revision
       + http://dev.fckeditor.net/changeset/%REVISION%
    Added: bugtraq:logregex
       + (?:ticket: *|#)(\d+) *(?:, *(\d+))*
    
    
    
    Property changes on: _source\plugins\scayt\dialogs
    ___________________________________________________________________
    Added: bugtraq:label
       + Ticket
    Added: bugtraq:url
       + http://dev.fckeditor.net/ticket/%BUGID%
    Added: webviewer:pathrevision
       + http://dev.fckeditor.net/browser/%PATH%?rev=%REVISION% 
    Added: webviewer:revision
       + http://dev.fckeditor.net/changeset/%REVISION%
    Added: bugtraq:logregex
       + (?:ticket: *|#)(\d+) *(?:, *(\d+))*
    
    
     
     1.cke_toolbar .cke_button_scayt span.cke_icon
     2{
     3        background: transparent url(../images/scayt.gif) no-repeat scroll 0 0;
     4}
  • _source/plugins/scayt/dialogs/options.js

     
     1/*
     2Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
     3For licensing, see LICENSE.html or http://ckeditor.com/license
     4*/
     5
     6CKEDITOR.dialog.add( 'scaytcheck', function( editor )
     7{
     8        var firstLoad = true,
     9                captions,
     10                doc = CKEDITOR.document,
     11                fckLang = "en";
     12
     13        var init_with_captions = function()
     14        {
     15                var dialog = this,
     16                        lang_list = dialog.data.scayt.getLangList(),
     17                        buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
     18                        labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ];
     19
     20/*
     21                // Add buttons titles
     22                for ( var i in buttons )
     23                {
     24                        var button = buttons[ i ];
     25                        doc.getById( button ).setHtml( captions[ "button_" + button] );
     26                }
     27                doc.getById( "dic_info" ).setHtml( captions[ "dic_info" ] );
     28*/
     29
     30                // Fill options and dictionary labels.
     31                for ( var i in labels )
     32                {
     33                        var label = "label_" + labels[ i ];
     34                        var labelElement = doc.getById( label );
     35                        if ( labelElement )
     36                                labelElement.setHtml( captions[ label ] );
     37                }
     38               
     39                var about = '<p>' + captions[ "about_throwt_image" ] + '</p>'+
     40                                        '<p>' + captions[ "version" ]  + dialog.data.scayt.version.toString() + '</p>' +
     41                                        '<p>' + captions[ "about_throwt_copy" ] + '</p>';
     42
     43                doc.getById( "scayt_about" ).setHtml( about );
     44
     45                // Create languages tab.
     46                var createOption = function( option, list )
     47                {
     48                        var label = doc.createElement( 'label' );
     49                        label.setAttribute( 'for', 'cke_option' + option );
     50                        label.setHtml( list[ option ] );
     51
     52                        if ( dialog.sLang == option )   // Current.
     53                                dialog.chosed_lang = option;
     54
     55                        var div = doc.createElement( 'div' );
     56                                radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +
     57                                        option + '" type="radio" ' +
     58                                        ( dialog.sLang == option ? 'checked="checked"' : '' ) +
     59                                        ' value="' + option + '" name="scayt_lang" />' );
     60
     61                        radio.on( 'click', function()
     62                                {
     63                                        this.$.checked = true;
     64                                        dialog.chosed_lang = option;
     65                                });
     66
     67                        div.append( radio );
     68                        div.append( label );
     69
     70                        return {
     71                                lang : list[ option ],
     72                                code : option,
     73                                radio : div
     74                        }
     75                };
     76
     77                var langList = [];
     78                for ( var i in lang_list.rtl )
     79                        langList[ langList.length ] = createOption( i, lang_list.ltr )
     80
     81                for ( var i in lang_list.ltr )
     82                        langList[ langList.length  ] = createOption( i, lang_list.ltr )
     83
     84                langList.sort(  function( lang1, lang2 )
     85                        {
     86                                return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
     87                        });
     88
     89                var fieldL = doc.getById( 'scayt_lcol' ),
     90                        fieldR = doc.getById( 'scayt_rcol' );
     91                for ( var i=0; i < langList.length; i++ )
     92                {
     93                        var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
     94                        field.append( langList[ i ].radio );
     95                }
     96        };
     97        var reload = function()
     98        {
     99                var dialog = this;
     100
     101                // Animate options.
     102                for ( var i in dialog.options )
     103                {
     104                        var checkbox = doc.getById( i );
     105                        if ( checkbox )
     106                        {
     107                                checkbox.removeAttribute( 'checked' );
     108                                if ( dialog.options[ i ] == 1 )
     109                                        checkbox.setAttribute( 'checked', "checked" );
     110
     111                                // Bind events. Do it only once.
     112                                if ( firstLoad )
     113                                {
     114                                        checkbox.on( 'click', function()
     115                                                {
     116                                                        dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
     117                                                } )
     118                                }
     119                        }
     120                }
     121
     122                // * user dictionary   
     123                var dic_buttons = [
     124                        // [0] contains buttons for creating
     125                        "dic_create,dic_restore",
     126                        // [1] contains buton for manipulation
     127                        "dic_rename,dic_delete,dic_restore"
     128                ];
     129                scayt.getNameUserDictionary(
     130                        function( o )
     131                        {
     132                                var dic_name = o.dname;
     133                                if ( dic_name )
     134                                {
     135                                        dojo.byId( 'dic_name' ).value = dic_name;
     136                                        display_dic_buttons( dic_buttons[1] );
     137                                }
     138                                else
     139                                        display_dic_buttons( dic_buttons[0] );
     140                               
     141                        },
     142                        function () {
     143                        });
     144
     145                var dic_flag = 0;
     146                 // ** bind event listeners
     147                dojo.query("div.dic_buttons a.button").onclick(function( ev )
     148                        {
     149                                if (typeof window[this.id] == 'function'  ){
     150                                        // get dic name
     151                                        var dic_name = dojo.trim ( dojo.byId('dic_name').value );
     152                                        // check common dictionary rules
     153                                        if (!dic_name)
     154                                        {
     155                                                dic_error_message( editor.lang.scayt.emptyDic );
     156                                                return false;
     157                                        }
     158                                        //apply handler
     159                                        window[this.id].apply( window, [this,ev , dic_name, dic_buttons ] );
     160                                }
     161                                //console.info( typeof window[this.id], window[this.id].calle )
     162                                return false;
     163                        });
     164        };
     165
     166    return {
     167           title : 'SpellCheckAsYouType',
     168           minWidth : 340,
     169           minHeight : 200,
     170           onShow : function()
     171                   {
     172                                var dialog = this;
     173                                dialog.data = editor.fire( "scaytDialog", {} );
     174                                dialog.options = dialog.data.scayt_control.option();
     175                                dialog.sLang = dialog.data.scayt_control.sLang;
     176
     177                                if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
     178                                {
     179                                        alert( "Error loading application service" );
     180                                        dialog.hide();
     181                                        return;
     182                                }
     183
     184                                var stop = 0;
     185                                if ( firstLoad )
     186                                {
     187                                        dialog.data.scayt.getCaption( 'en', function( caps )
     188                                                {
     189                                                        if ( stop++ > 0 )       // Once only
     190                                                                return;
     191                                                        captions = caps;
     192                                                        init_with_captions.apply( dialog );
     193                                                        reload.apply( dialog );
     194                                                        firstLoad = false;
     195                                                });
     196                                }
     197                                else
     198                                        reload.apply( dialog );
     199
     200                                dialog.selectPage( dialog.data.tab );
     201                        },
     202                        onOk : function()
     203                        {
     204                                var scayt_control =  this.data.scayt_control;
     205                                        o = scayt_control.option();
     206                                        c = 0;
     207
     208                                // Set upp options if any was set.
     209                                for ( var oN in this.options )
     210                                {
     211                                        if (o[oN] != this.options[ oN ] && c == 0 )
     212                                        {
     213                                                scayt_control.option( this.options );
     214                                                c++;
     215                                        }
     216                                }
     217
     218                                // Setup languge if it was changed.
     219                                var csLang = this.chosed_lang;
     220                                if ( csLang && this.data.sLang != csLang )
     221                                {
     222                                        scayt_control.setLang( csLang );
     223                                        c++;
     224                                }
     225                                if ( c > 0 )
     226                                        scayt_control.refresh();
     227                        },
     228                        contents : [
     229                                {
     230                                        id : 'options',
     231                                        label : editor.lang.scayt.optionsTab,
     232                                        elements : [
     233                                                {
     234                                                        type : 'html',
     235                                                        id : 'options',
     236                                                        html :  '<div class="inner_options">' +
     237                                                                        '       <div class="messagebox"></div>' +
     238                                                                        '       <div>' +
     239                                                                        '               <input type="checkbox" value="0" id="allCaps" />' +
     240                                                                        '               <label for="allCaps" id="label_allCaps"></label>' +
     241                                                                        '       </div>' +
     242                                                                        '       <div>' +
     243                                                                        '               <input type="checkbox" value="0" id="ignoreDomainNames" />' +
     244                                                                        '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
     245                                                                        '       </div>' +
     246                                                                        '       <div>' +
     247                                                                        '       <input type="checkbox" value="0" id="mixedCase" />' +
     248                                                                        '               <label for="mixedCase" id="label_mixedCase"></label>' +
     249                                                                        '       </div>' +
     250                                                                        '       <div>' +
     251                                                                        '               <input type="checkbox" value="0" id="mixedWithDigits" />' +
     252                                                                        '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
     253                                                                        '       </div>' +
     254                                                                        '</div>'
     255                                                }
     256                                        ]
     257                                },
     258                                {
     259                                        id : 'langs',
     260                                        label : editor.lang.scayt.languagesTab,
     261                                        elements : [
     262                                                {
     263                                                        type : 'html',
     264                                                        id : 'langs',
     265                                                        html :  '<div class="inner_langs">' +
     266                                                                        '       <div class="messagebox"></div>  ' +
     267                                                                        '   <div style="float:left;width:47%;margin-left:5px;" id="scayt_lcol" ></div>' +
     268                                                                        '   <div style="float:left;width:47%;margin-left:15px;" id="scayt_rcol"></div>' +
     269                                                                        '</div>'
     270                                                }
     271                                        ]
     272                                },
     273                                /*
     274                                {
     275                                        id : 'dictionaries',
     276                                        label : editor.lang.scayt.dictionariesTab,
     277                                        elements : [
     278                                                {
     279                                                        type : 'html',
     280                                                        style: '',
     281                                                        id : 'dic',
     282                                                        html :  '<div class="inner_dictionary">' +
     283                                                                        '       <div class="messagebox" id="dic_message"></div>' +
     284                                                                        '       <div class="dictionary" > ' +
     285                                                                        '               <label for="dname" id="dname"></label>' +
     286                                                                        '               <input type="text" size="14" maxlength="15" value="" id="dic_name" name="dic_name"/>' +
     287                                                                        '               <div class="dic_buttons">' +
     288                                                                        '                       <a href="javascript:void(0)" id="dic_create" class="button"></a>' +
     289                                                                        '                       <a href="javascript:void(0)" id="dic_delete" class="button"></a>' +
     290                                                                        '                       <a href="javascript:void(0)" id="dic_rename" class="button"></a>' +
     291                                                                        '                       <a href="javascript:void(0)" id="dic_restore" class="button"></a>' +
     292                                                                        '               </div>' +
     293                                                                        '       </div><p id="dic_info"></p>' +
     294                                                                        '</div>'
     295                                                }
     296                                        ]
     297                                },
     298                                */
     299                                {
     300                                        id : 'about',
     301                                        label : editor.lang.scayt.aboutTab,
     302                                        elements : [
     303                                                {
     304                                                        type : 'html',
     305                                                        id : 'about',
     306                                                        style : "margin: 10px 40px;",
     307                                                        html : '<div id="scayt_about"></div>'
     308                                                }
     309                                        ]
     310                                }
     311                        ]
     312        };
     313});
     314 No newline at end of file
  • _source/plugins/scayt/dialogs/toolbar.css

     
     1a
     2{
     3        text-decoration:none;
     4        padding: 2px 4px 4px 6px;
     5        display : block;
     6        border-width: 1px;
     7        border-style: solid;
     8        margin : 0px;
     9}
     10
     11a.cke_scayt_toogle:hover,
     12a.cke_scayt_toogle:focus,
     13a.cke_scayt_toogle:active
     14{
     15        border-color: #316ac5;
     16        background-color: #dff1ff;
     17        color : #000;
     18        cursor: pointer;
     19        margin : 0px;
     20}
     21a.cke_scayt_toogle {
     22        color : #316ac5;
     23        border-color: #fff;
     24}
     25.scayt_enabled a.cke_scayt_item {
     26        color : #316ac5;
     27        border-color: #fff;
     28        margin : 0px;
     29}
     30.scayt_disabled a.cke_scayt_item {
     31        color : gray;
     32        border-color : #fff;
     33}
     34.scayt_enabled a.cke_scayt_item:hover,
     35.scayt_enabled a.cke_scayt_item:focus,
     36.scayt_enabled a.cke_scayt_item:active
     37{
     38        border-color: #316ac5;
     39        background-color: #dff1ff;
     40        color : #000;
     41        cursor: pointer;
     42}
     43.scayt_disabled a.cke_scayt_item:hover,
     44.scayt_disabled a.cke_scayt_item:focus,
     45.scayt_disabled a.cke_scayt_item:active
     46{
     47        border-color: gray;
     48        background-color: #dff1ff;
     49        color : gray;
     50        cursor: no-drop;
     51}
     52.cke_scayt_set_on, .cke_scayt_set_off
     53{
     54        display: none;
     55}
     56.scayt_enabled .cke_scayt_set_on
     57{
     58        display: none;
     59}
     60.scayt_disabled .cke_scayt_set_on
     61{
     62        display: inline;
     63}
     64.scayt_disabled .cke_scayt_set_off
     65{
     66        display: none;
     67}
     68.scayt_enabled  .cke_scayt_set_off
     69{
     70        display: inline;
     71}
  • _source/plugins/scayt/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 * @fileOverview Spell Check As You Type (SCAYT).
     8 * Button name : Scayt.
     9 */
     10
     11(function()
     12{
     13        var commandName         = "scaytcheck",
     14                sc_on_cssclass  = "scayt_enabled",
     15                sc_off_cssclass = 'scayt_disabled',
     16                openPage                = '';
     17
     18        var onEngineLoad = function()
     19        {
     20                var editor = this;
     21                dojo.requireLocalization( 'scayt', 'caption', '', "ROOT" );
     22
     23                var createInstnce = function()  // Create new instance every time Document is created.
     24                {
     25                        // Initialise Scayt instance.
     26                        var scayt_control = new scayt(
     27                                {
     28                                        srcNodeRef: editor.document.getWindow().$.frameElement
     29                                });
     30
     31                        // Copy config.
     32                        var     lastInstance = plugin.instances[ editor.name ]
     33                        if ( lastInstance )
     34                        {
     35                                scayt_control.sLang = lastInstance.sLang;
     36                                scayt_control.option( lastInstance.option() );
     37                                scayt_control.paused = lastInstance.paused;
     38                        }
     39
     40                        plugin.instances[ editor.name ] = scayt_control;
     41
     42                        try {
     43                                scayt_control.setDisabled( scayt_control.paused === false );                            // I really don't know why it couse JS error in IE
     44                        } catch (e) {}
     45                };
     46
     47                editor.on( 'contentDom', createInstnce )                // Get the iframe somehow.
     48                editor.on( 'contentDomUnload', function()
     49                        {
     50                                // Remove scripts.
     51                                var scripts = CKEDITOR.document.getElementsByTag( 'script' );
     52                                scaytIdRegex =  /^dojoIoScript(\d+)$/i;
     53                                scaytSrcRegex =  /^http:\/\/demo\.spellchecker\.net\/spellcheck3\/script\/ssrv\.cgi/i;
     54
     55                                for ( var i=0; i < scripts.count(); i++ )
     56                                {
     57                                        var script = scripts.getItem( i ),
     58                                                id = script.getId(),
     59                                                src = script.getAttribute( 'src' );
     60
     61                                        if ( id && src && id.match( scaytIdRegex ) && src.match( scaytSrcRegex ))
     62                                                script.remove();
     63                                }
     64                        })
     65
     66                editor.on( 'beforeCommandExec', function( ev )          // Disable SCAYT before Source command execution.
     67                        {
     68                                if ( ev.data.name == 'source' && editor.mode == 'wysiwyg' )
     69                                {
     70                                        var scayt = plugin.getScayt( editor )
     71                                        if ( scayt )
     72                                        {
     73                                                scayt.paused = !scayt.disabled;
     74                                                scayt.setDisabled( true );
     75                                        }
     76                                }
     77                        });
     78
     79                // Listen to data manipulation to reflect scayt markup.
     80                editor.on( 'beforeGetData', function()
     81                        {
     82                                if ( plugin.isScaytEnabled( editor ) )
     83                                        plugin.getScayt( editor ).refresh();
     84                        });
     85
     86                editor.on( 'afterSetData', function()
     87                        {
     88                                if ( plugin.isScaytEnabled( editor ) )
     89                                        plugin.getScayt( editor ).refresh();
     90                        });
     91
     92                editor.on( 'scaytDialog', function( ev )        // Communication with dialog.
     93                        {
     94                                ev.data.djConfig = djConfig;
     95                                ev.data.scayt_control = plugin.getScayt( editor );
     96                                ev.data.tab = openPage;
     97                                ev.data.scayt = scayt;
     98                        });
     99
     100                if ( editor.document )
     101                {
     102                        createInstnce();
     103                        editor.fire( 'showScaytState' );
     104                }
     105        };
     106
     107        CKEDITOR.plugins.scayt =
     108        {
     109                engineLoaded : false,
     110                instances : {},
     111                getScayt : function( editor )
     112                {
     113                        var instance = this.instances[ editor.name ];
     114                        return instance;
     115                },
     116                isScaytReady : function( editor )
     117                {
     118                        return this.engineLoaded === true &&
     119                                'undefined' !== typeof scayt && this.getScayt( editor );
     120                },
     121                isScaytEnabled : function( editor )
     122                {
     123                        var scayt = this.getScayt( editor );
     124                        return ( scayt ) ? scayt.disabled === false : false;
     125                },
     126                loadEngine : function( editor )
     127                {
     128                        if ( this.engineLoaded === true )
     129                                return onEngineLoad.apply( editor );    // Add new instance.
     130                        else if ( this.engineLoaded == -1 )                     // We are waiting.
     131                                return CKEDITOR.on( "scaytReady", function(){ onEngineLoad.apply( editor )} );  // Use function(){} to avoid rejection as duplicate.
     132
     133                        CKEDITOR.on( "scaytReady", onEngineLoad, editor );
     134                        CKEDITOR.on( "scaytReady", function()
     135                                {
     136                                        this.engineLoaded = true;
     137                                }, this, null, 0        // First.
     138                        );
     139
     140                        this.engineLoaded = -1; // Loading in progress.
     141                        djConfig =
     142                        {
     143                                baseUrl: "./",
     144                                blankGif: "http://demo.spellchecker.net/spellcheck3/lf/scayt/blank.gif",
     145                                parseOnLoad: true,
     146                                afterOnLoad: true,
     147                                useXDomain: true,
     148                                locale: 'en',
     149                                xdWaitSeconds: 10,
     150                                preventCache: false,
     151                                scaytNodes: document.getElementById('foo'),
     152                                require: [
     153                                        "dojo.i18n",
     154                                        "scayt._base"
     155                                ],
     156                                modulePaths:
     157                                {
     158                                        "scayt": "http://demo.spellchecker.net/spellcheck3/lf/scayt"
     159                                },
     160                                addOnLoad:
     161                                [
     162                                        function()
     163                                        {
     164                                                CKEDITOR.fireOnce( "scaytReady" );
     165                                        }
     166                                ],
     167                                isDebug: false
     168                        };
     169
     170                        // Append javascrip code.
     171                        CKEDITOR.document.getHead().append(
     172                                CKEDITOR.document.createElement( 'script',
     173                                        {
     174                                                attributes :
     175                                                        {
     176                                                                type : 'text/javascript',
     177                                                                src : "http://demo.spellchecker.net/spellcheck3/lf/dojo/dojo/dojo.xd.js"
     178                                                        }
     179                                        })
     180                        );
     181                }
     182        };
     183
     184        var plugin = CKEDITOR.plugins.scayt;
     185
     186        // Context menu constructing.
     187        var addButtonCommand = function( editor, buttonName, buttonLabel, commandName, command, menugroup, menuOrder )
     188        {
     189                editor.addCommand( commandName, command );
     190
     191                // If the "menu" plugin is loaded, register the menu item.
     192                editor.addMenuItem( commandName,
     193                        {
     194                                label : buttonLabel,
     195                                command : commandName,
     196                                group : menugroup,
     197                                order : menuOrder
     198                        });
     199        };
     200
     201        var commandDefinition =
     202        {
     203                exec: function( editor, mode )
     204                {
     205                        // Open dialog.
     206                        if ( mode && mode != 'toggle' )
     207                        {
     208                                openPage = mode;
     209                                if ( plugin.isScaytEnabled( editor ) )
     210                                        editor.openDialog( commandName );
     211                        }
     212                        else    // Toggle.
     213                        {
     214                                if ( plugin.isScaytReady( editor ) )
     215                                {
     216                                        var scayt_control = plugin.getScayt( editor );
     217                                        scayt_control.setDisabled( !scayt_control.disabled );
     218                                        editor.fire( 'showScaytState' );
     219                                }
     220                                else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )        // Load first time
     221                                        plugin.loadEngine( editor );
     222                        }
     223                }
     224        };
     225       
     226        // Add scayt plugin.
     227        CKEDITOR.plugins.add( 'scayt',
     228        {
     229                onLoad : function( editor )
     230                {
     231                        // Register own rbc menu group.
     232                        // TODO: improve that.
     233                        CKEDITOR.config.menu_groups = "scayt_suggest,scayt_moresuggest,scayt_control," + CKEDITOR.config.menu_groups;
     234                },
     235                init : function( editor )
     236                {
     237                        var moreSuggestions = {};
     238                        var mainSuggestions = {};
     239
     240                        // Scayt command.
     241                        editor.addCommand( commandName, commandDefinition );
     242
     243                        // Add Options dialog.
     244                        CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );
     245
     246                        // Append stylesheets.
     247                        CKEDITOR.document.appendStyleSheet( CKEDITOR.getUrl( this.path + 'dialogs/cke_scayt.css') );
     248
     249                        editor.ui.add( "Scayt", CKEDITOR.UI_PANELBUTTON,
     250                                {
     251                                        label : editor.lang.scayt.title,
     252                                        title : editor.lang.scayt.title,
     253                                        className : 'cke_button_scayt',
     254                                        onRender: function()
     255                                        {
     256                                                CKEDITOR.on( "scaytReady", function()
     257                                                        {
     258                                                                this.setState( this.state.state() );            // Refresh state.
     259                                                        }, this );
     260                                        },
     261                                        state : function()
     262                                        {
     263                                                if ( editor.mode == 'wysiwyg' )
     264                                                        return plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF;
     265                                                else
     266                                                        return CKEDITOR.TRISTATE_DISABLED;
     267                                        },
     268                                        panel :
     269                                        {
     270                                                css : [ CKEDITOR.getUrl ( this.path + 'dialogs/toolbar.css' ),
     271                                                                editor.config.contentsCss,
     272                                                                CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ]
     273                                        },
     274                                        onBlock : function( panel, blockName )
     275                                        {
     276                                                var block = panel.addBlock( blockName );
     277                                                block.autoSize = false;
     278
     279                                                var clickFn = CKEDITOR.tools.addFunction( function( mode )
     280                                                        {
     281                                                                editor.focus();
     282                                                                panel.hide();
     283                                                                editor.getCommand( commandName ).exec( mode );  // Toggle SCAYT or open dialog 
     284                                                        });
     285
     286                                                var output = '<div><a class="cke_scayt_toogle"' +
     287                                                                ' onclick=" CKEDITOR.tools.callFunction( ' + clickFn + ',\'\')"' +
     288                                                                ' href="javascript:void(\'' + editor.lang.scayt.toggle + '\')">' +
     289                                                                        '<span class="cke_scayt_set_on">' + editor.lang.scayt.enable +'</span><span class="cke_scayt_set_off">' + editor.lang.scayt.disable +'</span>' +
     290                                                                '</a>' +
     291                                                                '<a class="cke_scayt_item"' +
     292                                                                ' onclick="CKEDITOR.tools.callFunction(' + clickFn + ', \'options\')"' +
     293                                                                ' href="javascript:void(\'' + editor.lang.scayt.options + '\')">' +
     294                                                                        '<span>' + editor.lang.scayt.options + '</span>' +
     295                                                                '</a>' +
     296                                                                '<a class="cke_scayt_item"' +
     297                                                                ' onclick="CKEDITOR.tools.callFunction(' + clickFn + ', \'langs\')"' +
     298                                                                ' href="javascript:void(\'' + editor.lang.scayt.langs + '\')">' +
     299                                                                        '<span>' + editor.lang.scayt.langs + '</span>' +
     300                                                                '</a>' +
     301                                                                '<a class="cke_scayt_item"' +
     302                                                                ' onclick="CKEDITOR.tools.callFunction(' + clickFn + ', \'about\')"' +
     303                                                                ' href="javascript:void(\'' + editor.lang.scayt.about + '\')">' +
     304                                                                        '<span>' + editor.lang.scayt.about +'</span>' +
     305                                                                '</a></div>';
     306
     307                                                block.element.setHtml( output );
     308
     309                                                editor.on( 'showScaytState', function()
     310                                                        {
     311                                                                var state = this.state();
     312
     313                                                                this.setState( state );         // Refresh state.
     314                                                                if ( state == CKEDITOR.TRISTATE_ON )
     315                                                                {
     316                                                                        block.element.removeClass( sc_off_cssclass );
     317                                                                        block.element.addClass( sc_on_cssclass );
     318                                                                }
     319                                                                else
     320                                                                {
     321                                                                        block.element.removeClass( sc_on_cssclass );
     322                                                                        block.element.addClass( sc_off_cssclass );
     323                                                                }
     324                                                        }, this );
     325                                        },
     326                                        onOpen : function()
     327                                        {
     328                                                if ( CKEDITOR.env.ie )
     329                                                        editor.focus();
     330                                                editor.fire( 'showScaytState' );
     331                                        },
     332                                        onClose : function(){}
     333                                });
     334
     335                        // If the "contextmenu" plugin is loaded, register the listeners.
     336                        if ( editor.contextMenu && editor.addMenuItems )
     337                        {
     338                                editor.contextMenu.addListener( function( element, selection )
     339                                        {
     340                                                var scayt_control = plugin.getScayt( editor );
     341                                                if ( !plugin.isScaytEnabled( editor ) || !element || !element.$ )
     342                                                        return null;
     343
     344                                                var word = scayt_control.getWord( element.$ );
     345
     346                                                if ( !word )
     347                                                        return null;
     348
     349                                                var sLang = scayt_control.getLang(),
     350                                                        _r = {},
     351                                                        items_suggestion = scayt.getSuggestion( word, sLang );
     352
     353                                                // Remove unused commands and menuitems
     354                                                for ( i in moreSuggestions )
     355                                                {
     356                                                        delete editor._.menuItems[ i ];
     357                                                        delete editor._.commands[ i ];
     358                                                }
     359                                                for ( i in mainSuggestions )
     360                                                {
     361                                                        delete editor._.menuItems[ i ];
     362                                                        delete editor._.commands[ i ];
     363                                                }
     364                                                moreSuggestions = {};           // Reset items.
     365                                                mainSuggestions = {};
     366
     367                                                // Rgister the More suggestions group;
     368                                                editor.addMenuItem( 'scayt_moresuggest',
     369                                                        {
     370                                                                label : editor.lang.scayt.moreSuggestions,
     371                                                                group : 'scayt_moresuggest',
     372                                                                order : 10,
     373                                                                getItems : function()
     374                                                                {
     375                                                                        return moreSuggestions;
     376                                                                }
     377                                                        });
     378
     379                                                for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )
     380                                                {
     381                                                        var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( " ", "_" );
     382                                                        var exec = ( function( el, s )
     383                                                                {
     384                                                                        return {
     385                                                                                exec: function( editor )
     386                                                                                {
     387                                                                                        scayt_control.replace(el, s);
     388                                                                                }
     389                                                                        };
     390                                                                })( element.$, items_suggestion[i] );
     391
     392                                                        if ( i < editor.config.scayt_maxSuggestions )
     393                                                        {
     394                                                                addButtonCommand( editor, "button_" + commandName, items_suggestion[i],
     395                                                                        commandName, exec, 'scayt_suggest', i + 1 );
     396                                                                _r[ commandName ] = CKEDITOR.TRISTATE_OFF;
     397                                                                mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
     398                                                        }
     399                                                        else
     400                                                        {
     401                                                                addButtonCommand( editor, "button_" + commandName, items_suggestion[i],
     402                                                                        commandName, exec, 'scayt_moresuggest', i + 1 );
     403                                                                moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
     404                                                        }
     405                                                }
     406
     407                                                var ignore_command =
     408                                                {
     409                                                        exec: function()
     410                                                        {
     411                                                                scayt_control.ignore( element.$ );
     412                                                        }
     413                                                };
     414                                                var ignore_all_command =
     415                                                {
     416                                                        exec: function()
     417                                                        {
     418                                                                scayt_control.ignoreAll( element.$ );
     419                                                        }
     420                                                };
     421                                                var addword_command =
     422                                                {
     423                                                        exec: function()
     424                                                        {
     425                                                                scayt.addWordToUserDictionary( element.$ );
     426                                                        }
     427                                                };
     428
     429                                                addButtonCommand( editor, "ignore", editor.lang.scayt.ignore,
     430                                                        'scayt_ignore', ignore_command, 'scayt_control', 1);
     431                                                addButtonCommand( editor, "ignore_all", editor.lang.scayt.ignoreAll,
     432                                                        'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
     433                                                addButtonCommand( editor, "add_word", editor.lang.scayt.addWord,
     434                                                        'scayt_add_word', addword_command, 'scayt_control', 3);
     435
     436                                                mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF;
     437                                                mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF;
     438                                                mainSuggestions[ 'scayt_ignore_all' ] = CKEDITOR.TRISTATE_OFF;
     439                                                mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF;
     440
     441                                                return mainSuggestions;
     442                                        });
     443                        }
     444
     445                        // Start plugin
     446                        if ( editor.config.scayt_autoStartup )
     447                                plugin.loadEngine( editor );
     448                }
     449        });
     450})();
     451
     452CKEDITOR.config.scayt_maxSuggestions = 5;
     453CKEDITOR.config.scayt_autoStartup = false;
  • _source/plugins/toolbar/plugin.js

     
    277277CKEDITOR.config.toolbar_Full =
    278278[
    279279        ['Source','-','Save','NewPage','Preview','-','Templates'],
    280         ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker'],
     280        ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
    281281        ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],
    282282        ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select', 'Button', 'ImageButton', 'HiddenField'],
    283283        '/',
  • config.js

     
    66CKEDITOR.editorConfig = function( config )
    77{
    88        // Define changes to default configuration here. For example:
    9         // config.language = 'fr';
     9         config.language = 'en';
    1010        // config.skin = 'office2003';
    1111};
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy