Index: pkg/web_components/lib/dart_support.js |
diff --git a/pkg/web_components/lib/dart_support.js b/pkg/web_components/lib/dart_support.js |
index 4e1995a4e2840564771c22dee5d0c37f25019821..77948eb29438f24008c56db0078bc50a54249610 100644 |
--- a/pkg/web_components/lib/dart_support.js |
+++ b/pkg/web_components/lib/dart_support.js |
@@ -116,6 +116,33 @@ |
upgraders[name] = upgrader; |
} |
+ |
+ // Native custom elements outside the app in Chrome have constructor |
+ // names like "x-tag", which need to be translated to the DOM |
+ // element they extend. When using the shadow dom polyfill this is |
+ // take care of above. |
Siggi Cherem (dart-lang)
2014/06/11 19:56:03
nit: take => taken
|
+ var ShadowDOMPolyfill = window.ShadowDOMPolyfill; |
+ if (!ShadowDOMPolyfill) { |
+ // dartNativeDispatchHooksTransformer is described on initHooks() in |
+ // sdk/lib/_internal/lib/native_helper.dart. |
+ if (typeof window.dartNativeDispatchHooksTransformer == 'undefined') |
+ window.dartNativeDispatchHooksTransformer = []; |
+ |
+ window.dartNativeDispatchHooksTransformer.push(function(hooks) { |
+ var originalGetUnknownTag = hooks.getUnknownTag; |
+ hooks.getUnknownTag = function(o, tag) { |
+ if (/-/.test(tag)) { // "x-tag" |
+ var s = Object.prototype.toString.call(o); |
+ var match = s.match(/^\[object ([A-Za-z]*Element)\]$/); |
+ if (match) { |
+ return match[1]; |
+ } |
+ return originalGetUnknownTag(o, tag); |
+ } |
+ }; |
+ }); |
+ } |
+ |
doc._registerDartTypeUpgrader = registerDartTypeUpgrader; |
doc.registerElement = registerElement; |
})(document); |