diff --git a/app/liquid_tags/runkit_tag.rb b/app/liquid_tags/runkit_tag.rb
index 944282c67..6f80b888c 100644
--- a/app/liquid_tags/runkit_tag.rb
+++ b/app/liquid_tags/runkit_tag.rb
@@ -1,7 +1,7 @@
class RunkitTag < Liquid::Block
def initialize(tag_name, markup, tokens)
super
- @markup = markup
+ @preamble = ActionView::Base.full_sanitizer.sanitize(markup, tags: [])
end
def render(context)
@@ -9,7 +9,8 @@ class RunkitTag < Liquid::Block
parsed_content = content.xpath("//html/body").text
html = <<~HTML
- #{parsed_content}
+ #{@preamble}
+ #{parsed_content}
HTML
html
@@ -18,15 +19,15 @@ class RunkitTag < Liquid::Block
def self.special_script
<<~JAVASCRIPT
var targets = document.getElementsByClassName("runkit-element");
- if (targets.length > 0) {
- for (var i = 0; i < targets.length; i++) {
- var content = targets[i].textContent;
- targets[i].innerHTML = "";
- var notebook = RunKit.createNotebook({
- element: targets[i],
- source: content,
- });
- }
+ for (var i = 0; i < targets.length; i++) {
+ var preamble = targets[i].children[0].textContent;
+ var content = targets[i].children[1].textContent;
+ targets[i].innerHTML = "";
+ var notebook = RunKit.createNotebook({
+ element: targets[i],
+ source: content,
+ preamble: preamble
+ });
}
JAVASCRIPT
end
@@ -36,16 +37,17 @@ class RunkitTag < Liquid::Block
var checkRunkit = setInterval(function() {
if(typeof(RunKit) !== 'undefined') {
var targets = document.getElementsByClassName("runkit-element");
- if (targets.length > 0) {
- for (var i = 0; i < targets.length; i++) {
- var content = targets[i].textContent;
- if(/^(\