11package dotty .tools .scaladoc
22
3+ import scala .scalajs .js
34import org .scalajs .dom ._
45import org .scalajs .dom .ext ._
56
7+ import CodeSnippetsGlobals ._
8+
69class CodeSnippets :
710
811 private def getButtonsSection (snippet : html.Element ): Option [html.Div ] = snippet.querySelector(" div.buttons" ) match {
@@ -12,7 +15,7 @@ class CodeSnippets:
1215
1316 def enrichSnippets () = document.querySelectorAll(" div.snippet" ).foreach {
1417 case snippet : html.Element =>
15- snippet.addEventListener(" click" , e => e.stopPropagation() )
18+ snippet.addEventListener(" click" , ( e : MouseEvent ) => e.asInstanceOf [js. Dynamic ].fromSnippet = true )
1619 snippetAnchor(snippet)
1720 handleHideableCode(snippet)
1821 handleImportedCode(snippet)
@@ -109,20 +112,41 @@ class CodeSnippets:
109112 val div = document.createElement(" div" )
110113 val button = document.createElement(" button" ).asInstanceOf [html.Button ]
111114 val icon = document.createElement(" i" )
112- icon.classList.add(" fas" )
113- icon.classList.add(" fa-play" )
115+ def initialState () = {
116+ icon.classList.add(" fas" )
117+ icon.classList.add(" fa-play" )
118+ button.setAttribute(" state" , " run" )
119+ }
120+ def toggleState () = {
121+ icon.classList.toggle(" fa-play" )
122+ icon.classList.toggle(" fa-times" )
123+ if button.getAttribute(" state" ) == " run" then button.setAttribute(" state" , " exit" )
124+ else button.setAttribute(" state" , " run" )
125+ }
126+ initialState()
114127 button.appendChild(icon)
115128 button.classList.add(" run-button" )
116- button.addEventListener(" click" , _ => {}) // TODO: Run button #13065
117- button.disabled = true
129+ button.addEventListener(" click" , _ =>
130+ if button.getAttribute(" state" ) == " run" then
131+ scastie.Embedded (snippet.querySelector(" pre" ))
132+ else
133+ snippet.querySelector(" pre" ) match {
134+ case p : html.Element => p.style = " "
135+ case _ =>
136+ }
137+ snippet.querySelector(" .scastie.embedded" ) match {
138+ case s : html.Element => snippet.removeChild(s)
139+ case _ =>
140+ }
141+ toggleState()
142+ )
118143 div.appendChild(button)
119144 div
120145 }
121146 val buttonsSection = getButtonsSection(snippet)
122147 buttonsSection.foreach(s =>
123148 s.appendChild(copyButton)
124- // Temporarily disabled
125- // s.appendChild(runButton)
149+ if ! snippet.hasAttribute(" hasContext" ) then s.appendChild(runButton)
126150 )
127151 }
128152
0 commit comments