/* Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved. For licensing, see LICENSE.html or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'scaytcheck', function( editor ) { var firstLoad = true, captions, doc = CKEDITOR.document, editorName = editor.name, tags = CKEDITOR.plugins.scayt.getUiTabs( editor ), i, contents = [], userDicActive = 0, dic_buttons = [ // [0] contains buttons for creating "dic_create_" + editorName + ",dic_restore_" + editorName, // [1] contains buton for manipulation "dic_rename_" + editorName + ",dic_delete_" + editorName ], optionsIds = [ 'mixedCase', 'mixedWithDigits', 'allCaps', 'ignoreDomainNames' ]; // common operations function getBOMAllOptions() { if (typeof document.forms["optionsbar_" + editorName] != "undefined") return document.forms["optionsbar_" + editorName]["options"]; return []; } function getBOMAllLangs() { if (typeof document.forms["languagesbar_" + editorName] != "undefined") return document.forms["languagesbar_" + editorName]["scayt_lang"]; return []; } function setCheckedValue( radioObj, newValue ) { if ( !radioObj ) return; var radioLength = radioObj.length; if ( radioLength == undefined ) { radioObj.checked = radioObj.value == newValue.toString(); return; } for ( var i = 0; i < radioLength; i++ ) { radioObj[i].checked = false; if ( radioObj[i].value == newValue.toString() ) radioObj[i].checked = true; } } var lang = editor.lang.scayt; var tags_contents = [ { id : 'options', label : lang.optionsTab, elements : [ { type : 'html', id : 'options', html : '
' } ] }, { id : 'langs', label : lang.languagesTab, elements : [ { type : 'html', id : 'langs', html : '' } ] }, { id : 'dictionaries', label : lang.dictionariesTab, elements : [ { type : 'html', style: '', id : 'dictionaries', html : '' } ] }, { id : 'about', label : lang.aboutTab, elements : [ { type : 'html', id : 'about', style : 'margin: 5px 5px;', html : '' } ] } ]; var dialogDefiniton = { title : lang.title, minWidth : 360, minHeight : 220, onShow : function() { var dialog = this; dialog.data = editor.fire( 'scaytDialog', {} ); dialog.options = dialog.data.scayt_control.option(); dialog.chosed_lang = dialog.sLang = dialog.data.scayt_control.sLang; if ( !dialog.data || !dialog.data.scayt || !dialog.data.scayt_control ) { alert( 'Error loading application service' ); dialog.hide(); return; } var stop = 0; if ( firstLoad ) { dialog.data.scayt.getCaption( editor.langCode || 'en', function( caps ) { if ( stop++ > 0 ) // Once only return; captions = caps; init_with_captions.apply( dialog ); reload.apply( dialog ); firstLoad = false; }); } else reload.apply( dialog ); dialog.selectPage( dialog.data.tab ); }, onOk : function() { var scayt_control = this.data.scayt_control; scayt_control.option( this.options ); // Setup language if it was changed. var csLang = this.chosed_lang; scayt_control.setLang( csLang ); scayt_control.refresh(); }, onCancel: function() { var o = getBOMAllOptions(); for ( var i in o ) o[i].checked = false; setCheckedValue( getBOMAllLangs(), "" ); }, contents : contents }; var scayt_control = CKEDITOR.plugins.scayt.getScayt( editor ); for ( i = 0; i < tags.length; i++ ) { if ( tags[ i ] == 1 ) contents[ contents.length ] = tags_contents[ i ]; } if ( tags[2] == 1 ) userDicActive = 1; var init_with_captions = function() { var dialog = this, lang_list = dialog.data.scayt.getLangList(), buttonCaptions = [ 'dic_create', 'dic_delete', 'dic_rename', 'dic_restore' ], buttonIds = [], langList = [], labels = optionsIds, i; // Add buttons titles if ( userDicActive ) { for ( i = 0; i < buttonCaptions.length; i++ ) { buttonIds[ i ] = buttonCaptions[ i ] + "_" + editorName; doc.getById( buttonIds[ i ] ).setHtml( ' ' ); } doc.getById( 'dic_info_' + editorName ).setHtml( captions[ 'dic_info' ] ); } // Fill options and dictionary labels. if ( tags[0] == 1 ) { for ( i in labels ) { var labelCaption = 'label_' + labels[ i ], labelId = labelCaption + '_' + editorName, labelElement = doc.getById( labelId ); if ( 'undefined' != typeof labelElement && 'undefined' != typeof captions[ labelCaption ] && 'undefined' != typeof dialog.options[labels[ i ]] ) { labelElement.setHtml( captions[ labelCaption ] ); var labelParent = labelElement.getParent(); labelParent.$.style.display = "block"; } } } var about = '' + '' + captions[ 'version' ] + window.scayt.getAboutInfo().version.toString() + '
' + '' + captions[ 'about_throwt_copy' ] + '
'; doc.getById( 'scayt_about_' + editorName ).setHtml( about ); // Create languages tab. var createOption = function( option, list ) { var label = doc.createElement( 'label' ); label.setAttribute( 'for', 'cke_option' + option ); label.setHtml( list[ option ] ); if ( dialog.sLang == option ) // Current. dialog.chosed_lang = option; var div = doc.createElement( 'div' ); var radio = CKEDITOR.dom.element.createFromHtml( '' ); radio.on( 'click', function() { this.$.checked = true; dialog.chosed_lang = option; }); div.append( radio ); div.append( label ); return { lang : list[ option ], code : option, radio : div }; }; if ( tags[1] ==1 ) { for ( i in lang_list.rtl ) langList[ langList.length ] = createOption( i, lang_list.ltr ); for ( i in lang_list.ltr ) langList[ langList.length ] = createOption( i, lang_list.ltr ); langList.sort( function( lang1, lang2 ) { return ( lang2.lang > lang1.lang ) ? -1 : 1 ; }); var fieldL = doc.getById( 'scayt_lcol_' + editorName ), fieldR = doc.getById( 'scayt_rcol_' + editorName ); for ( i=0; i < langList.length; i++ ) { var field = ( i < langList.length / 2 ) ? fieldL : fieldR; field.append( langList[ i ].radio ); } } // user dictionary handlers var dic = {}; dic.dic_create = function( el, dic_name , dic_buttons ) { // comma separated button's ids include repeats if exists var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; var err_massage = captions["err_dic_create"]; var suc_massage = captions["succ_dic_create"]; window.scayt.createUserDictionary( dic_name, function( arg ) { hide_dic_buttons ( all_buttons ); display_dic_buttons ( dic_buttons[1] ); suc_massage = suc_massage.replace("%s" , arg.dname ); dic_success_message (suc_massage); }, function( arg ) { err_massage = err_massage.replace("%s" ,arg.dname ); dic_error_message ( err_massage + "( "+ (arg.message || "") +")"); }); }; dic.dic_rename = function( el, dic_name ) { // // try to rename dictionary var err_massage = captions["err_dic_rename"] || ""; var suc_massage = captions["succ_dic_rename"] || ""; window.scayt.renameUserDictionary( dic_name, function( arg ) { suc_massage = suc_massage.replace("%s" , arg.dname ); set_dic_name( dic_name ); dic_success_message ( suc_massage ); }, function( arg ) { err_massage = err_massage.replace("%s" , arg.dname ); set_dic_name( dic_name ); dic_error_message( err_massage + "( " + ( arg.message || "" ) + " )" ); }); }; dic.dic_delete = function( el, dic_name , dic_buttons ) { var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; var err_massage = captions["err_dic_delete"]; var suc_massage = captions["succ_dic_delete"]; // try to delete dictionary window.scayt.deleteUserDictionary( function( arg ) { suc_massage = suc_massage.replace("%s" , arg.dname ); hide_dic_buttons ( all_buttons ); display_dic_buttons ( dic_buttons[0] ); set_dic_name( "" ); // empty input field dic_success_message( suc_massage ); }, function( arg ) { err_massage = err_massage.replace("%s" , arg.dname ); dic_error_message(err_massage); }); }; dic.dic_restore = dialog.dic_restore || function( el, dic_name , dic_buttons ) { // try to restore existing dictionary var all_buttons = dic_buttons[0] + ',' + dic_buttons[1]; var err_massage = captions["err_dic_restore"]; var suc_massage = captions["succ_dic_restore"]; window.scayt.restoreUserDictionary(dic_name, function( arg ) { suc_massage = suc_massage.replace("%s" , arg.dname ); hide_dic_buttons ( all_buttons ); display_dic_buttons(dic_buttons[1]); dic_success_message( suc_massage ); }, function( arg ) { err_massage = err_massage.replace("%s" , arg.dname ); dic_error_message( err_massage ); }); }; function onDicButtonClick( ev ) { var dic_name = doc.getById('dic_name_' + editorName).getValue(); if ( !dic_name ) { dic_error_message(" Dictionary name should not be empty. "); return false; } try{ var el = ev.data.getTarget().getParent(); var id = /(dic_\w+)_[\w\d]+/.exec(el.getId())[1]; dic[ id ].apply( null, [ el, dic_name, dic_buttons ] ); } catch(err) { dic_error_message(" Dictionary error. "); } return true; } // ** bind event listeners var arr_buttons = ( dic_buttons[0] + ',' + dic_buttons[1] ).split( ',' ), l; for ( i = 0, l = arr_buttons.length ; i < l ; i += 1 ) { var dic_button = doc.getById(arr_buttons[i]); if ( dic_button ) dic_button.on( 'click', onDicButtonClick, this ); } }; var reload = function() { var dialog = this; // for enabled options tab if ( tags[0] == 1 ){ var opto = getBOMAllOptions(); // Animate options. for ( var k=0,l = opto.length; k