Mimimum syndical pour en faire un produit zope / cmf.
[ckeditor.git] / skins / ckeditor / _source / plugins / smiley / dialogs / smiley.js
diff --git a/skins/ckeditor/_source/plugins/smiley/dialogs/smiley.js b/skins/ckeditor/_source/plugins/smiley/dialogs/smiley.js
new file mode 100644 (file)
index 0000000..d9628a0
--- /dev/null
@@ -0,0 +1,224 @@
+/*\r
+Copyright (c) 2003-2011, 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
+                       // TAB\r
+                       case 9 :\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
+                       // SHIFT + TAB\r
+                       case CKEDITOR.SHIFT + 9 :\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>' );\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;">' +\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