var insertSpecialChar = function ( specialChar )\r
{\r
var selection = editor.getSelection(),\r
- ranges = selection.getRanges(),\r
+ ranges = selection.getRanges( true ),\r
range, textNode;\r
\r
editor.fire( 'saveSnapshot' );\r
\r
- for ( var i = 0, len = ranges.length ; i < len ; i++ )\r
+ for ( var i = ranges.length - 1; i >= 0 ; i-- )\r
{\r
range = ranges[ i ];\r
range.deleteContents();\r
\r
- textNode = CKEDITOR.dom.element.createFromHtml( specialChar );\r
+ textNode = CKEDITOR.dom.element.createFromHtml( specialChar );\r
range.insertNode( textNode );\r
}\r
\r
- range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );\r
- range.select();\r
+ if ( range )\r
+ {\r
+ range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );\r
+ range.select();\r
+ }\r
\r
editor.fire( 'saveSnapshot' );\r
};\r
// Get an Anchor element.\r
var element = ev.getTarget();\r
var relative, nodeToMove;\r
- var keystroke = ev.getKeystroke();\r
- var rtl = editor.lang.dir == 'rtl';\r
+ var keystroke = ev.getKeystroke(),\r
+ rtl = editor.lang.dir == 'rtl';\r
\r
switch ( keystroke )\r
{\r
var columns = this.definition.charColumns,\r
chars = this.definition.chars;\r
\r
- var charsTableLabel = 'specialchar_table_label' + CKEDITOR.tools.getNextNumber();\r
+ var charsTableLabel = CKEDITOR.tools.getNextId() + '_specialchar_table_label';\r
var html = [ '<table role="listbox" aria-labelledby="' + charsTableLabel + '"' +\r
' style="width: 320px; height: 100%; border-collapse: separate;"' +\r
' align="center" cellspacing="2" cellpadding="2" border="0">' ];\r
focus : function()\r
{\r
var firstChar = this.getElement().getElementsByTag( 'a' ).getItem( 0 );\r
- setTimeout(function()\r
+ setTimeout( function()\r
{\r
firstChar.focus();\r
onFocus( null, firstChar );\r
- });\r
+ }, 0 );\r
},\r
onShow : function()\r
{\r
{\r
firstChar.focus();\r
onFocus( null, firstChar );\r
- });\r
+ }, 0 );\r
},\r
onLoad : function( event )\r
{\r