UNPKG

naja

Version:

Modern AJAX library for Nette Framework

54 lines (43 loc) 1.56 kB
import {Naja} from '../Naja'; import {InteractionEvent} from './UIHandler'; import {onDomReady} from '../utils'; export class FormsHandler { public netteForms: any; public constructor(private readonly naja: Naja) { naja.addEventListener('init', this.initialize.bind(this)); naja.uiHandler.addEventListener('interaction', this.processForm.bind(this)); } private initialize(): void { onDomReady(() => this.initForms(window.document.body)); this.naja.snippetHandler.addEventListener('afterUpdate', (event) => { const {snippet} = event.detail; this.initForms(snippet); }); } private initForms(element: Element): void { const netteForms = this.netteForms || (window as any).Nette; if ( ! netteForms) { return; } if (element instanceof HTMLFormElement) { netteForms.initForm(element); return; } const forms = element.querySelectorAll('form'); forms.forEach((form) => netteForms.initForm(form)); } private processForm(event: InteractionEvent): void { const {element, originalEvent} = event.detail; const isForm = element instanceof HTMLFormElement; const isSubmitter = (element instanceof HTMLInputElement || element instanceof HTMLButtonElement) && element.form; if (isSubmitter) { element.form['nette-submittedBy'] = element; } const netteForms = this.netteForms || (window as any).Nette; if ((isForm || isSubmitter) && netteForms && ! netteForms.validateForm(element)) { originalEvent?.stopImmediatePropagation(); originalEvent?.preventDefault(); event.preventDefault(); } } }