JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
vanilla ckeditor-3.4.3
[ckeditor.git] / _source / plugins / smiley / dialogs / smiley.js
index 1fae121..c3c3814 100644 (file)
@@ -8,7 +8,7 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
        var config = editor.config,\r
                lang = editor.lang.smiley,\r
                images = config.smiley_images,\r
-               columns = 8,\r
+               columns = config.smiley_columns || 8,\r
                i;\r
 \r
        /**\r
@@ -21,9 +21,7 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
                var target = evt.data.getTarget(),\r
                        targetName = target.getName();\r
 \r
-               if ( targetName == 'td' )\r
-                       target = target.getChild( [ 0, 0 ] );\r
-               else if ( targetName == 'a' )\r
+               if ( targetName == 'a' )\r
                        target = target.getChild( 0 );\r
                else if ( targetName != 'img' )\r
                        return;\r
@@ -38,7 +36,9 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
                                        src : src,\r
                                        _cke_saved_src : src,\r
                                        title : title,\r
-                                       alt : title\r
+                                       alt : title,\r
+                                       width : target.$.width,\r
+                                       height : target.$.height\r
                                }\r
                        });\r
 \r
@@ -54,8 +54,8 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
                element = new CKEDITOR.dom.element( element );\r
                var relative, nodeToMove;\r
 \r
-               var keystroke = ev.getKeystroke();\r
-               var rtl = editor.lang.dir == 'rtl';\r
+               var keystroke = ev.getKeystroke(),\r
+                       rtl = editor.lang.dir == 'rtl';\r
                switch ( keystroke )\r
                {\r
                        // UP-ARROW\r
@@ -133,11 +133,12 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
        });\r
 \r
        // Build the HTML for the smiley images table.\r
+       var labelId = CKEDITOR.tools.getNextId() + '_smiley_emtions_label';\r
        var html =\r
        [\r
                '<div>' +\r
-               '<span id="smiley_emtions_label" class="cke_voice_label">' + lang.options +'</span>',\r
-               '<table role="listbox" aria-labelledby="smiley_emtions_label" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',\r
+               '<span id="' + labelId + '" class="cke_voice_label">' + lang.options +'</span>',\r
+               '<table role="listbox" aria-labelledby="' + labelId + '" style="width:100%;height:100%" cellspacing="2" cellpadding="2"',\r
                CKEDITOR.env.ie && CKEDITOR.env.quirks ? ' style="position:absolute;"' : '',\r
                '><tbody>'\r
        ];\r
@@ -148,20 +149,21 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
                if ( i % columns === 0 )\r
                        html.push( '<tr>' );\r
 \r
+               var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber();\r
                html.push(\r
-                       '<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +\r
+                       '<td class="cke_dark_background cke_centered" style="vertical-align: middle;">' +\r
                                '<a href="javascript:void(0)" role="option"',\r
                                        ' aria-posinset="' + ( i +1 ) + '"',\r
                                        ' aria-setsize="' + size + '"',\r
-                                       ' aria-labelledby="cke_smile_label_' + i + '"',\r
-                                       ' class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',\r
-                                       '<img class="hand" title="', config.smiley_descriptions[i], '"' +\r
+                                       ' aria-labelledby="' + smileyLabelId + '"',\r
+                                       ' class="cke_smile cke_hand" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',\r
+                                       '<img class="cke_hand" title="', config.smiley_descriptions[i], '"' +\r
                                                ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"',\r
                                                ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',\r
                                                // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.\r
                                                ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),\r
                                        '>' +\r
-                                       '<span id="cke_smile_label_' + i + '" class="cke_voice_label">' +config.smiley_descriptions[ i ]  + '</span>' +\r
+                                       '<span id="' + smileyLabelId + '" class="cke_voice_label">' +config.smiley_descriptions[ i ]  + '</span>' +\r
                                '</a>',\r
                        '</td>' );\r
 \r
@@ -187,10 +189,15 @@ CKEDITOR.dialog.add( 'smiley', function( editor )
                        dialog = event.sender;\r
                },\r
                focus : function()\r
-               {\r
-                       var firstSmile = this.getElement().getElementsByTag( 'a' ).getItem( 0 );\r
-                       firstSmile.focus();\r
-               },\r
+               {\r
+                       var self = this;\r
+                       // IE need a while to move the focus (#6539).\r
+                       setTimeout( function ()\r
+                       {\r
+                               var firstSmile = self.getElement().getElementsByTag( 'a' ).getItem( 0 );\r
+                               firstSmile.focus();\r
+                       }, 0 );\r
+               },\r
                onClick : onClick,\r
                style : 'width: 100%; border-collapse: separate;'\r
        };\r