]>
git.immae.eu Git - perso/Immae/Projets/packagist/connexionswing-ckeditor-component.git/blob - sources/plugins/specialchar/dialogs/specialchar.js
2 * @license Copyright (c) 2003-2015, CKSource - Frederico Knabben. All rights reserved.
3 * For licensing, see LICENSE.md or http://ckeditor.com/license
6 CKEDITOR
. dialog
. add ( 'specialchar' , function ( editor
) {
7 // Simulate "this" of a dialog for non-dialog events.
8 // @type {CKEDITOR.dialog}
10 lang
= editor
. lang
. specialchar
;
12 var onChoice = function ( evt
) {
15 target
= evt
. data
. getTarget ();
17 target
= new CKEDITOR
. dom
. element ( evt
);
19 if ( target
. getName () == 'a' && ( value
= target
. getChild ( 0 ). getHtml () ) ) {
20 target
. removeClass ( 'cke_light_background' );
23 // We must use "insertText" here to keep text styled.
24 var span
= editor
. document
. createElement ( 'span' );
25 span
. setHtml ( value
);
26 editor
. insertText ( span
. getText () );
30 var onClick
= CKEDITOR
. tools
. addFunction ( onChoice
);
34 var onFocus = function ( evt
, target
) {
36 target
= target
|| evt
. data
. getTarget ();
38 if ( target
. getName () == 'span' )
39 target
= target
. getParent ();
41 if ( target
. getName () == 'a' && ( value
= target
. getChild ( 0 ). getHtml () ) ) {
42 // Trigger blur manually if there is focused node.
44 onBlur ( null , focusedNode
);
46 var htmlPreview
= dialog
. getContentElement ( 'info' , 'htmlPreview' ). getElement ();
48 dialog
. getContentElement ( 'info' , 'charPreview' ). getElement (). setHtml ( value
);
49 htmlPreview
. setHtml ( CKEDITOR
. tools
. htmlEncode ( value
) );
50 target
. getParent (). addClass ( 'cke_light_background' );
52 // Memorize focused node.
57 var onBlur = function ( evt
, target
) {
58 target
= target
|| evt
. data
. getTarget ();
60 if ( target
. getName () == 'span' )
61 target
= target
. getParent ();
63 if ( target
. getName () == 'a' ) {
64 dialog
. getContentElement ( 'info' , 'charPreview' ). getElement (). setHtml ( ' ' );
65 dialog
. getContentElement ( 'info' , 'htmlPreview' ). getElement (). setHtml ( ' ' );
66 target
. getParent (). removeClass ( 'cke_light_background' );
68 focusedNode
= undefined ;
72 var onKeydown
= CKEDITOR
. tools
. addFunction ( function ( ev
) {
73 ev
= new CKEDITOR
. dom
. event ( ev
);
75 // Get an Anchor element.
76 var element
= ev
. getTarget ();
77 var relative
, nodeToMove
;
78 var keystroke
= ev
. getKeystroke (),
79 rtl
= editor
. lang
. dir
== 'rtl' ;
81 switch ( keystroke
) {
85 if ( ( relative
= element
. getParent (). getParent (). getPrevious () ) ) {
86 nodeToMove
= relative
. getChild ( [ element
. getParent (). getIndex (), 0 ] );
88 onBlur ( null , element
);
89 onFocus ( null , nodeToMove
);
96 if ( ( relative
= element
. getParent (). getParent (). getNext () ) ) {
97 nodeToMove
= relative
. getChild ( [ element
. getParent (). getIndex (), 0 ] );
98 if ( nodeToMove
&& nodeToMove
. type
== 1 ) {
100 onBlur ( null , element
);
101 onFocus ( null , nodeToMove
);
107 // ENTER is already handled as onClick
109 onChoice ( { data : ev
} );
116 if ( ( relative
= element
. getParent (). getNext () ) ) {
117 nodeToMove
= relative
. getChild ( 0 );
118 if ( nodeToMove
. type
== 1 ) {
120 onBlur ( null , element
);
121 onFocus ( null , nodeToMove
);
122 ev
. preventDefault ( true );
124 onBlur ( null , element
);
128 else if ( ( relative
= element
. getParent (). getParent (). getNext () ) ) {
129 nodeToMove
= relative
. getChild ( [ 0 , 0 ] );
130 if ( nodeToMove
&& nodeToMove
. type
== 1 ) {
132 onBlur ( null , element
);
133 onFocus ( null , nodeToMove
);
134 ev
. preventDefault ( true );
136 onBlur ( null , element
);
144 if ( ( relative
= element
. getParent (). getPrevious () ) ) {
145 nodeToMove
= relative
. getChild ( 0 );
147 onBlur ( null , element
);
148 onFocus ( null , nodeToMove
);
149 ev
. preventDefault ( true );
152 else if ( ( relative
= element
. getParent (). getParent (). getPrevious () ) ) {
153 nodeToMove
= relative
. getLast (). getChild ( 0 );
155 onBlur ( null , element
);
156 onFocus ( null , nodeToMove
);
157 ev
. preventDefault ( true );
159 onBlur ( null , element
);
163 // Do not stop not handled events.
172 buttons : [ CKEDITOR
. dialog
. cancelButton
],
175 var columns
= this . definition
. charColumns
,
176 chars
= editor
. config
. specialChars
;
178 var charsTableLabel
= CKEDITOR
. tools
. getNextId () + '_specialchar_table_label' ;
179 var html
= [ '<table role="listbox" aria-labelledby="' + charsTableLabel
+ '"' +
180 ' style="width: 320px; height: 100%; border-collapse: separate;"' +
181 ' align="center" cellspacing="2" cellpadding="2" border="0">' ];
188 html
. push ( '<tr role="presentation">' );
190 for ( var j
= 0 ; j
< columns
; j
++, i
++ ) {
191 if ( ( character
= chars
[ i
] ) ) {
194 if ( character
instanceof Array
) {
195 charDesc
= character
[ 1 ];
196 character
= character
[ 0 ];
198 var _tmpName
= character
. replace ( '&' , '' ). replace ( ';' , '' ). replace ( '#' , '' );
200 // Use character in case description unavailable.
201 charDesc
= lang
[ _tmpName
] || character
;
204 var charLabelId
= 'cke_specialchar_label_' + i
+ '_' + CKEDITOR
. tools
. getNextNumber ();
206 html
. push ( '<td class="cke_dark_background" style="cursor: default" role="presentation">' +
207 '<a href="javascript: void(0);" role="option"' +
208 ' aria-posinset="' + ( i
+ 1 ) + '"' , ' aria-setsize="' + size
+ '"' , ' aria-labelledby="' + charLabelId
+ '"' , ' class="cke_specialchar" title="' , CKEDITOR
. tools
. htmlEncode ( charDesc
), '"' +
209 ' onkeydown="CKEDITOR.tools.callFunction( ' + onKeydown
+ ', event, this )"' +
210 ' onclick="CKEDITOR.tools.callFunction(' + onClick
+ ', this); return false;"' +
212 '<span style="margin: 0 auto;cursor: inherit">' +
215 '<span class="cke_voice_label" id="' + charLabelId
+ '">' +
219 html
. push ( '<td class="cke_dark_background"> ' );
222 html
. push ( '</td>' );
224 html
. push ( '</tr>' );
227 html
. push ( '</tbody></table>' , '<span id="' + charsTableLabel
+ '" class="cke_voice_label">' + lang
. options
+ '</span>' );
229 this . getContentElement ( 'info' , 'charContainer' ). getElement (). setHtml ( html
. join ( '' ) );
233 label : editor
. lang
. common
. generalTab
,
234 title : editor
. lang
. common
. generalTab
,
240 widths : [ '320px' , '90px' ],
245 onMouseover : onFocus
,
248 var firstChar
= this . getElement (). getElementsByTag ( 'a' ). getItem ( 0 );
249 setTimeout ( function () {
251 onFocus ( null , firstChar
);
255 var firstChar
= this . getElement (). getChild ( [ 0 , 0 , 0 , 0 , 0 ] );
256 setTimeout ( function () {
258 onFocus ( null , firstChar
);
261 onLoad : function ( event
) {
262 dialog
= event
. sender
;
280 className : 'cke_dark_background' ,
281 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;' ,
282 html : '<div> </div>'
287 className : 'cke_dark_background' ,
288 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;' ,
289 html : '<div> </div>'