| 141 | // Removes any conflicting styles from within the specified range.. |
| 142 | removeConflictsFromRange : function ( range ) |
| 143 | { |
| 144 | var style = this, |
| 145 | overrides = getOverrides( style ), |
| 146 | candidates1 = [], |
| 147 | candidates2 = []; |
| 148 | |
| 149 | var walker = new CKEDITOR.dom.walker( range ); |
| 150 | walker.evaluator = function( node ) |
| 151 | { |
| 152 | if( node.type == CKEDITOR.NODE_ELEMENT ) |
| 153 | { |
| 154 | if( node.is( style.element ) ) |
| 155 | candidates1.push( node ); |
| 156 | if( node.getName() in overrides ) |
| 157 | candidates2.push( node ); |
| 158 | } |
| 159 | }; |
| 160 | walker.lastForward(); |
| 161 | |
| 162 | var count1 = candidates1.length, |
| 163 | count2 = candidates2.length; |
| 164 | |
| 165 | // First remove from element any style conflictions. |
| 166 | for ( var i = 0; i < count1; i++ ) |
| 167 | removeFromElement( style, candidates1[ i ] ); |
| 168 | |
| 169 | // Now remove any other element with different name that is |
| 170 | // defined to be overriden. |
| 171 | for ( i = 0; i < count2; i++ ) |
| 172 | removeOverrides( candidates2[ i ], overrides[ candidates2[ i ].getName() ] ) ; |
| 173 | }, |
| 174 | |
903 | | // Removes a style from inside an element. |
904 | | function removeFromInsideElement( style, element ) |
905 | | { |
906 | | var def = style._.definition, |
907 | | attribs = def.attributes, |
908 | | styles = def.styles, |
909 | | overrides = getOverrides( style ); |
910 | | |
911 | | var innerElements = element.getElementsByTag( style.element ); |
912 | | |
913 | | for ( var i = innerElements.count(); --i >= 0 ; ) |
914 | | removeFromElement( style, innerElements.getItem( i ) ); |
915 | | |
916 | | // Now remove any other element with different name that is |
917 | | // defined to be overriden. |
918 | | for ( var overrideElement in overrides ) |
919 | | { |
920 | | if ( overrideElement != style.element ) |
921 | | { |
922 | | innerElements = element.getElementsByTag( overrideElement ) ; |
923 | | for ( i = innerElements.count() - 1 ; i >= 0 ; i-- ) |
924 | | { |
925 | | var innerElement = innerElements.getItem( i ); |
926 | | removeOverrides( innerElement, overrides[ overrideElement ] ) ; |
927 | | } |
928 | | } |
929 | | } |
930 | | |
931 | | } |
932 | | |