Skip to content

Commit

Permalink
New: Tag.jsTagName helper
Browse files Browse the repository at this point in the history
  • Loading branch information
raquo committed May 6, 2024
1 parent e416f7a commit b0750a7
Show file tree
Hide file tree
Showing 4 changed files with 15 additions and 0 deletions.
2 changes: 2 additions & 0 deletions src/main/scala/com/raquo/laminar/tags/HtmlTag.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class HtmlTag[+Ref <: dom.html.Element] (
element
}

override def jsTagName: String = name.toUpperCase

/** Create a Scala DOM Builder element from this Tag */
protected def build(): ReactiveHtmlElement[Ref] = new ReactiveHtmlElement(this, DomApi.createHtmlElement(this))
}
2 changes: 2 additions & 0 deletions src/main/scala/com/raquo/laminar/tags/SvgTag.scala
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@ class SvgTag[+Ref <: dom.svg.Element] (
element
}

override def jsTagName: String = name

/** Create a Scala DOM Builder element from this Tag */
def build(): ReactiveSvgElement[Ref] = new ReactiveSvgElement(this, DomApi.createSvgElement(this))
}
5 changes: 5 additions & 0 deletions src/main/scala/com/raquo/laminar/tags/Tag.scala
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@ trait Tag[+El <: ReactiveElement.Base] {
val name: String

val void: Boolean

/** The string returned by `element.tagName` in JS DOM.
* It's uppercase for HTML elements, and case-preserving for SVG elements.
*/
def jsTagName: String
}

object Tag {
Expand Down
6 changes: 6 additions & 0 deletions src/test/scala/com/raquo/laminar/tests/DomApiSpec.scala
Original file line number Diff line number Diff line change
Expand Up @@ -98,4 +98,10 @@ class DomApiSpec extends UnitSpec {
assert(caught.getMessage == "Error parsing SVG string: expected tag name `svg`, got `circle`")
}

it("jsTagName: matches case for both HTML and SVG elements") {
a.jsTagName == a().ref.tagName
div.jsTagName == div().ref.tagName
svg.svg.jsTagName == svg.svg().ref.tagName
svg.circle.jsTagName == svg.circle().ref.tagName
}
}

0 comments on commit b0750a7

Please sign in to comment.