blob: 0e029f2a243f6e15b560e085db6ea1fd2ed33447 [file] [log] [blame]
// Copyright (c) 2012, 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.
// DO NOT EDIT
// Auto-generated dart:html library.
/**
* HTML elements and other resources for web-based applications that need to
* interact with the browser and the DOM (Document Object Model).
*
* This library includes DOM element types, CSS styling, local storage,
* media, speech, events, and more.
* To get started,
* check out the [Element] class, the base class for many of the HTML
* DOM types.
*
* ## Other resources
*
* * If you've never written a web app before, try our
* tutorials—[A Game of Darts](http://dartlang.org/docs/tutorials).
*
* * To see some web-based Dart apps in action and to play with the code,
* download
* [Dart Editor](http://www.dartlang.org/#get-started)
* and run its built-in examples.
*
* * For even more examples, see
* [Dart HTML5 Samples](https://github.com/dart-lang/dart-html5-samples)
* on Github.
*/
library dart.dom.html;
import 'dart:async';
import 'dart:collection';
import 'dart:_internal' hide Symbol;
import 'dart:html_common';
import 'dart:indexed_db';
import 'dart:indexed_db' show indexed_dbBlinkMap;
import 'dart:indexed_db' show indexed_dbBlinkFunctionMap;
import 'dart:isolate';
import 'dart:js' as js;
import "dart:convert";
import 'dart:math';
// TODO(vsm): Remove this when we can do the proper checking in
// native code for custom elements.
import 'dart:mirrors';
import 'dart:nativewrappers';
import 'dart:typed_data';
import 'dart:web_gl' as gl;
import 'dart:web_gl' show web_glBlinkMap;
import 'dart:web_gl' show web_glBlinkFunctionMap;
import 'dart:web_sql';
// Not actually used, but imported since dart:html can generate these objects.
import 'dart:svg' as svg;
import 'dart:svg' show svgBlinkMap;
import 'dart:svg' show svgBlinkFunctionMap;
import 'dart:svg' show Matrix;
import 'dart:svg' show SvgSvgElement;
import 'dart:web_audio' as web_audio;
import 'dart:web_audio' show web_audioBlinkMap;
import 'dart:web_audio' show web_audioBlinkFunctionMap;
import 'dart:_blink' as _blink;
import 'dart:developer';
export 'dart:math' show Rectangle, Point;
$!GENERATED_DART_FILES
// Issue 14721, order important for WrappedEvent.
part '$AUXILIARY_DIR/AttributeMap.dart';
part '$AUXILIARY_DIR/CanvasImageSource.dart';
part '$AUXILIARY_DIR/CrossFrameTypes.dart';
part '$AUXILIARY_DIR/CssClassSet.dart';
part '$AUXILIARY_DIR/dartium_CssClassSet.dart';
part '$AUXILIARY_DIR/CssRectangle.dart';
part '$AUXILIARY_DIR/Dimension.dart';
part '$AUXILIARY_DIR/EventListener.dart';
part '$AUXILIARY_DIR/EventStreamProvider.dart';
part '$AUXILIARY_DIR/Html5NodeValidator.dart';
part '$AUXILIARY_DIR/ImmutableListMixin.dart';
part '$AUXILIARY_DIR/KeyCode.dart';
part '$AUXILIARY_DIR/KeyLocation.dart';
part '$AUXILIARY_DIR/KeyName.dart';
part '$AUXILIARY_DIR/KeyboardEventStream.dart';
part '$AUXILIARY_DIR/NodeValidatorBuilder.dart';
part '$AUXILIARY_DIR/ReadyState.dart';
part '$AUXILIARY_DIR/Validators.dart';
part '$AUXILIARY_DIR/WrappedList.dart';
part '$AUXILIARY_DIR/_HttpRequestUtils.dart';
part '$AUXILIARY_DIR/_ListIterators.dart';
part '$AUXILIARY_DIR/dartium_CustomElementSupport.dart';
part '$AUXILIARY_DIR/dartium_KeyEvent.dart';
part '$AUXILIARY_DIR/dartium_Platform.dart';
part '$AUXILIARY_DIR/dartium_WrappedEvent.dart';
part '$AUXILIARY_DIR/shared_html.dart';
part '$AUXILIARY_DIR/native_DOMImplementation.dart';
Window _window;
/**
* Top-level container for a web page, which is usually a browser tab or window.
*
* Each web page loaded in the browser has its own [Window], which is a
* container for the web page.
*
* If the web page has any `<iframe>` elements, then each `<iframe>` has its own
* [Window] object, which is accessible only to that `<iframe>`.
*
* See also:
*
* * [Window](https://developer.mozilla.org/en-US/docs/Web/API/window) from MDN.
*/
Window get window {
if (_window != null) {
return _window;
}
$if DARTIUM
$if JSINTEROP
_window = wrap_jso(js.JsNative.getProperty(js.context, 'window'));
$else
_window = _Utils.window();
$endif
$endif
return _window;
}
HtmlDocument _document;
/**
* Root node for all content in a web page.
*/
HtmlDocument get document {
if (_document != null) {
return _document;
}
_document = window.document;
return _document;
}
/**
* Spawn a DOM isolate using the given URI in the same window.
* This isolate is not concurrent. It runs on the browser thread
* with full access to the DOM.
* Note: this API is still evolving and may move to dart:isolate.
*/
@Experimental()
Future<Isolate> spawnDomUri(Uri uri, List<String> args, message) {
// TODO(17738): Plumb arguments and return value through.
return _Utils.spawnDomUri(uri.toString());
}
// FIXME: Can we make this private?
@Deprecated("Internal Use Only")
final htmlBlinkMap = {
'_HistoryCrossFrame': () => _HistoryCrossFrame,
'_LocationCrossFrame': () => _LocationCrossFrame,
'_DOMWindowCrossFrame': () => _DOMWindowCrossFrame,
// FIXME: Move these to better locations.
'DateTime': () => DateTime,
'JsObject': () => js.JsObjectImpl,
'JsFunction': () => js.JsFunctionImpl,
'JsArray': () => js.JsArrayImpl,
$!TYPE_MAP
};
// TODO(leafp): We may want to move this elsewhere if html becomes
// a package to avoid dartium depending on pkg:html.
Type _getType(String key) {
var result;
// TODO(vsm): Add Cross Frame and JS types here as well.
// Check the html library.
result = _getHtmlType(key);
if (result != null) {
return result;
}
// Check the web gl library.
result = _getWebGlType(key);
if (result != null) {
return result;
}
// Check the indexed db library.
result = _getIndexDbType(key);
if (result != null) {
return result;
}
// Check the web audio library.
result = _getWebAudioType(key);
if (result != null) {
return result;
}
// Check the web sql library.
result = _getWebSqlType(key);
if (result != null) {
return result;
}
// Check the svg library.
result = _getSvgType(key);
if (result != null) {
return result;
}
return null;
}
Type _getHtmlType(String key) {
if (htmlBlinkMap.containsKey(key)) {
return htmlBlinkMap[key]();
}
return null;
}
Type _getWebGlType(String key) {
if (web_glBlinkMap.containsKey(key)) {
return web_glBlinkMap[key]();
}
return null;
}
Type _getIndexDbType(String key) {
if (indexed_dbBlinkMap.containsKey(key)) {
return indexed_dbBlinkMap[key]();
}
return null;
}
Type _getWebAudioType(String key) {
if (web_audioBlinkMap.containsKey(key)) {
return web_audioBlinkMap[key]();
}
return null;
}
Type _getWebSqlType(String key) {
if (web_sqlBlinkMap.containsKey(key)) {
return web_sqlBlinkMap[key]();
}
return null;
}
Type _getSvgType(String key) {
if (svgBlinkMap.containsKey(key)) {
return svgBlinkMap[key]();
}
return null;
}
$if JSINTEROP
// FIXME: Can we make this private?
@Deprecated("Internal Use Only")
final htmlBlinkFunctionMap = {
$!TYPE_FUNCTION_MAP
};
// TODO(terry): We may want to move this elsewhere if html becomes
// a package to avoid dartium depending on pkg:html.
@Deprecated("Internal Use Only")
getHtmlCreateFunction(String key) {
var result;
// TODO(vsm): Add Cross Frame and JS types here as well.
// Check the html library.
result = _getHtmlFunction(key);
if (result != null) {
return result;
}
// Check the web gl library.
result = _getWebGlFunction(key);
if (result != null) {
return result;
}
// Check the indexed db library.
result = _getIndexDbFunction(key);
if (result != null) {
return result;
}
// Check the web audio library.
result = _getWebAudioFunction(key);
if (result != null) {
return result;
}
// Check the web sql library.
result = _getWebSqlFunction(key);
if (result != null) {
return result;
}
// Check the svg library.
result = _getSvgFunction(key);
if (result != null) {
return result;
}
return null;
}
Function _getHtmlFunction(String key) {
if (htmlBlinkFunctionMap.containsKey(key)) {
return htmlBlinkFunctionMap[key]();
}
return null;
}
Function _getWebGlFunction(String key) {
if (web_glBlinkFunctionMap.containsKey(key)) {
return web_glBlinkFunctionMap[key]();
}
return null;
}
Function _getIndexDbFunction(String key) {
if (indexed_dbBlinkFunctionMap.containsKey(key)) {
return indexed_dbBlinkFunctionMap[key]();
}
return null;
}
Function _getWebAudioFunction(String key) {
if (web_audioBlinkFunctionMap.containsKey(key)) {
return web_audioBlinkFunctionMap[key]();
}
return null;
}
Function _getWebSqlFunction(String key) {
if (web_sqlBlinkFunctionMap.containsKey(key)) {
return web_sqlBlinkFunctionMap[key]();
}
return null;
}
Function _getSvgFunction(String key) {
if (svgBlinkFunctionMap.containsKey(key)) {
return svgBlinkFunctionMap[key]();
}
return null;
}
/******************************************************************************
********** **********
********** JS Interop Support **********
********** **********
******************************************************************************/
String _getCustomElementExtends(object) {
var entry = getCustomElementEntry(object);
if (entry != null) {
return entry['extends'];
}
return null;
}
// Return the tag name or is attribute of the custom element or data binding.
String _getCustomElementName(element) {
var jsObject;
var tag = "";
var runtimeType = element.runtimeType;
if (runtimeType == HtmlElement) {
tag = element.localName;
} else if (runtimeType == TemplateElement) {
// Data binding with a Dart class.
tag = element.attributes['is'];
} else if (runtimeType == js.JsObjectImpl) {
// It's a Polymer core element (written in JS).
// Make sure it's an element anything else we can ignore.
if (element.hasProperty('nodeType') && element['nodeType'] == 1) {
if (js.JsNative.callMethod(element, 'hasAttribute', ['is'])) {
// It's data binding use the is attribute.
tag = js.JsNative.callMethod(element, 'getAttribute', ['is']);
} else {
// It's a custom element we want the local name.
tag = element['localName'];
}
}
} else {
throw new UnsupportedError('Element is incorrect type. Got ${runtimeType}, expected HtmlElement/HtmlTemplate/JsObjectImpl.');
}
return tag;
}
/// An abstract class for all DOM objects we wrap in dart:html and related
/// libraries.
///
/// ** Internal Use Only **
@Deprecated("Internal Use Only")
class DartHtmlDomObject {
/// The underlying JS DOM object.
@Deprecated("Internal Use Only")
js.JsObject blink_jsObject;
}
/// Upgrade a Dart HtmlElement to the user's Dart custom element class.
_upgradeHtmlElement(dartInstance) {
// Only try upgrading HtmlElement (Dart class) if there is a failure then
// don't try it again - one failure is enough.
if (dartInstance.runtimeType == HtmlElement && !dartInstance.isBadUpgrade) {
// Must be exactly HtmlElement not something derived from it.
var customElementClass = getCustomElementType(dartInstance);
// Custom Element to upgrade.
if (customElementClass != null) {
var jsObject = dartInstance.blink_jsObject;
try {
dartInstance = _blink.Blink_Utils.constructElement(customElementClass, jsObject);
} catch (e) {
dartInstance._badUpgrade();
} finally {
dartInstance.blink_jsObject = jsObject;
js.setDartHtmlWrapperFor(jsObject, dartInstance);
}
}
}
return dartInstance;
}
@Deprecated("Internal Use Only")
class DebugAssertException implements Exception {
String message;
DebugAssertException(this.message);
}
@Deprecated("Internal Use Only")
debug_or_assert(message, expression) {
if (!expression) {
throw new DebugAssertException("$message");
}
}
// TODO(terry): Manage JS interop JsFunctions for each listener used for add/
// removeEventListener. These JsFunctions will leak look at
// fixing with weak-refs in C++. The key are the hashcodes of the
// user's this (this is needed for futures) and listener function.
Map<int, Map<int, js.JsFunction>> _knownListeners = {};
@Deprecated("Internal Use Only")
js.JsFunction wrap_event_listener(theObject, Function listener) {
var thisHashCode = theObject.hashCode;
var listenerHashCode = identityHashCode(listener);
_knownListeners.putIfAbsent(thisHashCode, () => new Map<int, js.JsFunction>());
_knownListeners[thisHashCode].putIfAbsent(listenerHashCode, () =>
new js.JsFunction.withThis((theObject, event) => listener(wrap_jso(event))));
return _knownListeners[thisHashCode][listenerHashCode];
}
@Deprecated("Internal Use Only")
Map<String, dynamic> convertNativeObjectToDartMap(js.JsObject jsObject) {
var result = new Map();
var keys = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), 'keys', [jsObject]);
for (var key in keys) {
result[key] = wrap_jso(js.JsNative.getProperty(jsObject, key));
}
return result;
}
/**
* Upgrade the JS HTMLElement to the Dart class. Used by Dart's Polymer.
*/
_createCustomUpgrader(Type customElementClass, $this) {
var dartClass;
try {
dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
} catch (e) {
dartClass._badUpgrade();
throw e;
} finally {
// Need to remember the Dart class that was created for this custom so
// return it and setup the blink_jsObject to the $this that we'll be working
// with as we talk to blink.
js.setDartHtmlWrapperFor($this, dartClass);
}
return dartClass;
}
$else
class DartHtmlDomObject extends NativeFieldWrapperClass2 {}
_createCustomUpgrader(Type customElementClass, $this) => $this;
$endif