first prototype of play-button enabling only if crate list supported
also minor refactor of clipboard handling TODO: - `no_run` support - test with ACE - disable play button with tooltip instead of hiding
This commit is contained in:
parent
a6a7c95c78
commit
cd90fdd407
|
@ -19,6 +19,9 @@ code {
|
||||||
.hidden {
|
.hidden {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.play-button.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
h2,
|
h2,
|
||||||
h3 {
|
h3 {
|
||||||
margin-top: 2.5em;
|
margin-top: 2.5em;
|
||||||
|
|
|
@ -1,3 +1,5 @@
|
||||||
|
playground_crates = [];
|
||||||
|
|
||||||
$( document ).ready(function() {
|
$( document ).ready(function() {
|
||||||
|
|
||||||
// url
|
// url
|
||||||
|
@ -219,7 +221,7 @@ $( document ).ready(function() {
|
||||||
pre_block.prepend("<div class=\"buttons\"></div>");
|
pre_block.prepend("<div class=\"buttons\"></div>");
|
||||||
buttons = pre_block.find(".buttons");
|
buttons = pre_block.find(".buttons");
|
||||||
}
|
}
|
||||||
buttons.prepend("<i class=\"fa fa-play play-button\"></i>");
|
buttons.prepend("<i class=\"fa fa-play play-button hidden\"></i>");
|
||||||
buttons.prepend("<i class=\"fa fa-copy clip-button\"><i class=\"tooltiptext\"></i></i>");
|
buttons.prepend("<i class=\"fa fa-copy clip-button\"><i class=\"tooltiptext\"></i></i>");
|
||||||
|
|
||||||
let code_block = pre_block.find("code").first();
|
let code_block = pre_block.find("code").first();
|
||||||
|
@ -245,14 +247,7 @@ $( document ).ready(function() {
|
||||||
text: function(trigger) {
|
text: function(trigger) {
|
||||||
hideTooltip(trigger);
|
hideTooltip(trigger);
|
||||||
let playpen = $(trigger).parents(".playpen");
|
let playpen = $(trigger).parents(".playpen");
|
||||||
let code_block = playpen.find("code").first();
|
return playpen_text(playpen);
|
||||||
|
|
||||||
if (window.ace && code_block.hasClass("editable")) {
|
|
||||||
let editor = window.ace.edit(code_block.get(0));
|
|
||||||
return editor.getValue();
|
|
||||||
} else {
|
|
||||||
return code_block.get(0).textContent;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
clipboardSnippets.on('success', function(e) {
|
clipboardSnippets.on('success', function(e) {
|
||||||
|
@ -262,8 +257,54 @@ $( document ).ready(function() {
|
||||||
clipboardSnippets.on('error', function(e) {
|
clipboardSnippets.on('error', function(e) {
|
||||||
showTooltip(e.trigger, "Clipboard error!");
|
showTooltip(e.trigger, "Clipboard error!");
|
||||||
});
|
});
|
||||||
|
|
||||||
|
$.ajax({
|
||||||
|
url: "https://play.rust-lang.org/meta/crates",
|
||||||
|
method: "POST",
|
||||||
|
crossDomain: true,
|
||||||
|
dataType: "json",
|
||||||
|
contentType: "application/json",
|
||||||
|
success: function(response){
|
||||||
|
playground_crates = response.crates.map(function(item) {return item["id"];} );
|
||||||
|
$(".playpen").each(function(block){
|
||||||
|
update_play_button(this, playground_crates);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function playpen_text(playpen) {
|
||||||
|
let code_block = playpen.find("code").first();
|
||||||
|
|
||||||
|
if (window.ace && code_block.hasClass("editable")) {
|
||||||
|
let editor = window.ace.edit(code_block.get(0));
|
||||||
|
return editor.getValue();
|
||||||
|
} else {
|
||||||
|
return code_block.get(0).textContent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_play_button(block, playground_crates) {
|
||||||
|
//TODO skip if `no_run` is set
|
||||||
|
var pre_block = $(block);
|
||||||
|
var play_button = pre_block.find(".play-button");
|
||||||
|
|
||||||
|
var txt = playpen_text(pre_block);
|
||||||
|
|
||||||
|
var re = /extern\s+crate\s+([a-zA-Z_0-9]+)\s*;/g;
|
||||||
|
var snippet_crates = [];
|
||||||
|
while (item = re.exec(txt))
|
||||||
|
snippet_crates.push(item[1]);
|
||||||
|
|
||||||
|
var all_available = snippet_crates.every(elem => playground_crates.indexOf(elem) > -1);
|
||||||
|
if (all_available) {
|
||||||
|
play_button.removeClass("hidden");
|
||||||
|
} else {
|
||||||
|
play_button.addClass("hidden");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function hideTooltip(elem) {
|
function hideTooltip(elem) {
|
||||||
elem.firstChild.innerText="";
|
elem.firstChild.innerText="";
|
||||||
elem.setAttribute('class', 'fa fa-copy clip-button');
|
elem.setAttribute('class', 'fa fa-copy clip-button');
|
||||||
|
|
|
@ -24,6 +24,10 @@ code {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.play-button.hidden {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
h2, h3 { margin-top: 2.5em }
|
h2, h3 { margin-top: 2.5em }
|
||||||
h4, h5 { margin-top: 2em }
|
h4, h5 { margin-top: 2em }
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue