UNPKG

pjax

Version:

Easily enable fast AJAX navigation on any website (using pushState + XHR)

207 lines (166 loc) 6.24 kB
declare class Pjax { options: Pjax.IOptions; constructor(options?: Partial<Pjax.IOptions>); static switches: { [key in DefaultSwitches]: Pjax.Switch }; /** * Checks if Pjax is supported by the environment. */ static isSupported: () => boolean; log: VoidFunction; getElements(el: Element | Document): NodeListOf<Element>; parseDOM(el: Element | Document): void; refresh: ElementFunction; reload: VoidFunction; attachLink(el: HTMLAnchorElement): void; attachForm(el: HTMLFormElement): void; forEachSelectors(cb: ElementFunction, context: Pjax, DOMcontext?: Element | Document): void; switchesSelectors(selectors: string[], fromEl: Element | Document, toEl: Element | Document, options: Pjax.IOptions): void; latestChance(href: string): void; onSwitch: VoidFunction; /** * Loads the HTML from the response into the DOM. * * @param {string} html * @param {Pjax.IOptions} options */ loadContent(html: string, options: Pjax.IOptions): void; /** * Aborts an ongoing XHR request. * * @param {XMLHttpRequest} request */ abortRequest(request: XMLHttpRequest): void; /** * Makes the XHR request. * * @param {string} location The URI for the request. * @param {Pjax.IOptions | null} options * @param {(requestText: string, request: XMLHttpRequest, href: string) => void} callback The callback to call when * the response is received. The signature should match that of <code>handleResponse</code>. * @returns {XMLHttpRequest} */ doRequest(location: string, options: Pjax.IOptions | null, callback: (requestText: string, request: XMLHttpRequest, href: string) => void): XMLHttpRequest; /** * Saves the state, updates the URL if there were any redirects, then calls loadContent(). * * @param {string} requestText The raw text of the response. Same as <code>request.responseText</code>. * @param {XMLHttpRequest} request The XHR object. * @param {string} href The original URI used to initiate the request. * @param options The Pjax options object used for the request */ handleResponse(requestText: string, request: XMLHttpRequest, href: string, options?: Pjax.IOptions): void; /** * Initiates the request by calling <code>doRequest()</code>. * @param {string} href * @param {Pjax.IOptions} options */ loadUrl(href: string, options?: Pjax.IOptions): void; /** * Called after all switches complete (even async). */ afterAllSwitches: VoidFunction; /** * Allows reassignment of existing prototype functions to be able to do something before calling the original function. * For example: * * <pre> * pjax._handleResponse = pjax.handleResponse; * pjax.handleResponse = (requestText: string, request: XMLHttpRequest, href: string) => { * return pjax._handleResponse(requestText, request, href); * } * </pre> */ // [key: string]: Function | Pjax.IOptions; [key: string]: Function | Pjax.IOptions | any; } declare namespace Pjax { export interface IOptions { /** * CSS selector to use to retrieve links to apply Pjax to. */ elements: string; /** * CSS selectors for the elements to replace. */ selectors: string[]; /** * Objects containing callbacks that can be used to switch old elements with new elements. * Keys should be one of the defined selectors. */ switches: StringKeyedObject<Switch>; /** * These are options that can be used during switches. * Keys should be one of the defined selectors. */ switchesOptions: StringKeyedObject; /** * Enable the use of pushState(). Disabling this will prevent Pjax from updating browser history. * Internally, this option is used when a popstate event triggers Pjax (to not pushState() again). */ history: boolean; /** * Function that allows you to add behavior for analytics. * By default it tries to track a pageview with Google Analytics (if it exists on the page). * It's called every time a page is switched, even for history navigation. * Set to false to disable this behavior. */ analytics: Function | false; /** * When set to an integer, this is the value (in px from the top of the page) to scroll to when a page is switched. * When set to an array of 2 integers ([x, y]), this is the value to scroll both horizontally and vertically. * Set this to false to disable scrolling, which will mean the page will stay in that same position it was before * loading the new elements. */ scrollTo: number | [number, number] | false; /** * When set to true, attempt to restore the scroll position when navigating backwards or forwards. */ scrollRestoration: boolean; /** * When set to true, append a timestamp query string segment to the requested URLs in order to skip browser cache. */ cacheBust: boolean; /** * Enables verbose mode. */ debug: boolean; /** * The timeout in milliseconds for the XHR requests. Set to 0 to disable the timeout. */ timeout: number; /** * When set to true, clicking on a link that points to the current URL will trigger a full page reload. * (Note that if cacheBust is set to true, the code that checks if the href is the same as the current page's URL * will not work, due to the query string appended to force a cache bust). */ currentUrlFullReload: boolean; /** * Hold the information to make an XHR request. */ requestOptions?: { requestUrl?: string; requestMethod?: string; requestParams?: IRequestParams[]; formData?: FormData; } } export type Switch = (oldEl: Element, newEl: Element, options?: IOptions, switchesOptions?: StringKeyedObject) => void; export interface IRequestParams { name: string, value: string } } interface StringKeyedObject<T = any> { [key: string]: T } type ElementFunction = (el: Element) => void; declare enum DefaultSwitches { innerHTML = "innerHTML", ouetrHTML = "outerHTML", sideBySide = "sideBySide", replaceNode = "replaceNode" } export = Pjax;