X-Git-Url: https://jasonwoof.com/gitweb/?a=blobdiff_plain;f=_source%2Fplugins%2Fspecialchar%2Fdialogs%2Fspecialchar.js;fp=_source%2Fplugins%2Fspecialchar%2Fdialogs%2Fspecialchar.js;h=b419cf585dcec460a8c5087a79765b24b0c1fb23;hb=e7789c1ad838194d45eeee6ac2eb6e55f5cf35a1;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..b419cf5 100644 --- a/_source/plugins/specialchar/dialogs/specialchar.js +++ b/_source/plugins/specialchar/dialogs/specialchar.js @@ -11,6 +11,30 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) */ var dialog, lang = editor.lang.specialChar; + + var insertSpecialChar = function ( specialChar ) + { + var selection = editor.getSelection(), + ranges = selection.getRanges(), + range, textNode; + + editor.fire( 'saveSnapshot' ); + + for ( var i = 0, len = ranges.length ; i < len ; i++ ) + { + range = ranges[ i ]; + range.deleteContents(); + + textNode = CKEDITOR.dom.element.createFromHtml( specialChar ); + range.insertNode( textNode ); + } + + range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END ); + range.select(); + + editor.fire( 'saveSnapshot' ); + }; + var onChoice = function( evt ) { var target, value; @@ -23,7 +47,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 ); } }; @@ -81,6 +110,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) var element = ev.getTarget(); var relative, nodeToMove; var keystroke = ev.getKeystroke(); + var rtl = editor.lang.dir == 'rtl'; switch ( keystroke ) { @@ -119,7 +149,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) break; // RIGHT-ARROW - case 39 : + case rtl ? 37 : 39 : // TAB case 9 : // relative is TD @@ -153,7 +183,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 @@ -260,7 +290,7 @@ CKEDITOR.dialog.add( 'specialchar', function( editor ) charDesc = charDesc || character; html.push( - '' + + '' + '' ); } - html.push( '', '' + editor.lang.common.options +'' ); + html.push( '', '' + lang.options +'' ); this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) ); },