OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. | 2 * Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009 Apple Inc. All rights reserv
ed. |
3 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved. | 3 * Copyright (C) 2008, 2009, 2010, 2011 Google Inc. All rights reserved. |
4 * Copyright (C) 2011 Igalia S.L. | 4 * Copyright (C) 2011 Igalia S.L. |
5 * Copyright (C) 2011 Motorola Mobility. All rights reserved. | 5 * Copyright (C) 2011 Motorola Mobility. All rights reserved. |
6 * | 6 * |
7 * Redistribution and use in source and binary forms, with or without | 7 * Redistribution and use in source and binary forms, with or without |
8 * modification, are permitted provided that the following conditions | 8 * modification, are permitted provided that the following conditions |
9 * are met: | 9 * are met: |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 template<typename EditingStrategy> | 62 template<typename EditingStrategy> |
63 static bool handleSelectionBoundary(const Node&); | 63 static bool handleSelectionBoundary(const Node&); |
64 | 64 |
65 template<> | 65 template<> |
66 bool handleSelectionBoundary<EditingStrategy>(const Node&) | 66 bool handleSelectionBoundary<EditingStrategy>(const Node&) |
67 { | 67 { |
68 return false; | 68 return false; |
69 } | 69 } |
70 | 70 |
71 template<> | 71 template<> |
72 bool handleSelectionBoundary<EditingInComposedTreeStrategy>(const Node& node) | 72 bool handleSelectionBoundary<EditingInFlatTreeStrategy>(const Node& node) |
73 { | 73 { |
74 if (!node.isElementNode()) | 74 if (!node.isElementNode()) |
75 return false; | 75 return false; |
76 ElementShadow* shadow = toElement(node).shadow(); | 76 ElementShadow* shadow = toElement(node).shadow(); |
77 if (!shadow) | 77 if (!shadow) |
78 return false; | 78 return false; |
79 return shadow->youngestShadowRoot().type() == ShadowRootType::UserAgent; | 79 return shadow->youngestShadowRoot().type() == ShadowRootType::UserAgent; |
80 } | 80 } |
81 | 81 |
82 } // namespace | 82 } // namespace |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 } | 278 } |
279 | 279 |
280 template<typename Strategy> | 280 template<typename Strategy> |
281 Node* StyledMarkupTraverser<Strategy>::traverse(Node* startNode, Node* pastEnd) | 281 Node* StyledMarkupTraverser<Strategy>::traverse(Node* startNode, Node* pastEnd) |
282 { | 282 { |
283 WillBeHeapVector<RawPtrWillBeMember<ContainerNode>> ancestorsToClose; | 283 WillBeHeapVector<RawPtrWillBeMember<ContainerNode>> ancestorsToClose; |
284 Node* next; | 284 Node* next; |
285 Node* lastClosed = nullptr; | 285 Node* lastClosed = nullptr; |
286 for (Node* n = startNode; n && n != pastEnd; n = next) { | 286 for (Node* n = startNode; n && n != pastEnd; n = next) { |
287 // If |n| is a selection boundary such as <input>, traverse the child | 287 // If |n| is a selection boundary such as <input>, traverse the child |
288 // nodes in the DOM tree instead of the composed tree. | 288 // nodes in the DOM tree instead of the flat tree. |
289 if (handleSelectionBoundary<Strategy>(*n)) { | 289 if (handleSelectionBoundary<Strategy>(*n)) { |
290 lastClosed = StyledMarkupTraverser<EditingStrategy>(m_accumulator, m
_lastClosed.get()).traverse(n, EditingStrategy::nextSkippingChildren(*n)); | 290 lastClosed = StyledMarkupTraverser<EditingStrategy>(m_accumulator, m
_lastClosed.get()).traverse(n, EditingStrategy::nextSkippingChildren(*n)); |
291 next = EditingInComposedTreeStrategy::nextSkippingChildren(*n); | 291 next = EditingInFlatTreeStrategy::nextSkippingChildren(*n); |
292 } else { | 292 } else { |
293 next = Strategy::next(*n); | 293 next = Strategy::next(*n); |
294 if (isEnclosingBlock(n) && canHaveChildrenForEditing(n) && next == p
astEnd) { | 294 if (isEnclosingBlock(n) && canHaveChildrenForEditing(n) && next == p
astEnd) { |
295 // Don't write out empty block containers that aren't fully sele
cted. | 295 // Don't write out empty block containers that aren't fully sele
cted. |
296 continue; | 296 continue; |
297 } | 297 } |
298 | 298 |
299 if (!n->layoutObject() && !enclosingElementWithTag(firstPositionInOr
BeforeNode(n), selectTag)) { | 299 if (!n->layoutObject() && !enclosingElementWithTag(firstPositionInOr
BeforeNode(n), selectTag)) { |
300 next = Strategy::nextSkippingChildren(*n); | 300 next = Strategy::nextSkippingChildren(*n); |
301 // Don't skip over pastEnd. | 301 // Don't skip over pastEnd. |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
471 if (element.isStyledElement() && element.inlineStyle()) | 471 if (element.isStyledElement() && element.inlineStyle()) |
472 inlineStyle->overrideWithStyle(element.inlineStyle()); | 472 inlineStyle->overrideWithStyle(element.inlineStyle()); |
473 | 473 |
474 if (element.isHTMLElement() && shouldAnnotate()) | 474 if (element.isHTMLElement() && shouldAnnotate()) |
475 inlineStyle->mergeStyleFromRulesForSerialization(&toHTMLElement(element)
); | 475 inlineStyle->mergeStyleFromRulesForSerialization(&toHTMLElement(element)
); |
476 | 476 |
477 return inlineStyle; | 477 return inlineStyle; |
478 } | 478 } |
479 | 479 |
480 template class StyledMarkupSerializer<EditingStrategy>; | 480 template class StyledMarkupSerializer<EditingStrategy>; |
481 template class StyledMarkupSerializer<EditingInComposedTreeStrategy>; | 481 template class StyledMarkupSerializer<EditingInFlatTreeStrategy>; |
482 | 482 |
483 } // namespace blink | 483 } // namespace blink |
OLD | NEW |