| [ Index ] |
PHP Cross Reference of Drupal 6 (gatewave) |
[Summary view] [Print] [Text view]
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 'Ŷ(LATIN CAPITAL LETTER Y WITH CIRCUMFLEX)','ŵ(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"> ' ); 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> </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> </div>' 398 } 399 ] 400 } 401 ] 402 } 403 ] 404 } 405 ] 406 } 407 ] 408 }; 409 } );
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Thu Mar 24 11:18:33 2011 | Cross-referenced by PHPXref 0.7 |