JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.3
[ckeditor.git] / _source / plugins / scayt / plugin.js
index 2076207..b789c5b 100644 (file)
@@ -10,18 +10,19 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \r
 (function()\r
 {\r
-       var commandName         = 'scaytcheck',\r
-               openPage                = '';\r
+       var commandName  = 'scaytcheck',\r
+               openPage = '';\r
 \r
        // Checks if a value exists in an array\r
-       function in_array(needle, haystack)\r
+       function in_array( needle, haystack )\r
        {\r
-               var found = false, key;\r
-               for (key in haystack)\r
+               var found = 0,\r
+                       key;\r
+               for ( key in haystack )\r
                {\r
-                       if ((haystack[key] === needle) || ( haystack[key] == needle))\r
+                       if ( haystack[ key ] == needle )\r
                        {\r
-                               found = true;\r
+                               found = 1;\r
                                break;\r
                        }\r
                }\r
@@ -34,16 +35,17 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \r
                var createInstance = function() // Create new instance every time Document is created.\r
                {\r
+                       var config = editor.config;\r
                        // Initialise Scayt instance.\r
                        var oParams = {};\r
                        // Get the iframe.\r
                        oParams.srcNodeRef = editor.document.getWindow().$.frameElement;\r
                        // syntax : AppName.AppVersion@AppRevision\r
                        oParams.assocApp  = 'CKEDITOR.' + CKEDITOR.version + '@' + CKEDITOR.revision;\r
-                       oParams.customerid = editor.config.scayt_customerid  || '1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';\r
-                       oParams.customDictionaryIds = editor.config.scayt_customDictionaryIds || '';\r
-                       oParams.userDictionaryName = editor.config.scayt_userDictionaryName || '';\r
-                       oParams.sLang = editor.config.scayt_sLang || 'en_US';\r
+                       oParams.customerid = config.scayt_customerid  || '1:WvF0D4-UtPqN1-43nkD4-NKvUm2-daQqk3-LmNiI-z7Ysb4-mwry24-T8YrS3-Q2tpq2';\r
+                       oParams.customDictionaryIds = config.scayt_customDictionaryIds || '';\r
+                       oParams.userDictionaryName = config.scayt_userDictionaryName || '';\r
+                       oParams.sLang = config.scayt_sLang || 'en_US';\r
 \r
                        // Introduce SCAYT onLoad callback. (#5632)\r
                        oParams.onLoad = function()\r
@@ -62,20 +64,18 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        oParams.onBeforeChange = function()\r
                        {\r
                                if ( plugin.getScayt( editor ) && !editor.checkDirty() )\r
-                                       setTimeout( function(){ editor.resetDirty(); } );\r
+                                       setTimeout( function(){ editor.resetDirty(); }, 0 );\r
                        };\r
 \r
                        var scayt_custom_params = window.scayt_custom_params;\r
-                       if ( typeof scayt_custom_params == 'object')\r
+                       if ( typeof scayt_custom_params == 'object' )\r
                        {\r
                                for ( var k in scayt_custom_params )\r
-                               {\r
                                        oParams[ k ] = scayt_custom_params[ k ];\r
-                               }\r
                        }\r
                        // needs for restoring a specific scayt control settings\r
-                       if ( plugin.getControlId(editor) )\r
-                               oParams.id = plugin.getControlId(editor);\r
+                       if ( plugin.getControlId( editor ) )\r
+                               oParams.id = plugin.getControlId( editor );\r
 \r
                        var scayt_control = new window.scayt( oParams );\r
 \r
@@ -85,7 +85,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        } );\r
 \r
                        // Copy config.\r
-                       var     lastInstance = plugin.instances[ editor.name ];\r
+                       var lastInstance = plugin.instances[ editor.name ];\r
                        if ( lastInstance )\r
                        {\r
                                scayt_control.sLang = lastInstance.sLang;\r
@@ -100,7 +100,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                        var uiTabs = window.scayt.uiTags;\r
                        var fTabs  = [];\r
 \r
-                       for (var i = 0,l=4; i<l; i++)\r
+                       for ( var i = 0, l=4; i < l; i++ )\r
                            fTabs.push( uiTabs[i] && plugin.uiTabs[i] );\r
 \r
                        plugin.uiTabs = fTabs;\r
@@ -132,7 +132,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \r
                editor.on( 'beforeCommandExec', function( ev )          // Disable SCAYT before Source command execution.\r
                        {\r
-                               if ( (ev.data.name == 'source' ||  ev.data.name == 'newpage') && editor.mode == 'wysiwyg' )\r
+                               if ( ( ev.data.name == 'source' || ev.data.name == 'newpage' ) && editor.mode == 'wysiwyg' )\r
                                {\r
                                        var scayt_instance = plugin.getScayt( editor );\r
                                        if ( scayt_instance )\r
@@ -244,7 +244,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
                                        {\r
                                                span : function( element )\r
                                                {\r
-                                                       if ( element.attributes.scayt_word && element.attributes.scaytid )\r
+                                                       if ( element.attributes[ 'data-scayt_word' ]\r
+                                                                       && element.attributes[ 'data-scaytid' ] )\r
                                                        {\r
                                                                delete element.name;    // Write children, but don't write this node.\r
                                                                return element;\r
@@ -257,7 +258,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license
 \r
                // Override Image.equals method avoid CK snapshot module to add SCAYT markup to snapshots. (#5546)\r
                var undoImagePrototype = CKEDITOR.plugins.undo.Image.prototype;\r
-               undoImagePrototype.equals =      CKEDITOR.tools.override( undoImagePrototype.equals, function( org )\r
+               undoImagePrototype.equals = CKEDITOR.tools.override( undoImagePrototype.equals, function( org )\r
                {\r
                        return function( otherImage )\r
                        {\r
@@ -298,7 +299,7 @@ CKEDITOR.plugins.scayt =
                        for ( var infoOpt in o )\r
                                this.controlInfo[ editor.name ][ infoOpt ] = o[ infoOpt ];\r
                },\r
-               isControlRestored : function ( editor )\r
+               isControlRestored : function( editor )\r
                {\r
                        if ( editor &&\r
                                        editor.name &&\r
@@ -308,15 +309,15 @@ CKEDITOR.plugins.scayt =
                        }\r
                        return false;\r
                },\r
-               markControlRestore : function ( editor )\r
+               markControlRestore : function( editor )\r
                {\r
-                       this.setControlInfo( editor,{ restored:true } );\r
+                       this.setControlInfo( editor, { restored:true } );\r
                },\r
-               setControlId: function (editor, id)\r
+               setControlId: function( editor, id )\r
                {\r
-                       this.setControlInfo( editor,{ id:id } );\r
+                       this.setControlInfo( editor, { id:id } );\r
                },\r
-               getControlId: function (editor)\r
+               getControlId: function( editor )\r
                {\r
                        if ( editor &&\r
                                        editor.name &&\r
@@ -327,17 +328,17 @@ CKEDITOR.plugins.scayt =
                        }\r
                        return null;\r
                },\r
-               setPaused: function ( editor , bool )\r
+               setPaused: function( editor , bool )\r
                {\r
-                       this.setControlInfo( editor,{ paused:bool } );\r
+                       this.setControlInfo( editor, { paused:bool } );\r
                },\r
-               isPaused: function (editor)\r
+               isPaused: function( editor )\r
                {\r
                        if ( editor &&\r
                                        editor.name &&\r
                                        this.controlInfo[editor.name] )\r
                        {\r
-                               return this.controlInfo[editor.name].paused ;\r
+                               return this.controlInfo[editor.name].paused;\r
                        }\r
                        return undefined;\r
                },\r
@@ -357,8 +358,8 @@ CKEDITOR.plugins.scayt =
                },\r
                loadEngine : function( editor )\r
                {\r
-                       // SCAYT doesn't work with Opera.\r
-                       if ( CKEDITOR.env.opera )\r
+                       // SCAYT doesn't work with Firefox2, Opera.\r
+                       if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera )\r
                                return editor.fire( 'showScaytState' );\r
 \r
                        if ( this.engineLoaded === true )\r
@@ -382,7 +383,7 @@ CKEDITOR.plugins.scayt =
                        var protocol = document.location.protocol;\r
                        // Default to 'http' for unknown.\r
                        protocol = protocol.search( /https?:/) != -1? protocol : 'http:';\r
-                       var baseUrl  = 'svc.spellchecker.net/spellcheck31/lf/scayt24/loader__base.js';\r
+                       var baseUrl  = 'svc.spellchecker.net/scayt26/loader__base.js';\r
 \r
                        var scaytUrl  =  editor.config.scayt_srcUrl || ( protocol + '//' + baseUrl );\r
                        var scaytConfigBaseUrl =  plugin.parseUrl( scaytUrl ).path +  '/';\r
@@ -408,6 +409,7 @@ CKEDITOR.plugins.scayt =
                                                        attributes :\r
                                                                {\r
                                                                        type : 'text/javascript',\r
+                                                                       async : 'true',\r
                                                                        src : scaytUrl\r
                                                                }\r
                                                })\r
@@ -449,12 +451,10 @@ CKEDITOR.plugins.scayt =
        {\r
                preserveState : true,\r
                editorFocus : false,\r
+               canUndo : false,\r
 \r
                exec: function( editor )\r
                {\r
-                       var autoStartup = editor.config.scayt_autoStartup;\r
-                       autoStartup = ( autoStartup == undefined ) || autoStartup;\r
-\r
                        if ( plugin.isScaytReady( editor ) )\r
                        {\r
                                var isEnabled = plugin.isScaytEnabled( editor );\r
@@ -468,10 +468,10 @@ CKEDITOR.plugins.scayt =
                                //   scayt_control.focus();\r
                                //\r
                                // now focus is set certainly\r
-                               scayt_control.focus( );\r
+                               scayt_control.focus();\r
                                scayt_control.setDisabled( isEnabled );\r
                        }\r
-                       else if ( !autoStartup && plugin.engineLoaded >= 0 )    // Load first time\r
+                       else if ( !editor.config.scayt_autoStartup && plugin.engineLoaded >= 0 )        // Load first time\r
                        {\r
                                this.setState( CKEDITOR.TRISTATE_DISABLED );\r
                                plugin.loadEngine( editor );\r
@@ -494,23 +494,18 @@ CKEDITOR.plugins.scayt =
 \r
                        if ( items_order && items_order.length )\r
                        {\r
-                               for ( var pos in items_order )\r
+                               for ( var pos = 0 ; pos < items_order.length ; pos++ )\r
                                        items_order_str += 'scayt_' + items_order[ pos ] + ( items_order.length != parseInt( pos, 10 ) + 1 ? ',' : '' );\r
                        }\r
 \r
-                       // Register scayt rbc menu group.\r
-                       if ( editor.config.scayt_contextMenuOntop )\r
-                               // Put it on top of all context menu items\r
-                               editor.config.menu_groups =  items_order_str + ',' + editor.config.menu_groups;\r
-                       else\r
-                               // Put it down\r
-                               editor.config.menu_groups = editor.config.menu_groups + ',' +items_order_str;\r
+                       // Put it on top of all context menu items (#5717)\r
+                       editor.config.menu_groups =  items_order_str + ',' + editor.config.menu_groups;\r
                },\r
 \r
                init : function( editor )\r
                {\r
-                       var moreSuggestions = {};\r
-                       var mainSuggestions = {};\r
+                       var moreSuggestions = {},\r
+                               mainSuggestions = {};\r
 \r
                        // Scayt command.\r
                        var command = editor.addCommand( commandName, commandDefinition );\r
@@ -523,9 +518,9 @@ CKEDITOR.plugins.scayt =
                        // string to array convert\r
                        confuiTabs = confuiTabs.split( ',' );\r
                        // check array length ! always must be 3 filled with 1 or 0\r
-                       for (var i=0,l=3; i<l; i++)\r
+                       for ( var i=0, l=3; i < l; i++ )\r
                        {\r
-                               var flag = parseInt(confuiTabs[i] || '1' ,10);\r
+                               var flag = parseInt( confuiTabs[i] || '1', 10 );\r
                                uiTabs.push( flag );\r
                        }\r
 \r
@@ -534,18 +529,20 @@ CKEDITOR.plugins.scayt =
                        // combine menu items to render\r
                        var uiMuneItems = {};\r
 \r
+                       var lang = editor.lang.scayt;\r
+\r
                        // always added\r
                        uiMuneItems.scaytToggle =\r
                                {\r
-                                       label : editor.lang.scayt.enable,\r
+                                       label : lang.enable,\r
                                        command : commandName,\r
                                        group : menuGroup\r
                                };\r
 \r
-                       if (uiTabs[0] == 1)\r
+                       if ( uiTabs[0] == 1 )\r
                                uiMuneItems.scaytOptions =\r
                                {\r
-                                       label : editor.lang.scayt.options,\r
+                                       label : lang.options,\r
                                        group : menuGroup,\r
                                        onClick : function()\r
                                        {\r
@@ -554,10 +551,10 @@ CKEDITOR.plugins.scayt =
                                        }\r
                                };\r
 \r
-                       if (uiTabs[1] == 1)\r
+                       if ( uiTabs[1] == 1 )\r
                                uiMuneItems.scaytLangs =\r
                                {\r
-                                       label : editor.lang.scayt.langs,\r
+                                       label : lang.langs,\r
                                        group : menuGroup,\r
                                        onClick : function()\r
                                        {\r
@@ -565,10 +562,10 @@ CKEDITOR.plugins.scayt =
                                                editor.openDialog( commandName );\r
                                        }\r
                                };\r
-                       if (uiTabs[2] == 1)\r
+                       if ( uiTabs[2] == 1 )\r
                                uiMuneItems.scaytDict =\r
                                {\r
-                                       label : editor.lang.scayt.dictionariesTab,\r
+                                       label : lang.dictionariesTab,\r
                                        group : menuGroup,\r
                                        onClick : function()\r
                                        {\r
@@ -586,8 +583,7 @@ CKEDITOR.plugins.scayt =
                                                openPage = 'about';\r
                                                editor.openDialog( commandName );\r
                                        }\r
-                               }\r
-                       ;\r
+                               };\r
 \r
                        uiTabs[3] = 1; // about us tab is always on\r
                        plugin.uiTabs = uiTabs;\r
@@ -596,9 +592,10 @@ CKEDITOR.plugins.scayt =
 \r
                                editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON,\r
                                        {\r
-                                               label : editor.lang.scayt.title,\r
-                                               title : CKEDITOR.env.opera ? editor.lang.scayt.opera_title : editor.lang.scayt.title,\r
+                                               label : lang.title,\r
+                                               title : CKEDITOR.env.opera ? lang.opera_title : lang.title,\r
                                                className : 'cke_button_scayt',\r
+                                               modes : { wysiwyg : 1 },\r
                                                onRender: function()\r
                                                {\r
                                                        command.on( 'state', function()\r
@@ -611,7 +608,7 @@ CKEDITOR.plugins.scayt =
                                                {\r
                                                        var isEnabled = plugin.isScaytEnabled( editor );\r
 \r
-                                                       editor.getMenuItem( 'scaytToggle' ).label = editor.lang.scayt[ isEnabled ? 'disable' : 'enable' ];\r
+                                                       editor.getMenuItem( 'scaytToggle' ).label = lang[ isEnabled ? 'disable' : 'enable' ];\r
 \r
                                                        return {\r
                                                                scaytToggle  : CKEDITOR.TRISTATE_OFF,\r
@@ -626,9 +623,10 @@ CKEDITOR.plugins.scayt =
                        // If the "contextmenu" plugin is loaded, register the listeners.\r
                        if ( editor.contextMenu && editor.addMenuItems )\r
                        {\r
-                               editor.contextMenu.addListener( function(  )\r
+                               editor.contextMenu.addListener( function( element, selection )\r
                                        {\r
-                                               if ( !plugin.isScaytEnabled( editor ) )\r
+                                               if ( !plugin.isScaytEnabled( editor )\r
+                                                               || selection.getCommonAncestor().isReadOnly() )\r
                                                        return null;\r
 \r
                                                var scayt_control = plugin.getScayt( editor ),\r
@@ -679,7 +677,7 @@ CKEDITOR.plugins.scayt =
                                                                        return {\r
                                                                                exec: function()\r
                                                                                {\r
-                                                                                       scayt_control.replace(el, s);\r
+                                                                                       scayt_control.replace( el, s );\r
                                                                                }\r
                                                                        };\r
                                                                })( node, items_suggestion[i] );\r
@@ -705,7 +703,7 @@ CKEDITOR.plugins.scayt =
                                                        // Register the More suggestions group;\r
                                                        editor.addMenuItem( 'scayt_moresuggest',\r
                                                        {\r
-                                                               label : editor.lang.scayt.moreSuggestions,\r
+                                                               label : lang.moreSuggestions,\r
                                                                group : 'scayt_moresuggest',\r
                                                                order : 10,\r
                                                                getItems : function()\r
@@ -723,7 +721,7 @@ CKEDITOR.plugins.scayt =
                                                                        scayt_control.ignore( node );\r
                                                                }\r
                                                        };\r
-                                                       addButtonCommand( editor, 'ignore', editor.lang.scayt.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1 );\r
+                                                       addButtonCommand( editor, 'ignore', lang.ignore, 'scayt_ignore', ignore_command, 'scayt_control', 1 );\r
                                                        mainSuggestions[ 'scayt_ignore' ] = CKEDITOR.TRISTATE_OFF;\r
                                                }\r
 \r
@@ -734,7 +732,7 @@ CKEDITOR.plugins.scayt =
                                                                        scayt_control.ignoreAll( node );\r
                                                                }\r
                                                        };\r
-                                                       addButtonCommand(editor, 'ignore_all', editor.lang.scayt.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);\r
+                                                       addButtonCommand(editor, 'ignore_all', lang.ignoreAll, 'scayt_ignore_all', ignore_all_command, 'scayt_control', 2);\r
                                                        mainSuggestions['scayt_ignore_all'] = CKEDITOR.TRISTATE_OFF;\r
                                                }\r
 \r
@@ -745,7 +743,7 @@ CKEDITOR.plugins.scayt =
                                                                        window.scayt.addWordToUserDictionary( node );\r
                                                                }\r
                                                        };\r
-                                                       addButtonCommand(editor, 'add_word', editor.lang.scayt.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);\r
+                                                       addButtonCommand(editor, 'add_word', lang.addWord, 'scayt_add_word', addword_command, 'scayt_control', 3);\r
                                                        mainSuggestions['scayt_add_word'] = CKEDITOR.TRISTATE_OFF;\r
                                                }\r
 \r
@@ -777,8 +775,7 @@ CKEDITOR.plugins.scayt =
                        }\r
 \r
                        // Start plugin\r
-                       var autoStartup = editor.config.scayt_autoStartup;\r
-                       if ( ( autoStartup == undefined ) || autoStartup )\r
+                       if ( editor.config.scayt_autoStartup )\r
                        {\r
                                editor.on( 'instanceReady', function()\r
                                {\r
@@ -793,7 +790,7 @@ CKEDITOR.plugins.scayt =
                        var elementsPathFilters,\r
                                        scaytFilter = function( element )\r
                                        {\r
-                                               if ( element.hasAttribute( 'scaytid' ) )\r
+                                               if ( element.hasAttribute( 'data-scaytid' ) )\r
                                                        return false;\r
                                        };\r
 \r
@@ -810,9 +807,9 @@ CKEDITOR.plugins.scayt =
  * If enabled (true), turns on SCAYT automatically after loading the editor.\r
  * @name CKEDITOR.config.scayt_autoStartup\r
  * @type Boolean\r
- * @default true\r
+ * @default false\r
  * @example\r
- * config.scayt_autoStartup = false;\r
+ * config.scayt_autoStartup = true;\r
  */\r
 \r
 /**\r
@@ -933,15 +930,6 @@ CKEDITOR.plugins.scayt =
  */\r
 \r
 /**\r
- * Makes it possible to place the SCAYT context menu items above others.\r
- * @name CKEDITOR.config.scayt_contextMenuOntop\r
- * @type Boolean\r
- * @default false\r
- * @example\r
- * config.scayt_contextMenuOntop = true;\r
- */\r
-\r
-/**\r
  * Define order of placing of SCAYT context menu items by groups.\r
  * It must be a string with one or more of the following\r
  * words separated by a pipe ("|"):\r