js/event.js

/**
 * @module event
 */
// TODO: add second "propagate" parameter to constructors to add .enketo namespace to event.

/**
 * Data update event.
 *
 * @static
 * @param {*} detail - Data to be passed with event
 * @return {CustomEvent} Custom "dataupdate" event
 */
function DataUpdate( detail ) {
    return new CustomEvent( 'dataupdate', { detail } );
}

/**
 * Fake focus event.
 *
 * @return {CustomEvent} Custom "fakefocus" event (bubbling)
 */
function FakeFocus() {
    return new CustomEvent( 'fakefocus', { bubbles: true } );
}

/**
 * Apply focus event.
 *
 * @return {CustomEvent} Custom "applyfocus" event
 */
function ApplyFocus() {
    return new CustomEvent( 'applyfocus' );
}

/**
 * Page flip event.
 *
 * @return {CustomEvent} Custom "pageflip" event (bubbling)
 */
function PageFlip() {
    return new CustomEvent( 'pageflip', { bubbles: true } );
}

/**
 * Removed event.
 *
 * @param {*} detail - Data to be passed with event
 * @return {CustomEvent} Custom "removed" event (bubbling)
 */
function Removed( detail ) {
    return new CustomEvent( 'removed', { detail, bubbles: true } );
}

/**
 * The odk-instance-first-load event as defined in the ODK XForms spec.
 *
 * @see https://getodk.github.io/xforms-spec/#event:odk-instance-first-load
 *@return {CustomEvent} Custom "odk-instance-first-load" event (bubbling)
 */
function InstanceFirstLoad() {
    return new CustomEvent( 'odk-instance-first-load', { bubbles: true } );
}

/**
 * The odk-new-repeat event as defined in the ODK XForms spec.
 *
 * @see https://getodk.github.io/xforms-spec/#event:odk-new-repeat
 * @param {{repeatPath: string, repeatIndex: number, trigger: string}} detail - Data to be passed with event.
 * @return {CustomEvent} Custom "odk-new-repeat" event (bubbling)
 */
function NewRepeat( detail ) {
    return new CustomEvent( 'odk-new-repeat', { detail, bubbles: true } );
}

/**
 * The addrepeat event is similar but fired under different circumstances.
 *
 * @param {{repeatPath: string, repeatIndex: number, trigger: string}} detail - Data to be passed with event.
 * @return {CustomEvent} Custom "odk-new-repeat" event (bubbling)
 */
function AddRepeat( detail ) {
    return new CustomEvent( 'addrepeat', { detail, bubbles: true } );
}

/**
 * Remove repeat event.
 *
 * @return {CustomEvent} Custom "removerepeat" event (bubbling)
 */
function RemoveRepeat() {
    return new CustomEvent( 'removerepeat', { bubbles: true } );
}

/**
 * Change language event.
 *
 * @return {CustomEvent} Custom "changelanguage" event (bubbling)
 */
function ChangeLanguage() {
    return new CustomEvent( 'changelanguage', { bubbles: true } );
}

/**
 * Change event.
 *
 * @return {Event} The regular HTML "change" event (bubbling)
 */
function Change() {
    return new Event( 'change', { bubbles: true } );
}

/**
 * Xforms-value-changed event as defined in the ODK XForms spec.
 *
 * @see https://getodk.github.io/xforms-spec/#event:xforms-value-changed
 * @param {{repeatIndex: number}} detail - Data to be passed with event.
 * @return {CustomEvent} Custom "xforms-value-changed" event (bubbling).
 */
function XFormsValueChanged( detail ) {
    return new CustomEvent( 'xforms-value-changed', { detail, bubbles: true } );
}

/**
 * Input event.
 *
 * @return {Event} "input" event (bubbling)
 */
function Input() {
    return new Event( 'input', { bubbles: true } );
}

/**
 * Input update event which fires when a form control value is updated programmatically.
 *
 * @return {CustomEvent} Custom "inputupdate" event (bubbling)
 */
function InputUpdate() {
    return new CustomEvent( 'inputupdate', { bubbles: true } );
}

/**
 * Edited event.
 *
 * @return {CustomEvent} Custom "edited" event (bubbling)
 */
function Edited() {
    return new CustomEvent( 'edited', { bubbles: true } );
}


/**
 * Before save event.
 *
 * @return {CustomEvent} Custom "edited" event (bubbling)
 */
function BeforeSave() {
    return new CustomEvent( 'before-save', { bubbles: true } );
}

/**
 * Validation complete event.
 *
 * @return {CustomEvent} Custom "validationcomplete" event (bubbling)
 */
function ValidationComplete() {
    return new CustomEvent( 'validation-complete', { bubbles: true } );
}

/**
 * Invalidated event.
 *
 * @return {CustomEvent} Custom "invalidated" event (bubbling)
 */
function Invalidated() {
    return new CustomEvent( 'invalidated', { bubbles: true } );
}

/**
 * Progress update event.
 *
 * @param {*} detail - Data to be passed with event
 * @return {CustomEvent} Custom "progressupdate" event (bubbling)
 */
function ProgressUpdate( detail ) {
    return new CustomEvent( 'progress-update', { detail, bubbles: true } );
}

/**
 * Go to hidden event fired when the goto target is not relevant.
 *
 * @return {CustomEvent} Custom "gotoirrelevant" event (bubbling)
 */
function GoToIrrelevant() {
    return new CustomEvent( 'goto-irrelevant', { bubbles: true } );
}

/**
 * Go to invisible event fired when the target has no form control.
 * This is event has prevalence of the "go to hidden" event.
 *
 * @return {CustomEvent} Custom "gotoinvisible" event (bubbling)
 */
function GoToInvisible() {
    return new CustomEvent( 'goto-invisible', { bubbles: true } );
}

function ChangeOption() {
    return new CustomEvent( 'change-option', { bubbles: true } );
}

/**
 * Go to printify text event.
 *
 * @return {CustomEvent} Custom "printify" event (bubbling)
 */
function Printify() {
    return new CustomEvent( 'printify', { bubbles: true } );
}

/**
 * Go to deprintify text event.
 *
 * @return {CustomEvent} Custom "deprintify" event (bubbling)
 */
function DePrintify() {
    return new CustomEvent( 'deprintify', { bubbles: true } );
}

function UpdateMaxSize() {
    return new CustomEvent( 'update-max-size', { bubbles: true } );
}

export default {
    DataUpdate,
    FakeFocus,
    ApplyFocus,
    PageFlip,
    Removed,
    InstanceFirstLoad,
    NewRepeat,
    AddRepeat,
    RemoveRepeat,
    ChangeLanguage,
    Change,
    Input,
    InputUpdate,
    Edited,
    BeforeSave,
    ValidationComplete,
    Invalidated,
    ProgressUpdate,
    GoToIrrelevant,
    GoToInvisible,
    XFormsValueChanged,
    ChangeOption,
    Printify,
    DePrintify,
    UpdateMaxSize
};