Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(289)

Side by Side Diff: Source/core/html/HTMLElement.cpp

Issue 524593003: Resolve direction correctly when dir attribute is not in a defined state Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Fix failing test Created 6 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/html/HTMLElement.h ('k') | Source/core/html/HTMLTextAreaElement.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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-2008, 2013, 2014 Apple Inc. All rights reserved. 4 * Copyright (C) 2004-2008, 2013, 2014 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 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 } else if (name == draggableAttr) { 204 } else if (name == draggableAttr) {
205 if (equalIgnoringCase(value, "true")) { 205 if (equalIgnoringCase(value, "true")) {
206 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueElement); 206 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueElement);
207 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Select, CSSValueNone); 207 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Select, CSSValueNone);
208 } else if (equalIgnoringCase(value, "false")) 208 } else if (equalIgnoringCase(value, "false"))
209 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueNone); 209 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueNone);
210 } else if (name == dirAttr) { 210 } else if (name == dirAttr) {
211 if (equalIgnoringCase(value, "auto")) 211 if (equalIgnoringCase(value, "auto"))
212 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBid i, unicodeBidiAttributeForDirAuto(this)); 212 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBid i, unicodeBidiAttributeForDirAuto(this));
213 else { 213 else {
214 if (isValidDirAttribute(value)) 214 if (isValidDirAttribute(value)) {
215 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, value); 215 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, value);
216 else 216 } else {
217 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, "ltr"); 217 const AtomicString& dirValue = determineDirection() == RTL ? "rt l" : "ltr";
Sunil Ratnu 2014/11/21 12:21:08 Hi tkent, We need to keep this else check here bec
tkent 2014/11/25 01:27:24 I don't think parent lookup is a right solution. H
Sunil Ratnu 2014/11/25 05:43:25 The above approach does not work here. The above m
tkent 2014/11/25 05:56:09 Please investigate why it didn't work, and find an
218 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, dirValue);
219 }
218 if (!hasTagName(bdiTag) && !hasTagName(bdoTag) && !hasTagName(output Tag)) 220 if (!hasTagName(bdiTag) && !hasTagName(bdoTag) && !hasTagName(output Tag))
219 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicod eBidi, CSSValueEmbed); 221 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicod eBidi, CSSValueEmbed);
220 } 222 }
221 } else if (name.matches(XMLNames::langAttr)) 223 } else if (name.matches(XMLNames::langAttr))
222 mapLanguageAttributeToLocale(value, style); 224 mapLanguageAttributeToLocale(value, style);
223 else if (name == langAttr) { 225 else if (name == langAttr) {
224 // xml:lang has a higher priority than lang. 226 // xml:lang has a higher priority than lang.
225 if (!fastHasAttribute(XMLNames::langAttr)) 227 if (!fastHasAttribute(XMLNames::langAttr))
226 mapLanguageAttributeToLocale(value, style); 228 mapLanguageAttributeToLocale(value, style);
227 } else 229 } else
(...skipping 480 matching lines...) Expand 10 before | Expand all | Expand 10 after
708 { 710 {
709 if (!(selfOrAncestorHasDirAutoAttribute() && hasDirectionAuto())) { 711 if (!(selfOrAncestorHasDirAutoAttribute() && hasDirectionAuto())) {
710 isAuto = false; 712 isAuto = false;
711 return LTR; 713 return LTR;
712 } 714 }
713 715
714 isAuto = true; 716 isAuto = true;
715 return directionality(); 717 return directionality();
716 } 718 }
717 719
720 // FIXME: Implement directionality for input type='tel'.
721 // Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#th e-directionality.
722 TextDirection HTMLElement::determineDirection() const
Sunil Ratnu 2014/11/21 12:21:08 Instead of moving it here, we can also define a ne
723 {
724 for (const HTMLElement* element = this; element; element = Traversal<HTMLEle ment>::firstAncestor(*element)) {
725 const AtomicString& dirAttributeValue = element->fastGetAttribute(dirAtt r);
726 if (dirAttributeValue.isNull())
727 continue;
728
729 if (equalIgnoringCase(dirAttributeValue, "rtl"))
730 return RTL;
731
732 if (equalIgnoringCase(dirAttributeValue, "ltr"))
733 return LTR;
734
735 if (equalIgnoringCase(dirAttributeValue, "auto")) {
736 bool isAuto;
737 return element->directionalityIfhasDirAutoAttribute(isAuto);
738 }
739 }
740
741 return LTR;
742 }
743
718 TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) c onst 744 TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) c onst
719 { 745 {
720 if (isHTMLInputElement(*this)) { 746 if (isHTMLInputElement(*this)) {
721 HTMLInputElement* inputElement = toHTMLInputElement(const_cast<HTMLEleme nt*>(this)); 747 HTMLInputElement* inputElement = toHTMLInputElement(const_cast<HTMLEleme nt*>(this));
722 bool hasStrongDirectionality; 748 bool hasStrongDirectionality;
723 TextDirection textDirection = determineDirectionality(inputElement->valu e(), hasStrongDirectionality); 749 TextDirection textDirection = determineDirectionality(inputElement->valu e(), hasStrongDirectionality);
724 if (strongDirectionalityTextNode) 750 if (strongDirectionalityTextNode)
725 *strongDirectionalityTextNode = hasStrongDirectionality ? inputEleme nt : 0; 751 *strongDirectionalityTextNode = hasStrongDirectionality ? inputEleme nt : 0;
726 return textDirection; 752 return textDirection;
727 } 753 }
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
1033 #ifndef NDEBUG 1059 #ifndef NDEBUG
1034 1060
1035 // For use in the debugger 1061 // For use in the debugger
1036 void dumpInnerHTML(blink::HTMLElement*); 1062 void dumpInnerHTML(blink::HTMLElement*);
1037 1063
1038 void dumpInnerHTML(blink::HTMLElement* element) 1064 void dumpInnerHTML(blink::HTMLElement* element)
1039 { 1065 {
1040 printf("%s\n", element->innerHTML().ascii().data()); 1066 printf("%s\n", element->innerHTML().ascii().data());
1041 } 1067 }
1042 #endif 1068 #endif
OLDNEW
« no previous file with comments | « Source/core/html/HTMLElement.h ('k') | Source/core/html/HTMLTextAreaElement.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698