/
submithandler.ts
64 lines (60 loc) · 1.65 KB
/
submithandler.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @license Copyright (c) 2003-2024, CKSource Holding sp. z o.o. All rights reserved.
* For licensing, see LICENSE.md or https://ckeditor.com/legal/ckeditor-oss-license
*/
/**
* @module ui/bindings/submithandler
*/
import type View from '../view.js';
/**
* A handler useful for {@link module:ui/view~View views} working as HTML forms. It intercepts a native DOM
* `submit` event, prevents the default web browser behavior (navigation and page reload) and
* fires the `submit` event on a view instead. Such a custom event can be then used by any
* {@link module:utils/dom/emittermixin~DomEmitter emitter}, e.g. to serialize the form data.
*
* ```ts
* import submitHandler from '@ckeditor/ckeditor5-ui/src/bindings/submithandler';
*
* // ...
*
* class AnyFormView extends View {
* constructor() {
* super();
*
* // ...
*
* submitHandler( {
* view: this
* } );
* }
* }
*
* // ...
*
* const view = new AnyFormView();
*
* // A sample listener attached by an emitter working with the view.
* this.listenTo( view, 'submit', () => {
* saveTheFormData();
* hideTheForm();
* } );
* ```
*
* @param options Configuration options.
* @param options.view The view which DOM `submit` events should be handled.
*/
export default function submitHandler( { view }: { view: View } ): void {
view.listenTo( view.element!, 'submit', ( evt, domEvt ) => {
domEvt.preventDefault();
view.fire<SubmitHandlerEvent>( 'submit' );
}, { useCapture: true } );
}
/**
* Fired by {@link module:ui/bindings/submithandler~submitHandler} helper.
*
* @eventName module:ui/view~View#submit
*/
export type SubmitHandlerEvent = {
name: 'submit';
args: [];
};