Ticket #3685: 3685_2.patch
File 3685_2.patch, 18.5 KB (added by , 16 years ago) |
---|
-
_source/plugins/scayt/dialogs/options.js
9 9 captions, 10 10 doc = CKEDITOR.document, 11 11 fckLang = 'en'; 12 var dic_buttons = [ 13 // [0] contains buttons for creating 14 "dic_create,dic_restore", 15 // [1] contains buton for manipulation 16 "dic_rename,dic_delete" 17 ]; 12 18 13 19 var init_with_captions = function() 14 20 { … … 18 24 labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ], 19 25 i; 20 26 21 /*22 27 // Add buttons titles 23 28 for ( var i in buttons ) 24 29 { 25 30 var button = buttons[ i ]; 26 doc.getById( button ).setHtml( captions[ 'button_' + button]);31 doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button] +'</span>' ); 27 32 } 28 33 doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] ); 29 */30 34 31 35 // Fill options and dictionary labels. 32 36 for ( i in labels ) 33 37 { 34 38 var label = 'label_' + labels[ i ], 35 39 labelElement = doc.getById( label ); 36 if ( labelElement ) 40 41 if ( 'undefined' != typeof labelElement 42 && 'undefined' != typeof captions[ label ] 43 && 'undefined' != typeof dialog.options[labels[ i ]] ) 44 { 37 45 labelElement.setHtml( captions[ label ] ); 46 var labelParent = labelElement.getParent(); 47 labelParent.$.style.display = "block"; 48 } 38 49 } 39 50 40 51 var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+ … … 94 105 var field = ( i < langList.length / 2 ) ? fieldL : fieldR; 95 106 field.append( langList[ i ].radio ); 96 107 } 108 109 // user dictionary handlers 110 dic = {}; 111 dic.dic_create = function( el, dic_name , dic_buttons ) 112 { 113 // comma separated button's ids include repeats if exists 114 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 115 116 var err_massage = captions["err_dic_create"]; 117 var suc_massage = captions["succ_dic_create"]; 118 //console.info("--plugin "); 119 120 scayt.createUserDictionary(dic_name, 121 function(arg) 122 { 123 //console.info( "dic_create callback called with args" , arg ); 124 hide_dic_buttons ( all_buttons ); 125 display_dic_buttons ( dic_buttons[1] ); 126 suc_massage = suc_massage.replace("%s" , arg.dname ); 127 dic_success_message (suc_massage); 128 }, 129 function(arg) 130 { 131 //console.info( "dic_create errorback called with args" , arg ) 132 err_massage = err_massage.replace("%s" ,arg.dname ); 133 dic_error_message ( err_massage + "( "+ (arg.message || "") +")"); 134 }); 135 136 } 137 138 dic.dic_rename = function( el, dic_name , dic_buttons ) 139 { 140 // 141 // try to rename dictionary 142 // @TODO: rename dict 143 //console.info ( captions["err_dic_rename"] ) 144 var err_massage = captions["err_dic_rename"] || ""; 145 var suc_massage = captions["succ_dic_rename"] || ""; 146 scayt.renameUserDictionary(dic_name, 147 function(arg) 148 { 149 //console.info( "dic_rename callback called with args" , arg ); 150 suc_massage = suc_massage.replace("%s" , arg.dname ); 151 set_dic_name( dic_name ); 152 dic_success_message ( suc_massage ); 153 }, 154 function(arg) 155 { 156 //console.info( "dic_rename errorback called with args" , arg ) 157 err_massage = err_massage.replace("%s" , arg.dname ); 158 set_dic_name( dic_name ); 159 dic_error_message (err_massage + "( "+ (arg.message || "") +" )") 160 }); 161 } 162 163 dic.dic_delete = function ( el, dic_name , dic_buttons ) 164 { 165 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 166 var err_massage = captions["err_dic_delete"]; 167 var suc_massage = captions["succ_dic_delete"]; 168 169 // try to delete dictionary 170 // @TODO: delete dict 171 scayt.deleteUserDictionary( 172 function(arg) 173 { 174 //console.info( "dic_delete callback " , dic_name ,arg ); 175 suc_massage = suc_massage.replace("%s" , arg.dname ); 176 hide_dic_buttons ( all_buttons ); 177 display_dic_buttons ( dic_buttons[0] ); 178 set_dic_name( "" ); // empty input field 179 dic_success_message( suc_massage ); 180 }, 181 function(arg) 182 { 183 //console.info( " dic_delete errorback called with args" , arg ) 184 err_massage = err_massage.replace("%s" , arg.dname ); 185 dic_error_message(err_massage); 186 }); 187 } 188 dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons ) 189 { 190 // try to restore existing dictionary 191 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; 192 var err_massage = captions["err_dic_restore"]; 193 var suc_massage = captions["succ_dic_restore"]; 194 195 scayt.restoreUserDictionary(dic_name, 196 function(arg) 197 { 198 //console.info( "dic_restore callback called with args" , arg ); 199 suc_massage = suc_massage.replace("%s" , arg.dname ); 200 hide_dic_buttons ( all_buttons ); 201 display_dic_buttons(dic_buttons[1]); 202 dic_success_message( suc_massage ); 203 }, 204 function(arg) 205 { 206 //console.info( " dic_restore errorback called with args" , arg ) 207 err_massage = err_massage.replace("%s" , arg.dname ); 208 dic_error_message( err_massage ); 209 }); 210 } 211 // ** bind event listeners 212 var arr_buttons = (dic_buttons[0] + ',' +dic_buttons[1]).split(','); 213 for (i=0, l=arr_buttons.length; i<l ; i+=1) 214 { 215 var dic_button = doc.getById(arr_buttons[i]); 216 217 dic_button.on('click', function () 218 { 219 var dic_name = doc.getById('dic_name').getValue(); 220 if (!dic_name) 221 { 222 dic_error_message(" Dictionary name should not be empty. "); 223 return false; 224 } 225 //apply handler 226 dic[this.getId()].apply( null, [this, dic_name, dic_buttons ] ); 227 }); 228 } 97 229 }; 98 230 var reload = function() 99 231 { … … 121 253 } 122 254 123 255 // * user dictionary 124 var dic_buttons = [125 // [0] contains buttons for creating126 'dic_create,dic_restore',127 // [1] contains buton for manipulation128 'dic_rename,dic_delete,dic_restore'129 ];130 256 scayt.getNameUserDictionary( 131 257 function( o ) 132 258 { 133 259 var dic_name = o.dname; 134 260 if ( dic_name ) 135 261 { 136 do jo.byId( 'dic_name' ).value = dic_name;262 doc.getById( 'dic_name' ).setValue(dic_name); 137 263 display_dic_buttons( dic_buttons[1] ); 138 264 } 139 265 else 140 266 display_dic_buttons( dic_buttons[0] ); 141 267 142 268 }, 143 function () { 144 }); 269 function () 270 { 271 doc.getById( 'dic_name' ).setValue(""); 272 }); 145 273 274 dic_success_message("") 146 275 var dic_flag = 0; 147 // ** bind event listeners148 dojo.query('div.dic_buttons a.button').onclick(function( ev )149 {150 if (typeof window[this.id] == 'function' ){151 // get dic name152 var dic_name = dojo.trim ( dojo.byId('dic_name').value );153 // check common dictionary rules154 if (!dic_name)155 {156 dic_error_message( editor.lang.scayt.emptyDic );157 return false;158 }159 // Apply handler160 window[this.id].apply( window, [this,ev , dic_name, dic_buttons ] );161 }162 //console.info( typeof window[this.id], window[this.id].calle )163 return false;164 });165 276 }; 166 277 167 return { 168 title : editor.lang.scayt.title, 169 minWidth : 340, 170 minHeight : 200, 171 onShow : function() 172 { 278 function dic_error_message ( m ) 279 { 280 doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' ); 281 } 282 function dic_success_message ( m ) 283 { 284 doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ; 285 } 286 function display_dic_buttons ( sIds ) 287 { 288 289 sIds = new String( sIds ); 290 var aIds = sIds.split(','); 291 for ( var i=0, l = aIds.length; i < l ; i+=1) 292 { 293 doc.getById( aIds[i] ).$.style.display = "inline"; 294 } 295 296 } 297 function hide_dic_buttons ( sIds ) 298 { 299 sIds = new String( sIds ); 300 var aIds = sIds.split(','); 301 for ( var i=0, l = aIds.length; i < l ; i+=1) 302 { 303 doc.getById( aIds[i] ).$.style.display = "none" 304 } 305 } 306 function set_dic_name ( dic_name ) 307 { 308 doc.getById('dic_name').$.value= dic_name; 309 } 310 311 return { 312 title : editor.lang.scayt.title, 313 minWidth : 340, 314 minHeight : 200, 315 onShow : function() 316 { 173 317 var dialog = this; 174 318 dialog.data = editor.fire( 'scaytDialog', {} ); 175 319 dialog.options = dialog.data.scayt_control.option(); … … 236 380 id : 'options', 237 381 html : '<div class="inner_options">' + 238 382 ' <div class="messagebox"></div>' + 239 ' <div >' +383 ' <div style="display:none;">' + 240 384 ' <input type="checkbox" value="0" id="allCaps" />' + 241 385 ' <label for="allCaps" id="label_allCaps"></label>' + 242 386 ' </div>' + 243 ' <div >' +387 ' <div style="display:none;">' + 244 388 ' <input type="checkbox" value="0" id="ignoreDomainNames" />' + 245 389 ' <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' + 246 390 ' </div>' + 247 ' <div >' +391 ' <div style="display:none;">' + 248 392 ' <input type="checkbox" value="0" id="mixedCase" />' + 249 393 ' <label for="mixedCase" id="label_mixedCase"></label>' + 250 394 ' </div>' + 251 ' <div >' +395 ' <div style="display:none;">' + 252 396 ' <input type="checkbox" value="0" id="mixedWithDigits" />' + 253 397 ' <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' + 254 398 ' </div>' + … … 271 415 } 272 416 ] 273 417 }, 274 /*275 418 { 276 419 id : 'dictionaries', 277 420 label : editor.lang.scayt.dictionariesTab, … … 280 423 type : 'html', 281 424 style: '', 282 425 id : 'dic', 283 html : '<div class="inner_dictionary">' + 284 ' <div class="messagebox" id="dic_message"></div>' + 285 ' <div class="dictionary" > ' + 286 ' <label for="dname" id="dname"></label>' + 287 ' <input type="text" size="14" maxlength="15" value="" id="dic_name" name="dic_name"/>' + 288 ' <div class="dic_buttons">' + 289 ' <a href="javascript:void(0)" id="dic_create" class="button"></a>' + 290 ' <a href="javascript:void(0)" id="dic_delete" class="button"></a>' + 291 ' <a href="javascript:void(0)" id="dic_rename" class="button"></a>' + 292 ' <a href="javascript:void(0)" id="dic_restore" class="button"></a>' + 426 html : '<div class="inner_dictionary" style="text-align:left; white-space:normal;">' + 427 ' <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' + 428 ' <div style="margin:5px auto; width:80%;white-space:normal;"> ' + 429 ' <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+ 430 ' <span class="cke_dialog_ui_labeled_content" >'+ 431 ' <div class="cke_dialog_ui_input_text">'+ 432 ' <input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+ 433 ' </div></span></div>'+ 434 ' <div style="margin:5px auto; width:80%;white-space:normal;">'+ 435 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+ 436 ' </a>' + 437 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+ 438 ' </a>' + 439 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+ 440 ' </a>' + 441 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+ 442 ' </a>' + 293 443 ' </div>' + 294 ' < /div><p id="dic_info"></p>' +444 ' <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' + 295 445 '</div>' 296 446 } 297 447 ] 298 448 }, 299 */300 449 { 301 450 id : 'about', 302 451 label : editor.lang.scayt.aboutTab, -
_source/plugins/scayt/plugin.js
23 23 var createInstance = function() // Create new instance every time Document is created. 24 24 { 25 25 // Initialise Scayt instance. 26 var scayt_control = new scayt( 27 { 28 srcNodeRef: editor.document.getWindow().$.frameElement 29 }); 26 var oParams = CKEDITOR.config.scaytParams || {}; 27 oParams.srcNodeRef = editor.document.getWindow().$.frameElement; // Get the iframe. 28 // syntax : AppName.AppVersion@AppRevision 29 oParams.assocApp = "CKEDITOR." + CKEDITOR.version + "@" + CKEDITOR.revision; 30 var scayt_control = new scayt( oParams ); 30 31 31 32 // Copy config. 32 33 var lastInstance = plugin.instances[ editor.name ]; … … 44 45 } catch (e) {} 45 46 }; 46 47 47 editor.on( 'contentDom', createInstance ); // Get the iframe somehow.48 editor.on( 'contentDom', createInstance ); 48 49 editor.on( 'contentDomUnload', function() 49 50 { 50 51 // Remove scripts. 51 52 var scripts = CKEDITOR.document.getElementsByTag( 'script' ); 52 53 scaytIdRegex = /^dojoIoScript(\d+)$/i; 53 scaytSrcRegex = /^http:\/\/demo\.spellchecker\.net\/spellcheck3\/script\/ssrv\.cgi/i; 54 54 scaytSrcRegex = /^https?:\/\/svc\.spellchecker\.net\/spellcheck\/script\/ssrv\.cgi/i; 55 55 for ( var i=0; i < scripts.count(); i++ ) 56 56 { 57 57 var script = scripts.getItem( i ), … … 140 140 0 ); // First to run. 141 141 142 142 this.engineLoaded = -1; // Loading in progress. 143 djConfig = 143 // assign diojo configurable vars 144 var parseUrl = function(data) 145 { 146 var m = data.match(/(.*)[\/\\]([^\/\\]+\.\w+)$/); 147 return {path: m[1], file: m[2]} 148 } 149 150 // compose scayt url 151 var protocol = document.location.protocol; 152 var baseUrl = "svc.spellchecker.net/spellcheck/lf/scayt/scayt.js"; 153 var scaytUrl = editor.config.scaytParams.srcScayt || 154 (protocol + "//" + baseUrl); 155 var scaytConfigBaseUrl = parseUrl(scaytUrl).path + "/"; 156 157 djScaytConfig = 144 158 { 145 baseUrl: './', 146 blankGif: 'http://demo.spellchecker.net/spellcheck3/lf/scayt/blank.gif', 147 parseOnLoad: true, 148 afterOnLoad: true, 149 useXDomain: true, 150 locale: 'en', 151 xdWaitSeconds: 10, 152 preventCache: false, 153 scaytNodes: document.getElementById('foo'), 154 require: [ 155 'dojo.i18n', 156 'scayt._base' 157 ], 158 modulePaths: 159 { 160 'scayt': 'http://demo.spellchecker.net/spellcheck3/lf/scayt' 161 }, 159 baseUrl: scaytConfigBaseUrl, 162 160 addOnLoad: 163 161 [ 164 162 function() 165 163 { 166 CKEDITOR.fireOnce( 'scaytReady');164 CKEDITOR.fireOnce( "scaytReady" ); 167 165 } 168 166 ], 169 167 isDebug: false 170 168 }; 171 172 169 // Append javascript code. 173 170 CKEDITOR.document.getHead().append( 174 171 CKEDITOR.document.createElement( 'script', … … 176 173 attributes : 177 174 { 178 175 type : 'text/javascript', 179 src : 'http://demo.spellchecker.net/spellcheck3/lf/dojo/dojo/dojo.xd.js'176 src : scaytUrl 180 177 } 181 178 }) 182 179 ); … … 215 212 var scayt_control = plugin.getScayt( editor ); 216 213 scayt_control.setDisabled( isEnabled ); 217 214 } 218 else if ( !editor.config.scayt _autoStartup && plugin.engineLoaded >= 0 ) // Load first time215 else if ( !editor.config.scaytParams.autoStartup && plugin.engineLoaded >= 0 ) // Load first time 219 216 { 220 217 this.setState( CKEDITOR.TRISTATE_DISABLED ); 221 218 … … 343 340 var sLang = scayt_control.getLang(), 344 341 _r = {}, 345 342 items_suggestion = scayt.getSuggestion( word, sLang ); 346 343 if (!items_suggestion || !items_suggestion.length || items_suggestion.length == 0 ) 344 return null; 347 345 // Remove unused commands and menuitems 348 346 for ( i in moreSuggestions ) 349 347 { … … 357 355 } 358 356 moreSuggestions = {}; // Reset items. 359 357 mainSuggestions = {}; 358 moreSuggestionsUnable = false; 360 359 361 // Register the More suggestions group;362 editor.addMenuItem( 'scayt_moresuggest',363 {364 label : editor.lang.scayt.moreSuggestions,365 group : 'scayt_moresuggest',366 order : 10,367 getItems : function()368 {369 return moreSuggestions;370 }371 });372 373 360 for ( var i = 0, l = items_suggestion.length; i < l; i += 1 ) 374 361 { 375 362 var commandName = 'scayt_suggestion_' + items_suggestion[i].replace( ' ', '_' ); … … 383 370 }; 384 371 })( element.$, items_suggestion[i] ); 385 372 386 if ( i < editor.config.scayt _maxSuggestions )373 if ( i < editor.config.scaytParams.maxSuggestions ) 387 374 { 388 375 addButtonCommand( editor, 'button_' + commandName, items_suggestion[i], 389 376 commandName, exec, 'scayt_suggest', i + 1 ); … … 395 382 addButtonCommand( editor, 'button_' + commandName, items_suggestion[i], 396 383 commandName, exec, 'scayt_moresuggest', i + 1 ); 397 384 moreSuggestions[ commandName ] = CKEDITOR.TRISTATE_OFF; 385 moreSuggestionsUnable = true; 398 386 } 399 387 } 388 if ( moreSuggestionsUnable ) 389 // Rgister the More suggestions group; 390 editor.addMenuItem( 'scayt_moresuggest', 391 { 392 label : editor.lang.scayt.moreSuggestions, 393 group : 'scayt_moresuggest', 394 order : 10, 395 getItems : function() 396 { 397 return moreSuggestions; 398 } 399 }); 400 400 401 401 402 var ignore_command = 402 403 { … … 432 433 mainSuggestions[ 'scayt_ignore_all' ] = CKEDITOR.TRISTATE_OFF; 433 434 mainSuggestions[ 'scayt_add_word' ] = CKEDITOR.TRISTATE_OFF; 434 435 436 // ** ahow ads entry point 437 // ** hide ads listener register 438 // try{ 439 //scayt_control.showBanner( editor ) 440 // }catch(err){} 441 435 442 return mainSuggestions; 436 443 }); 437 444 } 438 445 439 446 // Start plugin 440 if ( editor.config.scayt _autoStartup )447 if ( editor.config.scaytParams.autoStartup ) 441 448 plugin.loadEngine( editor ); 442 449 } 443 450 }); 444 451 })(); 445 452 446 CKEDITOR.config.scayt_maxSuggestions = 5; 447 CKEDITOR.config.scayt_autoStartup = false; 453 CKEDITOR.config.scaytParams = CKEDITOR.config.scaytParams || {}; 454 CKEDITOR.config.scaytParams.maxSuggestions = CKEDITOR.config.scaytParams.maxSuggestions || 5; 455 CKEDITOR.config.scaytParams.autoStartup = CKEDITOR.config.scaytParams.autoStartup || false; 456