Fix European trip return heuristic for weekend location tracking
Adjust European short trip heuristic from >3 days to >1 day to correctly detect when user has returned home from European trips. This fixes the April 29-30, 2023 case where the location incorrectly showed "Sankt Georg, Hamburg" instead of "Bristol" when the user was free (no events scheduled) after the foss-north trip ended on April 27. The previous logic required more than 3 days to pass before assuming return home from European countries, but for short European trips by rail/ferry, users typically return within 1-2 days. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
parent
663dc479c2
commit
ea4980a5d7
6407 changed files with 1072847 additions and 18 deletions
91
node_modules/leaflet/src/dom/DomEvent.DoubleTap.js
generated
vendored
Normal file
91
node_modules/leaflet/src/dom/DomEvent.DoubleTap.js
generated
vendored
Normal file
|
|
@ -0,0 +1,91 @@
|
|||
import * as DomEvent from './DomEvent';
|
||||
|
||||
/*
|
||||
* Extends the event handling code with double tap support for mobile browsers.
|
||||
*
|
||||
* Note: currently most browsers fire native dblclick, with only a few exceptions
|
||||
* (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)
|
||||
*/
|
||||
|
||||
function makeDblclick(event) {
|
||||
// in modern browsers `type` cannot be just overridden:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only
|
||||
var newEvent = {},
|
||||
prop, i;
|
||||
for (i in event) {
|
||||
prop = event[i];
|
||||
newEvent[i] = prop && prop.bind ? prop.bind(event) : prop;
|
||||
}
|
||||
event = newEvent;
|
||||
newEvent.type = 'dblclick';
|
||||
newEvent.detail = 2;
|
||||
newEvent.isTrusted = false;
|
||||
newEvent._simulated = true; // for debug purposes
|
||||
return newEvent;
|
||||
}
|
||||
|
||||
var delay = 200;
|
||||
export function addDoubleTapListener(obj, handler) {
|
||||
// Most browsers handle double tap natively
|
||||
obj.addEventListener('dblclick', handler);
|
||||
|
||||
// On some platforms the browser doesn't fire native dblclicks for touch events.
|
||||
// It seems that in all such cases `detail` property of `click` event is always `1`.
|
||||
// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.
|
||||
var last = 0,
|
||||
detail;
|
||||
function simDblclick(e) {
|
||||
if (e.detail !== 1) {
|
||||
detail = e.detail; // keep in sync to avoid false dblclick in some cases
|
||||
return;
|
||||
}
|
||||
|
||||
if (e.pointerType === 'mouse' ||
|
||||
(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// When clicking on an <input>, the browser generates a click on its
|
||||
// <label> (and vice versa) triggering two clicks in quick succession.
|
||||
// This ignores clicks on elements which are a label with a 'for'
|
||||
// attribute (or children of such a label), but not children of
|
||||
// a <input>.
|
||||
var path = DomEvent.getPropagationPath(e);
|
||||
if (path.some(function (el) {
|
||||
return el instanceof HTMLLabelElement && el.attributes.for;
|
||||
}) &&
|
||||
!path.some(function (el) {
|
||||
return (
|
||||
el instanceof HTMLInputElement ||
|
||||
el instanceof HTMLSelectElement
|
||||
);
|
||||
})
|
||||
) {
|
||||
return;
|
||||
}
|
||||
|
||||
var now = Date.now();
|
||||
if (now - last <= delay) {
|
||||
detail++;
|
||||
if (detail === 2) {
|
||||
handler(makeDblclick(e));
|
||||
}
|
||||
} else {
|
||||
detail = 1;
|
||||
}
|
||||
last = now;
|
||||
}
|
||||
|
||||
obj.addEventListener('click', simDblclick);
|
||||
|
||||
return {
|
||||
dblclick: handler,
|
||||
simDblclick: simDblclick
|
||||
};
|
||||
}
|
||||
|
||||
export function removeDoubleTapListener(obj, handlers) {
|
||||
obj.removeEventListener('dblclick', handlers.dblclick);
|
||||
obj.removeEventListener('click', handlers.simDblclick);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue