2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
3 For licensing, see LICENSE.html or http://ckeditor.com/license
8 function addCombo( editor
, comboName
, styleType
, lang
, entries
, defaultLabel
, styleDefinition
)
10 var config
= editor
.config
;
12 // Gets the list of fonts from the settings.
13 var names
= entries
.split( ';' ),
16 // Create style objects for all fonts.
18 for ( var i
= 0 ; i
< names
.length
; i
++ )
20 var parts
= names
[ i
];
24 parts
= parts
.split( '/' );
27 name
= names
[ i
] = parts
[ 0 ];
29 vars
[ styleType
] = values
[ i
] = parts
[ 1 ] || name
;
31 styles
[ name
] = new CKEDITOR
.style( styleDefinition
, vars
);
32 styles
[ name
]._
.definition
.name
= name
;
35 names
.splice( i
--, 1 );
38 editor
.ui
.addRichCombo( comboName
,
41 title
: lang
.panelTitle
,
42 className
: 'cke_' + ( styleType
== 'size' ? 'fontSize' : 'font' ),
45 css
: editor
.skin
.editor
.css
.concat( config
.contentsCss
),
47 attributes
: { 'aria-label' : lang
.panelTitle
}
52 this.startGroup( lang
.panelTitle
);
54 for ( var i
= 0 ; i
< names
.length
; i
++ )
56 var name
= names
[ i
];
58 // Add the tag entry to the panel list.
59 this.add( name
, styles
[ name
].buildPreview(), name
);
63 onClick : function( value
)
66 editor
.fire( 'saveSnapshot' );
68 var style
= styles
[ value
];
70 if ( this.getValue() == value
)
71 style
.remove( editor
.document
);
73 style
.apply( editor
.document
);
75 editor
.fire( 'saveSnapshot' );
80 editor
.on( 'selectionChange', function( ev
)
82 var currentValue
= this.getValue();
84 var elementPath
= ev
.data
.path
,
85 elements
= elementPath
.elements
;
87 // For each element into the elements path.
88 for ( var i
= 0, element
; i
< elements
.length
; i
++ )
90 element
= elements
[i
];
92 // Check if the element is removable by any of
94 for ( var value
in styles
)
96 if ( styles
[ value
].checkElementRemovable( element
, true ) )
98 if ( value
!= currentValue
)
99 this.setValue( value
);
105 // If no styles match, just empty it.
106 this.setValue( '', defaultLabel
);
113 CKEDITOR
.plugins
.add( 'font',
115 requires
: [ 'richcombo', 'styles' ],
117 init : function( editor
)
119 var config
= editor
.config
;
121 addCombo( editor
, 'Font', 'family', editor
.lang
.font
, config
.font_names
, config
.font_defaultLabel
, config
.font_style
);
122 addCombo( editor
, 'FontSize', 'size', editor
.lang
.fontSize
, config
.fontSize_sizes
, config
.fontSize_defaultLabel
, config
.fontSize_style
);
128 * The list of fonts names to be displayed in the Font combo in the toolbar.
129 * Entries are separated by semi-colons (;), while it's possible to have more
130 * than one font for each entry, in the HTML way (separated by comma).
132 * A display name may be optionally defined by prefixing the entries with the
133 * name and the slash character. For example, "Arial/Arial, Helvetica, sans-serif"
134 * will be displayed as "Arial" in the list, but will be outputted as
135 * "Arial, Helvetica, sans-serif".
138 * config.font_names =
139 * 'Arial/Arial, Helvetica, sans-serif;' +
140 * 'Times New Roman/Times New Roman, Times, serif;' +
143 * config.font_names = 'Arial;Times New Roman;Verdana';
145 CKEDITOR
.config
.font_names
=
146 'Arial/Arial, Helvetica, sans-serif;' +
147 'Comic Sans MS/Comic Sans MS, cursive;' +
148 'Courier New/Courier New, Courier, monospace;' +
149 'Georgia/Georgia, serif;' +
150 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' +
151 'Tahoma/Tahoma, Geneva, sans-serif;' +
152 'Times New Roman/Times New Roman, Times, serif;' +
153 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' +
154 'Verdana/Verdana, Geneva, sans-serif';
157 * The text to be displayed in the Font combo is none of the available values
158 * matches the current cursor position or text selection.
161 * // If the default site font is Arial, we may making it more explicit to the end user.
162 * config.font_defaultLabel = 'Arial';
164 CKEDITOR
.config
.font_defaultLabel
= '';
167 * The style definition to be used to apply the font in the text.
170 * // This is actually the default value for it.
171 * config.font_style =
174 * styles : { 'font-family' : '#(family)' },
175 * overrides : [ { element : 'font', attributes : { 'face' : null } } ]
178 CKEDITOR
.config
.font_style
=
181 styles
: { 'font-family' : '#(family)' },
182 overrides
: [ { element
: 'font', attributes
: { 'face' : null } } ]
186 * The list of fonts size to be displayed in the Font Size combo in the
187 * toolbar. Entries are separated by semi-colons (;).
189 * Any kind of "CSS like" size can be used, like "12px", "2.3em", "130%",
190 * "larger" or "x-small".
192 * A display name may be optionally defined by prefixing the entries with the
193 * name and the slash character. For example, "Bigger Font/14px" will be
194 * displayed as "Bigger Font" in the list, but will be outputted as "14px".
196 * @default '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px'
198 * config.fontSize_sizes = '16/16px;24/24px;48/48px;';
200 * config.fontSize_sizes = '12px;2.3em;130%;larger;x-small';
202 * config.fontSize_sizes = '12 Pixels/12px;Big/2.3em;30 Percent More/130%;Bigger/larger;Very Small/x-small';
204 CKEDITOR
.config
.fontSize_sizes
=
205 '8/8px;9/9px;10/10px;11/11px;12/12px;14/14px;16/16px;18/18px;20/20px;22/22px;24/24px;26/26px;28/28px;36/36px;48/48px;72/72px';
208 * The text to be displayed in the Font Size combo is none of the available
209 * values matches the current cursor position or text selection.
212 * // If the default site font size is 12px, we may making it more explicit to the end user.
213 * config.fontSize_defaultLabel = '12px';
215 CKEDITOR
.config
.fontSize_defaultLabel
= '';
218 * The style definition to be used to apply the font size in the text.
221 * // This is actually the default value for it.
222 * config.fontSize_style =
225 * styles : { 'font-size' : '#(size)' },
226 * overrides : [ { element : 'font', attributes : { 'size' : null } } ]
229 CKEDITOR
.config
.fontSize_style
=
232 styles
: { 'font-size' : '#(size)' },
233 overrides
: [ { element
: 'font', attributes
: { 'size' : null } } ]