Proyectos de Subversion LeadersLinked - Antes de SPA

Rev

Autoría | Ultima modificación | Ver Log |

// Type definitions for JsRender 1.0
// Version: "v1.0.7"
// Project: http://www.jsviews.com/#jsrender
// Definitions by: Boris Moore <https://github.com/borismoore>
// Definitions: https://www.jsviews.com/download/typescript/jsrender/index.d.ts
// TypeScript Version: 2.3

/// <reference types="jquery" />

declare module 'jsrender' {
  export = jsrender;
}

declare const jsrender: ((jquery?: JQueryStatic) => JQueryStatic) & JQueryStatic;

// ********************************** JsRender **********************************

interface JQueryStatic {
        /* var htmlString = $.render.templateName(data, myHelpersObject); // Render named template */
        render: {
                [tmplName: string]: JsViews.TemplateRender;
        };

        /* $.views.xxx ... // JsRender/JsViews APIs */
        views: JsViews.Views;

        /* $.templates(...) or $.templates.templateName: Compile/get template */
        templates: JsViews.Templates;
}

interface JQuery {
        /* var htmlString = $("#template").render(data, myHelpersObject); // Render template, and pass in helpers or context */
        render: JsViews.TemplateRender;
}

declare namespace JsViews {

/* Generic hash of objects of type T */
interface Hash<T> {
        [option: string]: T;
}

/* $.views*/
interface Views {
        /* $.views.templates() */
        templates: Templates;

        /* $.views.converters() */
        converters: Store<Converter, Converter>;

        /* $.views.tags() */
        tags: Store<Tag, TagSetter>;

        /* $.views.helpers() */
        helpers: Store<any, any>;

        /* $.views.viewModels() */
        viewModels: ViewModels;

        /* $.views.settings */
        settings: Settings;

        /* $.views.sub.xxx */
        sub: Hash<any>;

        /* $.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 < any>): Settings;
/**
 * Get advanced settings
 * advancedSettings = $.views.settings.advanced()
 *
 * @returns {object}
 */
advanced(): Hash < any>;
}

interface Store<T, TO> {
        /**
         * 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<TO>, 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<Template, TemplateSetter> {
        /**
         * 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<TagSetter>;
        templates?: Hash<TemplateSetter>;

        markup: any;
        converters?: Hash<Converter>;
        helpers?: Hash<any>;
        useViews?: boolean;
}

type TemplateSetter = TemplateOptions | string;

interface Template extends TemplateRender {
        /* Compiled template object */
        tmplName: string;
        tags?: Hash<Tag>;
        templates?: Hash<Template>;
        render: TemplateRender;
        fn?: (...args: any[]) => string;
        _is: string;

