| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2010 Google Inc. All rights reserved. | 2 * Copyright (c) 2010 Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 21 matching lines...) Expand all Loading... |
| 32 #include "core/html/HTMLOutputElement.h" | 32 #include "core/html/HTMLOutputElement.h" |
| 33 | 33 |
| 34 #include "HTMLNames.h" | 34 #include "HTMLNames.h" |
| 35 #include "bindings/v8/ExceptionStatePlaceholder.h" | 35 #include "bindings/v8/ExceptionStatePlaceholder.h" |
| 36 | 36 |
| 37 namespace WebCore { | 37 namespace WebCore { |
| 38 | 38 |
| 39 inline HTMLOutputElement::HTMLOutputElement(Document& document, HTMLFormElement*
form) | 39 inline HTMLOutputElement::HTMLOutputElement(Document& document, HTMLFormElement*
form) |
| 40 : HTMLFormControlElement(HTMLNames::outputTag, document, form) | 40 : HTMLFormControlElement(HTMLNames::outputTag, document, form) |
| 41 , m_isDefaultValueMode(true) | 41 , m_isDefaultValueMode(true) |
| 42 , m_isSetTextContentInProgress(false) | |
| 43 , m_defaultValue("") | 42 , m_defaultValue("") |
| 44 , m_tokens(DOMSettableTokenList::create()) | 43 , m_tokens(DOMSettableTokenList::create()) |
| 45 { | 44 { |
| 46 ScriptWrappable::init(this); | 45 ScriptWrappable::init(this); |
| 47 } | 46 } |
| 48 | 47 |
| 49 PassRefPtr<HTMLOutputElement> HTMLOutputElement::create(Document& document, HTML
FormElement* form) | 48 PassRefPtr<HTMLOutputElement> HTMLOutputElement::create(Document& document, HTML
FormElement* form) |
| 50 { | 49 { |
| 51 return adoptRef(new HTMLOutputElement(document, form)); | 50 return adoptRef(new HTMLOutputElement(document, form)); |
| 52 } | 51 } |
| (...skipping 24 matching lines...) Expand all Loading... |
| 77 | 76 |
| 78 void HTMLOutputElement::setFor(const AtomicString& value) | 77 void HTMLOutputElement::setFor(const AtomicString& value) |
| 79 { | 78 { |
| 80 m_tokens->setValue(value); | 79 m_tokens->setValue(value); |
| 81 } | 80 } |
| 82 | 81 |
| 83 void HTMLOutputElement::childrenChanged(bool createdByParser, Node* beforeChange
, Node* afterChange, int childCountDelta) | 82 void HTMLOutputElement::childrenChanged(bool createdByParser, Node* beforeChange
, Node* afterChange, int childCountDelta) |
| 84 { | 83 { |
| 85 HTMLFormControlElement::childrenChanged(createdByParser, beforeChange, after
Change, childCountDelta); | 84 HTMLFormControlElement::childrenChanged(createdByParser, beforeChange, after
Change, childCountDelta); |
| 86 | 85 |
| 87 if (createdByParser || m_isSetTextContentInProgress) { | |
| 88 m_isSetTextContentInProgress = false; | |
| 89 return; | |
| 90 } | |
| 91 | |
| 92 if (m_isDefaultValueMode) | 86 if (m_isDefaultValueMode) |
| 93 m_defaultValue = textContent(); | 87 m_defaultValue = textContent(); |
| 94 } | 88 } |
| 95 | 89 |
| 96 void HTMLOutputElement::resetImpl() | 90 void HTMLOutputElement::resetImpl() |
| 97 { | 91 { |
| 98 // The reset algorithm for output elements is to set the element's | 92 // The reset algorithm for output elements is to set the element's |
| 99 // value mode flag to "default" and then to set the element's textContent | 93 // value mode flag to "default" and then to set the element's textContent |
| 100 // attribute to the default value. | 94 // attribute to the default value. |
| 101 m_isDefaultValueMode = true; | |
| 102 if (m_defaultValue == value()) | 95 if (m_defaultValue == value()) |
| 103 return; | 96 return; |
| 104 setTextContentInternal(m_defaultValue); | 97 setTextContent(m_defaultValue); |
| 98 m_isDefaultValueMode = true; |
| 105 } | 99 } |
| 106 | 100 |
| 107 String HTMLOutputElement::value() const | 101 String HTMLOutputElement::value() const |
| 108 { | 102 { |
| 109 return textContent(); | 103 return textContent(); |
| 110 } | 104 } |
| 111 | 105 |
| 112 void HTMLOutputElement::setValue(const String& value) | 106 void HTMLOutputElement::setValue(const String& value) |
| 113 { | 107 { |
| 114 // The value mode flag set to "value" when the value attribute is set. | 108 // The value mode flag set to "value" when the value attribute is set. |
| 115 m_isDefaultValueMode = false; | 109 m_isDefaultValueMode = false; |
| 116 if (value == this->value()) | 110 if (value == this->value()) |
| 117 return; | 111 return; |
| 118 setTextContentInternal(value); | 112 setTextContent(value); |
| 119 } | 113 } |
| 120 | 114 |
| 121 String HTMLOutputElement::defaultValue() const | 115 String HTMLOutputElement::defaultValue() const |
| 122 { | 116 { |
| 123 return m_defaultValue; | 117 return m_defaultValue; |
| 124 } | 118 } |
| 125 | 119 |
| 126 void HTMLOutputElement::setDefaultValue(const String& value) | 120 void HTMLOutputElement::setDefaultValue(const String& value) |
| 127 { | 121 { |
| 128 if (m_defaultValue == value) | 122 if (m_defaultValue == value) |
| 129 return; | 123 return; |
| 130 m_defaultValue = value; | 124 m_defaultValue = value; |
| 131 // The spec requires the value attribute set to the default value | 125 // The spec requires the value attribute set to the default value |
| 132 // when the element's value mode flag to "default". | 126 // when the element's value mode flag to "default". |
| 133 if (m_isDefaultValueMode) | 127 if (m_isDefaultValueMode) |
| 134 setTextContentInternal(value); | 128 setTextContent(value); |
| 135 } | |
| 136 | |
| 137 void HTMLOutputElement::setTextContentInternal(const String& value) | |
| 138 { | |
| 139 ASSERT(!m_isSetTextContentInProgress); | |
| 140 m_isSetTextContentInProgress = true; | |
| 141 setTextContent(value); | |
| 142 } | 129 } |
| 143 | 130 |
| 144 } // namespace | 131 } // namespace |
| OLD | NEW |