Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

add GwtCanvas and dom-classes #1

Merged
5 commits merged into from
May 20, 2019
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Prev Previous commit
Next Next commit
use typealiases for DomElements
  • Loading branch information
sanek325 committed May 20, 2019
commit 78a2925ff331a5523b590a354ad88d3352233048
772 changes: 371 additions & 401 deletions base/src/jsMain/kotlin/base/domCore/css/StyleMap.kt

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions base/src/jsMain/kotlin/base/domCore/dom/DomApi.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,13 @@ package jetbrains.datalore.base.domCore.dom
object DomApi {

val body: DomHTMLElement?
get() = DomHTMLElement.create(document.body)
get() = document.body

val document: DomDocument
get() = DomWindow.getDocument()

val active: DomElement?
get() = DomElement.create(document.activeElement)
get() = document.activeElement

fun createDiv(): DomElement {
return createElement("div")
Expand Down Expand Up @@ -70,7 +70,7 @@ object DomApi {
}

fun createElement(tag: String): DomElement {
return DomElement.create(DomWindow.getDocument().createElement(tag))!!
return DomWindow.getDocument().createElement(tag)
}

fun createInputText(): InputDomElement {
Expand Down
206 changes: 46 additions & 160 deletions base/src/jsMain/kotlin/base/domCore/dom/DomElement.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,180 +2,66 @@ package jetbrains.datalore.base.domCore.dom

import org.w3c.dom.Element

open class DomElement protected constructor(element: Element) : DomNode(element) {
typealias DomElement = Element

private var myValidationError: String? = null

val element: Element
get() = node as Element

val classList: DomTokenList
get() = element.classList

fun hasClassName(className: String): Boolean {
return classList.contains(className)
}

fun removeClassName(className: String) {
classList.remove(className)
}

fun addClassName(className: String) {
classList.add(className)
}

fun addClassNames(vararg classNames: String) {
classList.add(*classNames)
}

fun replaceClassName(oldClassName: String, newClassName: String) {
classList.remove(oldClassName)
classList.add(newClassName)
}

val tagName: String
get() = element.tagName

var innerHTML: String
get() = element.innerHTML
set(value) {
element.innerHTML = value
}

var outerHTML: String
get() = element.outerHTML
set(value) {
element.outerHTML = value
}

var scrollLeft: Double
get() = element.scrollLeft
set(value) {
element.scrollLeft = value
}

var scrollTop: Double
get() = element.scrollTop
set(value) {
element.scrollTop = value
}

val scrollWidth: Int
get() = element.scrollWidth

val scrollHeight: Int
get() = element.scrollHeight

val clientWidth: Int
get() = element.clientWidth

val clientHeight: Int
get() = element.clientHeight

val childElements: DomElementList
get() = element.children

val childElementsList: List<DomElement>
get() = DomList(this)

val firstChildElement: DomElement?
get() = create(element.firstElementChild)

fun scrollIntoView() {
element.scrollIntoView()
}

fun getAttribute(key: String): String? {
return element.getAttribute(key)
}

fun hasAttribute(key: String): Boolean {
return element.hasAttribute(key)
}

fun setAttribute(key: String, value: String) {
return element.setAttribute(key, value)
}

fun removeAttribute(key: String) {
return element.removeAttribute(key)
}

fun setAttributeNS(namespace: String?, name: String, value: String) {
return element.setAttributeNS(namespace, name, value)
}
fun DomElement.hasClassName(className: String): Boolean {
return classList.contains(className)
}

var id: String
get() = element.id
set(value) {
element.id = value
}

fun setDisabled(state: Boolean) {
if (state) {
setAttribute("disabled", "disabled")
} else {
removeAttribute("disabled")
}
}
fun DomElement.removeClassName(className: String) {
classList.remove(className)
}

fun setTabIndex(index: Int) {
setAttribute("tabindex", index.toString())
}
fun DomElement.addClassName(className: String) {
classList.add(className)
}

fun clearTabIndex() {
removeAttribute("tabindex")
}
fun DomElement.addClassNames(vararg classNames: String) {
classList.add(*classNames)
}

fun getBoundingClientRect(): DomRect {
return element.getBoundingClientRect()
}
fun DomElement.replaceClassName(oldClassName: String, newClassName: String) {
classList.remove(oldClassName)
classList.add(newClassName)
}

fun getAbsoluteLeft(): Double {
return getBoundingClientRect().left
}
val DomElement.childElements: DomElementList
get() = this.children

fun getAbsoluteRight(): Double {
return getBoundingClientRect().right
}
val DomElement.childElementsList: List<DomElement>
get() = DomList(this)

fun getAbsoluteTop(): Double {
return getBoundingClientRect().top
}
val DomElement.firstChildElement: DomElement?
get() = this.firstElementChild

fun getAbsoluteBottom(): Double {
return getBoundingClientRect().bottom
fun DomElement.setDisabled(state: Boolean) {
if (state) {
setAttribute("disabled", "disabled")
} else {
removeAttribute("disabled")
}
}

fun querySelector(selector: String): DomElement? {
return create(element.querySelector(selector))
}
fun DomElement.setTabIndex(index: Int) {
setAttribute("tabindex", index.toString())
}

fun querySelectorAll(selectors: String): DomNodeList {
return element.querySelectorAll(selectors)
}
fun DomElement.clearTabIndex() {
removeAttribute("tabindex")
}

fun closest(selector: String): DomElement? {
return create(element.closest(selector))
}
fun DomElement.getAbsoluteLeft(): Double {
return getBoundingClientRect().left
}

fun getValidationMessage(): String? {
return myValidationError
}
fun DomElement.getAbsoluteRight(): Double {
return getBoundingClientRect().right
}

fun setCustomValidity(message: String?) {
myValidationError = message
if (message != null && "" != message) {
addClassName("error")
} else {
removeClassName("error")
}
}
fun DomElement.getAbsoluteTop(): Double {
return getBoundingClientRect().top
}

companion object {
fun create(element: Element?): DomElement? {
//TODO don't create
return if (element != null) DomElement(element) else null
}
}
fun DomElement.getAbsoluteBottom(): Double {
return getBoundingClientRect().bottom
}
9 changes: 4 additions & 5 deletions base/src/jsMain/kotlin/base/domCore/dom/DomElementList.kt
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
package jetbrains.datalore.base.domCore.dom

import org.w3c.dom.Element
import org.w3c.dom.HTMLCollection

typealias DomElementList = HTMLCollection

val DomElementList.iterator: Iterator<Element>
val DomElementList.iterator: Iterator<DomElement>
get() = DomCollectionIterator(this)

fun DomElementList.toIterable(): Iterable<Element> {
return object : Iterable<Element> {
override fun iterator(): Iterator<Element> {
fun DomElementList.toIterable(): Iterable<DomElement> {
return object : Iterable<DomElement> {
override fun iterator(): Iterator<DomElement> {
return iterator
}
}
Expand Down
29 changes: 3 additions & 26 deletions base/src/jsMain/kotlin/base/domCore/dom/DomHTMLCanvasElement.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,30 +3,7 @@ package jetbrains.datalore.base.domCore.dom
import org.w3c.dom.CanvasRenderingContext2D
import org.w3c.dom.HTMLCanvasElement

class DomHTMLCanvasElement protected constructor(htmlCanvasElement: HTMLCanvasElement) : DomHTMLElement(htmlCanvasElement) {
val htmlCanvasElement: HTMLCanvasElement
get() = htmlElement as HTMLCanvasElement
typealias DomHTMLCanvasElement = HTMLCanvasElement

val context2d: DomContext2d
get() = getContext("2d")!!

fun getContext(context: String): DomContext2d? {
return htmlCanvasElement.getContext(context) as CanvasRenderingContext2D?
}

fun toDataURL(type: String): String {
return htmlCanvasElement.toDataURL(type)
}

var width: Int
get() = htmlCanvasElement.width
set(value) {
htmlCanvasElement.width = value
}

var height: Int
get() = htmlCanvasElement.height
set(value) {
htmlCanvasElement.height = value
}
}
val DomHTMLCanvasElement.context2d: DomContext2d
get() = this.getContext("2d") as CanvasRenderingContext2D
65 changes: 1 addition & 64 deletions base/src/jsMain/kotlin/base/domCore/dom/DomHTMLElement.kt
Original file line number Diff line number Diff line change
@@ -1,68 +1,5 @@
package jetbrains.datalore.base.domCore.dom

import jetbrains.datalore.base.domCore.css.StyleMap
import org.w3c.dom.HTMLElement

open class DomHTMLElement protected constructor(htmlElement: HTMLElement) : DomElement(htmlElement) {

val htmlElement: HTMLElement
get() = element as HTMLElement

val style = StyleMap(htmlElement.style)

fun getProperty(key: String): String {
return style.getProperty(key)
}

var backgroundColor: String
get() = style.backgroundColor
set(value) {
style.backgroundColor = value
}

var color: String
get() = style.color
set(value) {
style.color = value
}

fun focus() {
htmlElement.focus()
}

fun click() {
htmlElement.click()
}

fun blur() {
htmlElement.blur()
}

var title: String
get() = htmlElement.title
set(value) {
htmlElement.title = value
}

val offsetParent: DomElement?
get() = DomElement.create(htmlElement.offsetParent)

val offsetWidth: Int
get() = htmlElement.offsetWidth

val offsetHeight: Int
get() = htmlElement.offsetHeight

val offsetLeft: Int
get() = htmlElement.offsetLeft

val offsetTop: Int
get() = htmlElement.offsetTop

companion object {
fun create(htmlElement: HTMLElement?): DomHTMLElement? {
//TODO don't create
return if (htmlElement != null) DomHTMLElement(htmlElement) else null
}
}
}
typealias DomHTMLElement = HTMLElement