From 3c860c3c95d4d085499fd01e3140f32aafbc1bd7 Mon Sep 17 00:00:00 2001 From: Adam Chlipala Date: Sat, 3 Sep 2011 11:48:12 -0400 Subject: New client-side, document-level event handlers --- lib/js/urweb.js | 63 ++++++++++++++++++++++++++++++++++++++++++++++++-------- lib/ur/basis.urs | 9 ++++++++ 2 files changed, 63 insertions(+), 9 deletions(-) (limited to 'lib') diff --git a/lib/js/urweb.js b/lib/js/urweb.js index 4d9a1419..1277175d 100644 --- a/lib/js/urweb.js +++ b/lib/js/urweb.js @@ -202,6 +202,60 @@ function servErr(s) { window.setTimeout(function () { runHandlers("Server", serverHandlers, s); }, 0); } +// Key events + +var uw_event = null; + +function kc() { + return window.event ? event.keyCode : (uw_event ? uw_event.which : 0); +} + +// Document events + +function uw_handler(name, f) { + var old = document[name]; + if (old == undefined) + document[name] = function() { execF(f); return false; }; + else + document[name] = function() { old(); execF(f); return false; }; +} + +function uw_onClick(f) { + uw_handler("onclick", f); +} + +function uw_onDblclick(f) { + uw_handler("ondblclick", f); +} + +function uw_onMousedown(f) { + uw_handler("onmousedown", f); +} + +function uw_onMouseup(f) { + uw_handler("onmouseup", f); +} + +function uw_keyHandler(name, f) { + var old = document[name]; + if (old == undefined) + document[name] = function(event) { uw_event = event; execF(execF(f, kc())); return false; }; + else + document[name] = function(event) { uw_event = event; old(); execF(execF(f, kc())); return false; }; +} + +function uw_onKeydown(f) { + uw_keyHandler("onkeydown", f); +} + +function uw_onKeypress(f) { + uw_keyHandler("onkeypress", f); +} + +function uw_onKeyup(f) { + uw_keyHandler("onkeyup", f); +} + // Embedding closures in XML strings @@ -1025,15 +1079,6 @@ function sp(e) { } -// Key events - -var uw_event = null; - -function kc() { - return window.event ? event.keyCode : (uw_event ? uw_event.keyCode : 0); -} - - // The Ur interpreter var urfuncs = []; diff --git a/lib/ur/basis.urs b/lib/ur/basis.urs index 494eaa4b..5ca27885 100644 --- a/lib/ur/basis.urs +++ b/lib/ur/basis.urs @@ -858,6 +858,15 @@ val onConnectFail : transaction unit -> transaction unit val onDisconnect : transaction unit -> transaction unit val onServerError : (string -> transaction unit) -> transaction unit +(* More standard document-level JavaScript handlers *) +val onClick : transaction unit -> transaction unit +val onDblclick : transaction unit -> transaction unit +val onKeydown : (int -> transaction unit) -> transaction unit +val onKeypress : (int -> transaction unit) -> transaction unit +val onKeyup : (int -> transaction unit) -> transaction unit +val onMousedown : transaction unit -> transaction unit +val onMouseup : transaction unit -> transaction unit + val show_xml : ctx ::: {Unit} -> use ::: {Type} -> bind ::: {Type} -> show (xml ctx use bind) -- cgit v1.2.3