Index: tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate |
diff --git a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate |
index efa78d4d44e02900d3bf039527ece461a2e92f2a..47451dc8b2d17fe41888d7c25ab0e01f8f5a0b45 100644 |
--- a/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate |
+++ b/tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate |
@@ -9,18 +9,8 @@ part of $LIBRARYNAME; |
$(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { |
$!MEMBERS |
-$if DART2JS |
@DomName('Document.body') |
BodyElement body; |
-$else |
- @DomName('Document.body') |
- BodyElement get body => _body; |
- |
- @DomName('Document.body') |
- set body(BodyElement value) { |
- _body = value; |
- } |
-$endif |
/// UNSTABLE: Chrome-only - create a Range from the given point. |
@DomName('Document.caretRangeFromPoint') |
@@ -41,12 +31,8 @@ $endif |
* |
* * [getCssCanvasContext] |
*/ |
-$if DART2JS |
static bool get supportsCssCanvasContext => |
JS('bool', '!!(document.getCSSCanvasContext)'); |
-$else |
- static bool get supportsCssCanvasContext => false; |
-$endif |
/** |
@@ -75,10 +61,8 @@ $endif |
@DomName('Document.getCSSCanvasContext') |
CanvasRenderingContext getCssCanvasContext(String contextId, String name, |
int width, int height) { |
-$if DART2JS |
if (HtmlDocument.supportsCssCanvasContext) |
return JS('CanvasRenderingContext', '#.getCSSCanvasContext(#, #, #, #)', this, contextId, name, width, height); |
-$endif |
throw new UnsupportedError("Not supported"); |
} |
@@ -131,133 +115,6 @@ $endif |
_webkitExitFullscreen(); |
} |
-$if DARTIUM |
- |
- /** |
- * Internal routine to find the DOM JS class name being extended for custom |
- * elements. |
- */ |
- String _getJSClassName(ClassMirror classMirror) { |
- var jsClassName = null; |
- var isElement = false; |
- |
- while (classMirror.superclass != null) { |
- var fullName = classMirror.superclass.qualifiedName; |
- isElement = isElement || |
- (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element); |
- |
- var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.'); |
- if (jsClassName == null && domLibrary) { |
- // Lookup JS class name (if not found). |
- var metadatas = classMirror.metadata; |
- for (var metadata in metadatas) { |
- var metaDataMirror = metadata.reflectee; |
- var metaType = reflectClass(metaDataMirror.runtimeType); |
- if (MirrorSystem.getName(metaType.simpleName) == 'DomName' && |
- (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) { |
- jsClassName = metadata.reflectee.name; |
- } |
- } |
- } |
- |
- classMirror = classMirror.superclass; |
- } |
- |
- // If we're an element then everything is okay. |
- return isElement ? jsClassName : null; |
- } |
- |
- // Get the first class that's a super of a dart.dom library. |
- ClassMirror _getDartHtmlClassName(ClassMirror classMirror) { |
- while (classMirror.superclass != null) { |
- var fullName = classMirror.superclass.qualifiedName; |
- var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.'); |
- if (domLibrary) { |
- return classMirror.superclass; |
- } |
- |
- classMirror = classMirror.superclass; |
- } |
- |
- return null; |
- } |
- |
- /** |
- * Get the class that immediately derived from a class in dart:html or |
- * dart:svg (has an attribute DomName of either HTML* or SVG*). |
- */ |
- ClassMirror _getDomSuperClass(ClassMirror classMirror) { |
- var isElement = false; |
- var foundSuperElement = null; |
- |
- while (classMirror.superclass != null) { |
- var fullName = classMirror.superclass.qualifiedName; |
- isElement = isElement || (fullName == #dart.dom.html.Element || fullName == #dart.dom.svg.Element); |
- |
- var domLibrary = MirrorSystem.getName(fullName).startsWith('dart.dom.'); |
- if (domLibrary) { |
- if (foundSuperElement == null) { |
- foundSuperElement = classMirror.superclass; |
- } |
- // Lookup JS class (if not found). |
- var metadatas = classMirror.metadata; |
- for (var metadata in metadatas) { |
- var metaDataMirror = metadata.reflectee; |
- var metaType = reflectClass(metaDataMirror.runtimeType); |
- if (MirrorSystem.getName(metaType.simpleName) == 'DomName' && |
- (metaDataMirror.name.startsWith('HTML') || metaDataMirror.name.startsWith('SVG'))) { |
- if (isElement) return foundSuperElement; |
- } |
- } |
- } |
- |
- classMirror = classMirror.superclass; |
- } |
- |
- return null; |
- } |
- |
- /** |
- * Does this CustomElement class have: |
- * |
- * - a created constructor with no arguments? |
- * - a created constructor with a super.created() initializer? |
- * |
- * e.g., MyCustomClass.created() : super.created(); |
- */ |
- bool _hasCreatedConstructor(ClassMirror classToRegister) { |
- var htmlClassMirror = _getDomSuperClass(classToRegister); |
- |
- var classMirror = classToRegister; |
- while (classMirror != null && classMirror != htmlClassMirror) { |
- var createdParametersValid = false; |
- var superCreatedCalled = false; |
- var className = MirrorSystem.getName(classMirror.simpleName); |
- var methodMirror = classMirror.declarations[new Symbol("$className.created")]; |
- if (methodMirror != null && methodMirror.isConstructor) { |
- createdParametersValid = true; // Assume no parameters. |
- if (methodMirror.parameters.length != 0) { |
- // If any parameters each one must be optional. |
- methodMirror.parameters.forEach((parameter) { |
- createdParametersValid = createdParametersValid && parameter.isOptional; |
- }); |
- } |
- } |
- |
- if (!createdParametersValid) { |
- throw new DomException.jsInterop('created constructor must have no parameters'); |
- } |
- |
- classMirror = classMirror.superclass; |
- while (classMirror != classMirror.mixin) { |
- // Skip the mixins. |
- classMirror = classMirror.superclass; |
- } |
- } |
- |
- return true; |
- } |
-$endif |
@Experimental() |
/** |
@@ -303,118 +160,8 @@ $endif |
*/ |
void registerElement(String tag, Type customElementClass, |
{String extendsTag}) { |
-$if DART2JS |
_registerCustomElement(JS('', 'window'), this, tag, customElementClass, |
extendsTag); |
-$else |
- // Hack to setup an interceptor for HTMLElement so it isn't changed when a custom element is created. |
- var jsHTMLElementPrototype = js.JsNative.getProperty(js.JsNative.getProperty(js.context, 'HTMLElement'),'prototype'); |
- _blink.Blink_Utils.defineInterceptor(jsHTMLElementPrototype, HtmlElement.instanceRuntimeType); |
- |
- // Figure out which DOM class is being extended from the user's Dart class. |
- var classMirror = reflectClass(customElementClass); |
- |
- var locationUri = classMirror.location.sourceUri.toString(); |
- if (locationUri == 'dart:html' || locationUri == 'dart:svg') { |
- throw new DomException.jsInterop("HierarchyRequestError: Cannot register an existing dart:html or dart:svg type."); |
- } |
- |
- if (classMirror.isAbstract) { |
- throw new DomException.jsInterop("HierarchyRequestError: Cannot register an abstract class."); |
- } |
- |
- var jsClassName = _getJSClassName(classMirror); |
- if (jsClassName == null) { |
- // Only components derived from HTML* can be extended. |
- throw new DomException.jsInterop("HierarchyRequestError: Only HTML elements can be customized."); |
- } |
- |
- var customClassType = _getDartHtmlClassName(classMirror); |
- |
- if (extendsTag != null) { |
- var nativeElement = document.createElement(extendsTag); |
- |
- // Trying to extend a native element is it the Dart class consistent with the |
- // extendsTag? |
- if (nativeElement.runtimeType != customClassType.reflectedType) { |
- var nativeElementClassMirror = reflectClass(nativeElement.runtimeType); |
- var customClassNativeElement = MirrorSystem.getName(customClassType.simpleName); |
- var extendsNativeElement = MirrorSystem.getName(nativeElementClassMirror.simpleName); |
- throw new DomException.jsInterop("HierarchyRequestError: Custom class type ($customClassNativeElement) and extendsTag class ($extendsNativeElement) don't match ."); |
- } |
- } else if (customClassType.reflectedType != HtmlElement && customClassType.reflectedType != svg.SvgElement) { |
- var customClassName = MirrorSystem.getName(classMirror.simpleName); |
- var customClassElement = MirrorSystem.getName(customClassType.simpleName); |
- throw new DomException.jsInterop("HierarchyRequestError: Custom element $customClassName is a native $customClassElement should be derived from HtmlElement or SvgElement."); |
- } |
- |
- if (_hasCreatedConstructor(classMirror)) { |
- // Start the hookup the JS way create an <x-foo> element that extends the |
- // <x-base> custom element. Inherit its prototype and signal what tag is |
- // inherited: |
- // |
- // var myProto = Object.create(HTMLElement.prototype); |
- // var myElement = document.registerElement('x-foo', {prototype: myProto}); |
- var baseElement = js.JsNative.getProperty(js.context, jsClassName); |
- if (baseElement == null) { |
- // Couldn't find the HTML element so use a generic one. |
- baseElement = js.JsNative.getProperty(js.context, 'HTMLElement'); |
- } |
- var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]); |
- |
- // TODO(terry): Hack to stop recursion re-creating custom element when the |
- // created() constructor of the custom element does e.g., |
- // |
- // MyElement.created() : super.created() { |
- // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>"; |
- // } |
- // |
- // sanitizing causes custom element to created recursively |
- // until stack overflow. |
- // |
- // See https://github.com/dart-lang/sdk/issues/23666 |
- int creating = 0; // TODO(jacobr): I think I broke thise case. Will fix monday. |
- |
- // If any JS code is hooked we want to call it too. |
- var oldCreatedCallback = js.JsNative.getProperty(elemProto, 'createdCallback'); |
- var oldAttributeChangedCallback = js.JsNative.getProperty(elemProto, 'attributeChangedCallback'); |
- var oldAttachedCallback = js.JsNative.getProperty(elemProto, 'attachedCallback'); |
- var oldDetachedCallback = js.JsNative.getProperty(elemProto, 'detachedCallback'); |
- |
- js.JsNative.setProperty(elemProto, 'createdCallback', js.allowInteropCaptureThis(($this) { |
- // The created callback has already been called by the very act of passing a JS |
- // custom element from JS to Dart. |
- |
- // Make element's interceptor a CustomElementClass. |
- _blink.Blink_Utils.setInstanceInterceptorCustomUpgrade($this); |
- |
- if (oldCreatedCallback != null) |
- oldCreatedCallback.apply([], thisArg: $this); |
- })); |
- js.JsNative.setProperty(elemProto, 'attributeChangedCallback', js.allowInteropCaptureThis(($this, attrName, oldVal, newVal) { |
- $this.attributeChanged(attrName, oldVal, newVal); |
- |
- if (oldAttributeChangedCallback != null) |
- oldAttributeChangedCallback.apply([], thisArg: $this); |
- })); |
- js.JsNative.setProperty(elemProto, 'attachedCallback', js.allowInteropCaptureThis(($this) { |
- $this.attached(); |
- |
- if (oldAttachedCallback != null) |
- oldAttachedCallback.apply([], thisArg: $this); |
- })); |
- js.JsNative.setProperty(elemProto, 'detachedCallback', js.allowInteropCaptureThis(($this) { |
- $this.detached(); |
- |
- if (oldDetachedCallback != null) |
- oldDetachedCallback.apply([], thisArg: $this); |
- })); |
- // document.registerElement('x-foo', {prototype: elemProto, extends: extendsTag}); |
- var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': extendsTag}); |
- _blink.Blink_Utils.defineInterceptorCustomElement(elemProto, customElementClass); |
- js.JsNative.callMethod(document, 'registerElement', [tag, jsMap]); |
- } |
-$endif |
} |
/** *Deprecated*: use [registerElement] instead. */ |
@@ -440,7 +187,6 @@ $endif |
_determineVisibilityChangeEventType); |
static String _determineVisibilityChangeEventType(EventTarget e) { |
-$if DART2JS |
if (JS('bool', '(typeof #.hidden !== "undefined")', e)) { |
// Opera 12.10 and Firefox 18 and later support |
return 'visibilitychange'; |
@@ -452,9 +198,6 @@ $if DART2JS |
return 'webkitvisibilitychange'; |
} |
return 'visibilitychange'; |
-$else |
- return 'webkitvisibilitychange'; |
-$endif |
} |
@SupportedBrowser(SupportedBrowser.CHROME) |
@@ -474,10 +217,6 @@ $endif |
/// parameter must be provided. |
@Experimental() |
ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) { |
-$if DART2JS |
return new _JSElementUpgrader(this, type, extendsTag); |
-$else |
- return new _VMElementUpgrader(this, type, extendsTag); |
-$endif |
} |
} |