An application that shows docked camera views.

HandlebarsApplication

Hierarchy (View Summary)

Constructors

  • Applications are constructed by providing an object of configuration options.

    Parameters

    Returns CameraViews

Properties

DOCK_ICONS: Record<
    { BOTTOM: string; LEFT: string; RIGHT: string; TOP: string },
    [string, string],
> = ...

Icons for the docked state of the camera dock.

options: Readonly<ApplicationConfiguration>

Application instance configuration options.

position: ApplicationPosition = ...

The current position of the application with respect to the window.document.body.

tabGroups: Record<string, null | string> = ...

If this Application uses tabbed navigation groups, this mapping is updated whenever the changeTab method is called. Reports the active tab for each group, with a value of null indicating no tab is active. Subclasses may override this property to define default tabs for each group.

_appId: number = 0

An incrementing integer Application ID.

_maxZ: number = ...

The current maximum z-index of any displayed Application.

BASE_APPLICATION: typeof ApplicationV2 = ApplicationV2

Designates which upstream Application class in this class' inheritance chain is the base application. Any DEFAULT_OPTIONS of super-classes further upstream of the BASE_APPLICATION are ignored. Hook events for super-classes further upstream of the BASE_APPLICATION are not dispatched.

DEFAULT_OPTIONS: {
    actions: {
        blockAudio: (
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<undefined | CameraViews>;
        blockVideo: (
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<undefined | CameraViews>;
        configure: (event: PointerEvent, target: HTMLElement) => Promise<AVConfig>;
        disableVideo: (event: PointerEvent, target: HTMLElement) => Promise<void>;
        hide: (
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<undefined | CameraViews>;
        mutePeers: (event: PointerEvent, target: HTMLElement) => Promise<void>;
        toggleAudio: (
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<undefined | Readonly<Notification> | CameraViews>;
        toggleDock: (
            ...this: any,
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<CameraViews>;
        toggleDocked: (
            ...this: any,
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<void>;
        toggleVideo: (
            event: PointerEvent,
            target: HTMLElement,
        ) => Promise<undefined | Readonly<Notification> | CameraViews>;
    };
    id: string;
    window: { frame: boolean };
} = ...
emittedEvents: readonly ["render", "close", "position"] = ...
PARTS: {
    cameras: { scrollable: string[]; template: string };
    controls: { template: string };
} = ...
RENDER_STATES: Record<string, number> = ...

The sequence of rendering states that describe the Application life-cycle.

TABS: Record<string, ApplicationTabsConfiguration> = {}

Configuration of application tabs, with an entry per tab group.

Accessors

  • get classList(): DOMTokenList

    The CSS class list of this Application instance

    Returns DOMTokenList

  • get element(): HTMLElement

    The HTMLElement which renders this Application into the DOM.

    Returns HTMLElement

  • get form(): null | HTMLFormElement

    Does this Application have a top-level form element?

    Returns null | HTMLFormElement

  • get hasFrame(): boolean

    Does this Application instance render within an outer window frame?

    Returns boolean

  • get hidden(): boolean

    If all camera views are popped out, hide the dock.

    Returns boolean

  • get id(): string

    The HTML element ID of this Application instance. This provides a readonly view into the internal ID used by this application. This getter should not be overridden by subclasses, which should instead configure the ID in DEFAULT_OPTIONS or by defining a uniqueId during _initializeApplicationOptions.

    Returns string

  • get isHorizontal(): boolean

    Whether the AV dock is in a horizontal configuration.

    Returns boolean

  • get isVertical(): boolean

    Whether the AV dock is in a vertical configuration.

    Returns boolean

  • get minimized(): boolean

    Is this Application instance currently minimized?

    Returns boolean

  • get rendered(): boolean

    Is this Application instance currently rendered?

    Returns boolean

  • get state(): number

    The current render state of the Application.

    Returns number

  • get title(): string

    A convenience reference to the title of the Application window.

    Returns string

  • get window(): {
        close: HTMLButtonElement;
        content: HTMLElement;
        controls: HTMLButtonElement;
        controlsDropdown: HTMLDivElement;
        header: HTMLElement;
        icon: HTMLElement;
        onDrag: Function;
        onResize: Function;
        pointerMoveThrottle: boolean;
        pointerStartPosition: ApplicationPosition;
        resize: HTMLElement;
        title: HTMLHeadingElement;
    }

    Convenience references to window header elements.

    Returns {
        close: HTMLButtonElement;
        content: HTMLElement;
        controls: HTMLButtonElement;
        controlsDropdown: HTMLDivElement;
        header: HTMLElement;
        icon: HTMLElement;
        onDrag: Function;
        onResize: Function;
        pointerMoveThrottle: boolean;
        pointerStartPosition: ApplicationPosition;
        resize: HTMLElement;
        title: HTMLHeadingElement;
    }

Methods

  • Returns void

  • Internal

    Wait for a CSS transition to complete for an element.

    Parameters

    • element: HTMLElement

      The element which is transitioning

    • timeout: number

      A timeout in milliseconds in case the transitionend event does not occur

    Returns Promise<void>

  • Parameters

    • options: any

    Returns boolean

  • Parameters

    • options: any

    Returns any

  • Internal

    Perform an event in the application life-cycle. Await an internal life-cycle method defined by the class. Optionally dispatch an event for any registered listeners.

    Parameters

    • handler: Function

      A handler function to call

    • options: {
          async?: boolean;
          debugText?: string;
          eventName?: string;
          handlerArgs?: any[];
          hookArgs?: any[];
          hookName?: string;
          hookResponse?: boolean;
          parentClassHooks?: boolean;
      } = {}

      Options which configure event handling

      • Optionalasync?: boolean

        Await the result of the handler function?

      • OptionaldebugText?: string

        Debugging text to log for the event

      • OptionaleventName?: string

        An event name to dispatch for registered listeners

      • OptionalhandlerArgs?: any[]

        Arguments passed to the handler function

      • OptionalhookArgs?: any[]

        Arguments passed to the requested hook function

      • OptionalhookName?: string

        A hook name to dispatch for this and all parent classes

      • OptionalhookResponse?: boolean

        Add the handler response to hookArgs

      • OptionalparentClassHooks?: boolean

        Call hooks for parent classes in the inheritance chain?

    Returns void | Promise<void>

    A promise which resoles once the handler is complete if async is true

  • Internal

    Handle blocking a user's audio stream.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<undefined | CameraViews>

  • Internal

    Handle blocking a user's video stream.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<undefined | CameraViews>

  • Internal

    Handle spawning the AV configuration dialog.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<AVConfig>

  • Internal

    Handle disabling all incoming video streams.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<void>

  • Internal

    Handle hiding a user from the AV UI entirely.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<undefined | CameraViews>

  • Internal

    Handle disabling all incoming audio streams.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<void>

  • Parameters

    • context: any
    • options: any

    Returns Promise<void>

  • Internal

    Handle the user toggling their own audio stream.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<undefined | Readonly<Notification> | CameraViews>

  • Internal

    Handle the user toggling their own video stream.

    Parameters

    • event: PointerEvent

      The triggering event.

    • target: HTMLElement

      The action target.

    Returns Promise<undefined | Readonly<Notification> | CameraViews>

  • Parameters

    • partId: any
    • context: any
    • options: any

    Returns Promise<any>

  • Render an HTMLElement for the Application. An Application subclass must implement this method in order for the Application to be renderable.

    Parameters

    Returns Promise<any>

    The result of HTML rendering may be implementation specific. Whatever value is returned here is passed to _replaceHTML

  • Parameters

    • result: any
    • content: any
    • options: any

    Returns void

  • Add a new event listener for a certain type of event.

    Parameters

    • type: string

      The type of event being registered for

    • listener: EmittedEventListener

      The listener function called when the event occurs

    • Optionaloptions: { once?: boolean } = {}

      Options which configure the event listener

      • Optionalonce?: boolean

        Should the event only be responded to once and then removed

    Returns void

  • Bring this Application window to the front of the rendering stack by increasing its z-index. Once ApplicationV1 is deprecated we should switch from _maxZ to ApplicationV2#maxZ We should also eliminate ui.activeWindow in favor of only ApplicationV2#frontApp

    Returns void

  • Change the active tab within a tab group in this Application instance.

    Parameters

    • tab: string

      The name of the tab which should become active

    • group: string

      The name of the tab group which defines the set of tabs

    • Optionaloptions: {
          event?: Event;
          force?: boolean;
          navElement?: HTMLElement;
          updatePosition?: boolean;
      } = {}

      Additional options which affect tab navigation

      • Optionalevent?: Event

        An interaction event which caused the tab change, if any

      • Optionalforce?: boolean

        Force changing the tab even if the new tab is already active

      • OptionalnavElement?: HTMLElement

        An explicit navigation element being modified

      • OptionalupdatePosition?: boolean

        Update application position after changing the tab?

    Returns void

  • Close the Application, removing it from the DOM.

    Parameters

    Returns Promise<CameraViews>

    A Promise which resolves to the closed Application instance

  • Get a user's camera dock.

    Parameters

    • userId: string

      The user's ID.

    Returns null | HTMLElement

  • Get the video element for a user broadcasting video.

    Parameters

    • userId: string

      The user's ID.

    Returns null | HTMLVideoElement

  • Restore the Application to its original dimensions.

    Returns Promise<void>

  • Minimize the Application, collapsing it to a minimal header.

    Returns Promise<void>

  • Render the Application, creating its HTMLElement and replacing its innerHTML. Add it to the DOM if it is not currently rendered and rendering is forced. Otherwise, re-render its contents.

    Parameters

    • Optionaloptions: boolean | HandlebarsRenderOptions = {}

      Options which configure application rendering behavior. A boolean is interpreted as the "force" option.

    • Optional_options: HandlebarsRenderOptions = {}

      Legacy options for backwards-compatibility with the original ApplicationV1#render signature.

    Returns Promise<CameraViews>

    A Promise which resolves to the rendered Application instance

  • Update the Application element position using provided data which is merged with the prior position.

    Parameters

    Returns void | ApplicationPosition

    The updated application position

  • Indicate a user is speaking on their camera dock.

    Parameters

    • userId: string

      The user's ID.

    • speaking: boolean

      Whether the user is speaking.

    Returns void

  • Programmatically submit an ApplicationV2 instance which implements a single top-level form.

    Parameters

    • OptionalsubmitOptions: object = {}

      Arbitrary options which are supported by and provided to the configured form submission handler.

    Returns Promise<any>

    A promise that resolves to the returned result of the form submission handler, if any.

  • Toggle display of the Application controls menu. Only applicable to window Applications.

    Parameters

    • Optionalexpanded: boolean

      Set the controls visibility to a specific state. Otherwise, the visible state is toggled from its current value

    • Optionaloptions: { animate?: boolean } = {}

      Options to configure the toggling behavior.

      • Optionalanimate?: boolean

        Animate the controls toggling.

    Returns Promise<void>

    A Promise which resolves once the control expansion animation is complete

  • Protected

    Modify the provided options passed to a render request.

    Parameters

    Returns void

  • Protected

    Create a ContextMenu instance used in this Application.

    Parameters

    • handler: () => ContextMenuEntry[]

      A handler function that provides initial context options

    • selector: string

      A CSS selector to which the ContextMenu will be bound

    • Optionaloptions: { container?: HTMLElement; hookName?: string; parentClassHooks?: boolean } = {}

      Additional options which affect ContextMenu construction

      • Optionalcontainer?: HTMLElement

        A parent HTMLElement which contains the selector target

      • OptionalhookName?: string

        The hook name

      • OptionalparentClassHooks?: boolean

        Whether to call hooks for the parent classes in the inheritance chain.

    Returns null | ContextMenu

    A created ContextMenu or null if no menu items were defined

  • Protected

    Iterate over header control buttons, filtering for controls which are visible for the current client.

    Returns Generator<ApplicationHeaderControlsEntry, any, any>

  • Protected

    Initialize configuration options for the Application instance. The default behavior of this method is to intelligently merge options for each class with those of their parents.

    • Array-based options are concatenated
    • Inner objects are merged
    • Otherwise, properties in the subclass replace those defined by a parent

    Parameters

    Returns ApplicationConfiguration

    Configured options for the application instance

  • Protected

    Insert the application HTML element into the DOM. Subclasses may override this method to customize how the application is inserted.

    Parameters

    • element: HTMLElement

      The element to insert

    Returns void

  • Protected

    Handle changes to an input element within the form.

    Parameters

    • formConfig: ApplicationFormConfiguration

      The form configuration for which this handler is bound

    • event: Event

      An input change event within the form

    Returns void

  • Protected

    A generic event handler for action clicks which can be extended by subclasses. Action handlers defined in DEFAULT_OPTIONS are called first. This method is only called for actions which have no defined handler.

    Parameters

    • event: PointerEvent

      The originating click event

    • target: HTMLElement

      The capturing HTML element which defined a [data-action]

    Returns void

  • Protected

    Handle click events on a tab within the Application.

    Parameters

    • event: PointerEvent

    Returns void

  • Protected

    Actions performed after closing the Application. Post-close steps are not awaited by the close process.

    Parameters

    Returns void

  • Protected

    Actions performed after the Application is re-positioned.

    Parameters

    Returns void

  • Protected

    Handle submission for an Application which uses the form element.

    Parameters

    • formConfig: ApplicationFormConfiguration

      The form configuration for which this handler is bound

    • event: Event | SubmitEvent

      The form submission event

    Returns Promise<void>

  • Protected

    Handle changing another user's volume.

    Parameters

    • event: Event

      The triggering event.

    Returns void

  • Protected

    Actions performed before closing the Application. Pre-close steps are awaited by the close process.

    Parameters

    Returns Promise<void>

  • Protected

    Prepare application rendering context data for a given render request. If exactly one tab group is configured for this application, it will be prepared automatically.

    Parameters

    Returns Promise<ApplicationRenderContext>

    Context data for the render operation

  • Protected

    Prepare application tab data for a single tab group.

    Parameters

    • group: string

      The ID of the tab group to prepare

    Returns Record<string, ApplicationTab>

  • Protected

    Actions performed before the Application is re-positioned. Pre-position steps are not awaited because setPosition is synchronous.

    Parameters

    Returns void

  • Protected

    Remove the application HTML element from the DOM. Subclasses may override this method to customize how the application element is removed.

    Parameters

    • element: HTMLElement

      The element to be removed

    Returns void

  • Protected

    Render the outer framing HTMLElement which wraps the inner HTML of the Application.

    Parameters

    Returns Promise<HTMLElement>

  • Protected

    Remove elements from the DOM and trigger garbage collection as part of application closure.

    Parameters

    Returns void

  • Protected

    When the Application is rendered, optionally update aspects of the window frame.

    Parameters

    Returns void

  • Protected

    Translate a requested application position updated into a resolved allowed position for the Application. Subclasses may override this method to implement more advanced positioning behavior.

    Parameters

    Returns ApplicationPosition

    Resolved Application positioning data

  • Iterate over the inheritance chain of this Application. The chain includes this Application itself and all parents until the base application is encountered.

    Returns Generator<typeof ApplicationV2, void, unknown>

  • Parse a CSS style rule into a number of pixels which apply to that dimension.

    Parameters

    • style: string

      The CSS style rule

    • parentDimension: number

      The relevant dimension of the parent element

    Returns number | void

    The parsed style dimension in pixels

  • Wait for any images in the given element to load.

    Parameters

    • element: HTMLElement

      The element.

    Returns Promise<void>