X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;ds=sidebyside;f=_source%2Fplugins%2Fscayt%2Fplugin.js;h=336fb3ab7ed85bfe1af818992db70581290cff33;hb=2f22c0c38f17e75be5541089076885442aaa2377;hp=653c755a81429634b7ed8c7d64aeb455e102191b;hpb=039a051ccf3901311661022a30afd60fc38130c9;p=ckeditor.git diff --git a/_source/plugins/scayt/plugin.js b/_source/plugins/scayt/plugin.js index 653c755..336fb3a 100644 --- a/_source/plugins/scayt/plugin.js +++ b/_source/plugins/scayt/plugin.js @@ -1,5 +1,5 @@ /* -Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved. +Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ @@ -95,15 +95,6 @@ For licensing, see LICENSE.html or http://ckeditor.com/license plugin.instances[ editor.name ] = scayt_control; - //window.scayt.uiTags - var menuGroup = 'scaytButton'; - var uiTabs = window.scayt.uiTags; - var fTabs = []; - - for ( var i = 0, l=4; i < l; i++ ) - fTabs.push( uiTabs[i] && plugin.uiTabs[i] ); - - plugin.uiTabs = fTabs; try { scayt_control.setDisabled( plugin.isPaused( editor ) === false ); } catch (e) {} @@ -117,7 +108,7 @@ For licensing, see LICENSE.html or http://ckeditor.com/license // Remove scripts. var scripts = CKEDITOR.document.getElementsByTag( 'script' ), scaytIdRegex = /^dojoIoScript(\d+)$/i, - scaytSrcRegex = /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i; + scaytSrcRegex = /^https?:\/\/svc\.webspellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i; for ( var i=0; i < scripts.count(); i++ ) { @@ -244,7 +235,8 @@ For licensing, see LICENSE.html or http://ckeditor.com/license { span : function( element ) { - if ( element.attributes.scayt_word && element.attributes.scaytid ) + if ( element.attributes[ 'data-scayt_word' ] + && element.attributes[ 'data-scaytid' ] ) { delete element.name; // Write children, but don't write this node. return element; @@ -355,10 +347,30 @@ CKEDITOR.plugins.scayt = var scayt_instance = this.getScayt( editor ); return ( scayt_instance ) ? scayt_instance.disabled === false : false; }, + getUiTabs : function( editor ) + { + var uiTabs = []; + + // read UI tabs value from config + var configUiTabs = editor.config.scayt_uiTabs || "1,1,1"; + + // convert string to array + configUiTabs = configUiTabs.split( ',' ); + + // "About us" should be always shown for standard config + configUiTabs[3] = "1"; + + for ( var i = 0; i < 4; i++ ) { + uiTabs[i] = (typeof window.scayt != "undefined" && typeof window.scayt.uiTags != "undefined") + ? (parseInt(configUiTabs[i],10) && window.scayt.uiTags[i]) + : parseInt(configUiTabs[i],10); + } + return uiTabs; + }, loadEngine : function( editor ) { - // SCAYT doesn't work with Firefox2, Opera. - if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera ) + // SCAYT doesn't work with Firefox2, Opera and AIR. + if ( CKEDITOR.env.gecko && CKEDITOR.env.version < 10900 || CKEDITOR.env.opera || CKEDITOR.env.air ) return editor.fire( 'showScaytState' ); if ( this.engineLoaded === true ) @@ -382,7 +394,7 @@ CKEDITOR.plugins.scayt = var protocol = document.location.protocol; // Default to 'http' for unknown. protocol = protocol.search( /https?:/) != -1? protocol : 'http:'; - var baseUrl = 'svc.spellchecker.net/scayt25/loader__base.js'; + var baseUrl = 'svc.webspellchecker.net/scayt26/loader__base.js'; var scaytUrl = editor.config.scayt_srcUrl || ( protocol + '//' + baseUrl ); var scaytConfigBaseUrl = plugin.parseUrl( scaytUrl ).path + '/'; @@ -503,6 +515,22 @@ CKEDITOR.plugins.scayt = init : function( editor ) { + // Delete span[data-scaytid] when text pasting in editor (#6921) + var dataFilter = editor.dataProcessor && editor.dataProcessor.dataFilter; + var dataFilterRules = + { + elements : + { + span : function( element ) + { + var attrs = element.attributes; + if ( attrs && attrs[ 'data-scaytid' ] ) + delete element.name; + } + } + }; + dataFilter && dataFilter.addRules( dataFilterRules ); + var moreSuggestions = {}, mainSuggestions = {}; @@ -511,27 +539,18 @@ CKEDITOR.plugins.scayt = // Add Options dialog. CKEDITOR.dialog.add( commandName, CKEDITOR.getUrl( this.path + 'dialogs/options.js' ) ); - // read ui tags - var confuiTabs = editor.config.scayt_uiTabs || '1,1,1'; - var uiTabs =[]; - // string to array convert - confuiTabs = confuiTabs.split( ',' ); - // check array length ! always must be 3 filled with 1 or 0 - for ( var i=0, l=3; i < l; i++ ) - { - var flag = parseInt( confuiTabs[i] || '1', 10 ); - uiTabs.push( flag ); - } + + var uiTabs = plugin.getUiTabs( editor ); var menuGroup = 'scaytButton'; editor.addMenuGroup( menuGroup ); // combine menu items to render - var uiMuneItems = {}; + var uiMenuItems = {}; var lang = editor.lang.scayt; // always added - uiMuneItems.scaytToggle = + uiMenuItems.scaytToggle = { label : lang.enable, command : commandName, @@ -539,7 +558,7 @@ CKEDITOR.plugins.scayt = }; if ( uiTabs[0] == 1 ) - uiMuneItems.scaytOptions = + uiMenuItems.scaytOptions = { label : lang.options, group : menuGroup, @@ -551,7 +570,7 @@ CKEDITOR.plugins.scayt = }; if ( uiTabs[1] == 1 ) - uiMuneItems.scaytLangs = + uiMenuItems.scaytLangs = { label : lang.langs, group : menuGroup, @@ -562,7 +581,7 @@ CKEDITOR.plugins.scayt = } }; if ( uiTabs[2] == 1 ) - uiMuneItems.scaytDict = + uiMenuItems.scaytDict = { label : lang.dictionariesTab, group : menuGroup, @@ -573,7 +592,7 @@ CKEDITOR.plugins.scayt = } }; // always added - uiMuneItems.scaytAbout = + uiMenuItems.scaytAbout = { label : editor.lang.scayt.about, group : menuGroup, @@ -584,16 +603,14 @@ CKEDITOR.plugins.scayt = } }; - uiTabs[3] = 1; // about us tab is always on - plugin.uiTabs = uiTabs; - - editor.addMenuItems( uiMuneItems ); + editor.addMenuItems( uiMenuItems ); editor.ui.add( 'Scayt', CKEDITOR.UI_MENUBUTTON, { label : lang.title, title : CKEDITOR.env.opera ? lang.opera_title : lang.title, className : 'cke_button_scayt', + modes : { wysiwyg : 1 }, onRender: function() { command.on( 'state', function() @@ -608,12 +625,14 @@ CKEDITOR.plugins.scayt = editor.getMenuItem( 'scaytToggle' ).label = lang[ isEnabled ? 'disable' : 'enable' ]; + var uiTabs = plugin.getUiTabs( editor ); + return { scaytToggle : CKEDITOR.TRISTATE_OFF, - scaytOptions : isEnabled && plugin.uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, - scaytLangs : isEnabled && plugin.uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, - scaytDict : isEnabled && plugin.uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, - scaytAbout : isEnabled && plugin.uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED + scaytOptions : isEnabled && uiTabs[0] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytLangs : isEnabled && uiTabs[1] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytDict : isEnabled && uiTabs[2] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED, + scaytAbout : isEnabled && uiTabs[3] ? CKEDITOR.TRISTATE_OFF : CKEDITOR.TRISTATE_DISABLED }; } }); @@ -624,7 +643,7 @@ CKEDITOR.plugins.scayt = editor.contextMenu.addListener( function( element, selection ) { if ( !plugin.isScaytEnabled( editor ) - || selection.getCommonAncestor().isReadOnly() ) + || selection.getRanges()[ 0 ].checkReadOnly() ) return null; var scayt_control = plugin.getScayt( editor ), @@ -644,15 +663,15 @@ CKEDITOR.plugins.scayt = if ( !items_suggestion || !items_suggestion.length ) return null; // Remove unused commands and menuitems - for ( i in moreSuggestions ) + for ( var m in moreSuggestions ) { - delete editor._.menuItems[ i ]; - delete editor._.commands[ i ]; + delete editor._.menuItems[ m ]; + delete editor._.commands[ m ]; } - for ( i in mainSuggestions ) + for ( m in mainSuggestions ) { - delete editor._.menuItems[ i ]; - delete editor._.commands[ i ]; + delete editor._.menuItems[ m ]; + delete editor._.commands[ m ]; } moreSuggestions = {}; // Reset items. mainSuggestions = {}; @@ -756,7 +775,7 @@ CKEDITOR.plugins.scayt = { editor.removeListener( 'showScaytState', showInitialState ); - if ( !CKEDITOR.env.opera ) + if ( !CKEDITOR.env.opera && !CKEDITOR.env.air ) command.setState( plugin.isScaytEnabled( editor ) ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF ); else command.setState( CKEDITOR.TRISTATE_DISABLED ); @@ -764,7 +783,7 @@ CKEDITOR.plugins.scayt = editor.on( 'showScaytState', showInitialState ); - if ( CKEDITOR.env.opera ) + if ( CKEDITOR.env.opera || CKEDITOR.env.air ) { editor.on( 'instanceReady', function() { @@ -788,7 +807,7 @@ CKEDITOR.plugins.scayt = var elementsPathFilters, scaytFilter = function( element ) { - if ( element.hasAttribute( 'scaytid' ) ) + if ( element.hasAttribute( 'data-scaytid' ) ) return false; }; @@ -802,27 +821,28 @@ CKEDITOR.plugins.scayt = })(); /** - * If enabled (true), turns on SCAYT automatically after loading the editor. + * If enabled (set to true), turns on SCAYT automatically + * after loading the editor. * @name CKEDITOR.config.scayt_autoStartup * @type Boolean - * @default false + * @default false * @example * config.scayt_autoStartup = true; */ /** * Defines the number of SCAYT suggestions to show in the main context menu. - * The possible values are: + * Possible values are: * * @name CKEDITOR.config.scayt_maxSuggestions * @type Number - * @default 5 + * @default 5 * @example * // Display only three suggestions in the main context menu. * config.scayt_maxSuggestions = 3; @@ -832,11 +852,11 @@ CKEDITOR.plugins.scayt = */ /** - * Sets the customer ID for SCAYT. Required for migration from free version - * with banner to paid version. + * Sets the customer ID for SCAYT. Required for migration from free, + * ad-supported version to paid, ad-free version. * @name CKEDITOR.config.scayt_customerid * @type String - * @default '' + * @default '' * @example * // Load SCAYT using my customer ID. * config.scayt_customerid = 'your-encrypted-customer-id'; @@ -844,10 +864,10 @@ CKEDITOR.plugins.scayt = /** * Enables/disables the "More Suggestions" sub-menu in the context menu. - * The possible values are "on" or "off". + * Possible values are on and off. * @name CKEDITOR.config.scayt_moreSuggestions * @type String - * @default 'on' + * @default 'on' * @example * // Disables the "More Suggestions" sub-menu. * config.scayt_moreSuggestions = 'off'; @@ -855,91 +875,99 @@ CKEDITOR.plugins.scayt = /** * Customizes the display of SCAYT context menu commands ("Add Word", "Ignore" - * and "Ignore All"). It must be a string with one or more of the following - * words separated by a pipe ("|"): + * and "Ignore All"). This must be a string with one or more of the following + * words separated by a pipe character ("|"): * * @name CKEDITOR.config.scayt_contextCommands * @type String - * @default 'all' + * @default 'all' * @example * // Show only "Add Word" and "Ignore All" in the context menu. * config.scayt_contextCommands = 'add|ignoreall'; */ /** - * Sets the default spellchecking language for SCAYT. + * Sets the default spell checking language for SCAYT. Possible values are: + * en_US, en_GB, pt_BR, da_DK, + * nl_NL, en_CA, fi_FI, fr_FR, + * fr_CA, de_DE, el_GR, it_IT, + * nb_NO, pt_PT, es_ES, sv_SE. * @name CKEDITOR.config.scayt_sLang * @type String - * @default 'en_US' + * @default 'en_US' * @example * // Sets SCAYT to German. * config.scayt_sLang = 'de_DE'; */ /** - * Sets the visibility of the SCAYT tabs in the settings dialog and toolbar - * button. The value must contain a "1" (enabled) or "0" (disabled) number for - * each of the following entries, in this precise order, separated by a - * comma (","): "Options", "Languages" and "Dictionary". + * Sets the visibility of particular tabs in the SCAYT dialog window and toolbar + * button. This setting must contain a 1 (enabled) or 0 + * (disabled) value for each of the following entries, in this precise order, + * separated by a comma (","): "Options", "Languages", and "Dictionary". * @name CKEDITOR.config.scayt_uiTabs * @type String - * @default '1,1,1' + * @default '1,1,1' * @example - * // Hide the "Languages" tab. + * // Hides the "Languages" tab. * config.scayt_uiTabs = '1,0,1'; */ /** - * Set the URL to SCAYT core. Required to switch to licensed version of SCAYT application. - * Further details at http://wiki.spellchecker.net/doku.php?id=3rd:wysiwyg:fckeditor:wscckf3l . + * Sets the URL to SCAYT core. Required to switch to the licensed version of SCAYT application. + * Further details available at + * + * http://wiki.webspellchecker.net/doku.php?id=migration:hosredfreetolicensedck. * @name CKEDITOR.config.scayt_srcUrl * @type String - * @default '' + * @default '' * @example * config.scayt_srcUrl = "http://my-host/spellcheck/lf/scayt/scayt.js"; */ /** - * Links SCAYT to custom dictionaries. It's a string containing dictionary ids - * separared by commas (","). Available only for licensed version. - * Further details at http://wiki.spellchecker.net/doku.php?id=custom_dictionary_support . + * Links SCAYT to custom dictionaries. This is a string containing dictionary IDs + * separared by commas (","). Available only for the licensed version. + * Further details at + * + * http://wiki.webspellchecker.net/doku.php?id=installationandconfiguration:customdictionaries:licensed. * @name CKEDITOR.config.scayt_customDictionaryIds * @type String - * @default '' + * @default '' * @example * config.scayt_customDictionaryIds = '3021,3456,3478"'; */ /** - * Makes it possible to activate a custom dictionary on SCAYT. The user - * dictionary name must be used. Available only for licensed version. + * Makes it possible to activate a custom dictionary in SCAYT. The user + * dictionary name must be used. Available only for the licensed version. * @name CKEDITOR.config.scayt_userDictionaryName * @type String - * @default '' + * @default '' * @example * config.scayt_userDictionaryName = 'MyDictionary'; */ /** - * Define order of placing of SCAYT context menu items by groups. - * It must be a string with one or more of the following - * words separated by a pipe ("|"): + * Defines the order SCAYT context menu items by groups. + * This must be a string with one or more of the following + * words separated by a pipe character ("|"): * * * @name CKEDITOR.config.scayt_contextMenuItemsOrder * @type String - * @default 'suggest|moresuggest|control' + * @default 'suggest|moresuggest|control' * @example * config.scayt_contextMenuItemsOrder = 'moresuggest|control|suggest'; */