2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
6 CKEDITOR.dialog.add( 'smiley', function( editor )
\r
8 var config = editor.config,
\r
9 images = config.smiley_images,
\r
14 * Simulate "this" of a dialog for non-dialog events.
\r
15 * @type {CKEDITOR.dialog}
\r
18 var onClick = function( evt )
\r
20 var target = evt.data.getTarget(),
\r
21 targetName = target.getName();
\r
23 if ( targetName == 'td' )
\r
24 target = target.getChild( [ 0, 0 ] );
\r
25 else if ( targetName == 'a' )
\r
26 target = target.getChild( 0 );
\r
27 else if ( targetName != 'img' )
\r
30 var src = target.getAttribute( 'cke_src' ),
\r
31 title = target.getAttribute( 'title' );
\r
33 var img = editor.document.createElement( 'img',
\r
38 _cke_saved_src : src,
\r
44 editor.insertElement( img );
\r
49 var onKeydown = CKEDITOR.tools.addFunction( function( ev, element )
\r
51 ev = new CKEDITOR.dom.event( ev );
\r
52 element = new CKEDITOR.dom.element( element );
\r
53 var relative, nodeToMove;
\r
55 var keystroke = ev.getKeystroke();
\r
56 switch ( keystroke )
\r
61 if ( ( relative = element.getParent().getNext() ) )
\r
63 nodeToMove = relative.getChild( 0 );
\r
66 ev.preventDefault();
\r
71 if ( ( relative = element.getParent().getPrevious() ) )
\r
73 nodeToMove = relative.getChild( 0 );
\r
76 ev.preventDefault();
\r
81 if ( ( relative = element.getParent().getParent().getPrevious() ) )
\r
83 nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
\r
86 ev.preventDefault();
\r
91 if ( ( relative = element.getParent().getParent().getNext() ) )
\r
93 nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
\r
97 ev.preventDefault();
\r
102 onClick( { data: ev } );
\r
103 ev.preventDefault();
\r
108 if ( ( relative = element.getParent().getNext() ) )
\r
110 nodeToMove = relative.getChild( 0 );
\r
111 nodeToMove.focus();
\r
112 ev.preventDefault(true);
\r
115 else if ( ( relative = element.getParent().getParent().getNext() ) )
\r
117 nodeToMove = relative.getChild( [0, 0] );
\r
119 nodeToMove.focus();
\r
120 ev.preventDefault(true);
\r
124 case CKEDITOR.SHIFT + 9 :
\r
126 if ( ( relative = element.getParent().getPrevious() ) )
\r
128 nodeToMove = relative.getChild( 0 );
\r
129 nodeToMove.focus();
\r
130 ev.preventDefault(true);
\r
133 else if ( ( relative = element.getParent().getParent().getPrevious() ) )
\r
135 nodeToMove = relative.getLast().getChild( 0 );
\r
136 nodeToMove.focus();
\r
137 ev.preventDefault(true);
\r
141 // Do not stop not handled events.
\r
146 // Build the HTML for the smiley images table.
\r
149 '<table cellspacing="2" cellpadding="2"',
\r
150 CKEDITOR.env.ie && CKEDITOR.env.quirks ? ' style="position:absolute;"' : '',
\r
154 for ( i = 0 ; i < images.length ; i++ )
\r
156 if ( i % columns === 0 )
\r
157 html.push( '<tr>' );
\r
160 '<td class="cke_dark_background cke_hand cke_centered" style="vertical-align: middle;">' +
\r
161 '<a href="javascript:void(0)" class="cke_smile" tabindex="-1" onkeydown="CKEDITOR.tools.callFunction( ', onKeydown, ', event, this );">',
\r
162 '<img class="hand" title="', config.smiley_descriptions[i], '"' +
\r
163 ' cke_src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '" alt="', config.smiley_descriptions[i], '"',
\r
164 ' src="', CKEDITOR.tools.htmlEncode( config.smiley_path + images[ i ] ), '"',
\r
165 // IE BUG: Below is a workaround to an IE image loading bug to ensure the image sizes are correct.
\r
166 ( CKEDITOR.env.ie ? ' onload="this.setAttribute(\'width\', 2); this.removeAttribute(\'width\');" ' : '' ),
\r
171 if ( i % columns == columns - 1 )
\r
172 html.push( '</tr>' );
\r
175 if ( i < columns - 1 )
\r
177 for ( ; i < columns - 1 ; i++ )
\r
178 html.push( '<td></td>' );
\r
179 html.push( '</tr>' );
\r
182 html.push( '</tbody></table>' );
\r
184 var smileySelector =
\r
187 html : html.join( '' ),
\r
188 onLoad : function( event )
\r
190 dialog = event.sender;
\r
194 var firstSmile = this.getElement().getChild( [0, 0, 0, 0] );
\r
195 firstSmile.focus();
\r
198 style : 'width: 100%; height: 100%; border-collapse: separate;'
\r
202 title : editor.lang.smiley.title,
\r
217 buttons : [ CKEDITOR.dialog.cancelButton ]
\r