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