Ticket #4814: #4814_4.patch

File #4814_4.patch, 61.1 KB (added by WebSpellChecker.net, 9 years ago)
  • plugin.js

     
    44*/
    55
    66/**
    7  * @fileOverview Spell Check As You Type (SCAYT).
    8  * Button name : Scayt.
    9  */
     7* @fileOverview Spell Check As You Type (SCAYT).
     8* Button name : Scayt.
     9*/
    1010
    1111(function()
    1212{
    13         var commandName         = 'scaytcheck',
    14                 openPage                = '';
     13    var commandName     = 'scaytcheck',
     14        openPage                = '',
     15        scayt_paused    = null;
     16   
     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   
     32    var onEngineLoad = function()
     33    {
     34        var editor = this;
    1535
    16         var onEngineLoad = function()
    17         {
    18                 var editor = this;
     36        var createInstance = function() // Create new instance every time Document is created.
     37        {
     38            // Initialise Scayt instance.
     39            var oParams = {};
     40            oParams.srcNodeRef = editor.document.getWindow().$.frameElement;            // Get the iframe.
     41            // syntax : AppName.AppVersion@AppRevision
     42            oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;
     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;
     45            oParams.userDictionaryName = editor.config.scayt_userDictionaryName;
     46            oParams.sLang = editor.config.scayt_sLang || "en_US";
     47           
     48           
     49           
     50            if ( CKEDITOR._scaytParams )
     51            {
     52                for ( var k in CKEDITOR._scaytParams )
     53                {
     54                    oParams[ k ] = CKEDITOR._scaytParams[ k ];
     55                }
     56            }
    1957
    20                 var createInstance = function() // Create new instance every time Document is created.
    21                 {
    22                         // Initialise Scayt instance.
    23                         var oParams = {};
    24                         oParams.srcNodeRef = editor.document.getWindow().$.frameElement;                // Get the iframe.
    25                         // syntax : AppName.AppVersion@AppRevision
    26                         oParams.assocApp  = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision;
     58            var scayt_control = new window.scayt( oParams );
    2759
    28                         oParams.customerid = editor.config.scayt_customerid  || "1:11111111111111111111111111111111111111";
    29                         oParams.customDictionaryName = editor.config.scayt_customDictionaryName;
    30                         oParams.userDictionaryName = editor.config.scayt_userDictionaryName;
    31                         oParams.defLang = editor.scayt_defLang;
     60            // Copy config.
     61            var lastInstance = plugin.instances[ editor.name ];
     62            if ( lastInstance )
     63            {
     64                scayt_control.sLang = lastInstance.sLang;
     65                scayt_control.option( lastInstance.option() );
     66                scayt_control.paused = lastInstance.paused;
     67            }
    3268
    33                         if ( CKEDITOR._scaytParams )
    34                         {
    35                                 for ( var k in CKEDITOR._scaytParams )
    36                                 {
    37                                         oParams[ k ] = CKEDITOR._scaytParams[ k ];
    38                                 }
    39                         }
     69            plugin.instances[ editor.name ] = scayt_control;
     70           
     71            //window.scayt.uiTags
     72            var menuGroup = 'scaytButton';
     73            var uiTabs = window.scayt.uiTags;
     74            var fTabs  = [];
     75           
     76            for (var i = 0,l=4; i<l; i++)
     77                fTabs.push( uiTabs[i] && plugin.uiTabs[i] );
     78           
     79            plugin.uiTabs = fTabs;
     80            try {
     81                scayt_control.setDisabled( scayt_paused === false );
     82            } catch (e) {}
     83           
     84            editor.fire( 'showScaytState' );
     85        };
    4086
    41                         var scayt_control = new window.scayt( oParams );
     87        editor.on( 'contentDom', createInstance );
     88        editor.on( 'contentDomUnload', function()
     89            {
     90                // Remove scripts.
     91                var scripts = CKEDITOR.document.getElementsByTag( 'script' ),
     92                    scaytIdRegex =  /^dojoIoScript(\d+)$/i,
     93                    scaytSrcRegex =  /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;
    4294
    43                         // Copy config.
    44                         var     lastInstance = plugin.instances[ editor.name ];
    45                         if ( lastInstance )
    46                         {
    47                                 scayt_control.sLang = lastInstance.sLang;
    48                                 scayt_control.option( lastInstance.option() );
    49                                 scayt_control.paused = lastInstance.paused;
    50                         }
     95                for ( var i=0; i < scripts.count(); i++ )
     96                {
     97                    var script = scripts.getItem( i ),
     98                        id = script.getId(),
     99                        src = script.getAttribute( 'src' );
    51100
    52                         plugin.instances[ editor.name ] = scayt_control;
     101                    if ( id && src && id.match( scaytIdRegex ) && src.match( scaytSrcRegex ))
     102                        script.remove();
     103                }
     104            });
    53105
    54                         try {
    55                                 scayt_control.setDisabled( scayt_control.paused === false );                            // I really don't know why it causes JS error in IE
    56                         } catch (e) {}
    57                         editor.fire( 'showScaytState' );
    58                 };
     106        editor.on( 'beforeCommandExec', function( ev )          // Disable SCAYT before Source command execution.
     107        {
     108            if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )
     109            {
     110                var scayt_instanse = plugin.getScayt( editor );
     111                if ( scayt_instanse )
     112                {
     113                    scayt_paused = scayt_instanse.paused = !scayt_instanse.disabled;
     114                    scayt_instanse.destroy();
     115                    delete plugin.instances[ editor.name ];
     116                }
     117            }
     118        });
     119       
    59120
    60                 editor.on( 'contentDom', createInstance );
    61                 editor.on( 'contentDomUnload', function()
    62                         {
    63                                 // Remove scripts.
    64                                 var scripts = CKEDITOR.document.getElementsByTag( 'script' ),
    65                                         scaytIdRegex =  /^dojoIoScript(\d+)$/i,
    66                                         scaytSrcRegex =  /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i;
     121        editor.on( 'destroy', function()
     122        {
     123            plugin.getScayt( editor ).destroy();
     124        });
     125        // Listen to data manipulation to reflect scayt markup.
     126        editor.on( 'afterSetData', function()
     127        {
     128            if ( plugin.isScaytEnabled( editor ) )
     129                plugin.getScayt( editor ).refresh();
     130        });
    67131
    68                                 for ( var i=0; i < scripts.count(); i++ )
    69                                 {
    70                                         var script = scripts.getItem( i ),
    71                                                 id = script.getId(),
    72                                                 src = script.getAttribute( 'src' );
     132        // Reload spell-checking for current word after insertion completed.
     133        editor.on( 'insertElement', function()
     134        {
     135            var scayt_instance = plugin.getScayt( editor );
     136            if ( plugin.isScaytEnabled( editor ) )
     137            {
     138                // Unlock the selection before reload, SCAYT will take
     139                // care selection update.
     140                if ( CKEDITOR.env.ie )
     141                    editor.getSelection().unlock( true );
    73142
    74                                         if ( id && src && id.match( scaytIdRegex ) && src.match( scaytSrcRegex ))
    75                                                 script.remove();
    76                                 }
    77                         });
     143                // Swallow any SCAYT engine errors.
     144                try{
     145                    scayt_instance.refresh();
     146                }catch( er )
     147                {}
     148            }
     149        }, this, null, 50 );
    78150
    79                 editor.on( 'beforeCommandExec', function( ev )          // Disable SCAYT before Source command execution.
    80                         {
    81                                 if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )
    82                                 {
    83                                         var scayt_instanse = plugin.getScayt( editor );
    84                                         if ( scayt_instanse )
    85                                         {
    86                                                 scayt_instanse.paused = !scayt_instanse.disabled;
    87                                                 scayt_instanse.destroy();
    88                                                 delete plugin.instances[ editor.name ];
    89                                         }
    90                                 }
    91                         });
     151        editor.on( 'insertHtml', function()
     152        {
     153           
     154            var scayt_instance = plugin.getScayt( editor );
     155            if ( plugin.isScaytEnabled( editor ) )
     156            {
     157                // Unlock the selection before reload, SCAYT will take
     158                // care selection update.
     159                if ( CKEDITOR.env.ie )
     160                    editor.getSelection().unlock( true );
    92161
    93                 // Listen to data manipulation to reflect scayt markup.
    94                 editor.on( 'afterSetData', function()
    95                         {
    96                                 if ( plugin.isScaytEnabled( editor ) )
    97                                         plugin.getScayt( editor ).refresh();
    98                         });
     162                // Swallow any SCAYT engine errors.
     163                try{
     164                    scayt_instance.refresh();
     165                }catch( er )
     166                {}
     167            }
     168        }, this, null, 50 );
    99169
    100                 // Reload spell-checking for current word after insertion completed.
    101                 editor.on( 'insertElement', function()
    102                         {
    103                                 var scayt_instance = plugin.getScayt( editor );
    104                                 if ( plugin.isScaytEnabled( editor ) )
    105                                 {
    106                                         // Unlock the selection before reload, SCAYT will take
    107                                         // care selection update.
    108                                         if ( CKEDITOR.env.ie )
    109                                                 editor.getSelection().unlock( true );
    110170
    111                                         // Swallow any SCAYT engine errors.
    112                                         try{
    113                                                 scayt_instance.refresh();
    114                                         }catch( er )
    115                                         {}
    116                                 }
    117                         }, this, null, 50 );
    118171
    119                 editor.on( 'scaytDialog', function( ev )        // Communication with dialog.
    120                         {
    121                                 ev.data.djConfig = window.djConfig;
    122                                 ev.data.scayt_control = plugin.getScayt( editor );
    123                                 ev.data.tab = openPage;
    124                                 ev.data.scayt = window.scayt;
    125                         });
     172        editor.on( 'scaytDialog', function( ev )        // Communication with dialog.
     173        {
     174            ev.data.djConfig = window.djConfig;
     175            ev.data.scayt_control = plugin.getScayt( editor );
     176            ev.data.tab = openPage;
     177            ev.data.scayt = window.scayt;
     178        });
    126179
    127                 var dataProcessor = editor.dataProcessor,
    128                         htmlFilter = dataProcessor && dataProcessor.htmlFilter;
    129                 if ( htmlFilter )
    130                 {
    131                         htmlFilter.addRules(
    132                                 {
    133                                         elements :
    134                                         {
    135                                                 span : function( element )
    136                                                 {
    137                                                         if ( element.attributes.scayt_word && element.attributes.scaytid )
    138                                                         {
    139                                                                 delete element.name;    // Write children, but don't write this node.
    140                                                                 return element;
    141                                                         }
    142                                                 }
    143                                         }
    144                                 }
    145                         );
    146                 }
     180        var dataProcessor = editor.dataProcessor,
     181            htmlFilter = dataProcessor && dataProcessor.htmlFilter;
     182        if ( htmlFilter )
     183        {
     184            htmlFilter.addRules(
     185                {
     186                    elements :
     187                    {
     188                        span : function( element )
     189                        {
     190                            if ( element.attributes.scayt_word && element.attributes.scaytid )
     191                            {
     192                                delete element.name;    // Write children, but don't write this node.
     193                                return element;
     194                            }
     195                        }
     196                    }
     197                }
     198            );
     199        }
    147200
    148                 if ( editor.document )
    149                         createInstance();
    150         };
     201        if ( editor.document )
     202            createInstance();
     203    };
    151204
    152         CKEDITOR.plugins.scayt =
    153         {
    154                 engineLoaded : false,
    155                 instances : {},
    156                 getScayt : function( editor )
    157                 {
    158                         return this.instances[ editor.name ];
    159                 },
    160                 isScaytReady : function( editor )
    161                 {
    162                         return this.engineLoaded === true &&
    163                                 'undefined' !== typeof window.scayt && this.getScayt( editor );
    164                 },
    165                 isScaytEnabled : function( editor )
    166                 {
    167                         var scayt_instanse = this.getScayt( editor );
    168                         return ( scayt_instanse ) ? scayt_instanse.disabled === false : false;
    169                 },
    170                 loadEngine : function( editor )
    171                 {
    172                         if ( this.engineLoaded === true )
    173                                 return onEngineLoad.apply( editor );    // Add new instance.
    174                         else if ( this.engineLoaded == -1 )                     // We are waiting.
    175                                 return CKEDITOR.on( 'scaytReady', function(){ onEngineLoad.apply( editor );} ); // Use function(){} to avoid rejection as duplicate.
     205    CKEDITOR.plugins.scayt =
     206    {
     207        engineLoaded : false,
     208        instances : {},
     209        getScayt : function( editor )
     210        {
     211            return this.instances[ editor.name ];
     212        },
     213        isScaytReady : function( editor )
     214        {
     215            return this.engineLoaded === true &&
     216                'undefined' !== typeof window.scayt && this.getScayt( editor );
     217        },
     218        isScaytEnabled : function( editor )
     219        {
     220            var scayt_instanse = this.getScayt( editor );
     221            return ( scayt_instanse ) ? scayt_instanse.disabled === false : false;
     222        },
     223        loadEngine : function( editor )
     224        {
     225            if ( this.engineLoaded === true )
     226                return onEngineLoad.apply( editor );    // Add new instance.
     227            else if ( this.engineLoaded == -1 )                 // We are waiting.
     228                return CKEDITOR.on( 'scaytReady', function(){ onEngineLoad.apply( editor );} ); // Use function(){} to avoid rejection as duplicate.
    176229
    177                         CKEDITOR.on( 'scaytReady', onEngineLoad, editor );
    178                         CKEDITOR.on( 'scaytReady', function()
    179                                 {
    180                                         this.engineLoaded = true;
    181                                 },
    182                                 this,
    183                                 null,
    184                                 0 );    // First to run.
     230            CKEDITOR.on( 'scaytReady', onEngineLoad, editor );
     231            CKEDITOR.on( 'scaytReady', function()
     232            {
     233                this.engineLoaded = true;
     234            },
     235            this,
     236            null,
     237            0 );// First to run.
    185238
    186                         this.engineLoaded = -1; // Loading in progress.
     239            this.engineLoaded = -1;     // Loading in progress.
    187240
    188                         // compose scayt url
    189                         var protocol = document.location.protocol;
    190                         // Default to 'http' for unknown.
    191                         protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
    192                         var baseUrl  = "svc.spellchecker.net/spellcheck/lf/scayt/scayt1.js";
     241            // compose scayt url
     242            var protocol = document.location.protocol;
     243            // Default to 'http' for unknown.
     244            protocol = protocol.search( /https?:/) != -1? protocol : 'http:';
     245            var baseUrl  = "svc.spellchecker.net/spellcheck3/lf/scayt/scayt21.js";
    193246
    194                         var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + "//" + baseUrl );
    195                         var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  "/";
     247            var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + "//" + baseUrl );
     248            var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  "/";
    196249
    197                         CKEDITOR._djScaytConfig =
    198                         {
    199                                 baseUrl: scaytConfigBaseUrl,
    200                                 addOnLoad:
    201                                 [
    202                                         function()
    203                                         {
    204                                                 CKEDITOR.fireOnce( "scaytReady" );
    205                                         }
    206                                 ],
    207                                 isDebug: false
    208                         };
    209                         // Append javascript code.
    210                         CKEDITOR.document.getHead().append(
    211                                 CKEDITOR.document.createElement( 'script',
    212                                         {
    213                                                 attributes :
    214                                                         {
    215                                                                 type : 'text/javascript',
    216                                                                 src : scaytUrl
    217                                                         }
    218                                         })
    219                         );
     250            CKEDITOR._djScaytConfig =
     251            {
     252                baseUrl: scaytConfigBaseUrl,
     253                addOnLoad:
     254                [
     255                    function()
     256                    {
     257                        CKEDITOR.fireOnce( "scaytReady" );
     258                    }
     259                ],
     260                isDebug: false
     261            };
     262            // Append javascript code.
     263            CKEDITOR.document.getHead().append(
     264                CKEDITOR.document.createElement( 'script',
     265                    {
     266                        attributes :
     267                            {
     268                                type : 'text/javascript',
     269                                src : scaytUrl
     270                            }
     271                    })
     272            );
    220273
    221                         return null;
    222                 },
    223                 parseUrl : function ( data )
    224                 {
    225                         var match;
    226                         if ( data.match && ( match = data.match(/(.*)[\/\\](.*?\.\w+)$/) ) )
    227                                 return { path: match[1], file: match[2] };
    228                         else
    229                                 return data;
    230                 }
    231         };
     274            return null;
     275        },
     276        parseUrl : function ( data )
     277        {
     278            var match;
     279            if ( data.match && ( match = data.match(/(.*)[\/\\](.*?\.\w+)$/) ) )
     280                return { path: match[1], file: match[2] };
     281            else
     282                return data;
     283        }
     284    };
    232285
    233         var plugin = CKEDITOR.plugins.scayt;
     286    var plugin = CKEDITOR.plugins.scayt;
    234287
    235         // Context menu constructing.
    236         var addButtonCommand = function( editor, buttonName, buttonLabel, commandName, command, menugroup, menuOrder )
    237         {
    238                 editor.addCommand( commandName, command );
     288    // Context menu constructing.
     289    var addButtonCommand = function( editor, buttonName, buttonLabel, commandName, command, menugroup, menuOrder )
     290    {
     291        editor.addCommand( commandName, command );
    239292
    240                 // If the "menu" plugin is loaded, register the menu item.
    241                 editor.addMenuItem( commandName,
    242                         {
    243                                 label : buttonLabel,
    244                                 command : commandName,
    245                                 group : menugroup,
    246                                 order : menuOrder
    247                         });
    248         };
     293        // If the "menu" plugin is loaded, register the menu item.
     294        editor.addMenuItem( commandName,
     295            {
     296                label : buttonLabel,
     297                command : commandName,
     298                group : menugroup,
     299                order : menuOrder
     300            });
     301    };
    249302
    250         var commandDefinition =
    251         {
    252                 preserveState : true,
    253                 editorFocus : false,
     303    var commandDefinition =
     304    {
     305        preserveState : true,
     306        editorFocus : false,
    254307
    255                 exec: function( editor )
    256                 {
    257                         if ( plugin.isScaytReady( editor ) )
    258                         {
    259                                 var isEnabled = plugin.isScaytEnabled( editor );
     308        exec: function( editor )
     309        {
     310            if ( plugin.isScaytReady( editor ) )
     311            {
     312                var isEnabled = plugin.isScaytEnabled( editor );
    260313
    261                                 this.setState( isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON );
     314                this.setState( isEnabled ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_ON );
    262315
    263                                 var scayt_control = plugin.getScayt( editor );
    264                                 scayt_control.setDisabled( isEnabled );
    265                         }
    266                         else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )        // Load first time
    267                         {
    268                                 this.setState( CKEDITOR.TRISTATE_DISABLED );
     316                var scayt_control = plugin.getScayt( editor );
     317                scayt_control.setDisabled( isEnabled );
     318            }
     319            else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )    // Load first time
     320            {
     321                this.setState( CKEDITOR.TRISTATE_DISABLED );
    269322
    270                                 editor.on( 'showScaytState', function()
    271                                         {
    272                                                 this.removeListener();
    273                                                 this.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
    274                                         },
    275                                         this);
     323                editor.on( 'showScaytState', function()
     324                    {
     325                        this.removeListener();
     326                        this.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
     327                    },
     328                    this);
    276329
    277                                 plugin.loadEngine( editor );
    278                         }
    279                 }
    280         };
     330                plugin.loadEngine( editor );
     331            }
     332        }
     333    };
    281334
    282         // Add scayt plugin.
    283         CKEDITOR.plugins.add( 'scayt',
    284         {
    285                 requires : [ 'menubutton' ],
     335    // Add scayt plugin.
     336    CKEDITOR.plugins.add( 'scayt',
     337    {
     338        requires : [ 'menubutton' ],
    286339
    287                 beforeInit : function( editor )
    288                 {
    289                         // Register own rbc menu group.
    290                         editor.config.menu_groups = 'scayt_suggest,scayt_moresuggest,scayt_control,' + editor.config.menu_groups;
    291                 },
     340        beforeInit : function( editor )
     341        {
     342            // Register own rbc menu group.
     343            editor.config.menu_groups = 'scayt_suggest,scayt_moresuggest,scayt_control,' + editor.config.menu_groups;
     344        },
    292345
    293                 init : function( editor )
    294                 {
    295                         var moreSuggestions = {};
    296                         var mainSuggestions = {};
     346        init : function( editor )
     347        {
     348            var moreSuggestions = {};
     349            var mainSuggestions = {};
    297350
    298                         // Scayt command.
    299                         var command = editor.addCommand( commandName, commandDefinition );
     351            // Scayt command.
     352            var command = editor.addCommand( commandName, commandDefinition );
    300353
    301                         // Add Options dialog.
    302                         CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );
     354            // Add Options dialog.
     355            CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) );
     356            // read ui tags
     357            var confuiTabs = editor.config.scayt_uiTabs || "1,1,1";
     358            var uiTabs =[];
     359            // string tp array convert
     360            confuiTabs = confuiTabs.split(",");
     361            // check array length ! allwaays must be 3 filled with 1 or 0
     362            for (var i=0,l=3; i<l; i++){
     363                var flag = parseInt(confuiTabs[i] || "1" ,10);
     364                uiTabs.push(  flag  );
     365            }
     366           
     367           
     368            var menuGroup = 'scaytButton';
     369            editor.addMenuGroup( menuGroup );                   
     370            // combine menu items to render
     371            var uiMuneItems = {};
     372           
     373            // allways added
     374            uiMuneItems.scaytToggle =
     375                {
     376                    label : editor.lang.scayt.enable,
     377                    command : commandName,
     378                    group : menuGroup
     379                };
     380               
     381            if (uiTabs[0] == 1)
     382                uiMuneItems.scaytOptions =
     383                {
     384                    label : editor.lang.scayt.options,
     385                    group : menuGroup,
     386                    onClick : function()
     387                    {
     388                        openPage = 'options';
     389                        editor.openDialog( commandName );
     390                    }
     391                };
    303392
    304                         var menuGroup = 'scaytButton';
    305                         editor.addMenuGroup( menuGroup );
    306                         editor.addMenuItems(
    307                                 {
    308                                         scaytToggle :
    309                                         {
    310                                                 label : editor.lang.scayt.enable,
    311                                                 command : commandName,
    312                                                 group : menuGroup
    313                                         },
     393            if (uiTabs[1] == 1)
     394                uiMuneItems.scaytLangs =
     395                {
     396                    label : editor.lang.scayt.langs,
     397                    group : menuGroup,
     398                    onClick : function()
     399                    {
     400                        openPage = 'langs';
     401                        editor.openDialog( commandName );
     402                    }
     403                };
     404            if (uiTabs[2] == 1)
     405                uiMuneItems.scaytDict =
     406                {
     407                    label : editor.lang.scayt.dictionariesTab,
     408                    group : menuGroup,
     409                    onClick : function()
     410                    {
     411                        openPage = 'dictionaries';
     412                        editor.openDialog( commandName );
     413                    }
     414                };
     415            // allways added
     416            uiMuneItems.scaytAbout =
     417                {
     418                    label : editor.lang.scayt.about,
     419                    group : menuGroup,
     420                    onClick : function()
     421                    {
     422                        openPage = 'about';
     423                        editor.openDialog( commandName );
     424                    }
     425                }
     426            ;
     427           
     428            uiTabs[3] = 1; // about us tab is allways on
     429            plugin.uiTabs = uiTabs;
     430           
     431            editor.addMenuItems( uiMuneItems );
    314432
    315                                         scaytOptions :
    316                                         {
    317                                                 label : editor.lang.scayt.options,
    318                                                 group : menuGroup,
    319                                                 onClick : function()
    320                                                 {
    321                                                         openPage = 'options';
    322                                                         editor.openDialog( commandName );
    323                                                 }
    324                                         },
     433                editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
     434                    {
     435                        label : editor.lang.scayt.title,
     436                        title : editor.lang.scayt.title,
     437                        className : 'cke_button_scayt',
     438                        onRender: function()
     439                        {
     440                            command.on( 'state', function()
     441                            {
     442                                this.setState( command.state );
     443                            },
     444                            this);
     445                           
     446                        },
     447                        onMenu : function()
     448                        {
     449                            var isEnabled = plugin.isScaytEnabled( editor );
     450   
     451                            editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
     452   
     453                                return {
     454                                    scaytToggle  : CKEDITOR.TRISTATE_OFF,
     455                                    scaytOptions : isEnabled && plugin.uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     456                                    scaytLangs   : isEnabled && plugin.uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     457                                    scaytDict    : isEnabled && plugin.uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED,
     458                                    scaytAbout   : isEnabled && plugin.uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED
     459                                };
     460                        }
     461                    });
    325462
    326                                         scaytLangs :
    327                                         {
    328                                                 label : editor.lang.scayt.langs,
    329                                                 group : menuGroup,
    330                                                 onClick : function()
    331                                                 {
    332                                                         openPage = 'langs';
    333                                                         editor.openDialog( commandName );
    334                                                 }
    335                                         },
     463            // If the "contextmenu" plugin is loaded, register the listeners.
     464            if ( editor.contextMenu && editor.addMenuItems )
     465            {
     466                editor.contextMenu.addListener( function( element )
     467                    {
     468                       
     469                        if ( !( plugin.isScaytEnabled( editor ) && element ) )
     470                            // @POINT alert("scayt disabled")
     471                            return null;
    336472
    337                                         scaytAbout :
    338                                         {
    339                                                 label : editor.lang.scayt.about,
    340                                                 group : menuGroup,
    341                                                 onClick : function()
    342                                                 {
    343                                                         openPage = 'about';
    344                                                         editor.openDialog( commandName );
    345                                                 }
    346                                         }
    347                                 });
     473                        var scayt_control = plugin.getScayt( editor ),
     474                            word = scayt_control.getWord( element.$ );
    348475
    349                                 editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,
    350                                         {
    351                                                 label : editor.lang.scayt.title,
    352                                                 title : editor.lang.scayt.title,
    353                                                 className : 'cke_button_scayt',
    354                                                 onRender: function()
    355                                                 {
    356                                                 command.on( 'state', function()
    357                                                         {
    358                                                                 this.setState( command.state );
    359                                                         },
    360                                                         this);
    361                                         },
    362                                         onMenu : function()
    363                                         {
    364                                                 var isEnabled = plugin.isScaytEnabled( editor );
     476                        if ( !word )
     477                        // @POINT alert(word)
     478                            return null;
    365479
    366                                                 editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];
     480                        var sLang = scayt_control.getLang(),
     481                            _r = {},
     482                            items_suggestion = window.scayt.getSuggestion( word, sLang );
     483                        if (!items_suggestion || !items_suggestion.length )
     484                        // @POINT alert (items_suggestion)
     485                            return null;
     486                        // Remove unused commands and menuitems
    367487
    368                                                         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
    373                                                         };
    374                                                 }
    375                                         });
     488                        for ( i in moreSuggestions )
     489                        {
     490                            delete editor._.menuItems[ i ];
     491                            delete editor._.commands[ i ];
     492                        }
     493                        for ( i in mainSuggestions )
     494                        {
     495                            delete editor._.menuItems[ i ];
     496                            delete editor._.commands[ i ];
     497                        }
     498                        moreSuggestions = {};           // Reset items.
     499                        mainSuggestions = {};
    376500
    377                         // If the "contextmenu" plugin is loaded, register the listeners.
    378                         if ( editor.contextMenu && editor.addMenuItems )
    379                         {
    380                                 editor.contextMenu.addListener( function( element )
    381                                         {
    382                                                 if ( !( plugin.isScaytEnabled( editor ) && element ) )
    383                                                         return null;
     501                        var moreSuggestionsUnable = editor.config.scayt_moreSuggestions || "on";
     502                        var moreSuggestionsUnableAdded = false;
     503                        var maxSuggestions = ( editor.config.scayt_maxSuggestions <= 0)
     504                                                ? items_suggestion.length
     505                                                : editor.config.scayt_maxSuggestions;
     506                        var contextCommands = editor.config.scayt_contextCommands || "all";
     507                        contextCommands = contextCommands.split("|");
    384508
    385                                                 var scayt_control = plugin.getScayt( editor ),
    386                                                         word = scayt_control.getWord( element.$ );
     509                        for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )
     510                        {
     511                            var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' );
     512                            var exec = ( function( el, s )
     513                            {
     514                                return {
     515                                    exec: function()
     516                                    {
     517                                        scayt_control.replace(el, s);
     518                                    }
     519                                };
     520                            })( element.$, items_suggestion[i] );
    387521
    388                                                 if ( !word )
    389                                                         return null;
     522                            if ( i < maxSuggestions )
     523                            {
     524                                addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
     525                                    commandName, exec, 'scayt_suggest', i + 1 );
     526                                _r[ commandName ] = CKEDITOR.TRISTATE_OFF;
     527                                mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
     528                            }
     529                            else if ( moreSuggestionsUnable == "on" )
     530                            {
    390531
    391                                                 var sLang = scayt_control.getLang(),
    392                                                         _r = {},
    393                                                         items_suggestion = window.scayt.getSuggestion( word, sLang );
    394                                                 if (!items_suggestion || !items_suggestion.length )
    395                                                         return null;
    396                                                 // Remove unused commands and menuitems
    397                                                 for ( i in moreSuggestions )
    398                                                 {
    399                                                         delete editor._.menuItems[ i ];
    400                                                         delete editor._.commands[ i ];
    401                                                 }
    402                                                 for ( i in mainSuggestions )
    403                                                 {
    404                                                         delete editor._.menuItems[ i ];
    405                                                         delete editor._.commands[ i ];
    406                                                 }
    407                                                 moreSuggestions = {};           // Reset items.
    408                                                 mainSuggestions = {};
     532                                addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
     533                                    commandName, exec, 'scayt_moresuggest', i + 1 );
     534                                moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
     535                                moreSuggestionsUnableAdded = true;
    409536
    410                                                 var moreSuggestionsUnable = false;
    411537
    412                                                 for ( var i = 0, l = items_suggestion.length; i < l; i += 1 )
    413                                                 {
    414                                                         var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' );
    415                                                         var exec = ( function( el, s )
    416                                                                 {
    417                                                                         return {
    418                                                                                 exec: function()
    419                                                                                 {
    420                                                                                         scayt_control.replace(el, s);
    421                                                                                 }
    422                                                                         };
    423                                                                 })( element.$, items_suggestion[i] );
    424538
    425                                                         if ( i < editor.config.scayt_maxSuggestions )
    426                                                         {
    427                                                                 addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
    428                                                                         commandName, exec, 'scayt_suggest', i + 1 );
    429                                                                 _r[ commandName ] = CKEDITOR.TRISTATE_OFF;
    430                                                                 mainSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
    431                                                         }
    432                                                         else
    433                                                         {
    434                                                                 addButtonCommand( editor, 'button_' + commandName, items_suggestion[i],
    435                                                                         commandName, exec, 'scayt_moresuggest', i + 1 );
    436                                                                 moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF;
    437                                                                 moreSuggestionsUnable = true;
    438                                                         }
    439                                                 }
    440                                                 if ( moreSuggestionsUnable )
    441                                                         // Rgister the More suggestions group;
    442                                                         editor.addMenuItem( 'scayt_moresuggest',
    443                                                                 {
    444                                                                         label : editor.lang.scayt.moreSuggestions,
    445                                                                         group : 'scayt_moresuggest',
    446                                                                         order : 10,
    447                                                                         getItems : function()
    448                                                                         {
    449                                                                                 return moreSuggestions;
    450                                                                         }
    451                                                                 });
    452539
     540                            }
     541                        }
    453542
    454                                                 var ignore_command =
    455                                                 {
    456                                                         exec: function()
    457                                                         {
    458                                                                 scayt_control.ignore( element.$ );
    459                                                         }
    460                                                 };
    461                                                 var ignore_all_command =
    462                                                 {
    463                                                         exec: function()
    464                                                         {
    465                                                                 scayt_control.ignoreAll( element.$ );
    466                                                         }
    467                                                 };
    468                                                 var addword_command =
    469                                                 {
    470                                                         exec: function()
    471                                                         {
    472                                                                 window.scayt.addWordToUserDictionary( element.$ );
    473                                                         }
    474                                                 };
     543                        if ( moreSuggestionsUnableAdded ){
     544                            // Rgister the More suggestions group;
     545                            editor.addMenuItem( 'scayt_moresuggest',
     546                            {
     547                                label : editor.lang.scayt.moreSuggestions,
     548                                group : 'scayt_moresuggest',
     549                                order : 10,
     550                                getItems : function()
     551                                {
     552                                    return moreSuggestions;
     553                                }
     554                            });
     555                            mainSuggestions[ 'scayt_moresuggest' ] = CKEDITOR.TRISTATE_OFF;
     556                           
     557                        }
     558                           
    475559
    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);
     560                       
     561                        if ( in_array( "all",contextCommands )  || in_array("ignore",contextCommands)  )
     562                        {
     563                            var ignore_command = {
     564                                exec: function(){
     565                                    scayt_control.ignore(element.$);
     566                                }
     567                            };
     568                            addButtonCommand(editor, 'ignore', editor.lang.scayt.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1);
     569                            mainSuggestions['scayt_ignore'] = CKEDITOR.TRISTATE_OFF;
     570                        }
     571                       
     572                        if ( in_array( "all",contextCommands )  || in_array("ignoreall",contextCommands)  )
     573                        {
     574                            var ignore_all_command = {
     575                                exec: function(){
     576                                    scayt_control.ignoreAll(element.$);
     577                                }
     578                            };
     579                            addButtonCommand(editor, 'ignore_all', editor.lang.scayt.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);
     580                            mainSuggestions['scayt_ignore_all'] = CKEDITOR.TRISTATE_OFF;
     581                        }
     582                       
     583                        if ( in_array( "all",contextCommands )  || in_array("add",contextCommands)  )
     584                        {
     585                            var addword_command = {
     586                                exec: function(){
     587                                    window.scayt.addWordToUserDictionary(element.$);
     588                                }
     589                            };
     590                            addButtonCommand(editor, 'add_word', editor.lang.scayt.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);
     591                            mainSuggestions['scayt_add_word'] = CKEDITOR.TRISTATE_OFF;
     592                        }
    482593
    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;
     594                        if ( scayt_control.fireOnContextMenu )
     595                            scayt_control.fireOnContextMenu( editor );
     596                       
     597                        return mainSuggestions;
     598                    });
     599            }
    487600
    488                                                 if ( scayt_control.fireOnContextMenu )
    489                                                         scayt_control.fireOnContextMenu( editor );
     601            // Start plugin
     602            if ( editor.config.scayt_autoStartup )
     603            {
     604                var showInitialState = function()
     605                {
     606                    editor.removeListener( 'showScaytState', showInitialState );
     607                    command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
     608                };
     609                editor.on( 'showScaytState', showInitialState );
    490610
    491                                                 return mainSuggestions;
    492                                         });
    493                         }
    494 
    495                         // Start plugin
    496                         if ( editor.config.scayt_autoStartup )
    497                         {
    498                                 var showInitialState = function()
    499                                 {
    500                                         editor.removeListener( 'showScaytState', showInitialState );
    501                                         command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF );
    502                                 };
    503                                 editor.on( 'showScaytState', showInitialState );
    504 
    505                                 plugin.loadEngine( editor );
    506                         }
    507                 }
    508         });
     611                plugin.loadEngine( editor );
     612            }
     613        }
     614    });
    509615})();
    510 
    511 CKEDITOR.config.scayt_maxSuggestions =  5;
    512 CKEDITOR.config.scayt_autoStartup = false;
     616CKEDITOR.config.scayt_maxSuggestions =  CKEDITOR.config.scayt_maxSuggestions || 5;
     617CKEDITOR.config.scayt_autoStartup = (typeof CKEDITOR.config.scayt_autoStartup !== 'undefined') ? CKEDITOR.config.scayt_autoStartup : false;
  • 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
     26    function getBOMAllOptions () {
     27         return document.forms.optionsbar["options"];
     28    }
     29    function getBOMAllLangs () {
     30         return document.forms.languagesbar["scayt_lang"];
     31    }
     32   
     33    function setCheckedValue(radioObj, newValue) {
     34        if(!radioObj)
     35            return;
     36        var radioLength = radioObj.length;
     37        if(radioLength == undefined) {
     38            radioObj.checked = (radioObj.value == newValue.toString());
     39            return;
     40        }
     41        for(var i = 0; i < radioLength; i++) {
     42            radioObj[i].checked = false;
     43            if(radioObj[i].value == newValue.toString()) {
     44                radioObj[i].checked = true;
     45            }
     46        }
     47    }
     48
    2149        var tags_contents =  [
    2250                                {
    2351                                        id : 'options',
     
    2654                                                {
    2755                                                        type : 'html',
    2856                                                        id : 'options',
    29                                                         html :  '<div class="inner_options">' +
     57                                                        html :  '<form name="optionsbar"><div class="inner_options">' +
    3058                                                                        '       <div class="messagebox"></div>' +
    3159                                                                        '       <div style="display:none;">' +
    32                                                                         '               <input type="checkbox" value="0" id="allCaps" />' +
     60                                                                        '               <input type="checkbox" name="options" id="allCaps" />' +
    3361                                                                        '               <label for="allCaps" id="label_allCaps"></label>' +
    3462                                                                        '       </div>' +
    3563                                                                        '       <div style="display:none;">' +
    36                                                                         '               <input type="checkbox" value="0" id="ignoreDomainNames" />' +
     64                                                                        '               <input name="options" type="checkbox" id="ignoreDomainNames" />' +
    3765                                                                        '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
    3866                                                                        '       </div>' +
    3967                                                                        '       <div style="display:none;">' +
    40                                                                         '       <input type="checkbox" value="0" id="mixedCase" />' +
     68                                                                        '       <input name="options" type="checkbox" id="mixedCase" />' +
    4169                                                                        '               <label for="mixedCase" id="label_mixedCase"></label>' +
    4270                                                                        '       </div>' +
    4371                                                                        '       <div style="display:none;">' +
    44                                                                         '               <input type="checkbox" value="0" id="mixedWithDigits" />' +
     72                                                                        '               <input name="options" type="checkbox" id="mixedWithDigits" />' +
    4573                                                                        '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
    4674                                                                        '       </div>' +
    47                                                                         '</div>'
     75                                                                        '</div></form>'
    4876                                                }
    4977                                        ]
    5078                                },
     
    5583                                                {
    5684                                                        type : 'html',
    5785                                                        id : 'langs',
    58                                                         html :  '<div class="inner_langs">' +
     86                                                        html :  '<form name="languagesbar"><div class="inner_langs">' +
    5987                                                                        '       <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>'
     88                                                                        '   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div>' +
     89                                                                        '   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div>' +
     90                                                                        '</div></form>'
    6391                                                }
    6492                                        ]
    6593                                },
     
    7098                                                {
    7199                                                        type : 'html',
    72100                                                        style: '',
    73                                                         id : 'dic',
    74                                                         html :  '<div class="inner_dictionary" style="text-align:left; white-space:normal;">' +
     101                                                        id : 'dictionaries',
     102                                                        html :  '<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +
    75103                                                                        '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +
    76104                                                                        '       <div style="margin:5px auto; width:80%;white-space:normal;"> ' +
    77105                                                                        '       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+
     
    90118                                                                        '                               </a>' +
    91119                                                                        '               </div>' +
    92120                                                                        '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +
    93                                                                         '</div>'
     121                                                                        '</div></form>'
    94122                                                }
    95123                                        ]
    96124                                },
     
    101129                                                {
    102130                                                        type : 'html',
    103131                                                        id : 'about',
    104                                                         style : 'margin: 10px 40px;',
     132                                                        style : 'margin: 5px 5px;',
    105133                                                        html : '<div id="scayt_about"></div>'
    106134                                                }
    107135                                        ]
    108136                                }
    109137                        ];
     138
     139
    110140        var dialogDefiniton = {
    111141                title : editor.lang.scayt.title,
    112                 minWidth : 340,
    113                 minHeight : 200,
     142                minWidth : 360,
     143                minHeight : 220,
    114144                onShow : function()
    115145                {
    116146                        var dialog = this;
     
    118148                        dialog.options = dialog.data.scayt_control.option();
    119149                        dialog.sLang = dialog.data.scayt_control.sLang;
    120150
    121                         if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
     151            if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )
    122152                        {
    123153                                alert( 'Error loading application service' );
    124154                                dialog.hide();
     
    128158                        var stop = 0;
    129159                        if ( firstLoad )
    130160                        {
    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                                         });
     161                                dialog.data.scayt.getCaption( editor.langCode || 'en', function( caps )
     162                {
     163                    if ( stop++ > 0 )   // Once only
     164                        return;
     165                    captions = caps;
     166                    init_with_captions.apply( dialog );
     167                    reload.apply( dialog );
     168                    firstLoad = false;
     169                });
    140170                        }
    141171                        else
    142                                 reload.apply( dialog );
     172            {
     173                 reload.apply( dialog );
     174            }
    143175
     176
    144177                        dialog.selectPage( dialog.data.tab );
    145178                },
    146179                onOk : function()
    147180                {
    148                         var scayt_control =  this.data.scayt_control,
    149                                 o = scayt_control.option(),
    150                                 c = 0;
     181                        var scayt_control =  this.data.scayt_control;
     182            scayt_control.option( this.options );
     183                        // Setup languge if it was changed.
     184                        var csLang = this.chosed_lang;
     185                        scayt_control.setLang( csLang );
     186                        scayt_control.refresh();
     187        },
     188        onCancel: function() {
     189            var o = getBOMAllOptions();
     190            for (i in o)
     191                   o[i].checked = false;
    151192
    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                         }
     193            setCheckedValue(getBOMAllLangs(),"")
    161194
    162                         // Setup languge if it was changed.
    163                         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();
    171                 },
     195        },
    172196                contents : contents
    173         };
     197    };
    174198
    175199        var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );
    176         if ( scayt_control )
    177         {
    178                 tags = scayt_control.uiTags;
    179         }
    180200
    181         for ( i in tags ) {
     201    tags = CKEDITOR.plugins.scayt.uiTabs;
     202
     203        for ( i in tags )
     204    {
    182205                if ( tags[ i ] == 1 )
    183206                        contents[ contents.length ] = tags_contents[ i ];
    184207        }
    185208        if ( tags[2] == 1 )
    186209                userDicActive = true;
    187210
    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 ] );
    198211
    199                 return true;
    200         }
    201212        var init_with_captions = function()
    202213        {
    203214                var dialog = this,
    204215                        lang_list = dialog.data.scayt.getLangList(),
    205216                        buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
    206                         labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],
     217                        labels = optionsIds,
    207218                        i;
    208219
    209220                // Add buttons titles
     
    219230
    220231
    221232                // Fill options and dictionary labels.
    222                 for ( i in labels )
    223                 {
    224                         var label = 'label_' + labels[ i ],
    225                                 labelElement = doc.getById( label );
    226 
    227                         if (  'undefined' != typeof labelElement
    228                            && 'undefined' != typeof captions[ label ]
    229                            && 'undefined' != typeof dialog.options[labels[ i ]] )
     233                if (tags[0] == 1)
     234        {
     235            for ( i in labels )
    230236                        {
    231                                 labelElement.setHtml( captions[ label ] );
    232                                 var labelParent = labelElement.getParent();
    233                                 labelParent.$.style.display = "block";
    234                         }
    235                 }
     237                                var label = 'label_' + labels[ i ],
     238                                        labelElement = doc.getById( label );
    236239
     240                                if (  'undefined' != typeof labelElement
     241                                   && 'undefined' != typeof captions[ label ]
     242                                   && 'undefined' != typeof dialog.options[labels[ i ]] )
     243                                {
     244                                        labelElement.setHtml( captions[ label ] );
     245                                        var labelParent = labelElement.getParent();
     246                                        labelParent.$.style.display = "block";
     247                                }
     248                        }   
     249        }
     250
     251
    237252                var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+
    238253                                        '<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +
    239254                                        '<p>' + captions[ 'about_throwt_copy' ] + '</p>';
     
    257272                                        ' value="' + option + '" name="scayt_lang" />' );
    258273
    259274                        radio.on( 'click', function()
    260                                 {
    261                                         this.$.checked = true;
    262                                         dialog.chosed_lang = option;
    263                                 });
     275            {
     276                this.$.checked = true;
     277                dialog.chosed_lang = option;
     278            });
    264279
    265280                        div.append( radio );
    266281                        div.append( label );
     
    273288                };
    274289
    275290                var langList = [];
    276                 for ( i in lang_list.rtl )
    277                         langList[ langList.length ] = createOption( i, lang_list.ltr );
    278 
    279                 for ( i in lang_list.ltr )
    280                         langList[ langList.length  ] = createOption( i, lang_list.ltr );
    281 
    282                 langList.sort(  function( lang1, lang2 )
     291                if (tags[1] ==1 )
     292        {
     293                        for ( i in lang_list.rtl )
     294                                langList[ langList.length ] = createOption( i, lang_list.ltr );
     295       
     296                        for ( i in lang_list.ltr )
     297                                langList[ langList.length  ] = createOption( i, lang_list.ltr );
     298       
     299                        langList.sort(  function( lang1, lang2 )
     300                                {
     301                                        return ( lang2.lang > lang1.lang ) ? -1 : 1 ;
     302                                });
     303       
     304                        var fieldL = doc.getById( 'scayt_lcol' ),
     305                                fieldR = doc.getById( 'scayt_rcol' );
     306                        for ( i=0; i < langList.length; i++ )
    283307                        {
    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 );
     308                                var field = ( i < langList.length / 2 ) ? fieldL : fieldR;
     309                                field.append( langList[ i ].radio );
     310                        }
    293311                }
    294312
     313
    295314                // user dictionary handlers
    296315                var dic = {};
    297316                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];
     317        {
     318            // comma separated button's ids include repeats if exists
     319            var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
    301320
    302                                 var err_massage = captions["err_dic_create"];
    303                                 var suc_massage = captions["succ_dic_create"];
    304                                 //console.info("--plugin ");
     321            var err_massage = captions["err_dic_create"];
     322            var suc_massage = captions["succ_dic_create"];
    305323
    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                                                 });
     324            window.scayt.createUserDictionary(dic_name,
     325                function(arg)
     326                {
     327                    hide_dic_buttons ( all_buttons );
     328                    display_dic_buttons ( dic_buttons[1] );
     329                    suc_massage = suc_massage.replace("%s" , arg.dname );
     330                    dic_success_message (suc_massage);
     331                },
     332                function(arg)
     333                {
     334                    err_massage = err_massage.replace("%s" ,arg.dname );
     335                    dic_error_message ( err_massage + "( "+ (arg.message || "") +")");
     336                });
    321337
    322                         };
     338        };
    323339
    324340                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                         };
     341        {
     342            //
     343            // try to rename dictionary
     344            var err_massage = captions["err_dic_rename"] || "";
     345            var suc_massage = captions["succ_dic_rename"] || "";
     346            window.scayt.renameUserDictionary(dic_name,
     347                function(arg)
     348                    {
     349                        suc_massage = suc_massage.replace("%s" , arg.dname );
     350                        set_dic_name( dic_name );
     351                        dic_success_message ( suc_massage );
     352                    },
     353                function(arg)
     354                    {
     355                        err_massage = err_massage.replace("%s" , arg.dname  );
     356                        set_dic_name( dic_name );
     357                        dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );
     358                    });
     359        };
    348360
    349361                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"];
     362        {
     363            var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];
     364            var err_massage = captions["err_dic_delete"];
     365            var suc_massage = captions["succ_dic_delete"];
    354366
    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                         };
     367            // try to delete dictionary
     368            window.scayt.deleteUserDictionary(
     369                function(arg)
     370                {
     371                    suc_massage = suc_massage.replace("%s" , arg.dname );
     372                    hide_dic_buttons ( all_buttons );
     373                    display_dic_buttons ( dic_buttons[0] );
     374                    set_dic_name( "" ); // empty input field
     375                    dic_success_message( suc_massage );
     376                },
     377                function(arg)
     378                {
     379                    err_massage = err_massage.replace("%s" , arg.dname );
     380                    dic_error_message(err_massage);
     381                });
     382        };
    374383
    375384                dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )
    376385                        {
     
    380389                                var suc_massage = captions["succ_dic_restore"];
    381390
    382391                                window.scayt.restoreUserDictionary(dic_name,
     392                    function(arg)
     393                    {
     394                        suc_massage = suc_massage.replace("%s" , arg.dname );
     395                        hide_dic_buttons ( all_buttons );
     396                        display_dic_buttons(dic_buttons[1]);
     397                        dic_success_message( suc_massage );
     398                    },
    383399                                        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                                                 },
    391                                         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                                                 });
     400                    {
     401                        err_massage = err_massage.replace("%s" , arg.dname );
     402                        dic_error_message( err_massage );
     403                    });
    397404                        };
    398 
     405function onDicButtonClick( ev )
     406        {
     407                var dic_name = doc.getById('dic_name').getValue();
     408                if ( !dic_name )
     409                {
     410                        dic_error_message(" Dictionary name should not be empty. ");
     411                        return false;
     412                }
     413                try{
     414                        var el = id = ev.data.getTarget().getParent();
     415                        var id = el.getId();
     416                        dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );
     417                }catch(err){
     418                        dic_error_message(" Dictionary error. ");
     419                }
     420               
     421                return true;
     422        }
    399423                // ** bind event listeners
    400424                var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),
    401425                        l;
     
    411435        var reload = function()
    412436        {
    413437                var dialog = this;
     438        // for enabled options tab
     439        if (tags[0] == 1){
     440            var opto = getBOMAllOptions();
    414441
    415                 // Animate options.
    416                 for ( var i in dialog.options )
    417                 {
    418                         var checkbox = doc.getById( i );
    419                         if ( checkbox )
    420                         {
    421                                 checkbox.removeAttribute( 'checked' );
    422                                 if ( dialog.options[ i ] == 1 )
    423                                         checkbox.setAttribute( 'checked', 'checked' );
     442            // Animate options.
     443            for ( var k=0,l = opto.length; k<l;k++ )
     444            {
    424445
    425                                 // Bind events. Do it only once.
    426                                 if ( firstLoad )
    427                                 {
    428                                         checkbox.on( 'click', function()
    429                                                 {
    430                                                         dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
    431                                                 } );
    432                                 }
    433                         }
    434                 }
     446                var i = opto[k].id;
     447                var checkbox = doc.getById( i );
    435448
     449                if ( checkbox )
     450                {
     451                    opto[k].checked = false;
     452                    //alert (opto[k].removeAttribute)
     453                    if ( dialog.options[ i ] == 1 )
     454                    {
     455                        opto[k].checked = true;
     456                    }
     457
     458
     459                    // Bind events. Do it only once.
     460                    if ( firstLoad )
     461                    {
     462                        checkbox.on( 'click', function()
     463                        {
     464                            dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;
     465                        });
     466                    }
     467                }
     468            }
     469
     470        }
     471
     472        //for enabled languages tab
     473        if ( tags[1] == 1 )
     474        {
     475            var domLang = doc.getById("cke_option"+dialog.sLang)
     476            setCheckedValue(domLang.$,dialog.sLang)
     477        }
     478
     479
    436480                // * user dictionary
    437481                if ( userDicActive ){
    438482                        window.scayt.getNameUserDictionary(
    439483                        function( o )
    440484                        {
    441485                                var dic_name = o.dname;
     486                hide_dic_buttons( dic_buttons[0] + ',' + dic_buttons[1] );
    442487                                if ( dic_name )
    443488                                {
    444489                                        doc.getById( 'dic_name' ).setValue(dic_name);
     
    455500                        dic_success_message("");
    456501                }
    457502
     503
     504
    458505        };
    459506
    460507        function dic_error_message ( m )
    461                 {
    462                         doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
    463                 }
     508    {
     509        doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );
     510    }
    464511    function dic_success_message ( m )
    465                 {
    466                         doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
    467                 }
     512    {
     513        doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;
     514    }
    468515        function display_dic_buttons ( sIds )
    469                 {
     516    {
    470517
    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                         }
     518        sIds = String( sIds );
     519        var aIds = sIds.split(',');
     520        for ( var i=0, l = aIds.length; i < l ; i+=1)
     521        {
     522            doc.getById( aIds[i] ).$.style.display = "inline";
     523        }
    477524
    478                 }
     525    }
    479526        function hide_dic_buttons ( sIds )
    480                 {
    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                         }
    487                 }
     527    {
     528        sIds = String( sIds );
     529        var aIds = sIds.split(',');
     530        for ( var i = 0, l = aIds.length; i < l ; i += 1 )
     531        {
     532            doc.getById( aIds[i] ).$.style.display = "none";
     533        }
     534    }
    488535        function set_dic_name ( dic_name )
    489                 {
    490                         doc.getById('dic_name').$.value= dic_name;
    491                 }
     536    {
     537        doc.getById('dic_name').$.value= dic_name;
     538    }
    492539
    493540        return dialogDefiniton;
    494541});
© 2003 – 2019 CKSource – Frederico Knabben. All rights reserved. | Terms of use | Privacy policy