Mimimum syndical pour en faire un produit zope / cmf.
[ckeditor.git] / skins / ckeditor / _source / plugins / scayt / dialogs / options.js
diff --git a/skins/ckeditor/_source/plugins/scayt/dialogs/options.js b/skins/ckeditor/_source/plugins/scayt/dialogs/options.js
new file mode 100644 (file)
index 0000000..3bd9916
--- /dev/null
@@ -0,0 +1,537 @@
+/*\r
+Copyright (c) 2003-2011, 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
+               editorName = editor.name,\r
+               tags = CKEDITOR.plugins.scayt.getUiTabs( editor ),\r
+               i,\r
+               contents = [],\r
+               userDicActive = 0,\r
+               dic_buttons = [\r
+                       // [0] contains buttons for creating\r
+                       "dic_create_" + editorName + ",dic_restore_" + editorName,\r
+                       // [1] contains buton for manipulation\r
+                       "dic_rename_" + editorName + ",dic_delete_" + editorName\r
+               ],\r
+               optionsIds = [ 'mixedCase', 'mixedWithDigits', 'allCaps', 'ignoreDomainNames' ];\r
+\r
+       // common operations\r
+\r
+       function getBOMAllOptions()\r
+       {\r
+               if (typeof document.forms["optionsbar_" + editorName] != "undefined")\r
+                       return document.forms["optionsbar_" + editorName]["options"];\r
+               return [];\r
+       }\r
+       function getBOMAllLangs()\r
+       {\r
+               if (typeof document.forms["languagesbar_" + editorName] != "undefined")\r
+                       return document.forms["languagesbar_" + editorName]["scayt_lang"];\r
+               return [];\r
+       }\r
+\r
+       function setCheckedValue( radioObj, newValue )\r
+       {\r
+               if ( !radioObj )\r
+                       return;\r
+               var radioLength = radioObj.length;\r
+               if ( radioLength == undefined )\r
+               {\r
+                       radioObj.checked = radioObj.value == newValue.toString();\r
+                       return;\r
+               }\r
+               for ( var i = 0; i < radioLength; i++ )\r
+               {\r
+                       radioObj[i].checked = false;\r
+                       if ( radioObj[i].value == newValue.toString() )\r
+                               radioObj[i].checked = true;\r
+               }\r
+       }\r
+\r
+       var lang = editor.lang.scayt;\r
+       var tags_contents =  [\r
+                               {\r
+                                       id : 'options',\r
+                                       label : lang.optionsTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'options',\r
+                                                       html :  '<form name="optionsbar_' + editorName + '"><div class="inner_options">' +\r
+                                                                       '       <div class="messagebox"></div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input type="checkbox" name="options"  id="allCaps_' + editorName + '" />' +\r
+                                                                       '               <label for="allCaps" id="label_allCaps_' + editorName + '"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input name="options" type="checkbox"  id="ignoreDomainNames_' + editorName + '" />' +\r
+                                                                       '               <label for="ignoreDomainNames" id="label_ignoreDomainNames_' + editorName + '"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '       <input name="options" type="checkbox"  id="mixedCase_' + editorName + '" />' +\r
+                                                                       '               <label for="mixedCase" id="label_mixedCase_' + editorName + '"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '       <div style="display:none;">' +\r
+                                                                       '               <input name="options" type="checkbox"  id="mixedWithDigits_' + editorName + '" />' +\r
+                                                                       '               <label for="mixedWithDigits" id="label_mixedWithDigits_' + editorName + '"></label>' +\r
+                                                                       '       </div>' +\r
+                                                                       '</div></form>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'langs',\r
+                                       label : lang.languagesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'langs',\r
+                                                       html :  '<form name="languagesbar_' + editorName + '"><div class="inner_langs">' +\r
+                                                                       '       <div class="messagebox"></div>  ' +\r
+                                                                       '   <div style="float:left;width:45%;margin-left:5px;" id="scayt_lcol_' + editorName + '" ></div>' +\r
+                                                                       '   <div style="float:left;width:45%;margin-left:15px;" id="scayt_rcol_' + editorName + '"></div>' +\r
+                                                                       '</div></form>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'dictionaries',\r
+                                       label : lang.dictionariesTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       style: '',\r
+                                                       id : 'dictionaries',\r
+                                                       html :  '<form name="dictionarybar_' + editorName + '"><div class="inner_dictionary" style="text-align:left; white-space:normal; width:320px; overflow: hidden;">' +\r
+                                                                       '       <div style="margin:5px auto; width:80%;white-space:normal; overflow:hidden;" id="dic_message_' + editorName + '"> </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_' + editorName + '" 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_' + editorName + '">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_delete_' + editorName + '">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_rename_' + editorName + '">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '                       <a  style="display:none;" class="cke_dialog_ui_button" href="javascript:void(0)" id="dic_restore_' + editorName + '">'+\r
+                                                                       '                               </a>' +\r
+                                                                       '               </div>' +\r
+                                                                       '       <div style="margin:5px auto; width:95%;white-space:normal;" id="dic_info_' + editorName + '"></div>' +\r
+                                                                       '</div></form>'\r
+                                               }\r
+                                       ]\r
+                               },\r
+                               {\r
+                                       id : 'about',\r
+                                       label : lang.aboutTab,\r
+                                       elements : [\r
+                                               {\r
+                                                       type : 'html',\r
+                                                       id : 'about',\r
+                                                       style : 'margin: 5px 5px;',\r
+                                                       html : '<div id="scayt_about_' + editorName + '"></div>'\r
+                                               }\r
+                                       ]\r
+                               }\r
+                       ];\r
+\r
+       var dialogDefiniton = {\r
+               title : lang.title,\r
+               minWidth : 360,\r
+               minHeight : 220,\r
+               onShow : function()\r
+               {\r
+                       var dialog = this;\r
+                       dialog.data = editor.fire( 'scaytDialog', {} );\r
+                       dialog.options = dialog.data.scayt_control.option();\r
+                       dialog.chosed_lang = 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( editor.langCode || '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
+                       scayt_control.option( this.options );\r
+                       // Setup language if it was changed.\r
+                       var csLang = this.chosed_lang;\r
+                       scayt_control.setLang( csLang );\r
+                       scayt_control.refresh();\r
+               },\r
+               onCancel: function()\r
+               {\r
+                       var o = getBOMAllOptions();\r
+                       for ( var i in o )\r
+                               o[i].checked = false;\r
+\r
+                       setCheckedValue( getBOMAllLangs(), "" );\r
+               },\r
+               contents : contents\r
+       };\r
+\r
+       var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor );\r
+\r
+       for ( i = 0; i < tags.length; i++ )\r
+       {\r
+               if ( tags[ i ] == 1 )\r
+                       contents[ contents.length ] = tags_contents[ i ];\r
+       }\r
+       if ( tags[2] == 1 )\r
+               userDicActive = 1;\r
+\r
+       var init_with_captions = function()\r
+       {\r
+               var dialog = this,\r
+                       lang_list = dialog.data.scayt.getLangList(),\r
+                       buttonCaptions = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ],\r
+                       buttonIds = [],\r
+                       langList = [],\r
+                       labels = optionsIds,\r
+                       i;\r
+\r
+               // Add buttons titles\r
+               if ( userDicActive )\r
+               {\r
+                       for ( i = 0; i < buttonCaptions.length; i++ )\r
+                       {\r
+                               buttonIds[ i ] = buttonCaptions[ i ] + "_" + editorName;\r
+                               doc.getById( buttonIds[ i ] ).setHtml( '<span class="cke_dialog_ui_button">' + captions[ 'button_' + buttonCaptions[ i ]]  +'</span>' );\r
+                       }\r
+                       doc.getById( 'dic_info_' + editorName ).setHtml( captions[ 'dic_info' ] );\r
+               }\r
+\r
+               // Fill options and dictionary labels.\r
+               if ( tags[0] == 1 )\r
+               {\r
+                       for ( i in labels )\r
+                       {\r
+                               var labelCaption = 'label_' + labels[ i ],\r
+                                       labelId = labelCaption + '_' + editorName,\r
+                                       labelElement = doc.getById( labelId );\r
+\r
+                               if (  'undefined' != typeof labelElement\r
+                                  && 'undefined' != typeof captions[ labelCaption ]\r
+                                  && 'undefined' != typeof dialog.options[labels[ i ]] )\r
+                               {\r
+                                       labelElement.setHtml( captions[ labelCaption ] );\r
+                                       var labelParent = labelElement.getParent();\r
+                                       labelParent.$.style.display = "block";\r
+                               }\r
+                       }\r
+               }\r
+\r
+               var about = '<p><img src="' + window.scayt.getAboutInfo().logoURL + '" /></p>' +\r
+                               '<p>' + captions[ 'version' ] + window.scayt.getAboutInfo().version.toString() + '</p>' +\r
+                               '<p>' + captions[ 'about_throwt_copy' ] + '</p>';\r
+\r
+               doc.getById( 'scayt_about_' + editorName ).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
+               if ( tags[1] ==1 )\r
+               {\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_' + editorName ),\r
+                               fieldR = doc.getById( 'scayt_rcol_' + editorName );\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
+\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
+\r
+                       window.scayt.createUserDictionary( dic_name,\r
+                               function( arg )\r
+                               {\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
+                                       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
+                       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
+                                               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
+                                               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
+                       window.scayt.deleteUserDictionary(\r
+                               function( arg )\r
+                               {\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
+                                       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
+                                               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
+                                               err_massage = err_massage.replace("%s" , arg.dname );\r
+                                               dic_error_message( err_massage );\r
+                                       });\r
+                       };\r
+\r
+               function onDicButtonClick( ev )\r
+               {\r
+                       var dic_name = doc.getById('dic_name_' + editorName).getValue();\r
+                       if ( !dic_name )\r
+                       {\r
+                               dic_error_message(" Dictionary name should not be empty. ");\r
+                               return false;\r
+                       }\r
+                       try{\r
+                               var el = ev.data.getTarget().getParent();\r
+                               var id = /(dic_\w+)_[\w\d]+/.exec(el.getId())[1];\r
+                               dic[ id ].apply( null, [ el, dic_name, dic_buttons ] );\r
+                       }\r
+                       catch(err)\r
+                       {\r
+                               dic_error_message(" Dictionary error. ");\r
+                       }\r
+\r
+                       return true;\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
+               // for enabled options tab\r
+               if ( tags[0] == 1 ){\r
+                       var opto = getBOMAllOptions();\r
+\r
+                       // Animate options.\r
+                       for ( var k=0,l = opto.length; k<l;k++ )\r
+                       {\r
+\r
+                               var i = opto[k].id;\r
+                               var checkbox = doc.getById( i );\r
+\r
+                               if ( checkbox )\r
+                               {\r
+                                       opto[k].checked = false;\r
+                                       //alert (opto[k].removeAttribute)\r
+                                       if ( dialog.options[ i.split("_")[0] ] == 1 )\r
+                                       {\r
+                                               opto[k].checked = true;\r
+                                       }\r
+\r
+\r
+                                       // Bind events. Do it only once.\r
+                                       if ( firstLoad )\r
+                                       {\r
+                                               checkbox.on( 'click', function()\r
+                                               {\r
+                                                       dialog.options[ this.getId().split("_")[0] ] = this.$.checked ? 1 : 0 ;\r
+                                               });\r
+                                       }\r
+                               }\r
+                       }\r
+               }\r
+\r
+               //for enabled languages tab\r
+               if ( tags[1] == 1 )\r
+               {\r
+                       var domLang = doc.getById("cke_option" + dialog.sLang);\r
+                       setCheckedValue( domLang.$,dialog.sLang );\r
+               }\r
+\r
+               // * user dictionary\r
+               if ( userDicActive )\r
+               {\r
+                       window.scayt.getNameUserDictionary(\r
+                               function( o )\r
+                               {\r
+                                       var dic_name = o.dname;\r
+                                       hide_dic_buttons( dic_buttons[0] + ',' + dic_buttons[1] );\r
+                                       if ( dic_name )\r
+                                       {\r
+                                               doc.getById( 'dic_name_' + editorName ).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_' + editorName ).setValue("");\r
+                               });\r
+                       dic_success_message("");\r
+               }\r
+\r
+       };\r
+\r
+       function dic_error_message( m )\r
+       {\r
+               doc.getById('dic_message_' + editorName).setHtml('<span style="color:red;">' + m + '</span>' );\r
+       }\r
+       function dic_success_message( m )\r
+       {\r
+               doc.getById('dic_message_' + editorName).setHtml('<span style="color:blue;">' + m + '</span>') ;\r
+       }\r
+       function display_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
+                       doc.getById( aIds[i] ).$.style.display = "inline";\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
+                       doc.getById( aIds[i] ).$.style.display = "none";\r
+       }\r
+       function set_dic_name( dic_name )\r
+       {\r
+               doc.getById('dic_name_' + editorName).$.value= dic_name;\r
+       }\r
+\r
+       return dialogDefiniton;\r
+});\r