/// <summary> /// If this element is a table, and there's nothing else before or after it and it's aligned left or right /// then removes the alignment. /// </summary> /// <param name="range">The original source range.</param> private void RemoveAlignmentIfSingleTable(MarkupRange range) { // WinLive 273280: Alignment on a table acts like a float, which can throw off the layout of the rest of // the document. If there is nothing before or after the table, then we can safely remove the alignment. IHTMLElement[] topLevelElements = range.GetTopLevelElements(e => !(e is IHTMLCommentElement)); if (topLevelElements.Length == 1 && topLevelElements[0] is IHTMLTable && (String.Compare(topLevelElements[0].getAttribute("align", 2) as string, "left", StringComparison.OrdinalIgnoreCase) == 0 || String.Compare(topLevelElements[0].getAttribute("align", 2) as string, "right", StringComparison.OrdinalIgnoreCase) == 0)) { topLevelElements[0].removeAttribute("align", 0); } }
public static IHTMLElement GetContainingSmartContentElement(MarkupRange range) { IHTMLElement containingSmartContent = range.ParentElement(IsSmartContentContainer); if (containingSmartContent != null) { return containingSmartContent; } else { IHTMLElement[] elements = range.GetTopLevelElements(MarkupRange.FilterNone); if (elements.Length == 1 && IsSmartContent(elements[0])) { return elements[0]; } } return null; }