@@ -4,14 +4,34 @@ import org.scalajs.dom._
4
4
import org .scalajs .dom .ext ._
5
5
6
6
class CodeSnippets :
7
- val replacePatternsAndResults = Seq (
8
- // ("", "") , // hide block directives
9
- ( """ (\/\/.*)(\n|\$)""" , " " ) , // single line comment
10
- // ("", "") , // multi line comment
7
+ val replacePatternsAndResults : Seq [( String , String )] = Seq (
8
+ """ (\/\/{{\n)((.|\n)*?)(\/\/}}\n) """ -> """ <span class="hideable">$2</span> """ , // wrap content of block directives
9
+ """ (\/\/.*? )(\n|\$)""" -> """ <span class="hideable">$1</span>$2 """ , // wrap single line comment
10
+ """ (\/\*)((.|\n)*?)(\*\/) """ -> """ <span class="hideable">$0</span> """ , // wrap multi line comment
11
11
)
12
12
13
13
document.querySelectorAll(" code" ).foreach {
14
14
case e : html.Element => e.innerHTML = replacePatternsAndResults.foldLeft(e.innerHTML) {
15
- case (acc, (pattern, result)) => acc.replaceAll(pattern, """ <span class="hideable;">$1</span>""" )
15
+ case (acc, (pattern, result)) =>
16
+ acc.replaceAll(pattern, result)
16
17
}
17
18
}
19
+
20
+ def toggleHide (e : html.Element | html.Document ) = e.querySelectorAll(" code span.hideable" ).foreach {
21
+ case e : html.Element if e.style.getPropertyValue(" display" ).isEmpty => e.style.setProperty(" display" , " none" )
22
+ case e : html.Element => e.style.removeProperty(" display" )
23
+ }
24
+
25
+ toggleHide(document)
26
+
27
+ document.querySelectorAll(" pre" ).foreach {
28
+ case e : html.Element =>
29
+ val a = document.createElement(" a" )
30
+ a.textContent = " Show"
31
+ a.addEventListener(" click" , { (_ : MouseEvent ) =>
32
+ a.textContent = if a.textContent == " Show" then " Hide" else " Show"
33
+ toggleHide(e)
34
+ })
35
+ a.classList.add(" hide-snippet-comments-button" )
36
+ e.insertBefore(a, e.firstChild)
37
+ }
0 commit comments