Skip to content

Commit 90ecb3d

Browse files
committed
polymer-element supports new requirements for type extension custom elements
1 parent 8bdd036 commit 90ecb3d

3 files changed

Lines changed: 24 additions & 5 deletions

File tree

src/declaration/polymer-element.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
Platform.ShadowCSS.shimStyling(this.templateContent(), name, extendee);
107107
}
108108
// register our custom element
109-
this.registerPrototype(name);
109+
this.registerPrototype(name, extendee);
110110
// reference constructor in a global named by 'constructor' attribute
111111
this.publishConstructor();
112112
// subclasses may now register themselves

src/declaration/prototype.js

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -81,11 +81,16 @@
8181
prototype[name] = extend({}, Object.getPrototypeOf(prototype)[name]);
8282
},
8383
// register 'prototype' to custom element 'name', store constructor
84-
registerPrototype: function(name) {
85-
// register the custom type
86-
this.ctor = document.register(name, {
84+
registerPrototype: function(name, extendee) {
85+
var info = {
8786
prototype: this.prototype
88-
});
87+
}
88+
// native element must be specified in extends
89+
if (extendee && extendee.indexOf('-') < 0) {
90+
info.extends = extendee;
91+
}
92+
// register the custom type
93+
this.ctor = document.register(name, info);
8994
// constructor shenanigans
9095
this.prototype.constructor = this.ctor;
9196
// register the prototype with HTMLElement for name lookup

test/html/element-registration.html

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030

3131
<x-blarg></x-blarg>
3232
<hr>
33+
<li is="my-li"></li>
3334

3435
<!-- script follows declaration -->
3536
<polymer-element name="x-foo">
@@ -130,6 +131,17 @@
130131
</script>
131132
</polymer-element>
132133

134+
<polymer-element name="my-li" extends="li">
135+
<template>
136+
Hello World
137+
</template>
138+
<script>
139+
Polymer('my-li', {
140+
custom: true
141+
});
142+
</script>
143+
</polymer-element>
144+
133145
<script>
134146
var assert = chai.assert;
135147
function test() {
@@ -146,6 +158,8 @@
146158
assert.equal(fizz.squid, 'fink');
147159
var zzif = document.querySelector('x-zzif');
148160
assert.equal(zzif.squid, 'zink');
161+
var myLi = document.querySelector('[is=my-li]');
162+
assert.equal(myLi.custom, true);
149163
done();
150164
}
151165
</script>

0 commit comments

Comments
 (0)