mourningdove/htdocs/js/shortcuts.js

64 lines
2.7 KiB
JavaScript
Raw Normal View History

2026-05-24 01:03:05 +00:00
/*
* This checks the dw_shortcuts object and connects the provided keybindings/
* touch gestures (if any) with the supplied function.
*/
var dw_gesture_registered = false;
var dw_gesture = {};
// this should be called by any keyboard/touch shortcut
function dw_register_shortcut(scName, scFunction) {
// check to see if the text shortcut is enabled
if ( typeof dw_shortcuts.keyboard != 'undefined' && typeof dw_shortcuts.keyboard[scName] != 'undefined' ) {
Mousetrap.bind(dw_shortcuts.keyboard[scName], scFunction);
}
if ( typeof dw_shortcuts.touch != 'undefined' && typeof dw_shortcuts.touch[scName] != 'undefined' ) {
var gestureSplit = dw_shortcuts.touch[scName].split(",");
if ( gestureSplit[0] != 'disabled' ) {
if ( ! dw_gesture_registered ) {
// only register the swipe event once
$(document).swipe( {
swipe: function(event, direction, distance, duration, fingerCount, fingerData) {
// since we only register the swipe once, we have to
// save the action in a map and see if it matches
// at event-time
directionConfig = dw_gesture[direction];
if (directionConfig != null) {
fingerAction = directionConfig[fingerCount];
if (fingerAction != null) {
fingerAction(event);
}
}
},
threshold:5,
fingers:'all',
fallbackToMouseEvents: false,
preventDefaultEvents: false,
preventDefaultMethod: function(event, direction, fingerCount) {
directionConfig = dw_gesture[direction];
if (directionConfig != null) {
fingerConfig = directionConfig[fingerCount];
if (fingerConfig != null) {
return true;
}
}
return false;
}
});
dw_gesture_registered = true;
}
var gesture = gestureSplit[0];
var fingerCount = gestureSplit[1];
var direction = gestureSplit[2];
var directionConfig = dw_gesture[direction];
if (directionConfig == null) {
directionConfig = {};
dw_gesture[direction] = directionConfig;
}
directionConfig[fingerCount] = scFunction;
}
}
}