| Index: dart/pkg/template_binding/lib/src/input_bindings.dart
 | 
| ===================================================================
 | 
| --- dart/pkg/template_binding/lib/src/input_bindings.dart	(revision 37358)
 | 
| +++ dart/pkg/template_binding/lib/src/input_bindings.dart	(working copy)
 | 
| @@ -107,9 +107,12 @@
 | 
|        case 'select-multiple':
 | 
|        case 'select-one':
 | 
|          return element.onChange;
 | 
| -      default:
 | 
| -        return element.onInput;
 | 
| +      case 'range':
 | 
| +        if (window.navigator.userAgent.contains(new RegExp('Trident|MSIE'))) {
 | 
| +          return element.onChange;
 | 
| +        }
 | 
|      }
 | 
| +    return element.onInput;
 | 
|    }
 | 
|  
 | 
|    // |element| is assumed to be an HTMLInputElement with |type| == 'radio'.
 | 
| @@ -148,3 +151,17 @@
 | 
|      return value is int ? value : 0;
 | 
|    }
 | 
|  }
 | 
| +
 | 
| +_getTreeScope(Node node) {
 | 
| +  Node parent;
 | 
| +  while ((parent = node.parentNode) != null ) {
 | 
| +    node = parent;
 | 
| +  }
 | 
| +
 | 
| +  return _hasGetElementById(node) ? node : null;
 | 
| +}
 | 
| +
 | 
| +// Note: JS code tests that getElementById is present. We can't do that
 | 
| +// easily, so instead check for the types known to implement it.
 | 
| +bool _hasGetElementById(Node node) =>
 | 
| +    node is Document || node is ShadowRoot || node is SvgSvgElement;
 | 
| 
 |