R@c (X`qH)=-i JM$#Y.c4-A[ SΛyӮ/UK!V7-|FOaDm4*:]W^~Q#~l!,ΑD\>9PR4R߃޻tGgy4׋3hhauXmcUyˠM Od i4x ', .Z=7@&=U\r~Q`NH\jZ7,Puz7i*ɀwdVߑ>]?* duf wſ2Jg欁H7Im D11CmЫ4q͒c yo6 z$xQh #}ahƌ_jSPwo\8%3zs_9'm/,'ݶ(7WD$8)6IDxP 9I9'm/,'D7P>mXz5H5nt0?awqI7&Ɇ`'Bc-x{[c_{xg8ٹFX#zL!uVIƓ.gy!N yqJC~%B߅a&(2t2rOC˘ B?@Xb BKNt'K(7*fV.|Qk[\ZQ/Q-͘Vs@-c!.36 [3ӅNj*$X#'Z> kJ9dN}kI7H|i {ā fo/&P2E:gQ' v1v%tI^̖gDr_֪B g[ |ast:YP.Yj@ϲ~X\Qʶ0ET@dc6ЛF$iG9x+ᩖ{͜hHafWX=2o-4[pBOH#vJ2->0c ٹ@tҐ|X)-Ks^$=[w3wռ_FGrd1pI=񶹰$wYͼ²f"#}1 aڤJ$$@&ٰ}xnR-dAqS,i>Hh9QI'>ck >ḐAQ5PF!n1H>0'Z=AsǷr%uN^c~UTicG#yR,3BR~LYNU!:5xN5:4wۺP7&k[IiSu aGxb48> VxC"nyAh]q3Ƭr٢yuԻGxTGj'j[%MPւ*\K A̰Sm !'?bx*c  {`ˡC}k !nfa>PmAA8zEOY9+Uȱ* ܼvԇg7&D,,[qO~trPUJ#@2s+1< ҍeZ2x+V,F#gI8CΩŒb2NWH,o^r`ܬOSe{r?]ɫů>TىY&H& 8vʗJ7'R-@]+ Z@]q3@dT BjKܵ aLBHZ)bXA e-p^UoMg]ӤZHn%RˉnH 8:&+RG5IB8IoBMm=ɯ2 #$]8GLG\xi ˍWIy&fzGMߠPߪJUOyRZ辏J8쏘N`ұ7g;Rĸuw7_FD6e$/ ,ȍ7(*t)xtM~bZLxϨӤ D^#X%[e]qm4zT =z15֮1L OA]@ݖD飈Hb8+|?߼'OOշ:Uۜ|tN|&$l$/hPx|%V9a}!(|mNFHld<ߓtKrk3!CMGO Kh C/|q/l%p \2}5eXrecBGHPte~G 1[-o1n#tv8ZԨmkȒ`}~eN==RreYd+OjD4ՕQLߚՃ"Be_~p06aUO;&v47Bo$z,LKߐcB;lK6t 4*P〲JlC#uԔ`aW0ƎAf݇|)2,T%WeB"#EG`vHrSyEDg MWM8dQ*/`[NZFFC!B%GU h \7L_,/pR$$p@MV NNk.1(3-Nݤ֧f*3ݢ `xXrLT B5& |R*>Mc(9[J͑SmY.%%8 X#WrйElQFy}QV{vxk!\mwB/"c 1o<@Ȍz05b{=ʊ/|F2@#dp_(Ն!ĻU!>N uKIt3;F_ ٯ2[4}<&*0&T^X)]אQ̶8@I=!RRa)&|9]5S9.E1Z4T.CSfv4\Xc.^ҥ[`k"Y蚼ffQ6E;4{L7pҮ W!! (٪eQ]c0ֻF|R<8zpMؗrC x+z fy&W2Oy ;ǐ|b)L3$.fT.K,b A)1I'G/B6f0[1YbyI½0o\OŽW<M UWWBCÊQnWK0' iei>-+ap9y_e߭O"xw|,CԭyWݻc CeGX{@]_ ,Θ}Бw%2c oAgycNQ=ho4!͘o{ݥHswr\i~L`}"$L2u:F;Q6cs'I;/{BEr oize_sizes: 'xx-small/1;x-small/2;small/3;medium/4;large/5;x-large/6;xx-large/7', fontSize_style: { element: 'font', attributes: { 'size': '#(size)' } }, /* * Font colors. */ colorButton_foreStyle: { element: 'font', attributes: { 'color': '#(color)' } }, colorButton_backStyle: { element: 'font', styles: { 'background-color': '#(color)' } }, /* * Styles combo. */ stylesSet: [ { name: 'Computer Code', element: 'code' }, { name: 'Keyboard Phrase', element: 'kbd' }, { name: 'Sample Text', element: 'samp' }, { name: 'Variable', element: 'var' }, { name: 'Deleted Text', element: 'del' }, { name: 'Inserted Text', element: 'ins' }, { name: 'Cited Work', element: 'cite' }, { name: 'Inline Quotation', element: 'q' } ], on: { pluginsLoaded: configureTransformations, loaded: configureHtmlWriter } }); /* * Add missing content transformations. */ function configureTransformations( evt ) { var editor = evt.editor; editor.dataProcessor.htmlFilter.addRules( { attributes: { style: function( value, element ) { // Return #RGB for background and border colors return CKEDITOR.tools.convertRgbToHex( value ); } } } ); // Default automatic content transformations do not yet take care of // align attributes on blocks, so we need to add our own transformation rules. function alignToAttribute( element ) { if ( element.styles[ 'text-align' ] ) { element.attributes.align = element.styles[ 'text-align' ]; delete element.styles[ 'text-align' ]; } } editor.filter.addTransformations( [ [ { element: 'p', right: alignToAttribute } ], [ { element: 'h1', right: alignToAttribute } ], [ { element: 'h2', right: alignToAttribute } ], [ { element: 'h3', right: alignToAttribute } ], [ { element: 'pre', right: alignToAttribute } ] ] ); } /* * Adjust the behavior of htmlWriter to make it output HTML like FCKeditor. */ function configureHtmlWriter( evt ) { var editor = evt.editor, dataProcessor = editor.dataProcessor; // Out self closing tags the HTML4 way, like
. dataProcessor.writer.selfClosingEnd = '>'; // Make output formatting behave similar to FCKeditor. var dtd = CKEDITOR.dtd; for ( var e in CKEDITOR.tools.extend( {}, dtd.$nonBodyContent, dtd.$block, dtd.$listItem, dtd.$tableContent ) ) { dataProcessor.writer.setRules( e, { indent: true, breakBeforeOpen: true, breakAfterOpen: false, breakBeforeClose: !dtd[ e ][ '#' ], breakAfterClose: true }); } }