diff --git a/js/boilerplate.js b/js/boilerplate.js index 2d5170c..39c0ce3 100644 --- a/js/boilerplate.js +++ b/js/boilerplate.js @@ -50,7 +50,7 @@ window.rkt_event_info = function(e, id, evt) { window.rkt_bounds = new Map(); -window.rkt_get_evt_handler = function(event_kind, el_id, selector, win_nr) +window.rkt_get_evt_handler = function(event_kind, el_id, selector, win_nr, no_prevent_default = false) { let handler_key = "h-" + event_kind + "-" + el_id + "-" + selector + "-" + win_nr; if (window.rkt_bounds.has(handler_key)) { @@ -61,21 +61,21 @@ window.rkt_get_evt_handler = function(event_kind, el_id, selector, win_nr) let obj = {evt: event_kind, id: el_id, selector: selector, window: win_nr, js_evt: window.rkt_event_info(event_kind, el_id, e) }; window.rkt_put_evt(obj); - e.preventDefault(); + if (!no_prevent_default) { e.preventDefault(); } } }; window.rkt_bounds.set(handler_key, handler); return handler; } -} +}; window.rkt_rm_evt_handler = function(event_kind, el_id, selector, win_nr) { let handler_key = "h-" + event_kind + "-" + el_id + "-" + selector + "-" + win_nr; window.rkt_bounds.delete(handler_key); -} +}; -window.rkt_bind_evt_ids = function(win_nr, selector, event_kinds) { +window.rkt_bind_evt_ids = function(win_nr, selector, event_kinds, no_prevent_default = false) { try { let nodelist = document.querySelectorAll(selector); if (nodelist === undefined || nodelist === null) { @@ -92,7 +92,7 @@ window.rkt_bind_evt_ids = function(win_nr, selector, event_kinds) { let i; for(i = 0; i < event_kinds.length; i++) { let event_kind = event_kinds[i]; - el.addEventListener(event_kind, window.rkt_get_evt_handler(event_kind, el_id, selector, win_nr)); + el.addEventListener(event_kind, window.rkt_get_evt_handler(event_kind, el_id, selector, win_nr, no_prevent_default)); } let info = [ el_id, el_tag, el_type ]; ids.push(info); @@ -152,7 +152,7 @@ window.rkt_with_selector = function(selector, func) { let c = results.length; let r = { 'applied-to-elements': c, 'with-ids': results.filter((id) => id !== null) }; return r; -} +}; window.addEventListener('contextmenu', function (e) { e.preventDefault(); }); diff --git a/racket-webview.rkt b/racket-webview.rkt index db3ab37..be70f36 100644 --- a/racket-webview.rkt +++ b/racket-webview.rkt @@ -705,7 +705,7 @@ (rkt-webview-close (wv-win-handle wv)) 'oke)) -(define/contract (webview-bind! wv selector event) +(define/contract (webview-bind! wv selector event no-prevent-default) (-> wv-win? (or/c symbol? string?) (or/c symbol? list-of-symbol?) list?) (let* ((sel (if (symbol? selector) (format "#~a" selector) @@ -715,8 +715,9 @@ (map (λ (e) (format "'~a'" e)) event*) ", "))) ) (let ((r (webview-call-js wv - (format "return window.rkt_bind_evt_ids(~a, '~a', ~a)" - (wv-win-window-nr wv) sel evt)))) + (format "return window.rkt_bind_evt_ids(~a, '~a', ~a, ~a)" + (wv-win-window-nr wv) sel evt + (if no-prevent-default 'true 'false))))) (map (λ (el) (list (string->symbol (car el)) (cadr el) (caddr el))) r)))) diff --git a/wv-window.rkt b/wv-window.rkt index a94fc2b..0fc08b3 100644 --- a/wv-window.rkt +++ b/wv-window.rkt @@ -354,8 +354,10 @@ (define/public (call-js js) (webview-call-js wv js)) - (define/public (bind! selector events callback) - (let ((items (webview-bind! wv selector events)) + (define/public (bind! selector events callback . no-prevent-default) + (let ((items (webview-bind! wv selector events (if (null? no-prevent-default) + #f + (car no-prevent-default)))) (events* (if (symbol? events) (list events) events))) (map (λ (item) (let ((id (car item))