Chromium Code Reviews| Index: pkg/mdv/lib/src/bindings.dart |
| diff --git a/pkg/mdv/lib/src/bindings.dart b/pkg/mdv/lib/src/bindings.dart |
| index 2b40671b5e23667fd008ede789ef86f0761f40e8..6f870c5d5b8a7319be07b5abe43bbf8a69f3c33d 100644 |
| --- a/pkg/mdv/lib/src/bindings.dart |
| +++ b/pkg/mdv/lib/src/bindings.dart |
| @@ -11,7 +11,8 @@ part of mdv; |
| typedef void _ChangeHandler(value); |
| abstract class _InputBinding { |
| - final InputElement element; |
| + // InputElement or SelectElement |
| + final element; |
| PathObserver binding; |
| StreamSubscription _pathSub; |
| StreamSubscription _eventSub; |
| @@ -51,7 +52,7 @@ abstract class _InputBinding { |
| return fired.length == 1 ? Element.changeEvent : fired.first; |
| }(); |
| - static Stream<Event> _getStreamForInputType(InputElement element) { |
| + static Stream<Event> _getStreamForInputType(element) { |
| switch (element.type) { |
| case 'checkbox': |
| return _checkboxEventType.forTarget(element); |
| @@ -65,77 +66,6 @@ abstract class _InputBinding { |
| } |
| } |
| -class _ValueBinding extends _InputBinding { |
|
Jennifer Messerly
2013/06/27 23:59:48
these just moved to input_element
|
| - _ValueBinding(element, model, path) : super(element, model, path); |
| - |
| - void valueChanged(value) { |
| - element.value = value == null ? '' : '$value'; |
| - } |
| - |
| - void updateBinding(e) { |
| - binding.value = element.value; |
| - } |
| -} |
| - |
| -class _CheckedBinding extends _InputBinding { |
| - _CheckedBinding(element, model, path) : super(element, model, path); |
| - |
| - void valueChanged(value) { |
| - element.checked = _Bindings._toBoolean(value); |
| - } |
| - |
| - void updateBinding(e) { |
| - binding.value = element.checked; |
| - |
| - // Only the radio button that is getting checked gets an event. We |
| - // therefore find all the associated radio buttons and update their |
| - // CheckedBinding manually. |
| - if (element is InputElement && element.type == 'radio') { |
| - for (var r in _getAssociatedRadioButtons(element)) { |
| - var checkedBinding = _mdv(r)._checkedBinding; |
| - if (checkedBinding != null) { |
| - // Set the value directly to avoid an infinite call stack. |
| - checkedBinding.binding.value = false; |
| - } |
| - } |
| - } |
| - } |
| - |
| - // |element| is assumed to be an HTMLInputElement with |type| == 'radio'. |
| - // Returns an array containing all radio buttons other than |element| that |
| - // have the same |name|, either in the form that |element| belongs to or, |
| - // if no form, in the document tree to which |element| belongs. |
| - // |
| - // This implementation is based upon the HTML spec definition of a |
| - // "radio button group": |
| - // http://www.whatwg.org/specs/web-apps/current-work/multipage/number-state.html#radio-button-group |
| - // |
| - static Iterable _getAssociatedRadioButtons(element) { |
| - if (!_isNodeInDocument(element)) return []; |
| - if (element.form != null) { |
| - return element.form.nodes.where((el) { |
| - return el != element && |
| - el is InputElement && |
| - el.type == 'radio' && |
| - el.name == element.name; |
| - }); |
| - } else { |
| - var radios = element.document.queryAll( |
| - 'input[type="radio"][name="${element.name}"]'); |
| - return radios.where((el) => el != element && el.form == null); |
| - } |
| - } |
| - |
| - // TODO(jmesserly): polyfill document.contains API instead of doing it here |
| - static bool _isNodeInDocument(Node node) { |
| - // On non-IE this works: |
| - // return node.document.contains(node); |
| - var document = node.document; |
| - if (node == document || node.parentNode == document) return true; |
| - return document.documentElement.contains(node); |
| - } |
| -} |
| - |
| class _Bindings { |
| // TODO(jmesserly): not sure what kind of boolean conversion rules to |
| // apply for template data-binding. HTML attributes are true if they're |