Chromium Code Reviews| 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-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 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 181 } else if (name == draggableAttr) { | 181 } else if (name == draggableAttr) { |
| 182 if (equalIgnoringCase(value, "true")) { | 182 if (equalIgnoringCase(value, "true")) { |
| 183 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueElement); | 183 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueElement); |
| 184 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Select, CSSValueNone); | 184 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Select, CSSValueNone); |
| 185 } else if (equalIgnoringCase(value, "false")) | 185 } else if (equalIgnoringCase(value, "false")) |
| 186 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueNone); | 186 addPropertyToPresentationAttributeStyle(style, CSSPropertyWebkitUser Drag, CSSValueNone); |
| 187 } else if (name == dirAttr) { | 187 } else if (name == dirAttr) { |
| 188 if (equalIgnoringCase(value, "auto")) | 188 if (equalIgnoringCase(value, "auto")) |
| 189 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBid i, unicodeBidiAttributeForDirAuto(this)); | 189 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicodeBid i, unicodeBidiAttributeForDirAuto(this)); |
| 190 else { | 190 else { |
| 191 if (isValidDirAttribute(value)) | 191 if (isValidDirAttribute(value)) |
|
tkent
2014/09/12 06:33:55
If |value| is "auto", this code sets it to directi
Sunil Ratnu
2014/09/12 07:16:12
I don't think the flow will come here for value 'a
tkent
2014/11/07 01:01:53
Why is it in the else block? Did you look at the
Sunil Ratnu
2014/11/12 13:49:32
Yes, I did take a look at the isValidDirAttribute
tkent
2014/11/19 03:32:19
Ah, you're right. We check "auto" at line 188. S
| |
| 192 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, value); | 192 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, value); |
| 193 else | |
| 194 addPropertyToPresentationAttributeStyle(style, CSSPropertyDirect ion, "ltr"); | |
| 195 if (!hasTagName(bdiTag) && !hasTagName(bdoTag) && !hasTagName(output Tag)) | 193 if (!hasTagName(bdiTag) && !hasTagName(bdoTag) && !hasTagName(output Tag)) |
| 196 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicod eBidi, CSSValueEmbed); | 194 addPropertyToPresentationAttributeStyle(style, CSSPropertyUnicod eBidi, CSSValueEmbed); |
| 197 } | 195 } |
| 198 } else if (name.matches(XMLNames::langAttr)) | 196 } else if (name.matches(XMLNames::langAttr)) |
| 199 mapLanguageAttributeToLocale(value, style); | 197 mapLanguageAttributeToLocale(value, style); |
| 200 else if (name == langAttr) { | 198 else if (name == langAttr) { |
| 201 // xml:lang has a higher priority than lang. | 199 // xml:lang has a higher priority than lang. |
| 202 if (!fastHasAttribute(XMLNames::langAttr)) | 200 if (!fastHasAttribute(XMLNames::langAttr)) |
| 203 mapLanguageAttributeToLocale(value, style); | 201 mapLanguageAttributeToLocale(value, style); |
| 204 } else | 202 } else |
| (...skipping 471 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 676 { | 674 { |
| 677 if (!(selfOrAncestorHasDirAutoAttribute() && hasDirectionAuto())) { | 675 if (!(selfOrAncestorHasDirAutoAttribute() && hasDirectionAuto())) { |
| 678 isAuto = false; | 676 isAuto = false; |
| 679 return LTR; | 677 return LTR; |
| 680 } | 678 } |
| 681 | 679 |
| 682 isAuto = true; | 680 isAuto = true; |
| 683 return directionality(); | 681 return directionality(); |
| 684 } | 682 } |
| 685 | 683 |
| 684 // FIXME: Implement directionality for input type='tel' when it is supported | |
|
tkent
2014/11/19 03:38:34
type=tel is supported by Google Chrome, IE, Firefo
| |
| 685 // [Currently it is not supported in any of the browsers]. | |
| 686 // Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#th e-directionality | |
| 687 TextDirection HTMLElement::determineDirection() const | |
| 688 { | |
| 689 for (const HTMLElement* element = this; element; element = Traversal<HTMLEle ment>::firstAncestor(*element)) { | |
| 690 const AtomicString& dirAttributeValue = element->fastGetAttribute(dirAtt r); | |
| 691 if (dirAttributeValue.isNull()) | |
| 692 continue; | |
| 693 | |
| 694 if (equalIgnoringCase(dirAttributeValue, "rtl")) | |
| 695 return RTL; | |
| 696 | |
| 697 if (equalIgnoringCase(dirAttributeValue, "ltr")) | |
| 698 return LTR; | |
| 699 | |
| 700 if (equalIgnoringCase(dirAttributeValue, "auto")) { | |
| 701 bool isAuto; | |
| 702 return element->directionalityIfhasDirAutoAttribute(isAuto); | |
| 703 } | |
| 704 } | |
| 705 | |
| 706 return LTR; | |
| 707 } | |
| 708 | |
| 709 // FIXME: This implementation deviates from the spec in case of 'textarea' havin g 'auto' attribute. | |
| 710 // Spec: http://www.whatwg.org/specs/web-apps/current-work/multipage/dom.html#th e-directionality | |
| 686 TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) c onst | 711 TextDirection HTMLElement::directionality(Node** strongDirectionalityTextNode) c onst |
| 687 { | 712 { |
| 688 if (isHTMLInputElement(*this)) { | 713 if (isHTMLInputElement(*this)) { |
| 689 HTMLInputElement* inputElement = toHTMLInputElement(const_cast<HTMLEleme nt*>(this)); | 714 HTMLInputElement* inputElement = toHTMLInputElement(const_cast<HTMLEleme nt*>(this)); |
| 690 bool hasStrongDirectionality; | 715 bool hasStrongDirectionality; |
| 691 TextDirection textDirection = determineDirectionality(inputElement->valu e(), hasStrongDirectionality); | 716 TextDirection textDirection = determineDirectionality(inputElement->valu e(), hasStrongDirectionality); |
| 692 if (strongDirectionalityTextNode) | 717 if (strongDirectionalityTextNode) |
| 693 *strongDirectionalityTextNode = hasStrongDirectionality ? inputEleme nt : 0; | 718 *strongDirectionalityTextNode = hasStrongDirectionality ? inputEleme nt : 0; |
| 694 return textDirection; | 719 return textDirection; |
| 695 } | 720 } |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 994 #ifndef NDEBUG | 1019 #ifndef NDEBUG |
| 995 | 1020 |
| 996 // For use in the debugger | 1021 // For use in the debugger |
| 997 void dumpInnerHTML(blink::HTMLElement*); | 1022 void dumpInnerHTML(blink::HTMLElement*); |
| 998 | 1023 |
| 999 void dumpInnerHTML(blink::HTMLElement* element) | 1024 void dumpInnerHTML(blink::HTMLElement* element) |
| 1000 { | 1025 { |
| 1001 printf("%s\n", element->innerHTML().ascii().data()); | 1026 printf("%s\n", element->innerHTML().ascii().data()); |
| 1002 } | 1027 } |
| 1003 #endif | 1028 #endif |
| OLD | NEW |