        markup: string;
        converters?: Hash<Converter>;
        helpers?: Hash<any>;
        useViews?: boolean;
}

interface TemplateRender {
        /**
         * Template render method: render the template as a string, using the specified data and helpers/context
         * var htmlString = template(data, myHelpersObject);
         * var htmlString = template.render(data, myHelpersObject);
         *
         * $("#tmpl").render(), tmpl.render(), tagCtx.render(), $.render.namedTmpl()
         *
         * @param {any}        data
         * @param {hash}       [helpersOrContext]
         * @param {boolean}    [noIteration]
         * @returns {string}   rendered template
         */
        (data?: any, helpersOrContext?: Hash<any>, noIteration?: boolean): string;
        (data?: any, noIteration?: boolean): string;
}

// ViewModels

interface ViewModelOptions {
        /* ViewModel options hash */
        // getters?: string[] | ;
        getters?: any[];
        extend?: Hash<any>;
        id?: string | ((a: any, b: any) => boolean);
}

interface ViewModel {
        /* ViewModel options hash */
        getters: string[];
        extend: Hash<any>;
        map(data: any): any;
        (...args: any[]): any;
        [prop: string]: any;
}

interface ViewModels extends Hash<ViewModel> {
        /* $.views.viewModels() */
        (viewModel: ViewModelOptions): ViewModel;
        (name: string, viewModel: ViewModelOptions, viewModels?: Hash<ViewModel>): ViewModel;
        (namedItems: Hash<ViewModelOptions>, viewModels?: Hash<ViewModel>): Hash<ViewModel>;
}

// Converters

interface Converter {
        /* Converter function */
        (value: any, ...restArgs: any[]): any;
}

// Tags

interface TagOptionProps {
        /* Properties that can be set as tag options, and retrieved as Tag properties */
        init?: (this: TagInst, tagCtx?: TagCtx, linkCtx?: LinkCtx, ctx?: Context) => void ;
  render?: (this: TagInst, ...args: any[]) => string |void ;
  baseTag?: string | Tag;
  contentCtx?: boolean | ((this: TagInst, arg0: any) => any);
  convert?: string | Converter;
  argDefault?: boolean;
  bindTo?: number | string | Array < number |string>;
  bindFrom?: number | string | Array < number |string>;
  flow?: boolean;
  ctx?: Hash < any>;
  [prop: string]: any;
}

interface TagOptions extends TagOptionProps {
        /* Tag options hash */
        template?: TemplateSetter;
}

type TagSetter = TagOptions | string | ((...args: any[]) => any);

interface Tag extends TagOptionProps {
        /* Tag object */
        tagCtx: TagCtx;
        tagCtxs: TagCtx[];
        tagName: string;
        parent?: Tag;
        parents?: Hash<Tag>;
        rendering?: Hash<any>;
        ctxPrm(name: string, value?: any): any; // get/set in JsViews but get only in JsRender
        cvtArgs(elseBlock?: number): any[] | void ;
bndArgs(elseBlock?: number): any[] | void ;
  base?: (...args: any[]) => any;
  baseApply?: (args: any[]|IArguments) => any;
}

interface TagInst extends Tag {
        template?: TemplateSetter;
}

interface Context {
        /* ctx object */
        /* Root data object or array */
        root: any;

        /* This tag */
        tag?: Tag;

        /* Ancestor tags */
        parentTags?: Hash<Tag>;

        /* tagCtx object */
        tagCtx?: any;

        [prop: string]: any;
}

interface TagCtxParams {
        /* tagCtx.params object */
        args: string[];
        props: Hash<string>;
        ctx: Hash<string>;
}

interface TagCtx {
        /* tagCtx object */
        /* Arguments passed declaratively */
        args: any[];

        /* Properties passed declaratively */
        props: Hash<any>;

        /* Declarative tag params object */
        params: TagCtxParams;

        /* External tmpl, or else template for wrapped content. Otherwise, false */
        tmpl: Template;

        /* Template for wrapped content, or else external template. Otherwise, false */
        content: Template;

        /* Tag instance index (if siblings rendered against array data) */
        index: number;

        /* JsViews view containing this tag instance */
        view: View;

        /* View context for tag */
        ctx: Context;

        /* This tag instance */
        tag: Tag;

        /* Tag render method */
        render: TagRenderMethod;

        /* tagCtx.ctxPrm() method */
        ctxPrm(name: string, value?: any): any; // get/set in JsViews but get only in JsRender

        /* tagCtx.cvtArgs() method */
        cvtArgs(): any[]| void ;

/* tagCtx.bndArgs() method */
bndArgs(): any[] | void;
}

interface LinkCtx {
        /* linkCtx object, null in JsRender */
}

interface TagRenderMethod {
        /* tag render method */
        (...arguments: any[]): string;
}

interface View {
        /* Template rendered by view */
        tmpl: Template;

        /* Block content template (for block tags) */
        content?: Template;

        /* Child views */
        views: View[] & Hash<View>;

        /* Parent view */
        parent: View;

        /* View context (helpers and parameters from parent views) */
        ctx: Context;

        /* View type */
        type: string;

        /* view.get() method: find parent or child views */
        get(type?: string): View;
        get(inner: boolean, type?: string): View;

        /* view.getIndex() method: get index of parent "item" view */
        getIndex(): number;

        /* view.ctxPrm() method: get/set contextual parameter or helper */
        ctxPrm(name: string, value?: any): any; // get/set in JsViews but get only in JsRender

        /* Find contextual template resource */
        getRsc(namedCollection: string, itemName: string): any;

        /* Index of this view in parent views collection */
        index: number;

        /* tag (for tag views) */
        tag: Tag;

        /* contextual data */
        data: any;

        /* root View (top-level) */
        root: View;

        scope: View;
}

} // end namespace