enketo-core
Version:
Extensible Enketo form engine
289 lines (257 loc) • 6.94 kB
JavaScript
/**
* @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 });
}
/**
* @typedef {'magic' | 'user' | 'count' | 'model'} AddRepeatTrigger
*/
/**
* @typedef AddRepeatDetail
* @property {string} repeatPath
* @property {number} repeatIndex
* @property {AddRepeatTrigger} trigger
*/
/**
* The addrepeat event is similar but fired under different circumstances.
*
* @param {AddRepeatDetail} [detail] - Data to be passed with event.
* @return {CustomEvent<AddRepeatDetail> & { type: 'addrepeat' }} Custom "odk-new-repeat" event (bubbling)
*/
function AddRepeat(detail = {}) {
return new CustomEvent('addrepeat', { detail, bubbles: true });
}
/**
* @typedef InitRemoveRepeatDetail
* @property {object} [initRepeatInfo]
* @property {string} [initRepeatInfo.repeatPath]
* @property {number} [initRepeatInfo.repeatIndex]
*/
/**
* @typedef PostInitRemoveRepeatDetail
* @property {object} [initRepeatInfo]
* @property {string} [initRepeatInfo.repeatPath]
* @property {number} [initRepeatInfo.repeatIndex]
*/
/**
* @typedef {InitRemoveRepeatDetail | PostInitRemoveRepeatDetail} RemoveRepeatDetail
*/
/**
* Remove repeat event.
*
* @param {RemoveRepeatDetail} [detail]
* @return {CustomEvent<RemoveRepeatDetail> & { type: 'removerepeat' }} Custom "removerepeat" event (bubbling)
*/
function RemoveRepeat(detail) {
return new CustomEvent('removerepeat', { detail, 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,
};