+++ /dev/null
-/*\r
-Copyright (c) 2003-2013, CKSource - Frederico Knabben. All rights reserved.\r
-For licensing, see LICENSE.html or http://ckeditor.com/license\r
-*/\r
-\r
-CKEDITOR.dialog.add( 'smiley', function( editor )\r
-{\r
- var config = editor.config,\r
- lang = editor.lang.smiley,\r
- images = config.smiley_images,\r
- columns = config.smiley_columns || 8,\r
- i;\r
-\r
- /**\r
- * Simulate "this" of a dialog for non-dialog events.\r
- * @type {CKEDITOR.dialog}\r
- */\r
- var dialog;\r
- var onClick = function( evt )\r
- {\r
- var target = evt.data.getTarget(),\r
- targetName = target.getName();\r
-\r
- if ( targetName == 'a' )\r
- target = target.getChild( 0 );\r
- else if ( targetName != 'img' )\r
- return;\r
-\r
- var src = target.getAttribute( 'cke_src' ),\r
- title = target.getAttribute( 'title' );\r
-\r
- var img = editor.document.createElement( 'img',\r
- {\r
- attributes :\r
- {\r
- src : src,\r
- 'data-cke-saved-src' : src,\r
- title : title,\r
- alt : title,\r
- width : target.$.width,\r
- height : target.$.height\r
- }\r
- });\r
-\r
- editor.insertElement( img );\r
-\r
- dialog.hide();\r
- evt.data.preventDefault();\r
- };\r
-\r
- var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )\r
- {\r
- ev = new CKEDITOR.dom.event( ev );\r
- element = new CKEDITOR.dom.element( element );\r
- var relative, nodeToMove;\r
-\r
- var keystroke = ev.getKeystroke(),\r
- rtl = editor.lang.dir == 'rtl';\r
- switch ( keystroke )\r
- {\r
- // UP-ARROW\r
- case 38 :\r
- // relative is TR\r
- if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
- {\r
- nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );\r
- nodeToMove.focus();\r
- }\r
- ev.preventDefault();\r
- break;\r
- // DOWN-ARROW\r
- case 40 :\r
- // relative is TR\r
- if ( ( relative = element.getParent().getParent().getNext() ) )\r
- {\r
- nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );\r
- if ( nodeToMove )\r
- nodeToMove.focus();\r
- }\r
- ev.preventDefault();\r
- break;\r
- // ENTER\r
- // SPACE\r
- case 32 :\r
- onClick( { data: ev } );\r
- ev.preventDefault();\r
- break;\r
-\r
- // RIGHT-ARROW\r
- case rtl ? 37 : 39 :\r
- // relative is TD\r
- if ( ( relative = element.getParent().getNext() ) )\r
- {\r
- nodeToMove = relative.getChild( 0 );\r
- nodeToMove.focus();\r
- ev.preventDefault(true);\r
- }\r
- // relative is TR\r
- else if ( ( relative = element.getParent().getParent().getNext() ) )\r
- {\r
- nodeToMove = relative.getChild( [0, 0] );\r
- if ( nodeToMove )\r
- nodeToMove.focus();\r
- ev.preventDefault(true);\r
- }\r
- break;\r
-\r
- // LEFT-ARROW\r
- case rtl ? 39 : 37 :\r
- // relative is TD\r
- if ( ( relative = element.getParent().getPrevious() ) )\r
- {\r
- nodeToMove = relative.getChild( 0 );\r
- nodeToMove.focus();\r
- ev.preventDefault(true);\r
- }\r
- // relative is TR\r
- else if ( ( relative = element.getParent().getParent().getPrevious() ) )\r
- {\r
- nodeToMove = relative.getLast().getChild( 0 );\r
- nodeToMove.focus();\r
- ev.preventDefault(true);\r
- }\r
- break;\r
- default :\r
- // Do not stop not handled events.\r
- return;\r
- }\r
- });\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="' + 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
-\r
- var size = images.length;\r
- for ( i = 0 ; i < size ; i++ )\r
- {\r
- if ( i % columns === 0 )\r
- html.push( '<tr role="presentation">' );\r
-\r
- var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber();\r
- html.push(\r
- '<td class="cke_dark_background cke_centered" style="vertical-align: middle;" role="presentation">' +\r
- '<a href="javascript:void(0)" role="option"',\r
- ' aria-posinset="' + ( i +1 ) + '"',\r
- ' aria-setsize="' + size + '"',\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="' + smileyLabelId + '" class="cke_voice_label">' +config.smiley_descriptions[ i ] + '</span>' +\r
- '</a>',\r
- '</td>' );\r
-\r
- if ( i % columns == columns - 1 )\r
- html.push( '</tr>' );\r
- }\r
-\r
- if ( i < columns - 1 )\r
- {\r
- for ( ; i < columns - 1 ; i++ )\r
- html.push( '<td></td>' );\r
- html.push( '</tr>' );\r
- }\r
-\r
- html.push( '</tbody></table></div>' );\r
-\r
- var smileySelector =\r
- {\r
- type : 'html',\r
- id : 'smileySelector',\r
- html : html.join( '' ),\r
- onLoad : function( event )\r
- {\r
- dialog = event.sender;\r
- },\r
- focus : function()\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
-\r
- return {\r
- title : editor.lang.smiley.title,\r
- minWidth : 270,\r
- minHeight : 120,\r
- contents : [\r
- {\r
- id : 'tab1',\r
- label : '',\r
- title : '',\r
- expand : true,\r
- padding : 0,\r
- elements : [\r
- smileySelector\r
- ]\r
- }\r
- ],\r
- buttons : [ CKEDITOR.dialog.cancelButton ]\r
- };\r
-} );\r