Newer
Older
alert / js / node_modules / flarum / common / Fragment.d.ts
@Réz István Réz István on 18 Nov 2021 2 KB first commit
/// <reference types="jquery" />
import * as Mithril from 'mithril';
/**
 * The `Fragment` class represents a chunk of DOM that is rendered once with Mithril and then takes
 * over control of its own DOM and lifecycle.
 *
 * This is very similar to the `Component` wrapper class, but is used for more fine-grained control over
 * the rendering and display of some significant chunks of the DOM. In contrast to components, fragments
 * do not offer Mithril's lifecycle hooks.
 *
 * Use this when you want to enjoy the benefits of JSX / VDOM for initial rendering, combined with
 * small helper methods that then make updates to that DOM directly, instead of fully redrawing
 * everything through Mithril.
 *
 * This should only be used when necessary, and only with `m.render`. If you are unsure whether you need
 * this or `Component, you probably need `Component`.
 */
export default abstract class Fragment {
    /**
     * The root DOM element for the fragment.
     */
    protected element: Element;
    /**
     * Returns a jQuery object for this fragment's element. If you pass in a
     * selector string, this method will return a jQuery object, using the current
     * element as its buffer.
     *
     * For example, calling `fragment.$('li')` will return a jQuery object
     * containing all of the `li` elements inside the DOM element of this
     * fragment.
     *
     * @param {String} [selector] a jQuery-compatible selector string
     * @returns {jQuery} the jQuery object for the DOM node
     * @final
     */
    $(selector: any): JQuery<any>;
    /**
     * Get the renderable virtual DOM that represents the fragment's view.
     *
     * This should NOT be overridden by subclasses. Subclasses wishing to define
     * their virtual DOM should override Fragment#view instead.
     *
     * @example
     * const fragment = new MyFragment();
     * m.render(document.body, fragment.render());
     *
     * @final
     */
    render(): Mithril.Vnode<Mithril.Attributes, this>;
    /**
     * Creates a view out of virtual elements.
     */
    abstract view(): Mithril.Vnode<Mithril.Attributes, this>;
}