| // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file | 
 | // for details. All rights reserved. Use of this source code is governed by a | 
 | // BSD-style license that can be found in the LICENSE file. | 
 |  | 
 | part of dart.dom.html; | 
 |  | 
 | void Function(T) _wrapZone<T>(void Function(T) callback) { | 
 |   // For performance reasons avoid wrapping if we are in the root zone. | 
 |   if (Zone.current == Zone.root) return callback; | 
 |   if (callback == null) return null; | 
 |   return Zone.current.bindUnaryCallbackGuarded(callback); | 
 | } | 
 |  | 
 | void Function(T1, T2) _wrapBinaryZone<T1, T2>(void Function(T1, T2) callback) { | 
 |   // For performance reasons avoid wrapping if we are in the root zone. | 
 |   if (Zone.current == Zone.root) return callback; | 
 |   if (callback == null) return null; | 
 |   return Zone.current.bindBinaryCallbackGuarded(callback); | 
 | } | 
 |  | 
 | /** | 
 |  * Finds the first descendant element of this document that matches the | 
 |  * specified group of selectors. | 
 |  * | 
 |  * Unless your webpage contains multiple documents, the top-level | 
 |  * [querySelector] | 
 |  * method behaves the same as this method, so you should use it instead to | 
 |  * save typing a few characters. | 
 |  * | 
 |  * [selectors] should be a string using CSS selector syntax. | 
 |  * | 
 |  *     var element1 = document.querySelector('.className'); | 
 |  *     var element2 = document.querySelector('#id'); | 
 |  * | 
 |  * For details about CSS selector syntax, see the | 
 |  * [CSS selector specification](http://www.w3.org/TR/css3-selectors/). | 
 |  */ | 
 | Element querySelector(String selectors) => document.querySelector(selectors); | 
 |  | 
 | /** | 
 |  * Finds all descendant elements of this document that match the specified | 
 |  * group of selectors. | 
 |  * | 
 |  * Unless your webpage contains multiple documents, the top-level | 
 |  * [querySelectorAll] | 
 |  * method behaves the same as this method, so you should use it instead to | 
 |  * save typing a few characters. | 
 |  * | 
 |  * [selectors] should be a string using CSS selector syntax. | 
 |  * | 
 |  *     var items = document.querySelectorAll('.itemClassName'); | 
 |  * | 
 |  * For details about CSS selector syntax, see the | 
 |  * [CSS selector specification](http://www.w3.org/TR/css3-selectors/). | 
 |  */ | 
 | ElementList<T> querySelectorAll<T extends Element>(String selectors) => | 
 |     document.querySelectorAll(selectors); | 
 |  | 
 | /// A utility for changing the Dart wrapper type for elements. | 
 | abstract class ElementUpgrader { | 
 |   /// Upgrade the specified element to be of the Dart type this was created for. | 
 |   /// | 
 |   /// After upgrading the element passed in is invalid and the returned value | 
 |   /// should be used instead. | 
 |   Element upgrade(Element element); | 
 | } |