1 /* 2 Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved. 3 For licensing, see LICENSE.html or http://ckeditor.com/license 4 */ 5 6 (function() 7 { 8 function addCombo( editor, comboName, styleType, lang, entries, defaultLabel, styleDefinition ) 9 { 10 var config = editor.config; 11 12 // Gets the list of fonts from the settings. 13 var names = entries.split( ';' ), 14 values = []; 15 16 // Create style objects for all fonts. 17 var styles = {}; 18 for ( var i = 0 ; i < names.length ; i++ ) 19 { 20 var vars = {}; 21 var parts = names[ i ].split( '/' ); 22 23 var name = names[ i ] = parts[ 0 ]; 24 vars[ styleType ] = values[ i ] = parts[ 1 ] || name; 25 26 styles[ name ] = new CKEDITOR.style( styleDefinition, vars ); 27 } 28 29 editor.ui.addRichCombo( comboName, 30 { 31 label : lang.label, 32 title : lang.panelTitle, 33 voiceLabel : lang.voiceLabel, 34 className : 'cke_' + ( styleType == 'size' ? 'fontSize' : 'font' ), 35 multiSelect : false, 36 37 panel : 38 { 39 css : [ config.contentsCss, CKEDITOR.getUrl( editor.skinPath + 'editor.css' ) ], 40 voiceLabel : lang.panelVoiceLabel 41 }, 42 43 init : function() 44 { 45 this.startGroup( lang.panelTitle ); 46 47 for ( var i = 0 ; i < names.length ; i++ ) 48 { 49 var name = names[ i ]; 50 51 // Add the tag entry to the panel list. 52 this.add( name, '<span style="font-' + styleType + ':' + values[ i ] + '">' + name + '</span>', name ); 53 } 54 }, 55 56 onClick : function( value ) 57 { 58 editor.focus(); 59 editor.fire( 'saveSnapshot' ); 60 61 var style = styles[ value ]; 62 63 if ( this.getValue() == value ) 64 style.remove( editor.document ); 65 else 66 style.apply( editor.document ); 67 68 editor.fire( 'saveSnapshot' ); 69 }, 70 71 onRender : function() 72 { 73 editor.on( 'selectionChange', function( ev ) 74 { 75 var currentValue = this.getValue(); 76 77 var elementPath = ev.data.path, 78 elements = elementPath.elements; 79 80 // For each element into the elements path. 81 for ( var i = 0, element ; i < elements.length ; i++ ) 82 { 83 element = elements[i]; 84 85 // Check if the element is removable by any of 86 // the styles. 87 for ( var value in styles ) 88 { 89 if ( styles[ value ].checkElementRemovable( element, true ) ) 90 { 91 if ( value != currentValue ) 92 this.setValue( value ); 93 return; 94 } 95 } 96 } 97 98 // If no styles match, just empty it. 99 this.setValue( '', defaultLabel ); 100 }, 101 this); 102 } 103 }); 104 } 105 106 CKEDITOR.plugins.add( 'font', 107 { 108 requires : [ 'richcombo', 'styles' ], 109 110 init : function( editor ) 111 { 112 var config = editor.config; 113 114 addCombo( editor, 'Font', 'family', editor.lang.font, config.font_names, config.font_defaultLabel, config.font_style ); 115 addCombo( editor, 'FontSize', 'size', editor.lang.fontSize, config.fontSize_sizes, config.fontSize_defaultLabel, config.fontSize_style ); 116 } 117 }); 118 })(); 119 120 // Font settings. 121 122 CKEDITOR.config.font_names = 123 'Arial/Arial, Helvetica, sans-serif;' + 124 'Comic Sans MS/Comic Sans MS, cursive;' + 125 'Courier New/Courier New, Courier, monospace;' + 126 'Georgia/Georgia, serif;' + 127 'Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif;' + 128 'Tahoma/Tahoma, Geneva, sans-serif;' + 129 'Times New Roman/Times New Roman, Times, serif;' + 130 'Trebuchet MS/Trebuchet MS, Helvetica, sans-serif;' + 131 'Verdana/Verdana, Geneva, sans-serif'; 132 133 CKEDITOR.config.font_defaultLabel = ''; 134 CKEDITOR.config.font_style = 135 { 136 element : 'span', 137 styles : { 'font-family' : '#(family)' }, 138 overrides : [ { element : 'font', attributes : { 'face' : null } } ] 139 }; 140 141 // Font Size setting. 142 143 CKEDITOR.config.fontSize_sizes = 144 '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'; 145 146 CKEDITOR.config.fontSize_defaultLabel = ''; 147 CKEDITOR.config.fontSize_style = 148 { 149 element : 'span', 150 styles : { 'font-size' : '#(size)' }, 151 overrides : [ { element : 'font', attributes : { 'face' : null } } ] 152 }; 153