| 14 | var sel = editor.getSelection(); |
| 15 | |
| 16 | // Per element/object alignment application. |
| 17 | if ( sel.getType() == CKEDITOR.SELECTION_ELEMENT ) |
| 18 | { |
| 19 | var selected = sel.getSelectedElement(), |
| 20 | tag = selected.getName(); |
| 21 | |
| 22 | var fake, |
| 23 | isFake = selected.data( 'cke-real-element-type' ); |
| 24 | |
| 25 | // Is selected a fake object? |
| 26 | if ( isFake ) |
| 27 | { |
| 28 | fake = selected; |
| 29 | selected = editor.restoreRealElement( selected ); |
| 30 | tag = selected.getName(); |
| 31 | } |
| 32 | |
| 33 | var stater = stateFuncs[ usefloat[ tag ] ? 'float' : useAlign[ tag ] ? 'align' : '' ]; |
| 34 | if ( stater ) |
| 35 | return stater.call( this, selected ); |
| 36 | } |
| 37 | |
| 162 | // Map abstract alignments to actual styles, |
| 163 | // e.g. left alignment will apply on image element as style="float: left", |
| 164 | // while when it get applied on table element, align="left" is used instead. |
| 165 | // Note: Thus certain alignment like center/justify might not be available |
| 166 | // on the target element so will be disabled. |
| 167 | var usefloat = { 'img' : 1 }, |
| 168 | useAlign = { 'table' : 1, 'cke:object' : 1 }, |
| 169 | applyFuncs = |
| 170 | { |
| 171 | 'float': function( element ) |
| 172 | { |
| 173 | this.state == CKEDITOR.TRISTATE_OFF ? |
| 174 | element.setStyle( 'float', this.value ) |
| 175 | : element.removeStyle( 'float' ); |
| 176 | }, |
| 177 | 'align' : function( element ) |
| 178 | { |
| 179 | this.state == CKEDITOR.TRISTATE_OFF ? |
| 180 | element.setAttribute( 'align', this.value ) |
| 181 | : element.removeAttribute( 'align' ); |
| 182 | } |
| 183 | }, |
| 184 | stateFuncs = |
| 185 | { |
| 186 | 'float': function( element ) |
| 187 | { |
| 188 | if ( /left|right/.test( this.value ) ) |
| 189 | return element.getStyle( 'float' ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF; |
| 190 | |
| 191 | return CKEDITOR.TRISTATE_DISABLED; |
| 192 | }, |
| 193 | 'align' : function( element ) |
| 194 | { |
| 195 | if ( /left|right|center/.test( this.value ) |
| 196 | && ( this.value != 'center' || element.getName() in CKEDITOR.dtd.$block ) ) // Value 'center' is not available for inline elements. |
| 197 | return element.getAttribute( 'align' ) == this.value ? CKEDITOR.TRISTATE_ON : CKEDITOR.TRISTATE_OFF; |
| 198 | |
| 199 | return CKEDITOR.TRISTATE_DISABLED; |
| 200 | } |
| 201 | }; |
| 202 | |
| 212 | // Per element/object alignment application. |
| 213 | if ( selection.getType() == CKEDITOR.SELECTION_ELEMENT ) |
| 214 | { |
| 215 | var selected = selection.getSelectedElement(), |
| 216 | tag = selected.getName(); |
| 217 | |
| 218 | var fake, |
| 219 | isFake = selected.data( 'cke-real-element-type' ); |
| 220 | |
| 221 | // Is selected a fake object? |
| 222 | if ( isFake ) |
| 223 | { |
| 224 | fake = selected; |
| 225 | selected = editor.restoreRealElement( selected ); |
| 226 | tag = selected.getName(); |
| 227 | } |
| 228 | |
| 229 | var applier = applyFuncs[ usefloat[ tag ] ? 'float' : useAlign[ tag ] ? 'align' : '' ]; |
| 230 | applier && applier.call( this, selected ); |
| 231 | |
| 232 | // Emulate alignment on fake object. |
| 233 | if ( isFake ) |
| 234 | { |
| 235 | editor.updateFakeElement( fake, selected ); |
| 236 | applyFuncs[ 'align' ].call( this, fake ); |
| 237 | } |
| 238 | |
| 239 | return; |
| 240 | } |
| 241 | |