From f2cb8276dff270a4f7b7638459a329e0eabbc0e5 Mon Sep 17 00:00:00 2001 From: Boris Moore Date: Tue, 7 May 2019 19:52:55 -0700 Subject: [PATCH] Update types/jsrender definitions (#35148) * Update types/jsrender definitions * Remove unnecessary 'jquery' reference from jsrender/jsrender-tests.ts --- types/jsrender/index.d.ts | 440 +++++++++++++++++++-- types/jsrender/jsrender-tests.ts | 646 +++++++++++++++++++++++++++++-- types/jsrender/tsconfig.json | 2 +- types/jsrender/tslint.json | 62 --- 4 files changed, 1007 insertions(+), 143 deletions(-) diff --git a/types/jsrender/index.d.ts b/types/jsrender/index.d.ts index 86f84cae91..8218fd2e13 100644 --- a/types/jsrender/index.d.ts +++ b/types/jsrender/index.d.ts @@ -1,57 +1,415 @@ -// Type definitions for JsRender +// Type definitions for JsRender 1.0 // Project: http://www.jsviews.com/#jsrender -// Definitions by: Kensuke Matsuzaki +// Definitions by: Boris Moore // Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped // TypeScript Version: 2.3 -/// +/// -declare namespace JsRender { - interface Converters { - (name: string, converterFn: (value: any) => any): any; - (namedConverters: any, parentTemplate?: any): any; +declare module 'jsrender' { + export = jsrender; +} - html(valueToEncode: string): string; - attr(valueToEncode: string): string; - url(valueToEncode: string): string; - } +declare const jsrender: ((jquery?: JQueryStatic) => JQueryStatic) & JQueryStatic; - interface Views { - converters: Converters; +// ********************************** JsRender ********************************** - tags(name: string, tagFn: (value: any) => any): any; - tags(name: string, tagOptions: any): any; - tags(namedTags: any): any; +interface JQueryStatic { + /* var htmlString = $.render.templateName(data, myHelpersObject); // Render named template */ + render: { + [tmplName: string]: JsViews.TemplateRender; + }; - helpers(name: string, helper: any): any; - helpers(namedHelpers: any, parentTemplate?: any): any; - } + /* $.views.xxx ... // JsRender/JsViews APIs */ + views: JsViews.Views; - interface Template { - render(data?: any): string; - } - - interface NamedTemplate { - (data?: any): string; - } - - interface Render { - (data?: any, helpersOrContext?: any): string; - } - - interface RenderStatic { - [index: string]: NamedTemplate; - } + /* $.templates(...) or $.templates.templateName: Compile/get template */ + templates: JsViews.Templates; } interface JQuery { - render: JsRender.Render; + /* var htmlString = $("#template").render(data, myHelpersObject); // Render template, and pass in helpers or context */ + render: JsViews.TemplateRender; } -interface JQueryStatic { - render: JsRender.RenderStatic; - views: JsRender.Views; - templates(markupOrSelector: string): JsRender.Template; - templates(name: string, markupOrSelector: string): JsRender.Template; - templates(namedTemplates: any): any; +declare namespace JsViews { + +/* Generic hash of objects of type T */ +interface Hash { + [option: string]: T; } + +/* $.views*/ +interface Views { + /* $.views.templates() */ + templates: Templates; + + /* $.views.converters() */ + converters: Store; + + /* $.views.tags() */ + tags: Store; + + /* $.views.helpers() */ + helpers: Store; + + /* $.views.viewModels() */ + viewModels: ViewModels; + + /* $.views.settings */ + settings: Settings; + + /* $.views.sub.xxx */ + sub: Hash; + + /* $.views.map() */ + map(any: any): any; +} + +/* $.views.settings*/ +interface Settings { + /** + * Set delimiters + * $.views.settings.delimiters(...) + * + * @param {string} openChars + * @param {string} [closeChars] + * @param {string} [link] + * @returns {Settings} + */ + delimiters(openChars: string, closeChars?: string, link?: string): Settings; + delimiters(chars: string[]): Settings; + /** + * Get delimiters + * delimsArray = $.views.settings.delimiters() + * + * @returns {string[]} + */ + delimiters(): string[]; + + /** + * Set debug mode + * $.views.settings.debugMode(true) + * + * @param {boolean} debugMode + * @returns {Settings} + */ + debugMode(debugMode: boolean | ((e?: any, fallback?: string, view?: View) => any)): Settings; + /** + * Get debug mode setting + * debugMode = $.views.settings.debugMode() + * + * @returns {boolean} + */ + debugMode(): boolean; + + /** + * Set allowCode mode + * $.views.settings.allowCode(true) + * + * @param {boolean} allowCode + * @returns {Settings} + */ + allowCode(allowCode: boolean): Settings; + /** + * Get allowCode mode setting + * allowCode = $.views.settings.allowCode() + * + * @returns {boolean} + */ + allowCode(): boolean; + + /** + * Set advanced settings (useViews, _jsv ...) + * $.views.settings.advanced({useViews: true}) + * + * @param {object} settings + * @returns {Settings} + */ + advanced(settings: Hash): Settings; + /** + * Get advanced settings + * advancedSettings = $.views.settings.advanced() + * + * @returns {object} + */ + advanced(): Hash; +} + +interface Store { + /** + * Generic store() function to register item, named item, or hash of items + * Also used as hash to store the registered items + * Used as implementation of $.templates(), $.views.templates(), $.views.tags(), $.views.helpers() and $.views.converters() + * + * @param {string|hash} name name - or selector, in case of $.templates(). Or hash of items + * @param {any} [item] (e.g. markup for named template) + * @param {Template} [parentTmpl] For item being registered as private resource of template + * @returns {any|Views} e.g. compiled template - or $.views in case of registering hash of items + */ + (name: string, item?: TO, parentTmpl?: Template): T; // named item + (namedItems: Hash, parentTmpl?: Template): Views; // Multiple named items + + /** + * var template = $.templates.templateName; // Get compiled named template - or similar for named tags, converters, helpers, viewModels + */ + [itemName: string]: T; +} + +// Templates + +interface Templates extends Store { + /** + * Additional $.templates() signature for compiling unnamed template + * + * @param {string|TemplateOptions} markup or selector + * @param {Template} [parentTmpl] For compling template as private resource of parent template + * @returns {Template} compiled template + */ + (markupOrSelectorOrOptions: string | TemplateOptions, parentTmpl?: Template): Template; // Unnamed template +} + +interface TemplateOptions { + /* Template options hash */ + tags?: Hash; + templates?: Hash; + + markup: any; + converters?: Hash; + helpers?: Hash; + useViews?: boolean; +} + +type TemplateSetter = TemplateOptions | string; + +interface Template extends TemplateRender { + /* Compiled template object */ + tmplName: string; + tags?: Hash; + templates?: Hash