Skip to content

Commit

Permalink
Merge branch 'master' of github.com:JetBrains/lets-plot
Browse files Browse the repository at this point in the history
  • Loading branch information
ASmirnov-HORIS committed Sep 29, 2021
2 parents 6f5efba + ce92156 commit 6af62fb
Show file tree
Hide file tree
Showing 37 changed files with 1,329 additions and 3,419 deletions.
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*
* Copyright (c) 2019. JetBrains s.r.o.
* Copyright (c) 2021. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/

Expand All @@ -13,4 +13,3 @@ fun <EventT> handler(onEvent: (EventT) -> Unit): EventHandler<EventT> {
}
}
}

Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
/*
* Copyright (c) 2021. JetBrains s.r.o.
* Use of this source code is governed by the MIT license that can be found in the LICENSE file.
*/

package jetbrains.datalore.base.event.dom

import jetbrains.datalore.base.event.MouseEvent
import jetbrains.datalore.base.event.MouseEventSpec
import jetbrains.datalore.base.geometry.Vector
import jetbrains.datalore.base.js.dom.DomEventListener
import jetbrains.datalore.base.js.dom.DomEventType
import jetbrains.datalore.base.registration.CompositeRegistration
import jetbrains.datalore.base.registration.Disposable
import jetbrains.datalore.base.registration.Registration
import org.w3c.dom.Element
import org.w3c.dom.Node

typealias DomMouseEvent = org.w3c.dom.events.MouseEvent

class DomEventMapper(
private val myEventTarget: Element,
private val destMouseEventPeer: (MouseEventSpec, MouseEvent) -> Unit
) : Disposable {
private val regs = CompositeRegistration()
private var myButtonPressed = false
private var myDragging = false
private var myButtonPressCoord: Vector? = null
private val myDragThreshold = 3.0

init {
handle(DomEventType.MOUSE_ENTER) {
dispatch(MouseEventSpec.MOUSE_ENTERED, it)
}

handle(DomEventType.MOUSE_LEAVE) {
dispatch(MouseEventSpec.MOUSE_LEFT, it)
}

handle(DomEventType.CLICK) {
if (!myDragging) {
dispatch(MouseEventSpec.MOUSE_CLICKED, it)
}
myDragging = false
}

handle(DomEventType.DOUBLE_CLICK) {
dispatch(MouseEventSpec.MOUSE_DOUBLE_CLICKED, it)
}

handle(DomEventType.MOUSE_DOWN) {
myButtonPressed = true
myButtonPressCoord = Vector(it.x.toInt(), it.y.toInt())
dispatch(MouseEventSpec.MOUSE_PRESSED, it)
}

handle(DomEventType.MOUSE_UP) {
myButtonPressed = false
myButtonPressCoord = null
myDragging = false
dispatch(MouseEventSpec.MOUSE_RELEASED, it)
}

handle(DomEventType.MOUSE_MOVE) {
if (myDragging) {
dispatch(MouseEventSpec.MOUSE_DRAGGED, it)
}
else if (myButtonPressed && !myDragging) {
val distance = myButtonPressCoord?.sub(Vector(it.x.toInt(), it.y.toInt()))?.length() ?: 0.0
if (distance > myDragThreshold) {
myDragging = true
dispatch(MouseEventSpec.MOUSE_DRAGGED, it)
} else {
// Do not generate move event (just in case - can be changed if needed)
}
} else if (!myButtonPressed && !myDragging) {
dispatch(MouseEventSpec.MOUSE_MOVED, it)
}
}
}

private fun dispatch(eventSpec: MouseEventSpec, mouseEvent: DomMouseEvent) {
val translatedEvent = DomEventUtil.translateInTargetCoord(mouseEvent, myEventTarget)
destMouseEventPeer.invoke(eventSpec, translatedEvent)
}

private fun handle(eventSpec: DomEventType<DomMouseEvent>, handler: (DomMouseEvent) -> Unit) {
val listener = DomEventListener<DomMouseEvent> {
handler(it)
return@DomEventListener false
}

targetNode(eventSpec).addEventListener(eventSpec.name, listener)

regs.add(object : Registration() {
override fun doRemove() {
targetNode(eventSpec).removeEventListener(eventSpec.name, listener)
}
})
}

private fun targetNode(eventSpec: DomEventType<DomMouseEvent>): Node = when (eventSpec) {
DomEventType.MOUSE_MOVE, DomEventType.MOUSE_UP -> myEventTarget
else -> myEventTarget
}

override fun dispose() {
regs.dispose()
}
}
1,461 changes: 0 additions & 1,461 deletions docs/examples/data/Ames_house_prices_train.csv

This file was deleted.

16 changes: 0 additions & 16 deletions docs/examples/data/airports.csv

This file was deleted.

201 changes: 0 additions & 201 deletions docs/examples/data/country_capital.csv

This file was deleted.

13 changes: 1 addition & 12 deletions docs/examples/data/datasets.txt
Original file line number Diff line number Diff line change
@@ -1,18 +1,7 @@
Dataset: usgs_dept_by_state_2019.csv
Source: https://www.kaggle.com/morra1996/usgs-debt-by-state?select=usgs_state_2019.csv

Dataset: pop_by_state.csv
Source: https://www.kaggle.com/lucasvictor/us-state-populations-2018

Dataset: titanic.csv
Source: https://www.kaggle.com/jamesleslie/titanic-cleaned-data?select=train_clean.csv
Info: embarked: C='Cherbourg' Q='Cobh' S='Southampton'

Dataset: US_household_income_2017.csv
Source: https://www.kaggle.com/goldenoakresearch/us-household-income-stats-geo-locations?select=kaggle_income.csv
License: Only proper citing is required:
Golden Oak Research Group, LLC. “U.S. Income Database Kaggle”. Publication: 5, August 2017. Accessed, 17, July 2020.

Dataset: Ames_house_prices_train.csv
Source: https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data?select=train.csv
(c) Kaggle (https://www.kaggle.com/terms)
Golden Oak Research Group, LLC. “U.S. Income Database Kaggle”. Publication: 5, August 2017. Accessed, 17, July 2020.
Loading

0 comments on commit 6af62fb

Please sign in to comment.