2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.
3 For licensing, see LICENSE.html or http://ckeditor.com/license
6 CKEDITOR
.dialog
.add( 'scaytcheck', function( editor
)
10 doc
= CKEDITOR
.document
,
14 userDicActive
= false,
16 // [0] contains buttons for creating
17 "dic_create,dic_restore",
18 // [1] contains buton for manipulation
19 "dic_rename,dic_delete"
21 optionsIds
= [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ];
25 function getBOMAllOptions () {
26 return document
.forms
.optionsbar
["options"];
28 function getBOMAllLangs () {
29 return document
.forms
.languagesbar
["scayt_lang"];
32 function setCheckedValue(radioObj
, newValue
) {
35 var radioLength
= radioObj
.length
;
36 if (radioLength
== undefined) {
37 radioObj
.checked
= (radioObj
.value
== newValue
.toString());
40 for (var i
= 0; i
< radioLength
; i
++) {
41 radioObj
[i
].checked
= false;
42 if (radioObj
[i
].value
== newValue
.toString()) {
43 radioObj
[i
].checked
= true;
51 label
: editor
.lang
.scayt
.optionsTab
,
56 html
: '<form name="optionsbar"><div class="inner_options">' +
57 ' <div class="messagebox"></div>' +
58 ' <div style="display:none;">' +
59 ' <input type="checkbox" name="options" id="allCaps" />' +
60 ' <label for="allCaps" id="label_allCaps"></label>' +
62 ' <div style="display:none;">' +
63 ' <input name="options" type="checkbox" id="ignoreDomainNames" />' +
64 ' <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +
66 ' <div style="display:none;">' +
67 ' <input name="options" type="checkbox" id="mixedCase" />' +
68 ' <label for="mixedCase" id="label_mixedCase"></label>' +
70 ' <div style="display:none;">' +
71 ' <input name="options" type="checkbox" id="mixedWithDigits" />' +
72 ' <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +
80 label
: editor
.lang
.scayt
.languagesTab
,
85 html
: '<form name="languagesbar"><div class="inner_langs">' +
86 ' <div class="messagebox"></div> ' +
87 ' <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div>' +
88 ' <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div>' +
95 label
: editor
.lang
.scayt
.dictionariesTab
,
101 html
: '<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +
102 ' <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +
103 ' <div style="margin:5px auto; width:80%;white-space:normal;"> ' +
104 ' <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+
105 ' <span class="cke_dialog_ui_labeled_content" >'+
106 ' <div class="cke_dialog_ui_input_text">'+
107 ' <input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+
108 ' </div></span></div>'+
109 ' <div style="margin:5px auto; width:80%;white-space:normal;">'+
110 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+
112 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+
114 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+
116 ' <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+
119 ' <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +
126 label
: editor
.lang
.scayt
.aboutTab
,
131 style
: 'margin: 5px 5px;',
132 html
: '<div id="scayt_about"></div>'
138 var dialogDefiniton
= {
139 title
: editor
.lang
.scayt
.title
,
145 dialog
.data
= editor
.fire( 'scaytDialog', {} );
146 dialog
.options
= dialog
.data
.scayt_control
.option();
147 dialog
.sLang
= dialog
.data
.scayt_control
.sLang
;
149 if ( !dialog
.data
|| !dialog
.data
.scayt
|| !dialog
.data
.scayt_control
)
151 alert( 'Error loading application service' );
159 dialog
.data
.scayt
.getCaption( editor
.langCode
|| 'en', function( caps
)
161 if ( stop
++ > 0 ) // Once only
164 init_with_captions
.apply( dialog
);
165 reload
.apply( dialog
);
170 reload
.apply( dialog
);
172 dialog
.selectPage( dialog
.data
.tab
);
176 var scayt_control
= this.data
.scayt_control
;
177 scayt_control
.option( this.options
);
178 // Setup languge if it was changed.
179 var csLang
= this.chosed_lang
;
180 scayt_control
.setLang( csLang
);
181 scayt_control
.refresh();
185 var o
= getBOMAllOptions();
187 o
[i
].checked
= false;
189 setCheckedValue(getBOMAllLangs(),"");
194 var scayt_control
= CKEDITOR
.plugins
.scayt
.getScayt( editor
);
196 tags
= CKEDITOR
.plugins
.scayt
.uiTabs
;
200 if ( tags
[ i
] == 1 )
201 contents
[ contents
.length
] = tags_contents
[ i
];
204 userDicActive
= true;
207 var init_with_captions = function()
210 lang_list
= dialog
.data
.scayt
.getLangList(),
211 buttons
= [ 'dic_create','dic_delete','dic_rename','dic_restore' ],
215 // Add buttons titles
218 for ( i
= 0; i
< buttons
.length
; i
++ )
220 var button
= buttons
[ i
];
221 doc
.getById( button
).setHtml( '<span class="cke_dialog_ui_button">' + captions
[ 'button_' + button
] +'</span>' );
223 doc
.getById( 'dic_info' ).setHtml( captions
[ 'dic_info' ] );
227 // Fill options and dictionary labels.
232 var label
= 'label_' + labels
[ i
],
233 labelElement
= doc
.getById( label
);
235 if ( 'undefined' != typeof labelElement
236 && 'undefined' != typeof captions
[ label
]
237 && 'undefined' != typeof dialog
.options
[labels
[ i
]] )
239 labelElement
.setHtml( captions
[ label
] );
240 var labelParent
= labelElement
.getParent();
241 labelParent
.$.style
.display
= "block";
246 var about
= '<p>' + captions
[ 'about_throwt_image' ] + '</p>'+
247 '<p>' + captions
[ 'version' ] + dialog
.data
.scayt
.version
.toString() + '</p>' +
248 '<p>' + captions
[ 'about_throwt_copy' ] + '</p>';
250 doc
.getById( 'scayt_about' ).setHtml( about
);
252 // Create languages tab.
253 var createOption = function( option
, list
)
255 var label
= doc
.createElement( 'label' );
256 label
.setAttribute( 'for', 'cke_option' + option
);
257 label
.setHtml( list
[ option
] );
259 if ( dialog
.sLang
== option
) // Current.
260 dialog
.chosed_lang
= option
;
262 var div
= doc
.createElement( 'div' );
263 var radio
= CKEDITOR
.dom
.element
.createFromHtml( '<input id="cke_option' +
264 option
+ '" type="radio" ' +
265 ( dialog
.sLang
== option
? 'checked="checked"' : '' ) +
266 ' value="' + option
+ '" name="scayt_lang" />' );
268 radio
.on( 'click', function()
270 this.$.checked
= true;
271 dialog
.chosed_lang
= option
;
278 lang
: list
[ option
],
287 for ( i
in lang_list
.rtl
)
288 langList
[ langList
.length
] = createOption( i
, lang_list
.ltr
);
290 for ( i
in lang_list
.ltr
)
291 langList
[ langList
.length
] = createOption( i
, lang_list
.ltr
);
293 langList
.sort( function( lang1
, lang2
)
295 return ( lang2
.lang
> lang1
.lang
) ? -1 : 1 ;
298 var fieldL
= doc
.getById( 'scayt_lcol' ),
299 fieldR
= doc
.getById( 'scayt_rcol' );
300 for ( i
=0; i
< langList
.length
; i
++ )
302 var field
= ( i
< langList
.length
/ 2 ) ? fieldL
: fieldR
;
303 field
.append( langList
[ i
].radio
);
307 // user dictionary handlers
309 dic
.dic_create = function( el
, dic_name
, dic_buttons
)
311 // comma separated button's ids include repeats if exists
312 var all_buttons
= dic_buttons
[0] + ',' + dic_buttons
[1];
314 var err_massage
= captions
["err_dic_create"];
315 var suc_massage
= captions
["succ_dic_create"];
317 window
.scayt
.createUserDictionary(dic_name
,
320 hide_dic_buttons ( all_buttons
);
321 display_dic_buttons ( dic_buttons
[1] );
322 suc_massage
= suc_massage
.replace("%s" , arg
.dname
);
323 dic_success_message (suc_massage
);
327 err_massage
= err_massage
.replace("%s" ,arg
.dname
);
328 dic_error_message ( err_massage
+ "( "+ (arg
.message
|| "") +")");
333 dic
.dic_rename = function( el
, dic_name
)
336 // try to rename dictionary
337 var err_massage
= captions
["err_dic_rename"] || "";
338 var suc_massage
= captions
["succ_dic_rename"] || "";
339 window
.scayt
.renameUserDictionary(dic_name
,
342 suc_massage
= suc_massage
.replace("%s" , arg
.dname
);
343 set_dic_name( dic_name
);
344 dic_success_message ( suc_massage
);
348 err_massage
= err_massage
.replace("%s" , arg
.dname
);
349 set_dic_name( dic_name
);
350 dic_error_message( err_massage
+ "( " + ( arg
.message
|| "" ) + " )" );
354 dic
.dic_delete = function ( el
, dic_name
, dic_buttons
)
356 var all_buttons
= dic_buttons
[0] + ',' + dic_buttons
[1];
357 var err_massage
= captions
["err_dic_delete"];
358 var suc_massage
= captions
["succ_dic_delete"];
360 // try to delete dictionary
361 window
.scayt
.deleteUserDictionary(
364 suc_massage
= suc_massage
.replace("%s" , arg
.dname
);
365 hide_dic_buttons ( all_buttons
);
366 display_dic_buttons ( dic_buttons
[0] );
367 set_dic_name( "" ); // empty input field
368 dic_success_message( suc_massage
);
372 err_massage
= err_massage
.replace("%s" , arg
.dname
);
373 dic_error_message(err_massage
);
377 dic
.dic_restore
= dialog
.dic_restore
|| function ( el
, dic_name
, dic_buttons
)
379 // try to restore existing dictionary
380 var all_buttons
= dic_buttons
[0] + ',' + dic_buttons
[1];
381 var err_massage
= captions
["err_dic_restore"];
382 var suc_massage
= captions
["succ_dic_restore"];
384 window
.scayt
.restoreUserDictionary(dic_name
,
387 suc_massage
= suc_massage
.replace("%s" , arg
.dname
);
388 hide_dic_buttons ( all_buttons
);
389 display_dic_buttons(dic_buttons
[1]);
390 dic_success_message( suc_massage
);
394 err_massage
= err_massage
.replace("%s" , arg
.dname
);
395 dic_error_message( err_massage
);
399 function onDicButtonClick( ev
)
401 var dic_name
= doc
.getById('dic_name').getValue();
404 dic_error_message(" Dictionary name should not be empty. ");
408 var el
= id
= ev
.data
.getTarget().getParent();
410 dic
[ id
].apply( null, [ el
, dic_name
, dic_buttons
] );
412 dic_error_message(" Dictionary error. ");
418 // ** bind event listeners
419 var arr_buttons
= ( dic_buttons
[0] + ',' + dic_buttons
[1] ).split( ',' ),
422 for ( i
= 0, l
= arr_buttons
.length
; i
< l
; i
+= 1 )
424 var dic_button
= doc
.getById(arr_buttons
[i
]);
426 dic_button
.on( 'click', onDicButtonClick
, this );
430 var reload = function()
433 // for enabled options tab
435 var opto
= getBOMAllOptions();
438 for ( var k
=0,l
= opto
.length
; k
<l
;k
++ )
442 var checkbox
= doc
.getById( i
);
446 opto
[k
].checked
= false;
447 //alert (opto[k].removeAttribute)
448 if ( dialog
.options
[ i
] == 1 )
450 opto
[k
].checked
= true;
454 // Bind events. Do it only once.
457 checkbox
.on( 'click', function()
459 dialog
.options
[ this.getId() ] = this.$.checked
? 1 : 0 ;
466 //for enabled languages tab
469 var domLang
= doc
.getById("cke_option"+dialog
.sLang
);
470 setCheckedValue(domLang
.$,dialog
.sLang
);
476 window
.scayt
.getNameUserDictionary(
479 var dic_name
= o
.dname
;
480 hide_dic_buttons( dic_buttons
[0] + ',' + dic_buttons
[1] );
483 doc
.getById( 'dic_name' ).setValue(dic_name
);
484 display_dic_buttons( dic_buttons
[1] );
487 display_dic_buttons( dic_buttons
[0] );
492 doc
.getById( 'dic_name' ).setValue("");
494 dic_success_message("");
499 function dic_error_message ( m
)
501 doc
.getById('dic_message').setHtml('<span style="color:red;">' + m
+ '</span>' );
503 function dic_success_message ( m
)
505 doc
.getById('dic_message').setHtml('<span style="color:blue;">' + m
+ '</span>') ;
507 function display_dic_buttons ( sIds
)
510 sIds
= String( sIds
);
511 var aIds
= sIds
.split(',');
512 for ( var i
=0, l
= aIds
.length
; i
< l
; i
+=1)
514 doc
.getById( aIds
[i
] ).$.style
.display
= "inline";
518 function hide_dic_buttons ( sIds
)
520 sIds
= String( sIds
);
521 var aIds
= sIds
.split(',');
522 for ( var i
= 0, l
= aIds
.length
; i
< l
; i
+= 1 )
524 doc
.getById( aIds
[i
] ).$.style
.display
= "none";
527 function set_dic_name ( dic_name
)
529 doc
.getById('dic_name').$.value
= dic_name
;
532 return dialogDefiniton
;