[ Index ]

PHP Cross Reference of Drupal 6 (gatewave)

title

Body

[close]

/sites/all/libraries/ckeditor/_source/plugins/specialchar/dialogs/ -> specialchar.js (source)

   1  /*

   2  Copyright (c) 2003-2010, CKSource - Frederico Knabben. All rights reserved.

   3  For licensing, see LICENSE.html or http://ckeditor.com/license

   4  */
   5  
   6  CKEDITOR.dialog.add( 'specialchar', function( editor )
   7  {
   8      /**

   9       * Simulate "this" of a dialog for non-dialog events.

  10       * @type {CKEDITOR.dialog}

  11       */
  12      var dialog,
  13          lang = editor.lang.specialChar;
  14  
  15      var insertSpecialChar = function ( specialChar )
  16      {
  17          var selection = editor.getSelection(),
  18              ranges = selection.getRanges( true ),
  19              range, textNode;
  20  
  21          editor.fire( 'saveSnapshot' );
  22  
  23          for ( var i = ranges.length - 1; i >= 0 ; i-- )
  24          {
  25              range = ranges[ i ];
  26              range.deleteContents();
  27  
  28              textNode = CKEDITOR.dom.element.createFromHtml( specialChar );
  29              range.insertNode( textNode );
  30          }
  31  
  32          if ( range )
  33          {
  34              range.moveToPosition( textNode, CKEDITOR.POSITION_AFTER_END );
  35              range.select();
  36          }
  37  
  38          editor.fire( 'saveSnapshot' );
  39      };
  40  
  41      var onChoice = function( evt )
  42      {
  43          var target, value;
  44          if ( evt.data )
  45              target = evt.data.getTarget();
  46          else
  47              target = new CKEDITOR.dom.element( evt );
  48  
  49          if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )
  50          {
  51              target.removeClass( "cke_light_background" );
  52              dialog.hide();
  53  
  54              // Firefox has bug on insert chars into a element use its own API. (#5170)

  55              if ( CKEDITOR.env.gecko )
  56                  insertSpecialChar( value );
  57              else
  58                  editor.insertHtml( value );
  59          }
  60      };
  61  
  62      var onClick = CKEDITOR.tools.addFunction( onChoice );
  63  
  64      var focusedNode;
  65  
  66      var onFocus = function( evt, target )
  67      {
  68          var value;
  69          target = target || evt.data.getTarget();
  70  
  71          if ( target.getName() == 'span' )
  72              target = target.getParent();
  73  
  74          if ( target.getName() == 'a' && ( value = target.getChild( 0 ).getHtml() ) )
  75          {
  76              // Trigger blur manually if there is focused node.

  77              if ( focusedNode )
  78                  onBlur( null, focusedNode );
  79  
  80              var htmlPreview = dialog.getContentElement( 'info', 'htmlPreview' ).getElement();
  81  
  82              dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( value );
  83              htmlPreview.setHtml( CKEDITOR.tools.htmlEncode( value ) );
  84              target.getParent().addClass( "cke_light_background" );
  85  
  86              // Memorize focused node.

  87              focusedNode = target;
  88          }
  89      };
  90  
  91      var onBlur = function( evt, target )
  92      {
  93          target = target || evt.data.getTarget();
  94  
  95          if ( target.getName() == 'span' )
  96              target = target.getParent();
  97  
  98          if ( target.getName() == 'a' )
  99          {
 100              dialog.getContentElement( 'info', 'charPreview' ).getElement().setHtml( ' ' );
 101              dialog.getContentElement( 'info', 'htmlPreview' ).getElement().setHtml( ' ' );
 102              target.getParent().removeClass( "cke_light_background" );
 103  
 104              focusedNode = undefined;
 105          }
 106      };
 107  
 108      var onKeydown = CKEDITOR.tools.addFunction( function( ev )
 109      {
 110          ev = new CKEDITOR.dom.event( ev );
 111  
 112          // Get an Anchor element.

 113          var element = ev.getTarget();
 114          var relative, nodeToMove;
 115          var keystroke = ev.getKeystroke();
 116          var rtl = editor.lang.dir == 'rtl';
 117  
 118          switch ( keystroke )
 119          {
 120              // UP-ARROW

 121              case 38 :
 122                  // relative is TR

 123                  if ( ( relative = element.getParent().getParent().getPrevious() ) )
 124                  {
 125                      nodeToMove = relative.getChild( [element.getParent().getIndex(), 0] );
 126                      nodeToMove.focus();
 127                      onBlur( null, element );
 128                      onFocus( null, nodeToMove );
 129                  }
 130                  ev.preventDefault();
 131                  break;
 132              // DOWN-ARROW

 133              case 40 :
 134                  // relative is TR

 135                  if ( ( relative = element.getParent().getParent().getNext() ) )
 136                  {
 137                      nodeToMove = relative.getChild( [ element.getParent().getIndex(), 0 ] );
 138                      if ( nodeToMove && nodeToMove.type == 1 )
 139                      {
 140                          nodeToMove.focus();
 141                          onBlur( null, element );
 142                          onFocus( null, nodeToMove );
 143                      }
 144                  }
 145                  ev.preventDefault();
 146                  break;
 147              // SPACE

 148              // ENTER is already handled as onClick

 149              case 32 :
 150                  onChoice( { data: ev } );
 151                  ev.preventDefault();
 152                  break;
 153  
 154              // RIGHT-ARROW

 155              case rtl ? 37 : 39 :
 156              // TAB

 157              case 9 :
 158                  // relative is TD

 159                  if ( ( relative = element.getParent().getNext() ) )
 160                  {
 161                      nodeToMove = relative.getChild( 0 );
 162                      if ( nodeToMove.type == 1 )
 163                      {
 164                          nodeToMove.focus();
 165                          onBlur( null, element );
 166                          onFocus( null, nodeToMove );
 167                          ev.preventDefault( true );
 168                      }
 169                      else
 170                          onBlur( null, element );
 171                  }
 172                  // relative is TR

 173                  else if ( ( relative = element.getParent().getParent().getNext() ) )
 174                  {
 175                      nodeToMove = relative.getChild( [ 0, 0 ] );
 176                      if ( nodeToMove && nodeToMove.type == 1 )
 177                      {
 178                          nodeToMove.focus();
 179                          onBlur( null, element );
 180                          onFocus( null, nodeToMove );
 181                          ev.preventDefault( true );
 182                      }
 183                      else
 184                          onBlur( null, element );
 185                  }
 186                  break;
 187  
 188              // LEFT-ARROW

 189              case rtl ? 39 : 37 :
 190              // SHIFT + TAB

 191              case CKEDITOR.SHIFT + 9 :
 192                  // relative is TD

 193                  if ( ( relative = element.getParent().getPrevious() ) )
 194                  {
 195                      nodeToMove = relative.getChild( 0 );
 196                      nodeToMove.focus();
 197                      onBlur( null, element );
 198                      onFocus( null, nodeToMove );
 199                      ev.preventDefault( true );
 200                  }
 201                  // relative is TR

 202                  else if ( ( relative = element.getParent().getParent().getPrevious() ) )
 203                  {
 204                      nodeToMove = relative.getLast().getChild( 0 );
 205                      nodeToMove.focus();
 206                      onBlur( null, element );
 207                      onFocus( null, nodeToMove );
 208                      ev.preventDefault( true );
 209                  }
 210                  else
 211                      onBlur( null, element );
 212                  break;
 213              default :
 214                  // Do not stop not handled events.

 215                  return;
 216          }
 217      });
 218  
 219      return {
 220          title : lang.title,
 221          minWidth : 430,
 222          minHeight : 280,
 223          buttons : [ CKEDITOR.dialog.cancelButton ],
 224          charColumns : 17,
 225          chars :
 226              [
 227                  '!','"','#','$','%','&',"'",'(',')','*','+','-','.','/',
 228                  '0','1','2','3','4','5','6','7','8','9',':',';',
 229                  '<','=','>','?','@',
 230                  'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
 231                  'P','Q','R','S','T','U','V','W','X','Y','Z',
 232                  '[',']','^','_','`',
 233                  'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p',
 234                  'q','r','s','t','u','v','w','x','y','z',
 235                  '{','|','}','~','€(EURO SIGN)','‘(LEFT SINGLE QUOTATION MARK)','’(RIGHT SINGLE QUOTATION MARK)','“(LEFT DOUBLE QUOTATION MARK)',
 236                  '”(RIGHT DOUBLE QUOTATION MARK)','–(EN DASH)','—(EM DASH)','¡(INVERTED EXCLAMATION MARK)','¢(CENT SIGN)','£(POUND SIGN)',
 237                  '¤(CURRENCY SIGN)','¥(YEN SIGN)','¦(BROKEN BAR)','§(SECTION SIGN)','¨(DIAERESIS)','©(COPYRIGHT SIGN)','ª(FEMININE ORDINAL INDICATOR)',
 238                  '«(LEFT-POINTING DOUBLE ANGLE QUOTATION MARK)','¬(NOT SIGN)','®(REGISTERED SIGN)','¯(MACRON)','°(DEGREE SIGN)','±(PLUS-MINUS SIGN)','²(SUPERSCRIPT TWO)',
 239                  '³(SUPERSCRIPT THREE)','´(ACUTE ACCENT)','µ(MICRO SIGN)','¶(PILCROW SIGN)','·(MIDDLE DOT)','¸(CEDILLA)',
 240                  '¹(SUPERSCRIPT ONE)','º(MASCULINE ORDINAL INDICATOR)','»(RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK)','¼(VULGAR FRACTION ONE QUARTER)','½(VULGAR FRACTION ONE HALF)','¾(VULGAR FRACTION THREE QUARTERS)',
 241                  '¿(INVERTED QUESTION MARK)','À(LATIN CAPITAL LETTER A WITH GRAVE)','Á(LATIN CAPITAL LETTER A WITH ACUTE)','Â(LATIN CAPITAL LETTER A WITH CIRCUMFLEX)','Ã(LATIN CAPITAL LETTER A WITH TILDE)','Ä(LATIN CAPITAL LETTER A WITH DIAERESIS)',
 242                  'Å(LATIN CAPITAL LETTER A WITH RING ABOVE)','Æ(LATIN CAPITAL LETTER AE)','Ç(LATIN CAPITAL LETTER C WITH CEDILLA)','È(LATIN CAPITAL LETTER E WITH GRAVE)','É(LATIN CAPITAL LETTER E WITH ACUTE)','Ê(LATIN CAPITAL LETTER E WITH CIRCUMFLEX)',
 243                  'Ë(LATIN CAPITAL LETTER E WITH DIAERESIS)','Ì(LATIN CAPITAL LETTER I WITH GRAVE)','Í(LATIN CAPITAL LETTER I WITH ACUTE)','Î(LATIN CAPITAL LETTER I WITH CIRCUMFLEX)','Ï(LATIN CAPITAL LETTER I WITH DIAERESIS)','Ð(LATIN CAPITAL LETTER ETH)',
 244                  'Ñ(LATIN CAPITAL LETTER N WITH TILDE)','Ò(LATIN CAPITAL LETTER O WITH GRAVE)','Ó(LATIN CAPITAL LETTER O WITH ACUTE)','Ô(LATIN CAPITAL LETTER O WITH CIRCUMFLEX)','Õ(LATIN CAPITAL LETTER O WITH TILDE)','Ö(LATIN CAPITAL LETTER O WITH DIAERESIS)',
 245                  '×(MULTIPLICATION SIGN)','Ø(LATIN CAPITAL LETTER O WITH STROKE)','Ù(LATIN CAPITAL LETTER U WITH GRAVE)','Ú(LATIN CAPITAL LETTER U WITH ACUTE)','Û(LATIN CAPITAL LETTER U WITH CIRCUMFLEX)','Ü(LATIN CAPITAL LETTER U WITH DIAERESIS)',
 246                  'Ý(LATIN CAPITAL LETTER Y WITH ACUTE)','Þ(LATIN CAPITAL LETTER THORN)','ß(LATIN SMALL LETTER SHARP S)','à(LATIN SMALL LETTER A WITH GRAVE)','á(LATIN SMALL LETTER A WITH ACUTE)','â(LATIN SMALL LETTER A WITH CIRCUMFLEX)',
 247                  'ã(LATIN SMALL LETTER A WITH TILDE)','ä(LATIN SMALL LETTER A WITH DIAERESIS)','å(LATIN SMALL LETTER A WITH RING ABOVE)','æ(LATIN SMALL LETTER AE)','ç(LATIN SMALL LETTER C WITH CEDILLA)','è(LATIN SMALL LETTER E WITH GRAVE)',
 248                  'é(LATIN SMALL LETTER E WITH ACUTE)','ê(LATIN SMALL LETTER E WITH CIRCUMFLEX)','ë(LATIN SMALL LETTER E WITH DIAERESIS)','ì(LATIN SMALL LETTER I WITH GRAVE)','í(LATIN SMALL LETTER I WITH ACUTE)','î(LATIN SMALL LETTER I WITH CIRCUMFLEX)',
 249                  'ï(LATIN SMALL LETTER I WITH DIAERESIS)','ð(LATIN SMALL LETTER ETH)','ñ(LATIN SMALL LETTER N WITH TILDE)','ò(LATIN SMALL LETTER O WITH GRAVE)','ó(LATIN SMALL LETTER O WITH ACUTE)','ô(LATIN SMALL LETTER O WITH CIRCUMFLEX)',
 250                  'õ(LATIN SMALL LETTER O WITH TILDE)','ö(LATIN SMALL LETTER O WITH DIAERESIS)',
 251                  '÷(DIVISION SIGN)','ø(LATIN SMALL LETTER O WITH STROKE)',
 252                  'ù(LATIN SMALL LETTER U WITH GRAVE)','ú(LATIN SMALL LETTER U WITH ACUTE)',
 253                  'û(LATIN SMALL LETTER U WITH CIRCUMFLEX)','ü(LATIN SMALL LETTER U WITH DIAERESIS)',
 254                  'ü(LATIN SMALL LETTER U WITH DIAERESIS)','ý(LATIN SMALL LETTER Y WITH ACUTE)','þ(LATIN SMALL LETTER THORN)','ÿ(LATIN SMALL LETTER Y WITH DIAERESIS)',
 255                  'Œ(LATIN CAPITAL LIGATURE OE)',
 256                  'œ(LATIN SMALL LIGATURE OE)','Ŵ(LATIN CAPITAL LETTER W WITH CIRCUMFLEX)',
 257                  '&#374(LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)','&#373(LATIN SMALL LETTER W WITH CIRCUMFLEX)',
 258                  'ŷ(LATIN SMALL LETTER Y WITH CIRCUMFLEX)','‚(SINGLE LOW-9 QUOTATION MARK)',
 259                  '‛(SINGLE HIGH-REVERSED-9 QUOTATION MARK)','„(DOUBLE LOW-9 QUOTATION MARK)','…(HORIZONTAL ELLIPSIS)',
 260                  '™(TRADE MARK SIGN)','►(BLACK RIGHT-POINTING POINTER)','•(BULLET)',
 261                  '→(RIGHTWARDS ARROW)','⇒(RIGHTWARDS DOUBLE ARROW)','⇔(LEFT RIGHT DOUBLE ARROW)','♦(BLACK DIAMOND SUIT)','≈(ALMOST EQUAL TO)'
 262              ],
 263          onLoad :  function()
 264          {
 265              var columns = this.definition.charColumns,
 266                  chars = this.definition.chars;
 267  
 268              var charsTableLabel =  CKEDITOR.tools.getNextId() + '_specialchar_table_label';
 269              var html = [ '<table role="listbox" aria-labelledby="' + charsTableLabel + '"' +
 270                                       ' style="width: 320px; height: 100%; border-collapse: separate;"' +
 271                                       ' align="center" cellspacing="2" cellpadding="2" border="0">' ];
 272  
 273              var i = 0,
 274                  size = chars.length,
 275                  character,
 276                  charDesc;
 277  
 278              while ( i < size )
 279              {
 280                  html.push( '<tr>' ) ;
 281  
 282                  for ( var j = 0 ; j < columns ; j++, i++ )
 283                  {
 284                      if ( ( character = chars[ i ] ) )
 285                      {
 286                          charDesc = '';
 287                          character = character.replace( /\((.*?)\)/, function( match, desc )
 288                              {
 289                                  charDesc = desc;
 290                                  return '';
 291                              } );
 292  
 293                          // Use character in case description unavailable.

 294                          charDesc = charDesc || character;
 295  
 296                          var charLabelId =  'cke_specialchar_label_' + i + '_' + CKEDITOR.tools.getNextNumber();
 297  
 298                          html.push(
 299                              '<td class="cke_dark_background" style="cursor: default" role="presentation">' +
 300                              '<a href="javascript: void(0);" role="option"' +
 301                              ' aria-posinset="' + ( i +1 ) + '"',
 302                              ' aria-setsize="' + size + '"',
 303                              ' aria-labelledby="' + charLabelId + '"',
 304                              ' style="cursor: inherit; display: block; height: 1.25em; margin-top: 0.25em; text-align: center;" title="', CKEDITOR.tools.htmlEncode( charDesc ), '"' +
 305                              ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown + ', event, this )"' +
 306                              ' onclick="CKEDITOR.tools.callFunction(' + onClick + ', this); return false;"' +
 307                              ' tabindex="-1">' +
 308                              '<span style="margin: 0 auto;cursor: inherit">' +
 309                              character +
 310                              '</span>' +
 311                              '<span class="cke_voice_label" id="' + charLabelId + '">' +
 312                              charDesc +
 313                              '</span></a>');
 314                      }
 315                      else
 316                          html.push( '<td class="cke_dark_background">&nbsp;' );
 317  
 318                      html.push( '</td>' );
 319                  }
 320                  html.push( '</tr>' );
 321              }
 322  
 323              html.push( '</tbody></table>', '<span id="' + charsTableLabel + '" class="cke_voice_label">' + lang.options +'</span>' );
 324  
 325              this.getContentElement( 'info', 'charContainer' ).getElement().setHtml( html.join( '' ) );
 326          },
 327          contents : [
 328              {
 329                  id : 'info',
 330                  label : editor.lang.common.generalTab,
 331                  title : editor.lang.common.generalTab,
 332                  padding : 0,
 333                  align : 'top',
 334                  elements : [
 335                      {
 336                          type : 'hbox',
 337                          align : 'top',
 338                          widths : [ '320px', '90px' ],
 339                          children :
 340                          [
 341                              {
 342                                  type : 'html',
 343                                  id : 'charContainer',
 344                                  html : '',
 345                                  onMouseover : onFocus,
 346                                  onMouseout : onBlur,
 347                                  focus : function()
 348                                  {
 349                                      var firstChar = this.getElement().getElementsByTag( 'a' ).getItem( 0 );
 350                                      setTimeout(function()
 351                                      {
 352                                          firstChar.focus();
 353                                          onFocus( null, firstChar );
 354                                      });
 355                                  },
 356                                  onShow : function()
 357                                  {
 358                                      var firstChar = this.getElement().getChild( [ 0, 0, 0, 0, 0 ] );
 359                                      setTimeout( function()
 360                                          {
 361                                              firstChar.focus();
 362                                              onFocus( null, firstChar );
 363                                          });
 364                                  },
 365                                  onLoad : function( event )
 366                                  {
 367                                      dialog = event.sender;
 368                                  }
 369                              },
 370                              {
 371                                  type : 'hbox',
 372                                  align : 'top',
 373                                  widths : [ '100%' ],
 374                                  children :
 375                                  [
 376                                      {
 377                                          type : 'vbox',
 378                                          align : 'top',
 379                                          children :
 380                                          [
 381                                              {
 382                                                  type : 'html',
 383                                                  html : '<div></div>'
 384                                              },
 385                                              {
 386                                                  type : 'html',
 387                                                  id : 'charPreview',
 388                                                  className : 'cke_dark_background',
 389                                                  style : 'border:1px solid #eeeeee;font-size:28px;height:40px;width:70px;padding-top:9px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
 390                                                  html : '<div>&nbsp;</div>'
 391                                              },
 392                                              {
 393                                                  type : 'html',
 394                                                  id : 'htmlPreview',
 395                                                  className : 'cke_dark_background',
 396                                                  style : 'border:1px solid #eeeeee;font-size:14px;height:20px;width:70px;padding-top:2px;font-family:\'Microsoft Sans Serif\',Arial,Helvetica,Verdana;text-align:center;',
 397                                                  html : '<div>&nbsp;</div>'
 398                                              }
 399                                          ]
 400                                      }
 401                                  ]
 402                              }
 403                          ]
 404                      }
 405                  ]
 406              }
 407          ]
 408      };
 409  } );


Generated: Thu Mar 24 11:18:33 2011 Cross-referenced by PHPXref 0.7