Hi all,
I'm working on a module that will use a toggle button to show and hide
content in an IJulia notebook. Everything works as intended if the content
is HTML, but I also need to be able to display equations. I have two
questions:
1. Is it possible to display equations within blocks of HTML? If so,
how? It would be nice to take advantage of the MathJax already running in
the notebooks. I'd love it if someone could point me in the right direction.
2. How can I get Markdown to hide/show when the button is
clicked? Currently, clicking the button correctly changes the field that
determines whether to display the object, but you have to run the code cell
again for the display to change (see Section 2).
Below are the relevant bits of code.
I'd appreciate any pointers you can give. Thank you!
-----------------------------
*1) *This code for HTML blocks works correctly:
using Reactive
using Interact
import Base.writemime
type Revealable
html::ASCIIString
divclass::ASCIIString
show::Bool
end
function revealable(x::Revealable)
@manipulate for n in togglebutton(; label=string("Show/Hide", x.divclass
== "" ? "" : string(" ", uppercase(x.divclass[1]),x.divclass[2:end])), value
=x.show, signal=Input(x.show))
x.show = n
x
end
end
function Base.writemime(stream, ::MIME"text/html", x::Revealable)
if x.show
println(stream, string("""<div class='""", x.divclass, """'>""", x.
html, """</div>"""))
else
println(stream, """
"""
)
end
end
To run it:
h = Revealable("<b>Any HTML can go here!</b>", "hint", false)
revealable(h)
*2)* This code requires the user to re-run the cell after clicking the
button:
using Markdown
using Reactive
using Interact
import Base.writemime
type Revealable
content::Markdown.MD
divclass::ASCIIString
show::Bool
end
function revealable(x::Revealable)
@manipulate for n in togglebutton(; label=string("Show/Hide", x.divclass
== "" ? "" : string(" ", uppercase(x.divclass[1]),x.divclass[2:end])), value
=x.show, signal=Input(x.show))
x.show = n
x
end
end
function writemime(stream, ::MIME"text/latex", x::Revealable)
if x.show
display(x.content)
else
display("")
end
end
To run it:
m = Revealable(md"""
#Heading!
Here is some LaTeX: ${3+a}\over{2-b^4}$
""", "hint", false)
revealable(m)