JSFiddle - React, Tailwind, and code Playground
by lid0
HTML
<!--
After making changes to the playground.
click on "Copy Link" and paste/replace the content in the Template tag below
//<DO NOT REMOVE>
parent.parent.postMessage(parent.location.hash,"*")
//</DO NOT REMOVE>
-->
<template id=code>
https://sfc-vue3.netlify.app/#/s/eyJ2IjoiMy4wLjExIiwidCI6MCwiZCI6eyJBcHAudnVlIjoiPHRlbXBsYXRlPlxuICA8aDE+e3sgbXNnIH19PC9oMcYWQ29tcCA6YWFhPXYgOmJiYj12MiA6Y2NjPXYzPjwvxB7FKMUsYnV0dG9uIEBjbGljaz1cInY9disrXCLFISArK8UHxSkvxirGGdM4yjZhYWHaOdQ7Mso8YmJi2TzSOTPKOWNjY8Y5yzQ8L+sBLlxuPHNjcmlwdCBzZXR15AECaW1wb3J0IOUBLmZyb20gXCIu5QEe5AFsXCLETccje3JlZn3IJMcdY29uc3TlAXs9ICd2dWUgcHJvcHMgdG9SZWYgd2F0Y2gnIFxudmFyIHYgPSByZWYoNSnHEDLQETPHETY2NinkALfmAKk+Iiwi6ACP+AH7YWFh7AH7yAQ8aDTFECAgV+QAimVyczrGDzxwcsRAe3vlAKJNZXNzYWdlfX3HHS/GHsQKx0E8YiB2LWZvcj1cImksayBpbiBrZXlz5gF1xEwgc3R5bGU9XCLHE8QvaWY9XCJsYXN0VXBkYXRlZD09a1wiPiAtPuQBnD57e2t9fTp7e2kudmFsdWV9feQAscx6YuoCncgVYiAgIHt7YuYAqOQA83t7YWFhxg9iYmLEHGLHHmNjYyB7e2NjY8YPyFn/Ag3rAez/Ag/oAg8s5QFBLOYB6kVmZmVjdCwgY29tcHV0ZWQs5gIHLMUGcywgZGVmaW5lUOQCISxnZXRDdXJyZW50SW5zdGFuY2Ug8AJb5gD+5AIa5gJUPcxBKFtcImFhYVwiLFwiYmJixQhjY2NcIl0pxTfkAphvbGUubG9nKMU/KcxRYSA95gCcxhwsJ2FhYSfFIsQeYtAeYmJixh7IIsQY5ADUyClzx2Q7yCHkAh8gPSDkAaA6yC0uYWFhLGJiYsoRYmJiLGNjY8oR5AGxyEPrAjvnAxjnAPLpAKjsAr3JI8cgxARmdW5jdGlvbuQB3kxhc3Qoayl7xBggzlx7W2tdOnRydWXFe8UFxATFXihhLMhGKNU9IOcAlcYb7ACS5gLZICvEIyvGGvQBdFxuxj196QC3xnli0nnSe+UB+sgd333OfeYB09J96gCBKCk9PsUt5AGWLOkBTesAjt9x5APrzUXNb8pp6AMvy3LkAirQcn0p0RP9AYz/AKF0Y2gtPsh7Lcp47gEU5gCoyAQgIC8vxTogYW555QMFIGNoYW5nZXPqAM7FSf8BL/YBL8U6zn/lAIDoAu9pbnRlcnZhbElkID1zZXRJxw/lATfHZdNjxGLGUsROICB9LDUwMDDHXSDkAxtUaW1lb3V0xkhjbGVhcslbynMpfSwgNjAqIDHIPfIEwSgpLmN0eOQD9i4uLtgfLCAuLi7tBDTpA3HsBvN9LCJjIjoxfQ==
</template>
<iframe id="frm1"></iframe>
<div class="sfcContainer">
<a id="sfcLink" class="sfcLink" href="">Link</a>
<a id="sfcLink2" class="sfcLink sfcLink2" href="#">Open In new Window</a>
</div>
CSS
.sfcContainer {
position: fixed;
top: 0px;
display: block;
width: 100%;
height: 25px;
background: #5a9faa;
}
.sfcLink {
top: 0px;
z-index: 100;
background: black;
color: white;
padding: 5px;
}
.sfcLink2 {
left: 0px;
top: 30px;
}
.sfcLink:hover {
background: #696969;
}
body {
margin: 0;
padding: 0;
height: 100%;
}
iframe {
margin-top: 20px;
;
width: 100%;
height: 95vh;
}
JavaScript
// NOTHING TO CHANGE HERE
// SEE HTML SECTION
// author liblib
var codeEl = document.getElementById('code');
var frm1 = document.getElementById("frm1")
function getCode() {
var codeFromTemplate = codeEl.innerHTML.trim();
if (codeFromTemplate[0] == "#") {
return "https://sfc.vuejs.org/" + codeFromTemplate
} else if (codeFromTemplate.startsWith("https://")) {
return codeFromTemplate;
} else {
alert("invalid code in template")
}
}
var sfcLink = document.getElementById("sfcLink")
var sfcLink2 = document.getElementById("sfcLink2")
sfcLink.addEventListener('click', function(evt) {
evt.preventDefault();
copyToClipboard(sfcLink.href)
alert("new playground link was copied to clipboard. dont forget to update template in js fiddle.")
sfcLink.innerHTML += " [copied to clipboard]"
setTimeout(function() {
sfcLink.innerHTML = "Link (edits " + changes + ")"
}, 700)
})
sfcLink2.addEventListener('click', function(evt) {
alert("DSADAS")
window.open(sfcLink.href, "_blank")
});
function refreshLink() {
if (changes > 0) {
sfcLink.innerHTML = "Link (edits " + changes + ")"
} else {
sfcLink.innerHTML = "Copy Link"
}
}
window.addEventListener("message", function(evt) {
//console.log(evt)
changes++;
codeEl.innerHTML = evt
sfcLink.href = "https://sfc.vuejs.org/" + evt.data
refreshLink()
})
var code = getCode()
frm1.src = code;
var changes = -1
function copyToClipboard(text) {
if (window.clipboardData && window.clipboardData.setData) {
// Internet Explorer-specific code path to prevent textarea being shown while dialog is visible.
return window.clipboardData.setData("Text", text);
} else if (document.queryCommandSupported && document.queryCommandSupported("copy")) {
var textarea = document.createElement("textarea");
textarea.textContent = text;
textarea.style.position = "fixed"; // Prevent scrolling to bottom of page in Microsoft Edge.
...