Prettified all files.
This commit is contained in:
+152
-79
@@ -13,16 +13,15 @@ import Logging from './logging.js'
|
||||
*/
|
||||
|
||||
export class IInteractionTarget extends Interface {
|
||||
|
||||
capture(event) {
|
||||
return typeof true
|
||||
}
|
||||
|
||||
onStart(event, interaction) { }
|
||||
onMove(event, interaction) { }
|
||||
onEnd(event, interaction) { }
|
||||
onStart(event, interaction) {}
|
||||
onMove(event, interaction) {}
|
||||
onEnd(event, interaction) {}
|
||||
|
||||
onMouseWheel(event) { }
|
||||
onMouseWheel(event) {}
|
||||
}
|
||||
|
||||
export class IInteractionMapperTarget extends Interface {
|
||||
@@ -230,14 +229,32 @@ export class InteractionPoints {
|
||||
let currentAngle = Points.angle(c1, c2)
|
||||
let previousAngle = Points.angle(p1, p2)
|
||||
let alpha = this.diffAngle(currentAngle, previousAngle)
|
||||
return new InteractionDelta(delta.x, delta.y, zoom, alpha, cm, csize)
|
||||
} else if (csize == 1 && psize == 1 && this.current.firstKey() == this.previous.firstKey()) {
|
||||
return new InteractionDelta(
|
||||
delta.x,
|
||||
delta.y,
|
||||
zoom,
|
||||
alpha,
|
||||
cm,
|
||||
csize
|
||||
)
|
||||
} else if (
|
||||
csize == 1 &&
|
||||
psize == 1 &&
|
||||
this.current.firstKey() == this.previous.firstKey()
|
||||
) {
|
||||
// We need to ensure that the keys are the same, since single points with different keys
|
||||
// can jump
|
||||
let current = this.current.first()
|
||||
let previous = this.previous.first()
|
||||
let delta = Points.subtract(current, previous)
|
||||
return new InteractionDelta(delta.x, delta.y, 1.0, 0.0, current, csize)
|
||||
return new InteractionDelta(
|
||||
delta.x,
|
||||
delta.y,
|
||||
1.0,
|
||||
0.0,
|
||||
current,
|
||||
csize
|
||||
)
|
||||
}
|
||||
return null
|
||||
}
|
||||
@@ -375,8 +392,7 @@ export class Interaction extends InteractionPoints {
|
||||
if (this.tapCounts.has(key)) {
|
||||
let count = this.tapCounts.get(key)
|
||||
this.tapCounts.set(key, count + 1)
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this.tapCounts.set(key, 1)
|
||||
}
|
||||
this.tapPositions.set(key, point)
|
||||
@@ -418,7 +434,10 @@ export class Interaction extends InteractionPoints {
|
||||
this.unregisterTap(key)
|
||||
}
|
||||
}
|
||||
if (this.tapTimestamps.has(key) && performance.now() > this.tapTimestamps.get(key) + this.tapDuration) {
|
||||
if (
|
||||
this.tapTimestamps.has(key) &&
|
||||
performance.now() > this.tapTimestamps.get(key) + this.tapDuration
|
||||
) {
|
||||
//console.log("tap too long")
|
||||
this.unregisterTap(key)
|
||||
}
|
||||
@@ -426,8 +445,7 @@ export class Interaction extends InteractionPoints {
|
||||
if (this.isTap(key)) {
|
||||
this.registerTap(key, ended)
|
||||
result = this.tapCounts.get(key) == 2
|
||||
}
|
||||
else {
|
||||
} else {
|
||||
this.unregisterTap(key)
|
||||
}
|
||||
//console.log("isDoubleTap", this.tapCounts.get(key), result)
|
||||
@@ -494,7 +512,13 @@ export class InteractionDelegate {
|
||||
constructor(
|
||||
element,
|
||||
target,
|
||||
{ mouseWheelElement = null, useCapture = true, capturePointerEvents = true, cancelOnWindowOut = true, debug = false } = {}
|
||||
{
|
||||
mouseWheelElement = null,
|
||||
useCapture = true,
|
||||
capturePointerEvents = true,
|
||||
cancelOnWindowOut = true,
|
||||
debug = false
|
||||
} = {}
|
||||
) {
|
||||
this.debug = debug
|
||||
this.interaction = new Interaction()
|
||||
@@ -549,7 +573,8 @@ export class InteractionDelegate {
|
||||
element.addEventListener(
|
||||
'pointermove',
|
||||
e => {
|
||||
if (this.debug) console.log('pointermove', e.pointerId, e.pointerType)
|
||||
if (this.debug)
|
||||
console.log('pointermove', e.pointerId, e.pointerType)
|
||||
|
||||
if (
|
||||
e.pointerType == 'touch' ||
|
||||
@@ -566,7 +591,8 @@ export class InteractionDelegate {
|
||||
element.addEventListener(
|
||||
'pointerup',
|
||||
e => {
|
||||
if (this.debug) console.log('pointerup', e.pointerId, e.pointerType)
|
||||
if (this.debug)
|
||||
console.log('pointerup', e.pointerId, e.pointerType)
|
||||
this.onEnd(e)
|
||||
if (this.capturePointerEvents) {
|
||||
try {
|
||||
@@ -581,7 +607,8 @@ export class InteractionDelegate {
|
||||
element.addEventListener(
|
||||
'pointercancel',
|
||||
e => {
|
||||
if (this.debug) console.log('pointercancel', e.pointerId, e.pointerType)
|
||||
if (this.debug)
|
||||
console.log('pointercancel', e.pointerId, e.pointerType)
|
||||
this.onEnd(e)
|
||||
if (this.capturePointerEvents)
|
||||
element.releasePointerCapture(e.pointerId)
|
||||
@@ -593,7 +620,12 @@ export class InteractionDelegate {
|
||||
element.addEventListener(
|
||||
'pointerleave',
|
||||
e => {
|
||||
if (this.debug) console.log('pointerleave', e.pointerId, e.pointerType)
|
||||
if (this.debug)
|
||||
console.log(
|
||||
'pointerleave',
|
||||
e.pointerId,
|
||||
e.pointerType
|
||||
)
|
||||
if (e.target == element) this.onEnd(e)
|
||||
},
|
||||
useCapture
|
||||
@@ -604,7 +636,12 @@ export class InteractionDelegate {
|
||||
element.addEventListener(
|
||||
'pointerout',
|
||||
e => {
|
||||
if (this.debug) console.log('pointerout', e.pointerId, e.pointerType)
|
||||
if (this.debug)
|
||||
console.log(
|
||||
'pointerout',
|
||||
e.pointerId,
|
||||
e.pointerType
|
||||
)
|
||||
if (e.target == element) this.onEnd(e)
|
||||
},
|
||||
useCapture
|
||||
@@ -615,14 +652,20 @@ export class InteractionDelegate {
|
||||
window.addEventListener(
|
||||
'pointerout',
|
||||
e => {
|
||||
if (this.debug) console.log('pointerout', e.pointerId, e.pointerType, e.target)
|
||||
if (this.debug)
|
||||
console.log(
|
||||
'pointerout',
|
||||
e.pointerId,
|
||||
e.pointerType,
|
||||
e.target
|
||||
)
|
||||
if (e.target == element) {
|
||||
this.onEnd(e)
|
||||
}
|
||||
},
|
||||
useCapture)
|
||||
useCapture
|
||||
)
|
||||
}
|
||||
|
||||
} else if (window.TouchEvent) {
|
||||
if (this.debug) console.log('Touch API')
|
||||
element.addEventListener(
|
||||
@@ -698,8 +741,7 @@ export class InteractionDelegate {
|
||||
// && Events.isMouseDown(e))
|
||||
|
||||
if (Events.isMouseDown(e)) {
|
||||
if (this.debug)
|
||||
console.log('mousemove', e)
|
||||
if (this.debug) console.log('mousemove', e)
|
||||
this.onMove(e)
|
||||
}
|
||||
},
|
||||
@@ -720,7 +762,9 @@ export class InteractionDelegate {
|
||||
e => {
|
||||
if (e.target == element) {
|
||||
this.onEnd(e)
|
||||
console.warn('Shouldn\'t happen: mouseout ends interaction')
|
||||
console.warn(
|
||||
"Shouldn't happen: mouseout ends interaction"
|
||||
)
|
||||
}
|
||||
},
|
||||
useCapture
|
||||
@@ -734,7 +778,8 @@ export class InteractionDelegate {
|
||||
this.onEnd(e)
|
||||
}
|
||||
},
|
||||
useCapture)
|
||||
useCapture
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -823,42 +868,42 @@ export class InteractionDelegate {
|
||||
// 'targetTouches'
|
||||
let result = {}
|
||||
switch (event.constructor.name) {
|
||||
case 'MouseEvent': {
|
||||
let buttons = event.buttons || event.which
|
||||
if (buttons) result['mouse'] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
case 'PointerEvent': {
|
||||
result[event.pointerId.toString()] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
case 'Touch': {
|
||||
let id =
|
||||
case 'MouseEvent': {
|
||||
let buttons = event.buttons || event.which
|
||||
if (buttons) result['mouse'] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
case 'PointerEvent': {
|
||||
result[event.pointerId.toString()] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
case 'Touch': {
|
||||
let id =
|
||||
event.touchType === 'stylus'
|
||||
? 'stylus'
|
||||
: event.identifier.toString()
|
||||
result[id] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
// case 'TouchEvent':
|
||||
// // Needs to be observed: Perhaps changedTouches are all we need. If so
|
||||
// // we can remove the touchEventKey default parameter
|
||||
// if (touchEventKey == 'all') {
|
||||
// for(let t of event.targetTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// for(let t of event.changedTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// for(let t of event.changedTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// }
|
||||
// break
|
||||
default:
|
||||
break
|
||||
result[id] = this.getPosition(event)
|
||||
break
|
||||
}
|
||||
// case 'TouchEvent':
|
||||
// // Needs to be observed: Perhaps changedTouches are all we need. If so
|
||||
// // we can remove the touchEventKey default parameter
|
||||
// if (touchEventKey == 'all') {
|
||||
// for(let t of event.targetTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// for(let t of event.changedTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// }
|
||||
// else {
|
||||
// for(let t of event.changedTouches) {
|
||||
// result[t.identifier.toString()] = this.getPosition(t)
|
||||
// }
|
||||
// }
|
||||
// break
|
||||
default:
|
||||
break
|
||||
}
|
||||
return result
|
||||
}
|
||||
@@ -871,7 +916,7 @@ export class InteractionDelegate {
|
||||
// Callback: can be overwritten
|
||||
}
|
||||
|
||||
interactionFinished(event, key, point) { }
|
||||
interactionFinished(event, key, point) {}
|
||||
|
||||
startInteraction(event, extracted) {
|
||||
for (let key in extracted) {
|
||||
@@ -886,7 +931,10 @@ export class InteractionDelegate {
|
||||
let point = extracted[key]
|
||||
let updated = this.interaction.update(key, point)
|
||||
if (updated) {
|
||||
console.warn('new pointer in updateInteraction shouldn\'t happen', key)
|
||||
console.warn(
|
||||
"new pointer in updateInteraction shouldn't happen",
|
||||
key
|
||||
)
|
||||
this.interactionStarted(event, key, point)
|
||||
}
|
||||
}
|
||||
@@ -924,13 +972,23 @@ export class InteractionDelegate {
|
||||
* @extends {InteractionDelegate}
|
||||
*/
|
||||
export class InteractionMapper extends InteractionDelegate {
|
||||
|
||||
constructor(
|
||||
element,
|
||||
target,
|
||||
{ tapDistance = 10, longPressTime = 500.0, useCapture = true, mouseWheelElement = null, logInteractionsAbove = 12 } = {}
|
||||
{
|
||||
tapDistance = 10,
|
||||
longPressTime = 500.0,
|
||||
useCapture = true,
|
||||
mouseWheelElement = null,
|
||||
logInteractionsAbove = 12
|
||||
} = {}
|
||||
) {
|
||||
super(element, target, { tapDistance, useCapture, longPressTime, mouseWheelElement })
|
||||
super(element, target, {
|
||||
tapDistance,
|
||||
useCapture,
|
||||
longPressTime,
|
||||
mouseWheelElement
|
||||
})
|
||||
this.logInteractionsAbove = logInteractionsAbove
|
||||
}
|
||||
|
||||
@@ -1039,10 +1097,7 @@ export class InteractionMapper extends InteractionDelegate {
|
||||
* @param {object} [opts] - An options object. See the hammer documentation for more details.
|
||||
*/
|
||||
static on(types, elements, cb, opts = {}) {
|
||||
|
||||
opts = Object.assign({}, {
|
||||
|
||||
}, opts)
|
||||
opts = Object.assign({}, {}, opts)
|
||||
|
||||
if (typeof Hammer === 'undefined') {
|
||||
console.error('Hammer.js not found!')
|
||||
@@ -1051,23 +1106,25 @@ export class InteractionMapper extends InteractionDelegate {
|
||||
|
||||
// convert to array
|
||||
types = Array.isArray(types) ? types : types.split(/\s/)
|
||||
if (elements instanceof NodeList || elements instanceof HTMLCollection) {
|
||||
if (
|
||||
elements instanceof NodeList ||
|
||||
elements instanceof HTMLCollection
|
||||
) {
|
||||
elements = Array.from(elements)
|
||||
}
|
||||
elements = Array.isArray(elements) ? elements : [elements]
|
||||
|
||||
for (let i = 0; i < types.length; i++) {
|
||||
|
||||
const type = types[i].toLowerCase()
|
||||
|
||||
// list of hammer events
|
||||
const useHammer = /^(tap|doubletap|press|pan|swipe|pinch|rotate).*$/.test(type)
|
||||
const useHammer = /^(tap|doubletap|press|pan|swipe|pinch|rotate).*$/.test(
|
||||
type
|
||||
)
|
||||
|
||||
// if it is a hammer event
|
||||
if (useHammer) {
|
||||
|
||||
for (let j = 0; j < elements.length; j++) {
|
||||
|
||||
// if(elements[j].tagName == "svg") return false;
|
||||
|
||||
let hammer = new Hammer(elements[j], opts)
|
||||
@@ -1078,15 +1135,33 @@ export class InteractionMapper extends InteractionDelegate {
|
||||
|
||||
// recognizers
|
||||
if (type.startsWith('pan')) {
|
||||
hammer.get('pan').set(Object.assign({ direction: Hammer.DIRECTION_ALL }, opts))
|
||||
hammer
|
||||
.get('pan')
|
||||
.set(
|
||||
Object.assign(
|
||||
{ direction: Hammer.DIRECTION_ALL },
|
||||
opts
|
||||
)
|
||||
)
|
||||
} else if (type.startsWith('pinch')) {
|
||||
hammer.get('pinch').set(Object.assign({ enable: true }, opts))
|
||||
hammer
|
||||
.get('pinch')
|
||||
.set(Object.assign({ enable: true }, opts))
|
||||
} else if (type.startsWith('press')) {
|
||||
hammer.get('press').set(opts)
|
||||
} else if (type.startsWith('rotate')) {
|
||||
hammer.get('rotate').set(Object.assign({ enable: true }, opts))
|
||||
hammer
|
||||
.get('rotate')
|
||||
.set(Object.assign({ enable: true }, opts))
|
||||
} else if (type.startsWith('swipe')) {
|
||||
hammer.get('swipe').set(Object.assign({ direction: Hammer.DIRECTION_ALL }, opts))
|
||||
hammer
|
||||
.get('swipe')
|
||||
.set(
|
||||
Object.assign(
|
||||
{ direction: Hammer.DIRECTION_ALL },
|
||||
opts
|
||||
)
|
||||
)
|
||||
} else if (type.startsWith('tap')) {
|
||||
hammer.get('tap').set(opts)
|
||||
}
|
||||
@@ -1095,9 +1170,7 @@ export class InteractionMapper extends InteractionDelegate {
|
||||
cb(event)
|
||||
})
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
for (let j = 0; j < elements.length; j++) {
|
||||
Hammer.on(elements[j], type, event => {
|
||||
cb(event)
|
||||
|
||||
Reference in New Issue
Block a user