JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.0
[ckeditor.git] / _source / plugins / scayt / dialogs / options.js
diff --git a/_source/plugins/scayt/dialogs/options.js b/_source/plugins/scayt/dialogs/options.js
new file mode 100644 (file)
index 0000000..120adbc
--- /dev/null
@@ -0,0 +1,494 @@
+/*\r
+Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.\r
+For licensing, see LICENSE.html or http://ckeditor.com/license\r
+*/\r
+\r
+CKEDITOR.dialog.add( 'scaytcheck', function( editor )\r
+{\r
+       var firstLoad = true,\r
+               captions,\r
+               doc = CKEDITOR.document,\r
+               tags = [],\r
+               i,\r
+               contents = [],\r
+               userDicActive = false;\r
+       var dic_buttons = [\r
+               // [0] contains buttons for creating\r
+               "dic_create,dic_restore",\r
+               // [1] contains buton for manipulation\r
+               "dic_rename,dic_delete"\r
+       ];\r
+       var tags_contents =  [\r
+                               {\r
+                                       id : 'options',\r
+                                       label : editor.lang.scayt.optionsTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'options',\r
+                                                       html :  '<div class="inner_options">' +\r
+                                                                       '       <div class="messagebox"></div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="allCaps" />' +\r
+                                                                       '               <label for="allCaps" id="label_allCaps"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="ignoreDomainNames" />' +\r
+                                                                       '               <label for="ignoreDomainNames" id="label_ignoreDomainNames"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '       <input type="checkbox" value="0" id="mixedCase" />' +\r
+                                                                       '               <label for="mixedCase" id="label_mixedCase"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" value="0" id="mixedWithDigits" />' +\r
+                                                                       '               <label for="mixedWithDigits" id="label_mixedWithDigits"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'langs',\r
+                                       label : editor.lang.scayt.languagesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'langs',\r
+                                                       html :  '<div class="inner_langs">' +\r
+                                                                       '       <div class="messagebox"></div>  ' +\r
+                                                                       '   <div style="float:left;width:47%;margin-left:5px;" id="scayt_lcol" ></div>' +\r
+                                                                       '   <div style="float:left;width:47%;margin-left:15px;" id="scayt_rcol"></div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'dictionaries',\r
+                                       label : editor.lang.scayt.dictionariesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       style: '',\r
+                                                       id : 'dic',\r
+                                                       html :  '<div class="inner_dictionary" style="text-align:left; white-space:normal;">' +\r
+                                                                       '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message"> </div>' +\r
+                                                                       '       <div style="margin:5px auto; width:80%;white-space:normal;"> ' +\r
+                                                                       '       <span class="cke_dialog_ui_labeled_label" >Dictionary name</span><br>'+\r
+                                                                       '               <span class="cke_dialog_ui_labeled_content" >'+\r
+                                                                       '                       <div class="cke_dialog_ui_input_text">'+\r
+                                                                       '                               <input id="dic_name" type="text" class="cke_dialog_ui_input_text"/>'+\r
+                                                                       '               </div></span></div>'+\r
+                                                                       '               <div style="margin:5px auto; width:80%;white-space:normal;">'+\r
+                                                                       '                       <a style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_create">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '               </div>' +\r
+                                                                       '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info"></div>' +\r
+                                                                       '</div>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'about',\r
+                                       label : editor.lang.scayt.aboutTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'about',\r
+                                                       style : 'margin: 10px 40px;',\r
+                                                       html : '<div id="scayt_about"></div>'\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ];\r
+       var dialogDefiniton = {\r
+               title : editor.lang.scayt.title,\r
+               minWidth : 340,\r
+               minHeight : 200,\r
+               onShow : function()\r
+               {\r
+                       var dialog = this;\r
+                       dialog.data = editor.fire( 'scaytDialog', {} );\r
+                       dialog.options = dialog.data.scayt_control.option();\r
+                       dialog.sLang = dialog.data.scayt_control.sLang;\r
+\r
+                       if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control )\r
+                       {\r
+                               alert( 'Error loading application service' );\r
+                               dialog.hide();\r
+                               return;\r
+                       }\r
+\r
+                       var stop = 0;\r
+                       if ( firstLoad )\r
+                       {\r
+                               dialog.data.scayt.getCaption( 'en', function( caps )\r
+                                       {\r
+                                               if ( stop++ > 0 )       // Once only\r
+                                                       return;\r
+                                               captions = caps;\r
+                                               init_with_captions.apply( dialog );\r
+                                               reload.apply( dialog );\r
+                                               firstLoad = false;\r
+                                       });\r
+                       }\r
+                       else\r
+                               reload.apply( dialog );\r
+\r
+                       dialog.selectPage( dialog.data.tab );\r
+               },\r
+               onOk : function()\r
+               {\r
+                       var scayt_control =  this.data.scayt_control,\r
+                               o = scayt_control.option(),\r
+                               c = 0;\r
+\r
+                       // Set up options if any was set.\r
+                       for ( var i in this.options )\r
+                       {\r
+                               if (o[i] != this.options[ i ] && c === 0 )\r
+                               {\r
+                                       scayt_control.option( this.options );\r
+                                       c++;\r
+                               }\r
+                       }\r
+\r
+                       // Setup languge if it was changed.\r
+                       var csLang = this.chosed_lang;\r
+                       if ( csLang && this.data.sLang != csLang )\r
+                       {\r
+                               scayt_control.setLang( csLang );\r
+                               c++;\r
+                       }\r
+                       if ( c > 0 )\r
+                               scayt_control.refresh();\r
+               },\r
+               contents : contents\r
+        };\r
+\r
+       var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );\r
+       if ( scayt_control )\r
+       {\r
+               tags = scayt_control.uiTags;\r
+       }\r
+\r
+       for ( i in tags ) {\r
+               if ( tags[ i ] == 1 )\r
+                       contents[ contents.length ] = tags_contents[ i ];\r
+       }\r
+       if ( tags[2] == 1 )\r
+               userDicActive = true;\r
+\r
+       function onDicButtonClick()\r
+       {\r
+               var dic_name = doc.getById('dic_name').getValue();\r
+               if ( !dic_name )\r
+               {\r
+                       dic_error_message(" Dictionary name should not be empty. ");\r
+                       return false;\r
+               }\r
+               //apply handler\r
+               window.dic[ this.getId() ].apply( null, [ this, dic_name, dic_buttons ] );\r
+\r
+               return true;\r
+       }\r
+       var init_with_captions = function()\r
+       {\r
+               var dialog = this,\r
+                       lang_list = dialog.data.scayt.getLangList(),\r
+                       buttons = [ 'dic_create','dic_delete','dic_rename','dic_restore' ],\r
+                       labels = [ 'mixedCase','mixedWithDigits','allCaps','ignoreDomainNames' ],\r
+                       i;\r
+\r
+               // Add buttons titles\r
+               if (userDicActive)\r
+               {\r
+                       for ( i in buttons )\r
+                       {\r
+                               var button = buttons[ i ];\r
+                               doc.getById( button ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + button]  +'</span>' );\r
+                       }\r
+                       doc.getById( 'dic_info' ).setHtml( captions[ 'dic_info' ] );\r
+               }\r
+\r
+\r
+               // Fill options and dictionary labels.\r
+               for ( i in labels )\r
+               {\r
+                       var label = 'label_' + labels[ i ],\r
+                               labelElement = doc.getById( label );\r
+\r
+                       if (  'undefined' != typeof labelElement\r
+                          && 'undefined' != typeof captions[ label ]\r
+                          && 'undefined' != typeof dialog.options[labels[ i ]] )\r
+                       {\r
+                               labelElement.setHtml( captions[ label ] );\r
+                               var labelParent = labelElement.getParent();\r
+                               labelParent.$.style.display = "block";\r
+                       }\r
+               }\r
+\r
+               var about = '<p>' + captions[ 'about_throwt_image' ] + '</p>'+\r
+                                       '<p>' + captions[ 'version' ]  + dialog.data.scayt.version.toString() + '</p>' +\r
+                                       '<p>' + captions[ 'about_throwt_copy' ] + '</p>';\r
+\r
+               doc.getById( 'scayt_about' ).setHtml( about );\r
+\r
+               // Create languages tab.\r
+               var createOption = function( option, list )\r
+               {\r
+                       var label = doc.createElement( 'label' );\r
+                       label.setAttribute( 'for', 'cke_option' + option );\r
+                       label.setHtml( list[ option ] );\r
+\r
+                       if ( dialog.sLang == option )   // Current.\r
+                               dialog.chosed_lang = option;\r
+\r
+                       var div = doc.createElement( 'div' );\r
+                       var radio = CKEDITOR.dom.element.createFromHtml( '<input id="cke_option' +\r
+                                       option + '" type="radio" ' +\r
+                                       ( dialog.sLang == option ? 'checked="checked"' : '' ) +\r
+                                       ' value="' + option + '" name="scayt_lang" />' );\r
+\r
+                       radio.on( 'click', function()\r
+                               {\r
+                                       this.$.checked = true;\r
+                                       dialog.chosed_lang = option;\r
+                               });\r
+\r
+                       div.append( radio );\r
+                       div.append( label );\r
+\r
+                       return {\r
+                               lang : list[ option ],\r
+                               code : option,\r
+                               radio : div\r
+                       };\r
+               };\r
+\r
+               var langList = [];\r
+               for ( i in lang_list.rtl )\r
+                       langList[ langList.length ] = createOption( i, lang_list.ltr );\r
+\r
+               for ( i in lang_list.ltr )\r
+                       langList[ langList.length  ] = createOption( i, lang_list.ltr );\r
+\r
+               langList.sort(  function( lang1, lang2 )\r
+                       {\r
+                               return ( lang2.lang > lang1.lang ) ? -1 : 1 ;\r
+                       });\r
+\r
+               var fieldL = doc.getById( 'scayt_lcol' ),\r
+                       fieldR = doc.getById( 'scayt_rcol' );\r
+               for ( i=0; i < langList.length; i++ )\r
+               {\r
+                       var field = ( i < langList.length / 2 ) ? fieldL : fieldR;\r
+                       field.append( langList[ i ].radio );\r
+               }\r
+\r
+               // user dictionary handlers\r
+               var dic = {};\r
+               dic.dic_create = function( el, dic_name , dic_buttons )\r
+                       {\r
+                               // comma separated button's ids include repeats if exists\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+\r
+                               var err_massage = captions["err_dic_create"];\r
+                               var suc_massage = captions["succ_dic_create"];\r
+                               //console.info("--plugin ");\r
+\r
+                               window.scayt.createUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_create callback called with args" , arg );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons ( dic_buttons[1] );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       dic_success_message (suc_massage);\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_create errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" ,arg.dname );\r
+                                                       dic_error_message ( err_massage + "( "+ (arg.message || "") +")");\r
+                                               });\r
+\r
+                       };\r
+\r
+               dic.dic_rename = function( el, dic_name )\r
+                       {\r
+                               //\r
+                               // try to rename dictionary\r
+                               // @TODO: rename dict\r
+                               //console.info ( captions["err_dic_rename"] )\r
+                               var err_massage = captions["err_dic_rename"] || "";\r
+                               var suc_massage = captions["succ_dic_rename"] || "";\r
+                               window.scayt.renameUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_rename callback called with args" , arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       set_dic_name( dic_name );\r
+                                                       dic_success_message ( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_rename errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname  );\r
+                                                       set_dic_name( dic_name );\r
+                                                       dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" );\r
+                                               });\r
+                       };\r
+\r
+               dic.dic_delete = function ( el, dic_name , dic_buttons )\r
+                       {\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+                               var err_massage = captions["err_dic_delete"];\r
+                               var suc_massage = captions["succ_dic_delete"];\r
+\r
+                               // try to delete dictionary\r
+                               // @TODO: delete dict\r
+                               window.scayt.deleteUserDictionary(\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_delete callback " , dic_name ,arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons ( dic_buttons[0] );\r
+                                                       set_dic_name( "" ); // empty input field\r
+                                                       dic_success_message( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( " dic_delete errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname );\r
+                                                       dic_error_message(err_massage);\r
+                                               });\r
+                       };\r
+\r
+               dic.dic_restore = dialog.dic_restore || function ( el, dic_name , dic_buttons )\r
+                       {\r
+                               // try to restore existing dictionary\r
+                               var all_buttons = dic_buttons[0] + ',' + dic_buttons[1];\r
+                               var err_massage = captions["err_dic_restore"];\r
+                               var suc_massage = captions["succ_dic_restore"];\r
+\r
+                               window.scayt.restoreUserDictionary(dic_name,\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( "dic_restore callback called with args" , arg );\r
+                                                       suc_massage = suc_massage.replace("%s" , arg.dname );\r
+                                                       hide_dic_buttons ( all_buttons );\r
+                                                       display_dic_buttons(dic_buttons[1]);\r
+                                                       dic_success_message( suc_massage );\r
+                                               },\r
+                                       function(arg)\r
+                                               {\r
+                                                       //console.info( " dic_restore errorback called with args" , arg )\r
+                                                       err_massage = err_massage.replace("%s" , arg.dname );\r
+                                                       dic_error_message( err_massage );\r
+                                               });\r
+                       };\r
+\r
+               // ** bind event listeners\r
+               var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ),\r
+                       l;\r
+\r
+               for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 )\r
+               {\r
+                       var dic_button = doc.getById(arr_buttons[i]);\r
+                       if ( dic_button )\r
+                               dic_button.on( 'click', onDicButtonClick, this );\r
+               }\r
+       };\r
+\r
+       var reload = function()\r
+       {\r
+               var dialog = this;\r
+\r
+               // Animate options.\r
+               for ( var i in dialog.options )\r
+               {\r
+                       var checkbox = doc.getById( i );\r
+                       if ( checkbox )\r
+                       {\r
+                               checkbox.removeAttribute( 'checked' );\r
+                               if ( dialog.options[ i ] == 1 )\r
+                                       checkbox.setAttribute( 'checked', 'checked' );\r
+\r
+                               // Bind events. Do it only once.\r
+                               if ( firstLoad )\r
+                               {\r
+                                       checkbox.on( 'click', function()\r
+                                               {\r
+                                                       dialog.options[ this.getId() ] = this.$.checked ? 1 : 0 ;\r
+                                               } );\r
+                               }\r
+                       }\r
+               }\r
+\r
+               // * user dictionary\r
+               if ( userDicActive ){\r
+                       window.scayt.getNameUserDictionary(\r
+                       function( o )\r
+                       {\r
+                               var dic_name = o.dname;\r
+                               if ( dic_name )\r
+                               {\r
+                                       doc.getById( 'dic_name' ).setValue(dic_name);\r
+                                       display_dic_buttons( dic_buttons[1] );\r
+                               }\r
+                               else\r
+                                       display_dic_buttons( dic_buttons[0] );\r
+\r
+                       },\r
+                       function ()\r
+                       {\r
+                               doc.getById( 'dic_name' ).setValue("");\r
+                       });\r
+                       dic_success_message("");\r
+               }\r
+\r
+       };\r
+\r
+       function dic_error_message ( m )\r
+               {\r
+                       doc.getById('dic_message').setHtml('<span style="color:red;">' + m + '</span>' );\r
+               }\r
+    function dic_success_message ( m )\r
+               {\r
+                       doc.getById('dic_message').setHtml('<span style="color:blue;">' + m + '</span>') ;\r
+               }\r
+       function display_dic_buttons ( sIds )\r
+               {\r
+\r
+                       sIds = String( sIds );\r
+                       var aIds = sIds.split(',');\r
+                       for ( var i=0, l = aIds.length; i < l ; i+=1)\r
+                       {\r
+                               doc.getById( aIds[i] ).$.style.display = "inline";\r
+                       }\r
+\r
+               }\r
+       function hide_dic_buttons ( sIds )\r
+               {\r
+                       sIds = String( sIds );\r
+                       var aIds = sIds.split(',');\r
+                       for ( var i = 0, l = aIds.length; i < l ; i += 1 )\r
+                       {\r
+                               doc.getById( aIds[i] ).$.style.display = "none";\r
+                       }\r
+               }\r
+       function set_dic_name ( dic_name )\r
+               {\r
+                       doc.getById('dic_name').$.value= dic_name;\r
+               }\r
+\r
+       return dialogDefiniton;\r
+});\r