aboutsummaryrefslogtreecommitdiffhomepage
path: root/lib/js
diff options
context:
space:
mode:
authorGravatar Adam Chlipala <adam@chlipala.net>2012-07-21 10:02:53 -0400
committerGravatar Adam Chlipala <adam@chlipala.net>2012-07-21 10:02:53 -0400
commit3e838a5bf95222adb9add226aa3732c3c28633bc (patch)
treeb3a11523df44e927ac749c5c6aa752744cb83b5d /lib/js
parentdb71493ffd90e2668259efbb549f7a781c2530db (diff)
New event records for key and mouse handlers
Diffstat (limited to 'lib/js')
-rw-r--r--lib/js/urweb.js47
1 files changed, 40 insertions, 7 deletions
diff --git a/lib/js/urweb.js b/lib/js/urweb.js
index 509ff007..5846863a 100644
--- a/lib/js/urweb.js
+++ b/lib/js/urweb.js
@@ -441,22 +441,55 @@ function servErr(s) {
window.setTimeout(function () { runHandlers("Server", serverHandlers, s); }, 0);
}
-// Key events
+// Key and mouse events
var uw_event = null;
-function kc() {
- return window.event ? event.keyCode : (uw_event ? uw_event.which : 0);
+function uw_getEvent() {
+ return window.event ? window.event : uw_event;
}
+function firstGood(x, y) {
+ if (x == undefined || x == 0)
+ return y;
+ else
+ return x;
+}
+
+function uw_mouseEvent() {
+ var ev = uw_getEvent();
+
+ return {_ScreenX : firstGood(ev.screenX, 0),
+ _ScreenY : firstGood(ev.screenY, 0),
+ _ClientX : firstGood(ev.clientX, 0),
+ _ClientY : firstGood(ev.clientY, 0),
+ _CtrlKey : firstGood(ev.ctrlKey, false),
+ _ShiftKey : firstGood(ev.shiftKey, false),
+ _AltKey : firstGood(ev.altKey, false),
+ _MetaKey : firstGood(ev.metaKey, false),
+ _Button : ev.button == 2 ? "Right" : ev.button == 1 ? "Middle" : "Left"};
+}
+
+function uw_keyEvent() {
+ var ev = uw_getEvent();
+
+ return {_KeyCode : firstGood(ev.keyCode, ev.which),
+ _CtrlKey : firstGood(ev.ctrlKey, false),
+ _ShiftKey : firstGood(ev.shiftKey, false),
+ _AltKey : firstGood(ev.altKey, false),
+ _MetaKey : firstGood(ev.metaKey, false)};
+}
+
+
+
// Document events
function uw_handler(name, f) {
var old = document[name];
if (old == undefined)
- document[name] = function(event) { uw_event = event; execF(f); };
+ document[name] = function(event) { uw_event = event; execF(execF(f, uw_mouseEvent())); };
else
- document[name] = function(event) { uw_event = event; old(); execF(f); };
+ document[name] = function(event) { uw_event = event; old(); execF(execF(f, uw_mouseEvent())); };
}
function uw_onClick(f) {
@@ -478,9 +511,9 @@ function uw_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())); };
+ document[name] = function(event) { uw_event = event; execF(execF(f, uw_keyEvent())); };
else
- document[name] = function(event) { uw_event = event; old(); execF(execF(f, kc())); };
+ document[name] = function(event) { uw_event = event; old(); execF(execF(f, uw_keyEvent())); };
}
function uw_onKeydown(f) {