121 lines
3.1 KiB
HTML
121 lines
3.1 KiB
HTML
|
<!doctype html>
|
||
|
<html>
|
||
|
<head>
|
||
|
<meta charset="utf-8">
|
||
|
<title>A smart, organizing text editor</title>
|
||
|
<link href="/static/bootstrap/css/bootstrap.css" rel="stylesheet" type="text/css">
|
||
|
<link href="/static/bootstrap/css/bootstrap-responsive.css" rel="stylesheet" type="text/css">
|
||
|
<link href="/static/shoofle.css" rel="stylesheet" type="text/css">
|
||
|
<script src="/static/jquery.min.js" type="text/javascript"></script>
|
||
|
<style type="text/css">
|
||
|
body {
|
||
|
background-color: gray;
|
||
|
margin: 1em;
|
||
|
}
|
||
|
#editor p {
|
||
|
margin: 0;
|
||
|
}
|
||
|
.block {
|
||
|
font-family: monospace;
|
||
|
background-color: white;
|
||
|
padding: 4px;
|
||
|
display: block;
|
||
|
}
|
||
|
.if-elseif-else-wrapper {
|
||
|
white-space: normal;
|
||
|
background-color: rgb(200,200,255);
|
||
|
}
|
||
|
.branch {
|
||
|
margin-right: 4px;
|
||
|
background-color: rgb(200,255,200);
|
||
|
display: inline-block;
|
||
|
}
|
||
|
.while-wrapper {
|
||
|
background-color: rgb(255,200,200);
|
||
|
}
|
||
|
</style>
|
||
|
</head>
|
||
|
<body style="background-color: gray; margin: 1em;">
|
||
|
<div class="block" id="editor" contentEditable>
|
||
|
<p class="code">some kind of preparation code, I guess</p>
|
||
|
<p class="code">or something</p>
|
||
|
<div class="branch if">
|
||
|
<p class="condition">if (condition)</p>
|
||
|
<div class="block base">
|
||
|
<p>do something in response to a true condition</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="branch else-if">
|
||
|
<p class="condition">else if (some other condition)</p>
|
||
|
<div class="block base">
|
||
|
<p>then we should do something specific else</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<div class="branch else">
|
||
|
<p class="condition">else</p>
|
||
|
<div class="block base">
|
||
|
<p>some fallback thing!</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
<p>some code</p>
|
||
|
<p>do other thing</p>
|
||
|
<p>{} | : {} ();</p>
|
||
|
<div class="while-wrapper">
|
||
|
<p class="condition">while (something)</p>
|
||
|
<div class="block base">
|
||
|
<p>update the counters</p>
|
||
|
<p>hack the gibsons</p>
|
||
|
<p>do the stuff</p>
|
||
|
</div>
|
||
|
</div>
|
||
|
</div>
|
||
|
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
var finds_if_regex = /(?:\s*)((?:else\s*)?if\s*\([^)]+\)\s*)\{([^}]*)\}/;
|
||
|
function respond_to_ifs() {
|
||
|
var editor = $('#editor');
|
||
|
|
||
|
var lines_of_code = editor.find('p');
|
||
|
lines_of_code.each(individual_line_if);
|
||
|
}
|
||
|
function individual_line_if() {
|
||
|
if (!finds_if_regex.exec($(this).text())) { return true; }
|
||
|
var split_up = $(this).text().split(finds_if_regex);
|
||
|
|
||
|
var branch = $('<div></div>').addClass('branch if');
|
||
|
$(this).before(branch);
|
||
|
|
||
|
if (split_up[0].length > 0) {
|
||
|
branch.before($('<p></p>').text(split_up[0]));
|
||
|
}
|
||
|
|
||
|
branch.append($('<p class="condition"></p>').text(split_up[1]));
|
||
|
branch.append($('<div></div>').addClass('block').append($(this)));
|
||
|
$(this).before('{');
|
||
|
$(this).text(split_up[2]);
|
||
|
$(this).after('}');
|
||
|
|
||
|
if (split_up[3].length > 0) {
|
||
|
branch.after($('<p></p>').text(split_up[2]));
|
||
|
}
|
||
|
}
|
||
|
var finds_else_regex = /(?:[^\S])\s*else\s*(\{[^}]*\})/;
|
||
|
function make_new_else(c1, c2) {
|
||
|
var target;
|
||
|
if (c1 == undefined) { target = $(this); }
|
||
|
if (c2 == undefined) { target = $(c1); }
|
||
|
else { target = $(c2); }
|
||
|
|
||
|
if (!target.is('.block.base')) {
|
||
|
target.find('.block.base')
|
||
|
}
|
||
|
}
|
||
|
|
||
|
$(document).ready(function () {
|
||
|
$('#editor').on('input', function() { respond_to_ifs(); });
|
||
|
});
|
||
|
</script>
|
||
|
</body>
|
||
|
</html>
|