JSFiddle - React, Tailwind, and code Playground

by Dogbert

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.3/ace.js"></script>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Sans+Pro">
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Source+Code+Pro">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.6.3/css/font-awesome.min.css">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<div id="app">
  <div id="header">
    <!-- <div id="brand">Rust Playground</div> -->
    <div id="run">
      <button class="button large primary has-fa">
        <i class="fa fa-play fa-small" aria-hidden="true"></i>Run
      </button>
    </div>
    <div id="compile-to" class="button-group">
      <button class="button primary outline">ASM</button>
      <button class="button primary outline">LLVM IR</button>
      <button class="button primary outline">MIR</button>
    </div>
    <div class="button-group">
      <button class="button primary outline has-fa">
        <i class="fa fa-retweet" aria-hidden="true"></i>Format
      </button>
      <button class="button primary outline has-fa">
        <i class="fa fa-share-alt" aria-hidden="true"></i>Share
      </button>
    </div>
    <div class="float-right">
      <button class="button primary outline has-fa">
        <i class="fa fa-cog" aria-hidden="true"></i>Settings
      </button>
    </div>
  </div>
  <div id="main">
    <div id="sidebar">
      <div id="files">
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
        <div class="file">Hello</div>
      </div>
    </div>
    <div id="editor"></div>
  </div>
  <div id="footer">
    <div class="float-left">
      <span class="cursor">
      </span>
    </div>
    <div class="float-right">
      <span...

SCSS

$primary: #EA285F;
/* $primary: #313131; */
/* $primary: #414141; */
/* $primary: #515151; */
/* $primary: #2780E3; */

/* $primary: #4c7ff0; */

/* $primary: #c04f33; */

/* $primary: #AA4422; */

/* $primary: lighten(#AA4422, 10%); */

$primary: #4C5A67;
$primary: #5286FB;
$primary: #1F5D90;

$border-radius: 2px;
body,
button,
input,
textarea,
select {
  font-family: "Source Sans Pro";
}

* {
  box-sizing: border-box;
}

body {
  background: $primary;
  margin: 0;
}

#app {
  padding: 8px;
  display: flex;
  flex-direction: column;
}

html,
body,
#app {
  height: 100%;
}

#header {
  padding: 10px;
  background: white;
  /* border-bottom: 1px solid #d9d9d9; */
  flex: 0 auto;
  border-radius: $border-radius $border-radius 0 0;
  /* display: flex; */
  .button {
    margin-top: 5px;
  }
  .button.large {
    margin-top: 0;
  }
}

#header > * {
  float: left;
  margin-right: 10px;
}
#header > *:last-child {
  float: left;
  margin-right: 0;
}

#brand {
  padding: 6px 10px;
}

#run {}

#compile-to {}

#main {
  flex: 1;
  background: white;
  display: flex;
}

#sidebar {
  flex: 0 auto;
  width: 200px;
  /* border-right: 1px solid $primary; */
  display: none;
  transition: flex 1s;
}

#editor {
  flex: 3;
  font-family: Source Code Pro;
  font-size: 14px;
}

#footer {
  padding: 10px 15px;
  background: #f8f8f8;
  /* border-top: 1px solid #d9d9d9; */
  flex: 0 auto;
  border-radius: 0 0 $border-radius $border-radius;
  font-size: 13px;
}

.button {
  background: none;
  border: none;
  padding: .4em 1em;
  margin: 0;
  cursor: pointer;
  font-size: 14px;
  transition: 0.1s all;
  border-width: 1px;
  border-style: solid;
}

.button.large {
  font-size: 20px;
}

.button.primary {
  color: white;
  background: $primary;
  border-color: $primary;
}
.button.primary:hover {
  background: darken($primary, 10%);
  border-color: darken($primary, 10%);
}

.button.primary.outline {
  border-color: $primary;
  background: none;
  color: $primary;
}

.button.outline...

JavaScript

var editor = ace.edit("editor");

var footerCursor = document.querySelector("#footer .cursor");
editor.selection.on("changeCursor", function() {
  var cursor = editor.selection.getCursor();
	footerCursor.innerHTML = '' + (cursor.row + 1) + ':' + (cursor.column + 1);
});

editor.setValue("fn main() {\n    println!(\"Hello, world!\");\n}");
// editor.clearSelection();
editor.gotoLine(1);
editor.setTheme("ace/theme/chrome");
editor.session.setMode("ace/mode/rust");
editor.setKeyboardHandler("ace/keyboard/vim");
// editor.renderer.$cursorLayer.setBlinking(false);