source: sandbox/3.0/phpgwapi/js/ckeditor/_source/plugins/scayt/dialogs/options.js @ 2862

Revision 2862, 14.7 KB checked in by rodsouza, 14 years ago (diff)

Ticket #663 - Atualizando e centralizando o CKEditor (v. 3.2.1)

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