X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fspecialchar%2Fdialogs%2Fspecialchar.js;h=0fba305db68fb1f0e4e71297cc3698aadf6e08d3;hb=039a051ccf3901311661022a30afd60fc38130c9;hp=597f7e13d47fb5990925c690fa78b6f057529862;hpb=059b4c2fef02528bf1af189f7996e80652faddfb;p=ckeditor.git diff --git a/_source/plugins/specialchar/dialogs/specialchar.js b/_source/plugins/specialchar/dialogs/specialchar.js index 597f7e1..0fba305 100644 --- a/_source/plugins/specialchar/dialogs/specialchar.js +++ b/_source/plugins/specialchar/dialogs/specialchar.js @@ -11,6 +11,33 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) */ var dialog, lang = editor.lang.specialChar; + + var insertSpecialChar = function ( specialChar ) + { + var selection = editor.getSelection(), + ranges = selection.getRanges( true ), + range, textNode; + + editor.fire( 'saveSnapshot' ); + + for ( var i = ranges.length - 1; i >= 0 ; i-- ) + { + range = ranges[ i ]; + range.deleteContents(); + + textNode = CKEDITOR.dom.element.createFromHtml( specialChar ); + range.insertNode( textNode ); + } + + if ( range ) + { + range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END ); + range.select(); + } + + editor.fire( 'saveSnapshot' ); + }; + var onChoice = function( evt ) { var target, value; @@ -23,7 +50,12 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) { target.removeClass( "cke_light_background" ); dialog.hide(); - editor.insertHtml( value ); + + // Firefox has bug on insert chars into a element use its own API. (#5170) + if ( CKEDITOR.env.gecko ) + insertSpecialChar( value ); + else + editor.insertHtml( value ); } }; @@ -80,7 +112,8 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) // Get an Anchor element. var element = ev.getTarget(); var relative, nodeToMove; - var keystroke = ev.getKeystroke(); + var keystroke = ev.getKeystroke(), + rtl = editor.lang.dir == 'rtl'; switch ( keystroke ) { @@ -119,7 +152,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) break; // RIGHT-ARROW - case 39 : + case rtl ? 37 : 39 : // TAB case 9 : // relative is TD @@ -153,7 +186,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) break; // LEFT-ARROW - case 37 : + case rtl ? 39 : 37 : // SHIFT + TAB case CKEDITOR.SHIFT + 9 : // relative is TD @@ -232,7 +265,8 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) var columns = this.definition.charColumns, chars = this.definition.chars; - var html = [ '' ]; @@ -259,12 +293,14 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) // Use character in case description unavailable. charDesc = charDesc || character; + var charLabelId = 'cke_specialchar_label_' + i + '_' + CKEDITOR.tools.getNextNumber(); + html.push( - '' ); } - html.push( '
' + + '
', '' + editor.lang.common.options +'' ); + html.push( '', '' + lang.options +'' ); this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) ); }, @@ -311,11 +347,11 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) focus : function() { var firstChar = this.getElement().getElementsByTag( 'a' ).getItem( 0 ); - setTimeout(function() + setTimeout( function() { firstChar.focus(); onFocus( null, firstChar ); - }); + }, 0 ); }, onShow : function() { @@ -324,7 +360,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) { firstChar.focus(); onFocus( null, firstChar ); - }); + }, 0 ); }, onLoad : function( event ) {