Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Unified Diff: tools/dom/src/dart2js_CustomElementSupport.dart

Issue 23442011: Revert "Revert "Basic functionality is working with JS native support and polyfill, still some issu… (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « tests/html/html.status ('k') | tools/dom/templates/html/dart2js/html_dart2js.darttemplate » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tools/dom/src/dart2js_CustomElementSupport.dart
diff --git a/tools/dom/src/dart2js_CustomElementSupport.dart b/tools/dom/src/dart2js_CustomElementSupport.dart
index 95c64b678f51a7821c8c6dffc510de769523f684..3ad3381896ddee83a3684d4686aca4a467d747a0 100644
--- a/tools/dom/src/dart2js_CustomElementSupport.dart
+++ b/tools/dom/src/dart2js_CustomElementSupport.dart
@@ -18,7 +18,32 @@ _makeCreatedCallbackMethod() {
convertDartClosureToJS(_callCreated, 1));
}
-void _registerCustomElement(context, document, String tag, Type type) {
+const _typeNameToTag = const {
+ 'HTMLAnchorElement': 'a',
+ 'HTMLAudioElement': 'audio',
+ 'HTMLButtonElement': 'button',
+ 'HTMLCanvasElement': 'canvas',
+ 'HTMLDivElement': 'div',
+ 'HTMLImageElement': 'img',
+ 'HTMLInputElement': 'input',
+ 'HTMLLIElement': 'li',
+ 'HTMLLabelElement': 'label',
+ 'HTMLMenuElement': 'menu',
+ 'HTMLMeterElement': 'meter',
+ 'HTMLOListElement': 'ol',
+ 'HTMLOptionElement': 'option',
+ 'HTMLOutputElement': 'output',
+ 'HTMLParagraphElement': 'p',
+ 'HTMLPreElement': 'pre',
+ 'HTMLProgressElement': 'progress',
+ 'HTMLSelectElement': 'select',
+ 'HTMLSpanElement': 'span',
+ 'HTMLUListElement': 'ul',
+ 'HTMLVideoElement': 'video',
+};
+
+void _registerCustomElement(context, document, String tag, Type type,
+ String extendsTagName) {
// Function follows the same pattern as the following JavaScript code for
// registering a custom element.
//
@@ -38,6 +63,10 @@ void _registerCustomElement(context, document, String tag, Type type) {
throw new ArgumentError(type);
}
+ // Workaround for 13190- use an article element to ensure that HTMLElement's
+ // interceptor is resolved correctly.
+ getNativeInterceptor(new Element.tag('article'));
Jennifer Messerly 2013/09/09 21:46:57 should this create an instance of "extendsTagName"
blois 2013/09/09 21:56:58 This is just a workaround- needs to create an inst
+
String baseClassName = findDispatchTagForInterceptorClass(interceptorClass);
if (baseClassName == null) {
throw new ArgumentError(type);
@@ -60,6 +89,15 @@ void _registerCustomElement(context, document, String tag, Type type) {
setNativeSubclassDispatchRecord(proto, interceptor);
- JS('void', '#.register(#, #)',
- document, tag, JS('', '{prototype: #}', proto));
+ var options = JS('=Object', '{prototype: #}', proto);
+
+ if (baseClassName != 'HTMLElement') {
+ if (extendsTagName != null) {
+ JS('=Object', '#.extends = #', options, extendsTagName);
+ } else if (_typeNameToTag.containsKey(baseClassName)) {
+ JS('=Object', '#.extends = #', options, _typeNameToTag[baseClassName]);
+ }
+ }
+
+ JS('void', '#.register(#, #)', document, tag, options);
}
« no previous file with comments | « tests/html/html.status ('k') | tools/dom/templates/html/dart2js/html_dart2js.darttemplate » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698