1 /* 2 Copyright (c) 2003-2012, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 CKEDITOR.dialog.add( 'checkspell', function( editor ) 7 { 8 var number = CKEDITOR.tools.getNextNumber(), 9 iframeId = 'cke_frame_' + number, 10 textareaId = 'cke_data_' + number, 11 errorBoxId = 'cke_error_' + number, 12 interval, 13 protocol = document.location.protocol || 'http:', 14 errorMsg = editor.lang.spellCheck.notAvailable; 15 16 var pasteArea = '<textarea'+ 17 ' style="display: none"' + 18 ' id="' + textareaId + '"' + 19 ' rows="10"' + 20 ' cols="40">' + 21 ' </textarea><div' + 22 ' id="' + errorBoxId + '"' + 23 ' style="display:none;color:red;font-size:16px;font-weight:bold;padding-top:160px;text-align:center;z-index:11;">' + 24 '</div><iframe' + 25 ' src=""' + 26 ' style="width:100%;background-color:#f1f1e3;"' + 27 ' frameborder="0"' + 28 ' name="' + iframeId + '"' + 29 ' id="' + iframeId + '"' + 30 ' allowtransparency="1">' + 31 '</iframe>'; 32 33 var wscCoreUrl = editor.config.wsc_customLoaderScript || ( protocol + 34 '//loader.webspellchecker.net/sproxy_fck/sproxy.php' 35 + '?plugin=fck2' 36 + '&customerid=' + editor.config.wsc_customerId 37 + '&cmd=script&doc=wsc&schema=22' 38 ); 39 40 if ( editor.config.wsc_customLoaderScript ) 41 errorMsg += '<p style="color:#000;font-size:11px;font-weight: normal;text-align:center;padding-top:10px">' + 42 editor.lang.spellCheck.errorLoading.replace( /%s/g, editor.config.wsc_customLoaderScript ) + '</p>'; 43 44 function burnSpelling( dialog, errorMsg ) 45 { 46 var i = 0; 47 return function () 48 { 49 if ( typeof( window.doSpell ) == 'function' ) 50 { 51 //Call from window.setInteval expected at once. 52 if ( typeof( interval ) != 'undefined' ) 53 window.clearInterval( interval ); 54 55 initAndSpell( dialog ); 56 } 57 else if ( i++ == 180 ) // Timeout: 180 * 250ms = 45s. 58 window._cancelOnError( errorMsg ); 59 }; 60 } 61 62 window._cancelOnError = function( m ) 63 { 64 if ( typeof( window.WSC_Error ) == 'undefined' ) 65 { 66 CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'none' ); 67 var errorBox = CKEDITOR.document.getById( errorBoxId ); 68 errorBox.setStyle( 'display', 'block' ); 69 errorBox.setHtml( m || editor.lang.spellCheck.notAvailable ); 70 } 71 }; 72 73 function initAndSpell( dialog ) 74 { 75 var LangComparer = new window._SP_FCK_LangCompare(), // Language abbr standarts comparer. 76 pluginPath = CKEDITOR.getUrl( editor.plugins.wsc.path + 'dialogs/' ), // Service paths corecting/preparing. 77 framesetPath = pluginPath + 'tmpFrameset.html'; 78 79 // global var is used in FCK specific core 80 // change on equal var used in fckplugin.js 81 window.gFCKPluginName = 'wsc'; 82 83 LangComparer.setDefaulLangCode( editor.config.defaultLanguage ); 84 85 window.doSpell({ 86 ctrl : textareaId, 87 88 lang : editor.config.wsc_lang || LangComparer.getSPLangCode(editor.langCode ), 89 intLang: editor.config.wsc_uiLang || LangComparer.getSPLangCode(editor.langCode ), 90 winType : iframeId, // If not defined app will run on winpopup. 91 92 // Callback binding section. 93 onCancel : function() 94 { 95 dialog.hide(); 96 }, 97 onFinish : function( dT ) 98 { 99 editor.focus(); 100 dialog.getParentEditor().setData( dT.value ); 101 dialog.hide(); 102 }, 103 104 // Some manipulations with client static pages. 105 staticFrame : framesetPath, 106 framesetPath : framesetPath, 107 iframePath : pluginPath + 'ciframe.html', 108 109 // Styles defining. 110 schemaURI : pluginPath + 'wsc.css', 111 112 userDictionaryName: editor.config.wsc_userDictionaryName, 113 customDictionaryName: editor.config.wsc_customDictionaryIds && editor.config.wsc_customDictionaryIds.split(","), 114 domainName: editor.config.wsc_domainName 115 116 }); 117 118 // Hide user message console (if application was loaded more then after timeout). 119 CKEDITOR.document.getById( errorBoxId ).setStyle( 'display', 'none' ); 120 CKEDITOR.document.getById( iframeId ).setStyle( 'display', 'block' ); 121 } 122 123 return { 124 title : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title, 125 minWidth : 485, 126 minHeight : 380, 127 buttons : [ CKEDITOR.dialog.cancelButton ], 128 onShow : function() 129 { 130 var contentArea = this.getContentElement( 'general', 'content' ).getElement(); 131 contentArea.setHtml( pasteArea ); 132 contentArea.getChild( 2 ).setStyle( 'height', this._.contentSize.height + 'px' ); 133 134 if ( typeof( window.doSpell ) != 'function' ) 135 { 136 // Load script. 137 CKEDITOR.document.getHead().append( 138 CKEDITOR.document.createElement( 'script', 139 { 140 attributes : 141 { 142 type : 'text/javascript', 143 src : wscCoreUrl 144 } 145 }) 146 ); 147 } 148 149 var sData = editor.getData(); // Get the data to be checked. 150 CKEDITOR.document.getById( textareaId ).setValue( sData ); 151 152 interval = window.setInterval( burnSpelling( this, errorMsg ), 250 ); 153 }, 154 onHide : function() 155 { 156 window.ooo = undefined; 157 window.int_framsetLoaded = undefined; 158 window.framesetLoaded = undefined; 159 window.is_window_opened = false; 160 }, 161 contents : [ 162 { 163 id : 'general', 164 label : editor.config.wsc_dialogTitle || editor.lang.spellCheck.title, 165 padding : 0, 166 elements : [ 167 { 168 type : 'html', 169 id : 'content', 170 html : '' 171 } 172 ] 173 } 174 ] 175 }; 176 }); 177 178 // Expand the spell-check frame when dialog resized. (#6829) 179 CKEDITOR.dialog.on( 'resize', function( evt ) 180 { 181 var data = evt.data, 182 dialog = data.dialog; 183 184 if ( dialog._.name == 'checkspell' ) 185 { 186 var content = dialog.getContentElement( 'general', 'content' ).getElement(), 187 iframe = content && content.getChild( 2 ); 188 189 iframe && iframe.setSize( 'height', data.height ); 190 iframe && iframe.setSize( 'width', data.width ); 191 } 192 }); 193