Ticket #4814: 4814_5.patch

File 4814_5.patch, 33.2 KB (added by Frederico Caldeira Knabben, 9 years ago)
  • _source/plugins/scayt/dialogs/options.js

     
    1111                tags = [],
    1212                i,
    1313                contents = [],
    14                 userDicActive = false;
    15         var dic_buttons = [
    16                 // [0] contains buttons for creating
    17                 "dic_create,dic_restore",
    18                 // [1] contains buton for manipulation
    19                 "dic_rename,dic_delete"
    20         ];
     14                userDicActive = false,
     15                dic_buttons = [
     16                        // [0] contains buttons for creating
     17                        "dic_create,dic_restore",
     18                        // [1] contains buton for manipulation
     19                        "dic_rename,dic_delete"
     20                ],
     21                optionsIds= [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ];
     22
     23        // common operations
     24
     25        function getBOMAllOptions () {
     26                 return document.forms.optionsbar["options"];
     27        }
     28        function getBOMAllLangs () {
     29                 return document.forms.languagesbar["scayt_lang"];
     30        }
     31
     32        function setCheckedValue(radioObj, newValue) {
     33                if(!radioObj)
     34                        return;
     35                var radioLength = radioObj.length;
     36                if(radioLength == undefined) {
     37                        radioObj.checked = (radioObj.value == newValue.toString());
     38                        return;
     39                }
     40                for(var i = 0; i < radioLength; i++) {
     41                        radioObj[i].checked = false;
     42                        if(radioObj[i].value == newValue.toString()) {
     43                                radioObj[i].checked = true;
     44                        }
     45                }
     46        }
     47
    2148        var tags_contents =  [
    2249                                {
    2350                                        id : 'options',
     
    2653                                                {
    2754                                                        type : 'html',
    2855                                                        id : 'options',
    29                                                         html :  '<div class="inner_options">' +
     56                                                        html :  '<form name="optionsbar"><div class="inner_options">' +
    3057                                                                        '       <div class="messagebox"></div>' +
    3158                                                                        '       <div style="display:none;">' +
    32                                                                         '               <input type="checkbox" value="0" id="allCaps" />' +
     59                                                                        '               <input type="checkbox" name="options" id="allCaps" />' +
    3360                                                                        '               <label for="allCaps" id="label_allCaps"></label>' +
    3461                                                                        '       </div>' +
    3562                                                                        '       <div style="display:none;">' +
    36                                                                         '               <input type="checkbox" value="0" id="ignoreDomainNames" />' +
     63                                                                        '               <input name="options" type="checkbox" id="ignoreDomainNames" />' +
    3764                                                                        '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
    3865                                                                        '       </div>' +
    3966                                                                        '       <div style="display:none;">' +
    40                                                                         '       <input type="checkbox" value="0" id="mixedCase" />' +
     67                                                                        '       <input name="options" type="checkbox" id="mixedCase" />' +
    4168                                                                        '               <label for="mixedCase" id="label_mixedCase"></label>' +
    4269                                                                        '       </div>' +
    4370                                                                        '       <div style="display:none;">' +
    44                                                                         '               <input type="checkbox" value="0" id="mixedWithDigits" />' +
     71                                                                        '               <input name="options" type="checkbox" id="mixedWithDigits" />' +
    4572                                                                        '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
    4673                                                                        '       </div>' +
    47                                                                         '</div>'
     74                                                                        '</div></form>'
    4875                                                }
    4976                                        ]
    5077                                },
     
    5582                                                {
    5683                                                        type : 'html',
    5784                                                        id : 'langs',
    58                                                         html :  '<div class="inner_langs">' +
     85                                                        html :  '<form name="languagesbar"><div class="inner_langs">' +
    5986                                                                        '       <div class="messagebox"></div>  ' +
    60                                                                         '   <div style="float:left;width:47%;margin-left:5px;" id="scayt_lcol" ></div>' +
    61                                                                         '   <div style="float:left;width:47%;margin-left:15px;" id="scayt_rcol"></div>' +
    62                                                                         '</div>'
     87                                                                        '   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div>' +
     88                                                                        '   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div>' +
     89                                                                        '</div></form>'
    6390                                                }
    6491                                        ]
    6592                                },
     
    7097                                                {
    7198                                                        type : 'html',
    7299                                                        style: '',
    73                                                         id : 'dic',
    74                                                         html :  '<div class="inner_dictionary" style="text-align:left; white-space:normal;">' +
     100                                                        id : 'dictionaries',
     101                                                        html :  '<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +
    75102                                                                        '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +
    76103                                                                        '       <div style="margin:5px auto; width:80%;white-space:normal;"> ' +
    77104                                                                        '       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+
     
    90117                                                                        '                               </a>' +
    91118                                                                        '               </div>' +
    92119                                                                        '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +
    93                                                                         '</div>'
     120                                                                        '</div></form>'
    94121                                                }
    95122                                        ]
    96123                                },
     
    101128                                                {
    102129                                                        type : 'html',
    103130                                                        id : 'about',
    104                                                         style : 'margin: 10px 40px;',
     131                                                        style : 'margin: 5px 5px;',
    105132                                                        html : '<div id="scayt_about"></div>'
    106133                                                }
    107134                                        ]
    108135                                }
    109136                        ];
     137
    110138        var dialogDefiniton = {
    111139                title : editor.lang.scayt.title,
    112                 minWidth : 340,
    113                 minHeight : 200,
     140                minWidth : 360,
     141                minHeight : 220,
    114142                onShow : function()
    115143                {
    116144                        var dialog = this;
     
    128156                        var stop = 0;
    129157                        if ( firstLoad )
    130158                        {
    131                                 dialog.data.scayt.getCaption( 'en', function( caps )
    132                                         {
    133                                                 if ( stop++ > 0 )       // Once only
    134                                                         return;
    135                                                 captions = caps;
    136                                                 init_with_captions.apply( dialog );
    137                                                 reload.apply( dialog );
    138                                                 firstLoad = false;
    139                                         });
     159                                dialog.data.scayt.getCaption( editor.langCode || 'en', function( caps )
     160                                {
     161                                        if ( stop++ > 0 )       // Once only
     162                                                return;
     163                                        captions = caps;
     164                                        init_with_captions.apply( dialog );
     165                                        reload.apply( dialog );
     166                                        firstLoad = false;
     167                                });
    140168                        }
    141169                        else
    142170                                reload.apply( dialog );
     
    145173                },
    146174                onOk : function()
    147175                {
    148                         var scayt_control =  this.data.scayt_control,
    149                                 o = scayt_control.option(),
    150                                 c = 0;
    151 
    152                         // Set up options if any was set.
    153                         for ( var i in this.options )
    154                         {
    155                                 if (o[i] != this.options[ i ] && c === 0 )
    156                                 {
    157                                         scayt_control.option( this.options );
    158                                         c++;
    159                                 }
    160                         }
    161 
     176                        var scayt_control =  this.data.scayt_control;
     177                        scayt_control.option( this.options );
    162178                        // Setup languge if it was changed.
    163179                        var csLang = this.chosed_lang;
    164                         if ( csLang && this.data.sLang != csLang )
    165                         {
    166                                 scayt_control.setLang( csLang );
    167                                 c++;
    168                         }
    169                         if ( c > 0 )
    170                                 scayt_control.refresh();
     180                        scayt_control.setLang( csLang );
     181                        scayt_control.refresh();
    171182                },
     183                onCancel: function()
     184                {
     185                        var o = getBOMAllOptions();
     186                        for (i in o)
     187                                o[i].checked = false;
     188
     189                        setCheckedValue(getBOMAllLangs(),"");
     190                },
    172191                contents : contents
    173         };
     192        };
    174193
    175194        var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );
    176         if ( scayt_control )
     195
     196        tags = CKEDITOR.plugins.scayt.uiTabs;
     197
     198        for ( i in tags )
    177199        {
    178                 tags = scayt_control.uiTags;
    179         }
    180 
    181         for ( i in tags ) {
    182200                if ( tags[ i ] == 1 )
    183201                        contents[ contents.length ] = tags_contents[ i ];
    184202        }
    185203        if ( tags[2] == 1 )
    186204                userDicActive = true;
    187205
    188         function onDicButtonClick()
    189         {
    190                 var dic_name = doc.getById('dic_name').getValue();
    191                 if ( !dic_name )
    192                 {
    193                         dic_error_message(" Dictionary name should not be empty. ");
    194                         return false;
    195                 }
    196                 //apply handler
    197                 window.dic[ this.getId() ].apply( null, [ this, dic_name, dic_buttons ] );
    198206
    199                 return true;
    200         }
    201207        var init_with_captions = function()
    202208        {
    203209                var dialog = this,
    204210                        lang_list = dialog.data.scayt.getLangList(),
    205211                        buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
    206                         labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],
     212                        labels = optionsIds,
    207213                        i;
    208214
    209215                // Add buttons titles
     
    219225
    220226
    221227                // Fill options and dictionary labels.
    222                 for ( i in labels )
     228                if (tags[0] == 1)
    223229                {
    224                         var label = 'label_' + labels[ i ],
    225                                 labelElement = doc.getById( label );
     230                        for ( i in labels )
     231                        {
     232                                var label = 'label_' + labels[ i ],
     233                                        labelElement = doc.getById( label );
    226234
    227                         if (  'undefined' != typeof labelElement
    228                            && 'undefined' != typeof captions[ label ]
    229                            && 'undefined' != typeof dialog.options[labels[ i ]] )
    230                         {
    231                                 labelElement.setHtml( captions[ label ] );
    232                                 var labelParent = labelElement.getParent();
    233                                 labelParent.$.style.display = "block";
     235                                if (  'undefined' != typeof labelElement
     236                                   && 'undefined' != typeof captions[ label ]
     237                                   && 'undefined' != typeof dialog.options[labels[ i ]] )
     238                                {
     239                                        labelElement.setHtml( captions[ label ] );
     240                                        var labelParent = labelElement.getParent();
     241                                        labelParent.$.style.display = "block";
     242                                }
    234243                        }
    235244                }
    236245
     
    273282                };
    274283
    275284                var langList = [];
    276                 for ( i in lang_list.rtl )
    277                         langList[ langList.length ] = createOption( i, lang_list.ltr );
     285                if (tags[1] ==1 )
     286                {
     287                        for ( i in lang_list.rtl )
     288                                langList[ langList.length ] = createOption( i, lang_list.ltr );
    278289
    279                 for ( i in lang_list.ltr )
    280                         langList[ langList.length  ] = createOption( i, lang_list.ltr );
     290                        for ( i in lang_list.ltr )
     291                                langList[ langList.length  ] = createOption( i, lang_list.ltr );
    281292
    282                 langList.sort(  function( lang1, lang2 )
     293                        langList.sort(  function( lang1, lang2 )
     294                                {
     295                                        return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
     296                                });
     297
     298                        var fieldL = doc.getById( 'scayt_lcol' ),
     299                                fieldR = doc.getById( 'scayt_rcol' );
     300                        for ( i=0; i < langList.length; i++ )
    283301                        {
    284                                 return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
    285                         });
    286 
    287                 var fieldL = doc.getById( 'scayt_lcol' ),
    288                         fieldR = doc.getById( 'scayt_rcol' );
    289                 for ( i=0; i < langList.length; i++ )
    290                 {
    291                         var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
    292                         field.append( langList[ i ].radio );
     302                                var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
     303                                field.append( langList[ i ].radio );
     304                        }
    293305                }
    294306
    295307                // user dictionary handlers
    296308                var dic = {};
    297309                dic.dic_create = function( el, dic_name , dic_buttons )
    298                         {
    299                                 // comma separated button's ids include repeats if exists
    300                                 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
     310                {
     311                        // comma separated button's ids include repeats if exists
     312                        var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
    301313
    302                                 var err_massage = captions["err_dic_create"];
    303                                 var suc_massage = captions["succ_dic_create"];
    304                                 //console.info("--plugin ");
     314                        var err_massage = captions["err_dic_create"];
     315                        var suc_massage = captions["succ_dic_create"];
    305316
    306                                 window.scayt.createUserDictionary(dic_name,
    307                                         function(arg)
    308                                                 {
    309                                                         //console.info( "dic_create callback called with args" , arg );
    310                                                         hide_dic_buttons ( all_buttons );
    311                                                         display_dic_buttons ( dic_buttons[1] );
    312                                                         suc_massage = suc_massage.replace("%s" , arg.dname );
    313                                                         dic_success_message (suc_massage);
    314                                                 },
    315                                         function(arg)
    316                                                 {
    317                                                         //console.info( "dic_create errorback called with args" , arg )
    318                                                         err_massage = err_massage.replace("%s" ,arg.dname );
    319                                                         dic_error_message ( err_massage + "( "+ (arg.message || "") +")");
    320                                                 });
     317                        window.scayt.createUserDictionary(dic_name,
     318                                function(arg)
     319                                {
     320                                        hide_dic_buttons ( all_buttons );
     321                                        display_dic_buttons ( dic_buttons[1] );
     322                                        suc_massage = suc_massage.replace("%s" , arg.dname );
     323                                        dic_success_message (suc_massage);
     324                                },
     325                                function(arg)
     326                                {
     327                                        err_massage = err_massage.replace("%s" ,arg.dname );
     328                                        dic_error_message ( err_massage + "( "+ (arg.message || "") +")");
     329                                });
    321330
    322                         };
     331                };
    323332
    324333                dic.dic_rename = function( el, dic_name )
    325                         {
    326                                 //
    327                                 // try to rename dictionary
    328                                 // @TODO: rename dict
    329                                 //console.info ( captions["err_dic_rename"] )
    330                                 var err_massage = captions["err_dic_rename"] || "";
    331                                 var suc_massage = captions["succ_dic_rename"] || "";
    332                                 window.scayt.renameUserDictionary(dic_name,
    333                                         function(arg)
    334                                                 {
    335                                                         //console.info( "dic_rename callback called with args" , arg );
    336                                                         suc_massage = suc_massage.replace("%s" , arg.dname );
    337                                                         set_dic_name( dic_name );
    338                                                         dic_success_message ( suc_massage );
    339                                                 },
    340                                         function(arg)
    341                                                 {
    342                                                         //console.info( "dic_rename errorback called with args" , arg )
    343                                                         err_massage = err_massage.replace("%s" , arg.dname  );
    344                                                         set_dic_name( dic_name );
    345                                                         dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );
    346                                                 });
    347                         };
     334                {
     335                        //
     336                        // try to rename dictionary
     337                        var err_massage = captions["err_dic_rename"] || "";
     338                        var suc_massage = captions["succ_dic_rename"] || "";
     339                        window.scayt.renameUserDictionary(dic_name,
     340                                function(arg)
     341                                        {
     342                                                suc_massage = suc_massage.replace("%s" , arg.dname );
     343                                                set_dic_name( dic_name );
     344                                                dic_success_message ( suc_massage );
     345                                        },
     346                                function(arg)
     347                                        {
     348                                                err_massage = err_massage.replace("%s" , arg.dname  );
     349                                                set_dic_name( dic_name );
     350                                                dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );
     351                                        });
     352                };
    348353
    349354                dic.dic_delete = function ( el, dic_name , dic_buttons )
    350                         {
    351                                 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
    352                                 var err_massage = captions["err_dic_delete"];
    353                                 var suc_massage = captions["succ_dic_delete"];
     355                {
     356                        var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
     357                        var err_massage = captions["err_dic_delete"];
     358                        var suc_massage = captions["succ_dic_delete"];
    354359
    355                                 // try to delete dictionary
    356                                 // @TODO: delete dict
    357                                 window.scayt.deleteUserDictionary(
    358                                         function(arg)
    359                                                 {
    360                                                         //console.info( "dic_delete callback " , dic_name ,arg );
    361                                                         suc_massage = suc_massage.replace("%s" , arg.dname );
    362                                                         hide_dic_buttons ( all_buttons );
    363                                                         display_dic_buttons ( dic_buttons[0] );
    364                                                         set_dic_name( "" ); // empty input field
    365                                                         dic_success_message( suc_massage );
    366                                                 },
    367                                         function(arg)
    368                                                 {
    369                                                         //console.info( " dic_delete errorback called with args" , arg )
    370                                                         err_massage = err_massage.replace("%s" , arg.dname );
    371                                                         dic_error_message(err_massage);
    372                                                 });
    373                         };
     360                        // try to delete dictionary
     361                        window.scayt.deleteUserDictionary(
     362                                function(arg)
     363                                {
     364                                        suc_massage = suc_massage.replace("%s" , arg.dname );
     365                                        hide_dic_buttons ( all_buttons );
     366                                        display_dic_buttons ( dic_buttons[0] );
     367                                        set_dic_name( "" ); // empty input field
     368                                        dic_success_message( suc_massage );
     369                                },
     370                                function(arg)
     371                                {
     372                                        err_massage = err_massage.replace("%s" , arg.dname );
     373                                        dic_error_message(err_massage);
     374                                });
     375                };
    374376
    375377                dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )
    376378                        {
     
    381383
    382384                                window.scayt.restoreUserDictionary(dic_name,
    383385                                        function(arg)
    384                                                 {
    385                                                         //console.info( "dic_restore callback called with args" , arg );
    386                                                         suc_massage = suc_massage.replace("%s" , arg.dname );
    387                                                         hide_dic_buttons ( all_buttons );
    388                                                         display_dic_buttons(dic_buttons[1]);
    389                                                         dic_success_message( suc_massage );
    390                                                 },
     386                                        {
     387                                                suc_massage = suc_massage.replace("%s" , arg.dname );
     388                                                hide_dic_buttons ( all_buttons );
     389                                                display_dic_buttons(dic_buttons[1]);
     390                                                dic_success_message( suc_massage );
     391                                        },
    391392                                        function(arg)
    392                                                 {
    393                                                         //console.info( " dic_restore errorback called with args" , arg )
    394                                                         err_massage = err_massage.replace("%s" , arg.dname );
    395                                                         dic_error_message( err_massage );
    396                                                 });
     393                                        {
     394                                                err_massage = err_massage.replace("%s" , arg.dname );
     395                                                dic_error_message( err_massage );
     396                                        });
    397397                        };
    398398
     399                function onDicButtonClick( ev )
     400                {
     401                        var dic_name = doc.getById('dic_name').getValue();
     402                        if ( !dic_name )
     403                        {
     404                                dic_error_message(" Dictionary name should not be empty. ");
     405                                return false;
     406                        }
     407                        try{
     408                                var el = id = ev.data.getTarget().getParent();
     409                                var id = el.getId();
     410                                dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );
     411                        }catch(err){
     412                                dic_error_message(" Dictionary error. ");
     413                        }
     414
     415                        return true;
     416                }
     417
    399418                // ** bind event listeners
    400419                var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),
    401420                        l;
    402421
    403422                for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )
    404423                {
    405                         var dic_button = doc.getById(arr_buttons[i]);
     424                        var dic_button = doc.getById(arr_buttons[i]);
    406425                        if ( dic_button )
    407426                                dic_button.on( 'click', onDicButtonClick, this );
    408427                }
     
    411430        var reload = function()
    412431        {
    413432                var dialog = this;
     433                // for enabled options tab
     434                if (tags[0] == 1){
     435                        var opto = getBOMAllOptions();
    414436
    415                 // Animate options.
    416                 for ( var i in dialog.options )
    417                 {
    418                         var checkbox = doc.getById( i );
    419                         if ( checkbox )
     437                        // Animate options.
     438                        for ( var k=0,l = opto.length; k<l;k++ )
    420439                        {
    421                                 checkbox.removeAttribute( 'checked' );
    422                                 if ( dialog.options[ i ] == 1 )
    423                                         checkbox.setAttribute( 'checked', 'checked' );
    424440
    425                                 // Bind events. Do it only once.
    426                                 if ( firstLoad )
     441                                var i = opto[k].id;
     442                                var checkbox = doc.getById( i );
     443
     444                                if ( checkbox )
    427445                                {
    428                                         checkbox.on( 'click', function()
     446                                        opto[k].checked = false;
     447                                        //alert (opto[k].removeAttribute)
     448                                        if ( dialog.options[ i ] == 1 )
     449                                        {
     450                                                opto[k].checked = true;
     451                                        }
     452
     453
     454                                        // Bind events. Do it only once.
     455                                        if ( firstLoad )
     456                                        {
     457                                                checkbox.on( 'click', function()
    429458                                                {
    430459                                                        dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
    431                                                 } );
     460                                                });
     461                                        }
    432462                                }
    433463                        }
    434464                }
    435465
     466                //for enabled languages tab
     467                if ( tags[1] == 1 )
     468                {
     469                        var domLang = doc.getById("cke_option"+dialog.sLang);
     470                        setCheckedValue(domLang.$,dialog.sLang);
     471                }
     472
    436473                // * user dictionary
    437                 if ( userDicActive ){
     474                if ( userDicActive )
     475                {
    438476                        window.scayt.getNameUserDictionary(
    439                         function( o )
    440                         {
    441                                 var dic_name = o.dname;
    442                                 if ( dic_name )
     477                                function( o )
    443478                                {
    444                                         doc.getById( 'dic_name' ).setValue(dic_name);
    445                                         display_dic_buttons( dic_buttons[1] );
    446                                 }
    447                                 else
    448                                         display_dic_buttons( dic_buttons[0] );
     479                                        var dic_name = o.dname;
     480                                        hide_dic_buttons( dic_buttons[0] + ',' + dic_buttons[1] );
     481                                        if ( dic_name )
     482                                        {
     483                                                doc.getById( 'dic_name' ).setValue(dic_name);
     484                                                display_dic_buttons( dic_buttons[1] );
     485                                        }
     486                                        else
     487                                                display_dic_buttons( dic_buttons[0] );
    449488
    450                         },
    451                         function ()
    452                         {
    453                                 doc.getById( 'dic_name' ).setValue("");
    454                         });
     489                                },
     490                                function ()
     491                                {
     492                                        doc.getById( 'dic_name' ).setValue("");
     493                                });
    455494                        dic_success_message("");
    456495                }
    457496
    458497        };
    459498
    460499        function dic_error_message ( m )
     500        {
     501                doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
     502        }
     503        function dic_success_message ( m )
     504        {
     505                doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
     506        }
     507        function display_dic_buttons ( sIds )
     508        {
     509
     510                sIds = String( sIds );
     511                var aIds = sIds.split(',');
     512                for ( var i=0, l = aIds.length; i < l ; i+=1)
    461513                {
    462                         doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
     514                        doc.getById( aIds[i] ).$.style.display = "inline";
    463515                }
    464     function dic_success_message ( m )
    465                 {
    466                         doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
    467                 }
    468         function display_dic_buttons ( sIds )
    469                 {
    470516
    471                         sIds = String( sIds );
    472                         var aIds = sIds.split(',');
    473                         for ( var i=0, l = aIds.length; i < l ; i+=1)
    474                         {
    475                                 doc.getById( aIds[i] ).$.style.display = "inline";
    476                         }
    477 
    478                 }
     517        }
    479518        function hide_dic_buttons ( sIds )
     519        {
     520                sIds = String( sIds );
     521                var aIds = sIds.split(',');
     522                for ( var i = 0, l = aIds.length; i < l ; i += 1 )
    480523                {
    481                         sIds = String( sIds );
    482                         var aIds = sIds.split(',');
    483                         for ( var i = 0, l = aIds.length; i < l ; i += 1 )
    484                         {
    485                                 doc.getById( aIds[i] ).$.style.display = "none";
    486                         }
     524                        doc.getById( aIds[i] ).$.style.display = "none";
    487525                }
     526        }
    488527        function set_dic_name ( dic_name )
    489                 {
    490                         doc.getById('dic_name').$.value= dic_name;
    491                 }
     528        {
     529                doc.getById('dic_name').$.value= dic_name;
     530        }
    492531
    493532        return dialogDefiniton;
    494533});
  • _source/plugins/scayt/plugin.js

     
    1111(function()
    1212{
    1313        var commandName         = 'scaytcheck',
    14                 openPage                = '';
     14                openPage                = '',
     15                scayt_paused    = null;
    1516
     17        // Checks if a value exists in an array
     18        function in_array(needle, haystack)
     19        {
     20                var found = false, key;
     21                for (key in haystack)
     22                {
     23                        if ((haystack[key] === needle) || ( haystack[key] == needle))
     24                        {
     25                                found = true;
     26                                break;
     27                        }
     28                }
     29                return found;
     30        }
     31
    1632        var onEngineLoad = function()
    1733        {
    1834                var editor = this;
     
    2440                        oParams.srcNodeRef = editor.document.getWindow().$.frameElement;                // Get the iframe.
    2541                        // syntax : AppName.AppVersion@AppRevision
    2642                        oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;
    27 
    28                         oParams.customerid = editor.config.scayt_customerid  || "1:11111111111111111111111111111111111111";
    29                         oParams.customDictionaryName = editor.config.scayt_customDictionaryName;
     43                        oParams.customerid = editor.config.scayt_customerid  || "1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2";
     44                        oParams.customDictionaryIds = editor.config.scayt_customDictionaryIds;
    3045                        oParams.userDictionaryName = editor.config.scayt_userDictionaryName;
    31                         oParams.defLang = editor.scayt_defLang;
     46                        oParams.sLang = editor.config.scayt_sLang || "en_US";
    3247
    3348                        if ( CKEDITOR._scaytParams )
    3449                        {
     
    5166
    5267                        plugin.instances[ editor.name ] = scayt_control;
    5368
     69                        //window.scayt.uiTags
     70                        var menuGroup = 'scaytButton';
     71                        var uiTabs = window.scayt.uiTags;
     72                        var fTabs  = [];
     73
     74                        for (var i = 0,l=4; i<l; i++)
     75                                fTabs.push( uiTabs[i] && plugin.uiTabs[i] );
     76
     77                        plugin.uiTabs = fTabs;
    5478                        try {
    55                                 scayt_control.setDisabled( scayt_control.paused === false );                            // I really don't know why it causes JS error in IE
     79                                scayt_control.setDisabled( scayt_paused === false );
    5680                        } catch (e) {}
     81
    5782                        editor.fire( 'showScaytState' );
    5883                };
    5984
     
    83108                                        var scayt_instanse = plugin.getScayt( editor );
    84109                                        if ( scayt_instanse )
    85110                                        {
    86                                                 scayt_instanse.paused = !scayt_instanse.disabled;
     111                                                scayt_paused = scayt_instanse.paused = !scayt_instanse.disabled;
    87112                                                scayt_instanse.destroy();
    88113                                                delete plugin.instances[ editor.name ];
    89114                                        }
    90115                                }
    91116                        });
    92117
     118
     119                editor.on( 'destroy', function()
     120                        {
     121                                plugin.getScayt( editor ).destroy();
     122                        });
    93123                // Listen to data manipulation to reflect scayt markup.
    94124                editor.on( 'afterSetData', function()
    95125                        {
     
    116146                                }
    117147                        }, this, null, 50 );
    118148
     149                editor.on( 'insertHtml', function()
     150                        {
     151
     152                                var scayt_instance = plugin.getScayt( editor );
     153                                if ( plugin.isScaytEnabled( editor ) )
     154                                {
     155                                        // Unlock the selection before reload, SCAYT will take
     156                                        // care selection update.
     157                                        if ( CKEDITOR.env.ie )
     158                                                editor.getSelection().unlock( true );
     159
     160                                        // Swallow any SCAYT engine errors.
     161                                        try{
     162                                                scayt_instance.refresh();
     163                                        }catch( er )
     164                                        {}
     165                                }
     166                        }, this, null, 50 );
     167
    119168                editor.on( 'scaytDialog', function( ev )        // Communication with dialog.
    120169                        {
    121170                                ev.data.djConfig = window.djConfig;
     
    189238                        var protocol = document.location.protocol;
    190239                        // Default to 'http' for unknown.
    191240                        protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
    192                         var baseUrl  = "svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js";
     241                        var baseUrl  = "svc.spellchecker.net/spellcheck3/lf/scayt/scayt21.js";
    193242
    194243                        var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + "//" + baseUrl );
    195244                        var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  "/";
     
    300349
    301350                        // Add Options dialog.
    302351                        CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );
     352                        // read ui tags
     353                        var confuiTabs = editor.config.scayt_uiTabs || "1,1,1";
     354                        var uiTabs =[];
     355                        // string tp array convert
     356                        confuiTabs = confuiTabs.split(",");
     357                        // check array length ! allwaays must be 3 filled with 1 or 0
     358                        for (var i=0,l=3; i<l; i++){
     359                                var flag = parseInt(confuiTabs[i] || "1" ,10);
     360                                uiTabs.push(  flag  );
     361                        }
    303362
    304363                        var menuGroup = 'scaytButton';
    305364                        editor.addMenuGroup( menuGroup );
    306                         editor.addMenuItems(
     365                        // combine menu items to render
     366                        var uiMuneItems = {};
     367
     368                        // allways added
     369                        uiMuneItems.scaytToggle =
    307370                                {
    308                                         scaytToggle :
    309                                         {
    310                                                 label : editor.lang.scayt.enable,
    311                                                 command : commandName,
    312                                                 group : menuGroup
    313                                         },
     371                                        label : editor.lang.scayt.enable,
     372                                        command : commandName,
     373                                        group : menuGroup
     374                                };
    314375
    315                                         scaytOptions :
     376                        if (uiTabs[0] == 1)
     377                                uiMuneItems.scaytOptions =
     378                                {
     379                                        label : editor.lang.scayt.options,
     380                                        group : menuGroup,
     381                                        onClick : function()
    316382                                        {
    317                                                 label : editor.lang.scayt.options,
    318                                                 group : menuGroup,
    319                                                 onClick : function()
    320                                                 {
    321                                                         openPage = 'options';
    322                                                         editor.openDialog( commandName );
    323                                                 }
    324                                         },
     383                                                openPage = 'options';
     384                                                editor.openDialog( commandName );
     385                                        }
     386                                };
    325387
    326                                         scaytLangs :
     388                        if (uiTabs[1] == 1)
     389                                uiMuneItems.scaytLangs =
     390                                {
     391                                        label : editor.lang.scayt.langs,
     392                                        group : menuGroup,
     393                                        onClick : function()
    327394                                        {
    328                                                 label : editor.lang.scayt.langs,
    329                                                 group : menuGroup,
    330                                                 onClick : function()
    331                                                 {
    332                                                         openPage = 'langs';
    333                                                         editor.openDialog( commandName );
    334                                                 }
    335                                         },
    336 
    337                                         scaytAbout :
     395                                                openPage = 'langs';
     396                                                editor.openDialog( commandName );
     397                                        }
     398                                };
     399                        if (uiTabs[2] == 1)
     400                                uiMuneItems.scaytDict =
     401                                {
     402                                        label : editor.lang.scayt.dictionariesTab,
     403                                        group : menuGroup,
     404                                        onClick : function()
    338405                                        {
    339                                                 label : editor.lang.scayt.about,
    340                                                 group : menuGroup,
    341                                                 onClick : function()
    342                                                 {
    343                                                         openPage = 'about';
    344                                                         editor.openDialog( commandName );
    345                                                 }
     406                                                openPage = 'dictionaries';
     407                                                editor.openDialog( commandName );
    346408                                        }
    347                                 });
     409                                };
     410                        // allways added
     411                        uiMuneItems.scaytAbout =
     412                                {
     413                                        label : editor.lang.scayt.about,
     414                                        group : menuGroup,
     415                                        onClick : function()
     416                                        {
     417                                                openPage = 'about';
     418                                                editor.openDialog( commandName );
     419                                        }
     420                                }
     421                        ;
    348422
     423                        uiTabs[3] = 1; // about us tab is allways on
     424                        plugin.uiTabs = uiTabs;
     425
     426                        editor.addMenuItems( uiMuneItems );
     427
    349428                                editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
    350429                                        {
    351430                                                label : editor.lang.scayt.title,
     
    353432                                                className : 'cke_button_scayt',
    354433                                                onRender: function()
    355434                                                {
    356                                                 command.on( 'state', function()
     435                                                        command.on( 'state', function()
    357436                                                        {
    358437                                                                this.setState( command.state );
    359438                                                        },
    360439                                                        this);
    361                                         },
    362                                         onMenu : function()
    363                                         {
    364                                                 var isEnabled = plugin.isScaytEnabled( editor );
     440                                                },
     441                                                onMenu : function()
     442                                                {
     443                                                        var isEnabled = plugin.isScaytEnabled( editor );
    365444
    366                                                 editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
     445                                                        editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
    367446
    368447                                                        return {
    369                                                                 scaytToggle : CKEDITOR.TRISTATE_OFF,
    370                                                                 scaytOptions : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
    371                                                                 scaytLangs : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
    372                                                                 scaytAbout : isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
     448                                                                scaytToggle  : CKEDITOR.TRISTATE_OFF,
     449                                                                scaytOptions : isEnabled && plugin.uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     450                                                                scaytLangs   : isEnabled && plugin.uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     451                                                                scaytDict    : isEnabled && plugin.uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     452                                                                scaytAbout   : isEnabled && plugin.uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
    373453                                                        };
    374454                                                }
    375455                                        });
     
    407487                                                moreSuggestions = {};           // Reset items.
    408488                                                mainSuggestions = {};
    409489
    410                                                 var moreSuggestionsUnable = false;
     490                                                var moreSuggestionsUnable = editor.config.scayt_moreSuggestions || "on";
     491                                                var moreSuggestionsUnableAdded = false;
    411492
     493                                                var maxSuggestions = editor.config.scayt_maxSuggestions;
     494                                                ( typeof maxSuggestions != 'number' ) && ( maxSuggestions = 5 );
     495                                                !maxSuggestions && ( maxSuggestions = items_suggestion.length );
     496
     497                                                var contextCommands = editor.config.scayt_contextCommands || "all";
     498                                                contextCommands = contextCommands.split("|");
     499
    412500                                                for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )
    413501                                                {
    414502                                                        var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' );
     
    422510                                                                        };
    423511                                                                })( element.$, items_suggestion[i] );
    424512
    425                                                         if ( i < editor.config.scayt_maxSuggestions )
     513                                                        if ( i < maxSuggestions )
    426514                                                        {
    427515                                                                addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
    428516                                                                        commandName, exec, 'scayt_suggest', i + 1 );
    429517                                                                _r[ commandName ] = CKEDITOR.TRISTATE_OFF;
    430518                                                                mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
    431519                                                        }
    432                                                         else
     520                                                        else if ( moreSuggestionsUnable == "on" )
    433521                                                        {
    434522                                                                addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
    435523                                                                        commandName, exec, 'scayt_moresuggest', i + 1 );
    436524                                                                moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
    437                                                                 moreSuggestionsUnable = true;
     525                                                                moreSuggestionsUnableAdded = true;
    438526                                                        }
    439527                                                }
    440                                                 if ( moreSuggestionsUnable )
     528
     529                                                if ( moreSuggestionsUnableAdded ){
    441530                                                        // Rgister the More suggestions group;
    442531                                                        editor.addMenuItem( 'scayt_moresuggest',
     532                                                        {
     533                                                                label : editor.lang.scayt.moreSuggestions,
     534                                                                group : 'scayt_moresuggest',
     535                                                                order : 10,
     536                                                                getItems : function()
    443537                                                                {
    444                                                                         label : editor.lang.scayt.moreSuggestions,
    445                                                                         group : 'scayt_moresuggest',
    446                                                                         order : 10,
    447                                                                         getItems : function()
    448                                                                         {
    449                                                                                 return moreSuggestions;
    450                                                                         }
    451                                                                 });
     538                                                                        return moreSuggestions;
     539                                                                }
     540                                                        });
     541                                                        mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF;
    452542
     543                                                }
    453544
    454                                                 var ignore_command =
     545                                                if ( in_array( "all",contextCommands )  || in_array("ignore",contextCommands)  )
    455546                                                {
    456                                                         exec: function()
    457                                                         {
    458                                                                 scayt_control.ignore( element.$ );
    459                                                         }
    460                                                 };
    461                                                 var ignore_all_command =
     547                                                        var ignore_command = {
     548                                                                exec: function(){
     549                                                                        scayt_control.ignore(element.$);
     550                                                                }
     551                                                        };
     552                                                        addButtonCommand(editor, 'ignore', editor.lang.scayt.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1);
     553                                                        mainSuggestions['scayt_ignore'] = CKEDITOR.TRISTATE_OFF;
     554                                                }
     555
     556                                                if ( in_array( "all",contextCommands )  || in_array("ignoreall",contextCommands)  )
    462557                                                {
    463                                                         exec: function()
    464                                                         {
    465                                                                 scayt_control.ignoreAll( element.$ );
    466                                                         }
    467                                                 };
    468                                                 var addword_command =
     558                                                        var ignore_all_command = {
     559                                                                exec: function(){
     560                                                                        scayt_control.ignoreAll(element.$);
     561                                                                }
     562                                                        };
     563                                                        addButtonCommand(editor, 'ignore_all', editor.lang.scayt.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
     564                                                        mainSuggestions['scayt_ignore_all'] = CKEDITOR.TRISTATE_OFF;
     565                                                }
     566
     567                                                if ( in_array( "all",contextCommands )  || in_array("add",contextCommands)  )
    469568                                                {
    470                                                         exec: function()
    471                                                         {
    472                                                                 window.scayt.addWordToUserDictionary( element.$ );
    473                                                         }
    474                                                 };
     569                                                        var addword_command = {
     570                                                                exec: function(){
     571                                                                        window.scayt.addWordToUserDictionary(element.$);
     572                                                                }
     573                                                        };
     574                                                        addButtonCommand(editor, 'add_word', editor.lang.scayt.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);
     575                                                        mainSuggestions['scayt_add_word'] = CKEDITOR.TRISTATE_OFF;
     576                                                }
    475577
    476                                                 addButtonCommand( editor, 'ignore', editor.lang.scayt.ignore,
    477                                                         'scayt_ignore', ignore_command, 'scayt_control', 1);
    478                                                 addButtonCommand( editor, 'ignore_all', editor.lang.scayt.ignoreAll,
    479                                                         'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
    480                                                 addButtonCommand( editor, 'add_word', editor.lang.scayt.addWord,
    481                                                         'scayt_add_word', addword_command, 'scayt_control', 3);
    482 
    483                                                 mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF;
    484                                                 mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF;
    485                                                 mainSuggestions[ 'scayt_ignore_all' ] = CKEDITOR.TRISTATE_OFF;
    486                                                 mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF;
    487 
    488578                                                if ( scayt_control.fireOnContextMenu )
    489579                                                        scayt_control.fireOnContextMenu( editor );
    490580
     
    508598        });
    509599})();
    510600
    511 CKEDITOR.config.scayt_maxSuggestions =  5;
    512 CKEDITOR.config.scayt_autoStartup = false;
     601// TODO: Documentation
     602// CKEDITOR.config.scayt_maxSuggestions
     603// CKEDITOR.config.scayt_autoStartup
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy