[beast: 49/70] EBEAST: add closeonescape to ModalDialog
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast: 49/70] EBEAST: add closeonescape to ModalDialog
- Date: Tue, 28 Mar 2017 23:25:49 +0000 (UTC)
commit f76dfdb22d4ee8dcfcd8e6f01b151b8819501e06
Author: Tim Janik <timj gnu org>
Date: Tue Mar 7 00:46:15 2017 +0100
EBEAST: add closeonescape to ModalDialog
Signed-off-by: Tim Janik <timj gnu org>
ebeast/assets/dialogs.js | 23 +++++++++++++++++++++++
1 files changed, 23 insertions(+), 0 deletions(-)
---
diff --git a/ebeast/assets/dialogs.js b/ebeast/assets/dialogs.js
index 4cbf8e9..36c7480 100644
--- a/ebeast/assets/dialogs.js
+++ b/ebeast/assets/dialogs.js
@@ -1,4 +1,5 @@
'use strict';
+const Widgets = require ('./widgets.js');
const m = Mithril;
// == ModalDialog ==
@@ -8,13 +9,35 @@ const m = Mithril;
* - title: dialog title vnode
* - buttons: list of vnodes
* - onclose: callback for dialog closing
+ * - closeonescape: boolean
*/
const ModalDialog = {
+ oncreate: function (vnode) {
+ function document_keydown (event) {
+ if (vnode.attrs.closeonescape === false ||
+ !vnode.attrs.onclose ||
+ !event || event.defaultPrevented ||
+ event.keyCode != Widgets.KeyCode.ESCAPE)
+ return;
+ event.preventDefault();
+ vnode.attrs.onclose.call (vnode.dom, event);
+ m.redraw();
+ }
+ vnode.state.document_keydown = document_keydown;
+ $(document.body).on ('keydown', vnode.state.document_keydown);
+ },
+ onremove: function (vnode) {
+ if (vnode.state.document_keydown) {
+ $(document.body).off ('keydown', vnode.state.document_keydown);
+ vnode.state.document_keydown = undefined;
+ }
+ },
view: function (vnode) {
const child_attrs = {
title: undefined,
buttons: undefined,
onclose: undefined,
+ closeonescape: undefined,
__proto__: vnode.attrs
};
let divs = [
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]