/** * @license Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */ CKEDITOR.dialog.add( 'smiley', function( editor ) { var config = editor.config, lang = editor.lang.smiley, images = config.smiley_images, columns = config.smiley_columns || 8, i; // Simulate "this" of a dialog for non-dialog events. // @type {CKEDITOR.dialog} var dialog; var onClick = function( evt ) { var target = evt.data.getTarget(), targetName = target.getName(); if ( targetName == 'a' ) target = target.getChild( 0 ); else if ( targetName != 'img' ) return; var src = target.getAttribute( 'cke_src' ), title = target.getAttribute( 'title' ); var img = editor.document.createElement( 'img', { attributes: { src: src, 'data-cke-saved-src': src, title: title, alt: title, width: target.$.width, height: target.$.height } } ); editor.insertElement( img ); dialog.hide(); evt.data.preventDefault(); }; var onKeydown = CKEDITOR.tools.addFunction( function( ev, element ) { ev = new CKEDITOR.dom.event( ev ); element = new CKEDITOR.dom.element( element ); var relative, nodeToMove; var keystroke = ev.getKeystroke(), rtl = editor.lang.dir == 'rtl'; switch ( keystroke ) { // UP-ARROW case 38: // relative is TR if ( ( relative = element.getParent().getParent().getPrevious() ) ) { nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] ); nodeToMove.focus(); } ev.preventDefault(); break; // DOWN-ARROW case 40: // relative is TR if ( ( relative = element.getParent().getParent().getNext() ) ) { nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] ); if ( nodeToMove ) nodeToMove.focus(); } ev.preventDefault(); break; // ENTER // SPACE case 32: onClick( { data: ev } ); ev.preventDefault(); break; // RIGHT-ARROW case rtl ? 37 : 39: // relative is TD if ( ( relative = element.getParent().getNext() ) ) { nodeToMove = relative.getChild( 0 ); nodeToMove.focus(); ev.preventDefault( true ); } // relative is TR else if ( ( relative = element.getParent().getParent().getNext() ) ) { nodeToMove = relative.getChild( [ 0, 0 ] ); if ( nodeToMove ) nodeToMove.focus(); ev.preventDefault( true ); } break; // LEFT-ARROW case rtl ? 39 : 37: // relative is TD if ( ( relative = element.getParent().getPrevious() ) ) { nodeToMove = relative.getChild( 0 ); nodeToMove.focus(); ev.preventDefault( true ); } // relative is TR else if ( ( relative = element.getParent().getParent().getPrevious() ) ) { nodeToMove = relative.getLast().getChild( 0 ); nodeToMove.focus(); ev.preventDefault( true ); } break; default: // Do not stop not handled events. return; } } ); var setBigSmileys = function (dwimages,which) { html.push(''); for(i=0; i< dwimages.length; i++) { var descr = dwimages[i][0]; html.push( '' + '', '', descr, '' + '' + descr + '' + '', '' ); if( i % 2 === 0 && i > 0 && which == 2) html.push(''); } html.push(''); } // Build the HTML for the smiley images table. var labelId = CKEDITOR.tools.getNextId() + '_smiley_emtions_label'; var html = [ '
' + '' + lang.options + '', '' ]; var dwimages; if(config.dokuSmileyConfImages) { dwimages = config.dokuSmileyConfImages; } else dwimages = config.dokuSmileyImages; var size = dwimages.length; for ( i = 0; i < size; i++ ) { if ( i % columns === 0 ) html.push( '' ); if(!dwimages[i][1]) continue; var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber(); var descr = dwimages[i][0]; html.push( '' ); if ( i % columns == columns - 1 ) html.push( '' ); } if ( i < columns - 1 ) { for ( ; i < columns - 1; i++ ) html.push( '' ); html.push( '' ); } dwimages = config.dokuFixmeSmiley; setBigSmileys(config.dokuFixmeSmiley,1); if(config.dokuLargeSmiley) { setBigSmileys(config.dokuLargeSmiley,2); } var size = images.length; for ( i = 0; i < size; i++ ) { if ( i % columns === 0 ) html.push( '' ); var smileyLabelId = 'cke_smile_label_' + i + '_' + CKEDITOR.tools.getNextNumber(); html.push( '' ); if ( i % columns == columns - 1 ) html.push( '' ); } if ( i < columns - 1 ) { for ( ; i < columns - 1; i++ ) html.push( '' ); html.push( '' ); } html.push( '
' ); var smileySelector = { type: 'html', id: 'smileySelector', html: html.join( '' ), onLoad: function( event ) { dialog = event.sender; }, focus: function() { var self = this; // IE need a while to move the focus (#6539). setTimeout( function() { var firstSmile = self.getElement().getElementsByTag( 'a' ).getItem( 0 ); firstSmile.focus(); }, 0 ); }, onClick: onClick, style: 'width: 100%; border-collapse: separate;' }; return { title: editor.lang.smiley.title, minWidth: 325, minHeight: 180, contents: [ { id: 'tab1', label: '', title: '', expand: true, padding: 0, elements: [ smileySelector ] } ], buttons: [ CKEDITOR.dialog.cancelButton ] }; } );