JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.1
[ckeditor.git] / _source / plugins / scayt / dialogs / options.js
1 /*\r
2 Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license\r
4 */\r
5 \r
6 CKEDITOR.dialog.add( 'scaytcheck', function( editor )\r
7 {\r
8         var firstLoad = true,\r
9                 captions,\r
10                 doc = CKEDITOR.document,\r
11                 tags = [],\r
12                 i,\r
13                 contents = [],\r
14                 userDicActive = false,\r
15                 dic_buttons = [\r
16                         // [0] contains buttons for creating\r
17                         "dic_create,dic_restore",\r
18                         // [1] contains buton for manipulation\r
19                         "dic_rename,dic_delete"\r
20                 ],\r
21                 optionsIds= [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ];\r
22 \r
23         // common operations\r
24 \r
25         function getBOMAllOptions () {\r
26                  return document.forms.optionsbar["options"];\r
27         }\r
28         function getBOMAllLangs () {\r
29                  return document.forms.languagesbar["scayt_lang"];\r
30         }\r
31 \r
32         function setCheckedValue(radioObj, newValue) {\r
33                 if(!radioObj)\r
34                         return;\r
35                 var radioLength = radioObj.length;\r
36                 if(radioLength == undefined) {\r
37                         radioObj.checked = (radioObj.value == newValue.toString());\r
38                         return;\r
39                 }\r
40                 for(var i = 0; i < radioLength; i++) {\r
41                         radioObj[i].checked = false;\r
42                         if(radioObj[i].value == newValue.toString()) {\r
43                                 radioObj[i].checked = true;\r
44                         }\r
45                 }\r
46         }\r
47 \r
48         var tags_contents =  [\r
49                                 {\r
50                                         id : 'options',\r
51                                         label : editor.lang.scayt.optionsTab,\r
52                                         elements : [\r
53                                                 {\r
54                                                         type : 'html',\r
55                                                         id : 'options',\r
56                                                         html :  '<form name="optionsbar"><div class="inner_options">' +\r
57                                                                         '       <div class="messagebox"></div>' +\r
58                                                                         '       <div style="display:none;">' +\r
59                                                                         '               <input type="checkbox" name="options"  id="allCaps" />' +\r
60                                                                         '               <label for="allCaps" id="label_allCaps"></label>' +\r
61                                                                         '       </div>' +\r
62                                                                         '       <div style="display:none;">' +\r
63                                                                         '               <input name="options" type="checkbox"  id="ignoreDomainNames" />' +\r
64                                                                         '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +\r
65                                                                         '       </div>' +\r
66                                                                         '       <div style="display:none;">' +\r
67                                                                         '       <input name="options" type="checkbox"  id="mixedCase" />' +\r
68                                                                         '               <label for="mixedCase" id="label_mixedCase"></label>' +\r
69                                                                         '       </div>' +\r
70                                                                         '       <div style="display:none;">' +\r
71                                                                         '               <input name="options" type="checkbox"  id="mixedWithDigits" />' +\r
72                                                                         '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +\r
73                                                                         '       </div>' +\r
74                                                                         '</div></form>'\r
75                                                 }\r
76                                         ]\r
77                                 },\r
78                                 {\r
79                                         id : 'langs',\r
80                                         label : editor.lang.scayt.languagesTab,\r
81                                         elements : [\r
82                                                 {\r
83                                                         type : 'html',\r
84                                                         id : 'langs',\r
85                                                         html :  '<form name="languagesbar"><div class="inner_langs">' +\r
86                                                                         '       <div class="messagebox"></div>  ' +\r
87                                                                         '   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol" ></div>' +\r
88                                                                         '   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol"></div>' +\r
89                                                                         '</div></form>'\r
90                                                 }\r
91                                         ]\r
92                                 },\r
93                                 {\r
94                                         id : 'dictionaries',\r
95                                         label : editor.lang.scayt.dictionariesTab,\r
96                                         elements : [\r
97                                                 {\r
98                                                         type : 'html',\r
99                                                         style: '',\r
100                                                         id : 'dictionaries',\r
101                                                         html :  '<form name="dictionarybar"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +\r
102                                                                         '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +\r
103                                                                         '       <div style="margin:5px auto; width:80%;white-space:normal;"> ' +\r
104                                                                         '       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+\r
105                                                                         '               <span class="cke_dialog_ui_labeled_content" >'+\r
106                                                                         '                       <div class="cke_dialog_ui_input_text">'+\r
107                                                                         '                               <input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+\r
108                                                                         '               </div></span></div>'+\r
109                                                                         '               <div style="margin:5px auto; width:80%;white-space:normal;">'+\r
110                                                                         '                       <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+\r
111                                                                         '                               </a>' +\r
112                                                                         '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+\r
113                                                                         '                               </a>' +\r
114                                                                         '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+\r
115                                                                         '                               </a>' +\r
116                                                                         '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+\r
117                                                                         '                               </a>' +\r
118                                                                         '               </div>' +\r
119                                                                         '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +\r
120                                                                         '</div></form>'\r
121                                                 }\r
122                                         ]\r
123                                 },\r
124                                 {\r
125                                         id : 'about',\r
126                                         label : editor.lang.scayt.aboutTab,\r
127                                         elements : [\r
128                                                 {\r
129                                                         type : 'html',\r
130                                                         id : 'about',\r
131                                                         style : 'margin: 5px 5px;',\r
132                                                         html : '<div id="scayt_about"></div>'\r
133                                                 }\r
134                                         ]\r
135                                 }\r
136                         ];\r
137 \r
138         var dialogDefiniton = {\r
139                 title : editor.lang.scayt.title,\r
140                 minWidth : 360,\r
141                 minHeight : 220,\r
142                 onShow : function()\r
143                 {\r
144                         var dialog = this;\r
145                         dialog.data = editor.fire( 'scaytDialog', {} );\r
146                         dialog.options = dialog.data.scayt_control.option();\r
147                         dialog.sLang = dialog.data.scayt_control.sLang;\r
148 \r
149                         if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )\r
150                         {\r
151                                 alert( 'Error loading application service' );\r
152                                 dialog.hide();\r
153                                 return;\r
154                         }\r
155 \r
156                         var stop = 0;\r
157                         if ( firstLoad )\r
158                         {\r
159                                 dialog.data.scayt.getCaption( editor.langCode || 'en', function( caps )\r
160                                 {\r
161                                         if ( stop++ > 0 )       // Once only\r
162                                                 return;\r
163                                         captions = caps;\r
164                                         init_with_captions.apply( dialog );\r
165                                         reload.apply( dialog );\r
166                                         firstLoad = false;\r
167                                 });\r
168                         }\r
169                         else\r
170                                 reload.apply( dialog );\r
171 \r
172                         dialog.selectPage( dialog.data.tab );\r
173                 },\r
174                 onOk : function()\r
175                 {\r
176                         var scayt_control =  this.data.scayt_control;\r
177                         scayt_control.option( this.options );\r
178                         // Setup languge if it was changed.\r
179                         var csLang = this.chosed_lang;\r
180                         scayt_control.setLang( csLang );\r
181                         scayt_control.refresh();\r
182                 },\r
183                 onCancel: function()\r
184                 {\r
185                         var o = getBOMAllOptions();\r
186                         for (i in o)\r
187                                 o[i].checked = false;\r
188 \r
189                         setCheckedValue(getBOMAllLangs(),"");\r
190                 },\r
191                 contents : contents\r
192         };\r
193 \r
194         var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );\r
195 \r
196         tags = CKEDITOR.plugins.scayt.uiTabs;\r
197 \r
198         for ( i in tags )\r
199         {\r
200                 if ( tags[ i ] == 1 )\r
201                         contents[ contents.length ] = tags_contents[ i ];\r
202         }\r
203         if ( tags[2] == 1 )\r
204                 userDicActive = true;\r
205 \r
206 \r
207         var init_with_captions = function()\r
208         {\r
209                 var dialog = this,\r
210                         lang_list = dialog.data.scayt.getLangList(),\r
211                         buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],\r
212                         labels = optionsIds,\r
213                         i;\r
214 \r
215                 // Add buttons titles\r
216                 if (userDicActive)\r
217                 {\r
218                         for ( i in buttons )\r
219                         {\r
220                                 var button = buttons[ i ];\r
221                                 doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );\r
222                         }\r
223                         doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );\r
224                 }\r
225 \r
226 \r
227                 // Fill options and dictionary labels.\r
228                 if (tags[0] == 1)\r
229                 {\r
230                         for ( i in labels )\r
231                         {\r
232                                 var label = 'label_' + labels[ i ],\r
233                                         labelElement = doc.getById( label );\r
234 \r
235                                 if (  'undefined' != typeof labelElement\r
236                                    && 'undefined' != typeof captions[ label ]\r
237                                    && 'undefined' != typeof dialog.options[labels[ i ]] )\r
238                                 {\r
239                                         labelElement.setHtml( captions[ label ] );\r
240                                         var labelParent = labelElement.getParent();\r
241                                         labelParent.$.style.display = "block";\r
242                                 }\r
243                         }\r
244                 }\r
245 \r
246                 var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+\r
247                                         '<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +\r
248                                         '<p>' + captions[ 'about_throwt_copy' ] + '</p>';\r
249 \r
250                 doc.getById( 'scayt_about' ).setHtml( about );\r
251 \r
252                 // Create languages tab.\r
253                 var createOption = function( option, list )\r
254                 {\r
255                         var label = doc.createElement( 'label' );\r
256                         label.setAttribute( 'for', 'cke_option' + option );\r
257                         label.setHtml( list[ option ] );\r
258 \r
259                         if ( dialog.sLang == option )   // Current.\r
260                                 dialog.chosed_lang = option;\r
261 \r
262                         var div = doc.createElement( 'div' );\r
263                         var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +\r
264                                         option + '" type="radio" ' +\r
265                                         ( dialog.sLang == option ? 'checked="checked"' : '' ) +\r
266                                         ' value="' + option + '" name="scayt_lang" />' );\r
267 \r
268                         radio.on( 'click', function()\r
269                                 {\r
270                                         this.$.checked = true;\r
271                                         dialog.chosed_lang = option;\r
272                                 });\r
273 \r
274                         div.append( radio );\r
275                         div.append( label );\r
276 \r
277                         return {\r
278                                 lang : list[ option ],\r
279                                 code : option,\r
280                                 radio : div\r
281                         };\r
282                 };\r
283 \r
284                 var langList = [];\r
285                 if (tags[1] ==1 )\r
286                 {\r
287                         for ( i in lang_list.rtl )\r
288                                 langList[ langList.length ] = createOption( i, lang_list.ltr );\r
289 \r
290                         for ( i in lang_list.ltr )\r
291                                 langList[ langList.length  ] = createOption( i, lang_list.ltr );\r
292 \r
293                         langList.sort(  function( lang1, lang2 )\r
294                                 {\r
295                                         return ( lang2.lang > lang1.lang ) ? -1 : 1 ;\r
296                                 });\r
297 \r
298                         var fieldL = doc.getById( 'scayt_lcol' ),\r
299                                 fieldR = doc.getById( 'scayt_rcol' );\r
300                         for ( i=0; i < langList.length; i++ )\r
301                         {\r
302                                 var field = ( i < langList.length / 2 ) ? fieldL : fieldR;\r
303                                 field.append( langList[ i ].radio );\r
304                         }\r
305                 }\r
306 \r
307                 // user dictionary handlers\r
308                 var dic = {};\r
309                 dic.dic_create = function( el, dic_name , dic_buttons )\r
310                 {\r
311                         // comma separated button's ids include repeats if exists\r
312                         var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
313 \r
314                         var err_massage = captions["err_dic_create"];\r
315                         var suc_massage = captions["succ_dic_create"];\r
316 \r
317                         window.scayt.createUserDictionary(dic_name,\r
318                                 function(arg)\r
319                                 {\r
320                                         hide_dic_buttons ( all_buttons );\r
321                                         display_dic_buttons ( dic_buttons[1] );\r
322                                         suc_massage = suc_massage.replace("%s" , arg.dname );\r
323                                         dic_success_message (suc_massage);\r
324                                 },\r
325                                 function(arg)\r
326                                 {\r
327                                         err_massage = err_massage.replace("%s" ,arg.dname );\r
328                                         dic_error_message ( err_massage + "( "+ (arg.message || "") +")");\r
329                                 });\r
330 \r
331                 };\r
332 \r
333                 dic.dic_rename = function( el, dic_name )\r
334                 {\r
335                         //\r
336                         // try to rename dictionary\r
337                         var err_massage = captions["err_dic_rename"] || "";\r
338                         var suc_massage = captions["succ_dic_rename"] || "";\r
339                         window.scayt.renameUserDictionary(dic_name,\r
340                                 function(arg)\r
341                                         {\r
342                                                 suc_massage = suc_massage.replace("%s" , arg.dname );\r
343                                                 set_dic_name( dic_name );\r
344                                                 dic_success_message ( suc_massage );\r
345                                         },\r
346                                 function(arg)\r
347                                         {\r
348                                                 err_massage = err_massage.replace("%s" , arg.dname  );\r
349                                                 set_dic_name( dic_name );\r
350                                                 dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );\r
351                                         });\r
352                 };\r
353 \r
354                 dic.dic_delete = function ( el, dic_name , dic_buttons )\r
355                 {\r
356                         var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
357                         var err_massage = captions["err_dic_delete"];\r
358                         var suc_massage = captions["succ_dic_delete"];\r
359 \r
360                         // try to delete dictionary\r
361                         window.scayt.deleteUserDictionary(\r
362                                 function(arg)\r
363                                 {\r
364                                         suc_massage = suc_massage.replace("%s" , arg.dname );\r
365                                         hide_dic_buttons ( all_buttons );\r
366                                         display_dic_buttons ( dic_buttons[0] );\r
367                                         set_dic_name( "" ); // empty input field\r
368                                         dic_success_message( suc_massage );\r
369                                 },\r
370                                 function(arg)\r
371                                 {\r
372                                         err_massage = err_massage.replace("%s" , arg.dname );\r
373                                         dic_error_message(err_massage);\r
374                                 });\r
375                 };\r
376 \r
377                 dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )\r
378                         {\r
379                                 // try to restore existing dictionary\r
380                                 var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
381                                 var err_massage = captions["err_dic_restore"];\r
382                                 var suc_massage = captions["succ_dic_restore"];\r
383 \r
384                                 window.scayt.restoreUserDictionary(dic_name,\r
385                                         function(arg)\r
386                                         {\r
387                                                 suc_massage = suc_massage.replace("%s" , arg.dname );\r
388                                                 hide_dic_buttons ( all_buttons );\r
389                                                 display_dic_buttons(dic_buttons[1]);\r
390                                                 dic_success_message( suc_massage );\r
391                                         },\r
392                                         function(arg)\r
393                                         {\r
394                                                 err_massage = err_massage.replace("%s" , arg.dname );\r
395                                                 dic_error_message( err_massage );\r
396                                         });\r
397                         };\r
398 \r
399                 function onDicButtonClick( ev )\r
400                 {\r
401                         var dic_name = doc.getById('dic_name').getValue();\r
402                         if ( !dic_name )\r
403                         {\r
404                                 dic_error_message(" Dictionary name should not be empty. ");\r
405                                 return false;\r
406                         }\r
407                         try{\r
408                                 var el = id = ev.data.getTarget().getParent();\r
409                                 var id = el.getId();\r
410                                 dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );\r
411                         }catch(err){\r
412                                 dic_error_message(" Dictionary error. ");\r
413                         }\r
414 \r
415                         return true;\r
416                 }\r
417 \r
418                 // ** bind event listeners\r
419                 var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),\r
420                         l;\r
421 \r
422                 for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )\r
423                 {\r
424                         var dic_button = doc.getById(arr_buttons[i]);\r
425                         if ( dic_button )\r
426                                 dic_button.on( 'click', onDicButtonClick, this );\r
427                 }\r
428         };\r
429 \r
430         var reload = function()\r
431         {\r
432                 var dialog = this;\r
433                 // for enabled options tab\r
434                 if (tags[0] == 1){\r
435                         var opto = getBOMAllOptions();\r
436 \r
437                         // Animate options.\r
438                         for ( var k=0,l = opto.length; k<l;k++ )\r
439                         {\r
440 \r
441                                 var i = opto[k].id;\r
442                                 var checkbox = doc.getById( i );\r
443 \r
444                                 if ( checkbox )\r
445                                 {\r
446                                         opto[k].checked = false;\r
447                                         //alert (opto[k].removeAttribute)\r
448                                         if ( dialog.options[ i ] == 1 )\r
449                                         {\r
450                                                 opto[k].checked = true;\r
451                                         }\r
452 \r
453 \r
454                                         // Bind events. Do it only once.\r
455                                         if ( firstLoad )\r
456                                         {\r
457                                                 checkbox.on( 'click', function()\r
458                                                 {\r
459                                                         dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;\r
460                                                 });\r
461                                         }\r
462                                 }\r
463                         }\r
464                 }\r
465 \r
466                 //for enabled languages tab\r
467                 if ( tags[1] == 1 )\r
468                 {\r
469                         var domLang = doc.getById("cke_option"+dialog.sLang);\r
470                         setCheckedValue(domLang.$,dialog.sLang);\r
471                 }\r
472 \r
473                 // * user dictionary\r
474                 if ( userDicActive )\r
475                 {\r
476                         window.scayt.getNameUserDictionary(\r
477                                 function( o )\r
478                                 {\r
479                                         var dic_name = o.dname;\r
480                                         hide_dic_buttons( dic_buttons[0] + ',' + dic_buttons[1] );\r
481                                         if ( dic_name )\r
482                                         {\r
483                                                 doc.getById( 'dic_name' ).setValue(dic_name);\r
484                                                 display_dic_buttons( dic_buttons[1] );\r
485                                         }\r
486                                         else\r
487                                                 display_dic_buttons( dic_buttons[0] );\r
488 \r
489                                 },\r
490                                 function ()\r
491                                 {\r
492                                         doc.getById( 'dic_name' ).setValue("");\r
493                                 });\r
494                         dic_success_message("");\r
495                 }\r
496 \r
497         };\r
498 \r
499         function dic_error_message ( m )\r
500         {\r
501                 doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );\r
502         }\r
503         function dic_success_message ( m )\r
504         {\r
505                 doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;\r
506         }\r
507         function display_dic_buttons ( sIds )\r
508         {\r
509 \r
510                 sIds = String( sIds );\r
511                 var aIds = sIds.split(',');\r
512                 for ( var i=0, l = aIds.length; i < l ; i+=1)\r
513                 {\r
514                         doc.getById( aIds[i] ).$.style.display = "inline";\r
515                 }\r
516 \r
517         }\r
518         function hide_dic_buttons ( sIds )\r
519         {\r
520                 sIds = String( sIds );\r
521                 var aIds = sIds.split(',');\r
522                 for ( var i = 0, l = aIds.length; i < l ; i += 1 )\r
523                 {\r
524                         doc.getById( aIds[i] ).$.style.display = "none";\r
525                 }\r
526         }\r
527         function set_dic_name ( dic_name )\r
528         {\r
529                 doc.getById('dic_name').$.value= dic_name;\r
530         }\r
531 \r
532         return dialogDefiniton;\r
533 });\r