OLD | NEW |
---|---|
1 /* | 1 /* |
2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
4 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. | 4 * Copyright (C) 2004, 2005, 2006, 2007, 2008 Apple Inc. All rights reserved. |
5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) | 5 * Copyright (C) 2009 Torch Mobile Inc. All rights reserved. (http://www.torchmo bile.com/) |
6 * Copyright (C) 2011 Motorola Mobility. All rights reserved. | 6 * Copyright (C) 2011 Motorola Mobility. All rights reserved. |
7 * | 7 * |
8 * This library is free software; you can redistribute it and/or | 8 * This library is free software; you can redistribute it and/or |
9 * modify it under the terms of the GNU Library General Public | 9 * modify it under the terms of the GNU Library General Public |
10 * License as published by the Free Software Foundation; either | 10 * License as published by the Free Software Foundation; either |
(...skipping 20 matching lines...) Expand all Loading... | |
31 #include "XMLNames.h" | 31 #include "XMLNames.h" |
32 #include "bindings/v8/ExceptionState.h" | 32 #include "bindings/v8/ExceptionState.h" |
33 #include "bindings/v8/ScriptEventListener.h" | 33 #include "bindings/v8/ScriptEventListener.h" |
34 #include "core/css/CSSMarkup.h" | 34 #include "core/css/CSSMarkup.h" |
35 #include "core/css/CSSValuePool.h" | 35 #include "core/css/CSSValuePool.h" |
36 #include "core/css/StylePropertySet.h" | 36 #include "core/css/StylePropertySet.h" |
37 #include "core/dom/DocumentFragment.h" | 37 #include "core/dom/DocumentFragment.h" |
38 #include "core/dom/ExceptionCode.h" | 38 #include "core/dom/ExceptionCode.h" |
39 #include "core/dom/NodeTraversal.h" | 39 #include "core/dom/NodeTraversal.h" |
40 #include "core/dom/Text.h" | 40 #include "core/dom/Text.h" |
41 #include "core/dom/shadow/ShadowRoot.h" | |
41 #include "core/editing/markup.h" | 42 #include "core/editing/markup.h" |
42 #include "core/events/EventListener.h" | 43 #include "core/events/EventListener.h" |
43 #include "core/events/KeyboardEvent.h" | 44 #include "core/events/KeyboardEvent.h" |
44 #include "core/frame/Settings.h" | 45 #include "core/frame/Settings.h" |
45 #include "core/html/HTMLBRElement.h" | 46 #include "core/html/HTMLBRElement.h" |
46 #include "core/html/HTMLFormElement.h" | 47 #include "core/html/HTMLFormElement.h" |
47 #include "core/html/HTMLInputElement.h" | 48 #include "core/html/HTMLInputElement.h" |
48 #include "core/html/HTMLTemplateElement.h" | 49 #include "core/html/HTMLTemplateElement.h" |
49 #include "core/html/HTMLTextFormControlElement.h" | 50 #include "core/html/HTMLTextFormControlElement.h" |
50 #include "core/html/parser/HTMLParserIdioms.h" | 51 #include "core/html/parser/HTMLParserIdioms.h" |
(...skipping 579 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
630 return node->isHTMLElement() && (isHTMLBDIElement(*node) || toHTMLElement(no de)->hasAttribute(dirAttr)); | 631 return node->isHTMLElement() && (isHTMLBDIElement(*node) || toHTMLElement(no de)->hasAttribute(dirAttr)); |
631 } | 632 } |
632 | 633 |
633 static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastN ode = 0) | 634 static void setHasDirAutoFlagRecursively(Node* firstNode, bool flag, Node* lastN ode = 0) |
634 { | 635 { |
635 firstNode->setSelfOrAncestorHasDirAutoAttribute(flag); | 636 firstNode->setSelfOrAncestorHasDirAutoAttribute(flag); |
636 | 637 |
637 Node* node = firstNode->firstChild(); | 638 Node* node = firstNode->firstChild(); |
638 | 639 |
639 while (node) { | 640 while (node) { |
640 if (node->selfOrAncestorHasDirAutoAttribute() == flag) | |
esprehn
2014/06/11 22:56:12
This means we're going to walk down the subtree ev
Habib Virji
2014/06/12 08:38:53
Yes that's true. Reason was it was preventing chil
| |
641 return; | |
642 | |
643 if (elementAffectsDirectionality(node)) { | 641 if (elementAffectsDirectionality(node)) { |
644 if (node == lastNode) | 642 if (node == lastNode) |
645 return; | 643 return; |
646 node = NodeTraversal::nextSkippingChildren(*node, firstNode); | 644 node = NodeTraversal::nextSkippingChildren(*node, firstNode); |
647 continue; | 645 continue; |
648 } | 646 } |
649 node->setSelfOrAncestorHasDirAutoAttribute(flag); | 647 node->setSelfOrAncestorHasDirAutoAttribute(flag); |
650 if (node == lastNode) | 648 if (node == lastNode) |
651 return; | 649 return; |
652 node = NodeTraversal::next(*node, firstNode); | 650 node = NodeTraversal::next(*node, firstNode); |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
746 return; | 744 return; |
747 } | 745 } |
748 } | 746 } |
749 } | 747 } |
750 } | 748 } |
751 | 749 |
752 void HTMLElement::calculateAndAdjustDirectionality() | 750 void HTMLElement::calculateAndAdjustDirectionality() |
753 { | 751 { |
754 Node* strongDirectionalityTextNode; | 752 Node* strongDirectionalityTextNode; |
755 TextDirection textDirection = directionality(&strongDirectionalityTextNode); | 753 TextDirection textDirection = directionality(&strongDirectionalityTextNode); |
756 setHasDirAutoFlagRecursively(this, true, strongDirectionalityTextNode); | 754 setHasDirAutoFlagRecursively(this, hasDirectionAuto(), strongDirectionalityT extNode); |
755 for (ShadowRoot* root = youngestShadowRoot(); root; root = root->olderShadow Root()) | |
756 setHasDirAutoFlagRecursively(root, hasDirectionAuto()); | |
757 if (renderer() && renderer()->style() && renderer()->style()->direction() != textDirection) | 757 if (renderer() && renderer()->style() && renderer()->style()->direction() != textDirection) |
758 setNeedsStyleRecalc(SubtreeStyleChange); | 758 setNeedsStyleRecalc(SubtreeStyleChange); |
759 } | 759 } |
760 | 760 |
761 void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Node* beforeC hange, int childCountDelta) | 761 void HTMLElement::adjustDirectionalityIfNeededAfterChildrenChanged(Node* beforeC hange, int childCountDelta) |
762 { | 762 { |
763 if (document().renderView() && childCountDelta < 0) { | 763 if (document().renderView() && childCountDelta < 0) { |
764 Node* node = beforeChange ? NodeTraversal::nextSkippingChildren(*beforeC hange) : 0; | 764 Node* node = beforeChange ? NodeTraversal::nextSkippingChildren(*beforeC hange) : 0; |
765 for (int counter = 0; node && counter < childCountDelta; counter++, node = NodeTraversal::nextSkippingChildren(*node)) { | 765 for (int counter = 0; node && counter < childCountDelta; counter++, node = NodeTraversal::nextSkippingChildren(*node)) { |
766 if (elementAffectsDirectionality(node)) | 766 if (elementAffectsDirectionality(node)) |
(...skipping 188 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
955 #ifndef NDEBUG | 955 #ifndef NDEBUG |
956 | 956 |
957 // For use in the debugger | 957 // For use in the debugger |
958 void dumpInnerHTML(WebCore::HTMLElement*); | 958 void dumpInnerHTML(WebCore::HTMLElement*); |
959 | 959 |
960 void dumpInnerHTML(WebCore::HTMLElement* element) | 960 void dumpInnerHTML(WebCore::HTMLElement* element) |
961 { | 961 { |
962 printf("%s\n", element->innerHTML().ascii().data()); | 962 printf("%s\n", element->innerHTML().ascii().data()); |
963 } | 963 } |
964 #endif | 964 #endif |
OLD | NEW |