From d742fa855e846576e7e169a13e232d53bbf61948 Mon Sep 17 00:00:00 2001 From: SMores Date: Mon, 13 Aug 2018 17:45:14 -0400 Subject: [PATCH] Add types for Templatizer to Polymer (#27823) * Add types for Templatizer to Polymer Polymer was missing the typings for Templatizer, the behavior that provides helpers for working with template elements in Polymer components. This adds types for its public interface. * Add tests for new templatizer types * Fix modelForElement type to just be Polymer.Base The closure types here: https://github.com/Polymer/polymer/blob/1.x/src/lib/template/templatizer.html incorrectly suggest that modelForElement returns an `Object`, but in fact it just returns `Polymer.Base` --- types/polymer/index.d.ts | 14 +++++++++++--- types/polymer/polymer-tests.ts | 7 +++++++ 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/types/polymer/index.d.ts b/types/polymer/index.d.ts index 569842066a..1b67f4c6d5 100644 --- a/types/polymer/index.d.ts +++ b/types/polymer/index.d.ts @@ -263,7 +263,7 @@ declare global { setAttribute(name: string, value: any):void; removeAttribute(name: string):void; - + observeNodes(callback: (info: ObservedNodeInfo) => void): {}; unobserveNodes(observer: {}): void; @@ -340,6 +340,12 @@ declare global { whenLoaded(cb: Function): void; } + interface Templatizer { + templatize(template: HTMLTemplateElement, mutableData?: boolean): void; + stamp(model: {}): Base; + modelForElement: (elem: HTMLElement) => Base; + } + interface PolymerStatic { Settings: Settings; @@ -351,12 +357,14 @@ declare global { Class(prototype: Base | { new (): Base }): CustomElementConstructor; - RenderStatus: RenderStatus + RenderStatus: RenderStatus; ArraySplice: ArraySplice; /** @deprecated */ - ImportStatus: ImportStatus + ImportStatus: ImportStatus; + + Templatizer: Templatizer; } } diff --git a/types/polymer/polymer-tests.ts b/types/polymer/polymer-tests.ts index 2b6631ffb7..ce55ac325d 100644 --- a/types/polymer/polymer-tests.ts +++ b/types/polymer/polymer-tests.ts @@ -1,6 +1,8 @@ Polymer({ is: "my-element", + behaviors: [Polymer.Templatizer], + properties: { prop1: String, prop2: { @@ -24,6 +26,11 @@ Polymer({ }, ready: function () { + const template = Polymer.dom(this).querySelector('template'); + if (template) { + this.templatize(template); + const instance = this.stamp({item: {}}); + } this.textContent = 'My element!'; this.$.name.textContent = this.name; this.serialize({});