--- /dev/null
+/*\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