Hi,
In this mini-tutorial, I'll tell you how to make a HTML code editor using codemirror.
Check out a demo here: https://webcode.rf.gd/beta
Check out an online mini jsfiddle I made here!
(Click on the start coding now button) https://webcode.rf.gd
Step 1 - Install codemirror / use CDN
I prefer to use the CDN usually
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/codemirror.css'>
Step 2 - Basic styling*
Good CSS --> Good website
*, *:after, *:before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ----------
WRAPPERS & CONTAINERS
---------- */
section {
position: relative;
padding: 2.5rem 0;
}
.container {
position: relative;
margin: auto;
padding: 0 20px;
width: 100%;
max-width: 970px;
}
section:after, .container:after, .row:after {
display: table;
content: '';
clear: both;
}
/* ----------
CODE BLOCK
---------- */
.code-container {
position: relative;
margin-bottom: 1.5rem;
overflow: hidden;
border-radius: 3px;
box-shadow: 3px 3px 6px rgba(0, 0, 0, .3);
}
.code-container:last-child {
margin-bottom: 0;
}
.btn {
background-color: #ed9d0a;
color: #fff;
padding: 4px 10px;
text-decoration: none;
border-radius: 3px;
box-shadow: 0 8px 6px -6px rgba(0, 0, 0, .15);
-webkit-backface-visibility: hidden;
-webkit-transition: 200ms -webkit-transform ease, 200ms transform ease, 200ms box-shadow ease;
transition: 200ms -webkit-transform ease, 200ms transform ease, 200ms box-shadow ease;
}
.btn:hover {
box-shadow: 0 6px 6px -4px rgba(0, 0, 0, .2);
-webkit-transform: translateY(-2px);
transform: translateY(-2px);
}
.btn.btn-left {
float: left;
}
.btn.btn-right {
float: right;
}
.row {
margin-bottom: 1.5rem;
width: 100%;
}
.row:last-child {
margin-bottom: 0;
}
Step 3 - Creating the elements
Basically, you'll need a textarea with an ID.
Note that you can use HTML in the textarea.
An iframe will be used to gather results.
<section>
<div class="container">
<div class="code-container">
<textarea id="code"><!-- xml/html syntax -->
<!DOCTYPE html>
<html>
<head>
<!-- meta -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- title -->
<title>Example website</title>
<!-- css -->
<style type="text/css">
/* css syntax */
body {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
box-shadow: 0 0 50px #eee;
padding: 20px;
background: #fff
}
html {
background: #fafafa
}
</style>
</head>
<body>
<section>
<div class="container">
<h1>Example website</h1>
<p>This is just a HTML example</p>
</div>
</section>
</body>
</html>
</textarea>
</div>
<iframe id="code_result" width="100%" height="500px" style="border: 5px solid gray">
</iframe>
<button onclick="run()">Run code!</button>
</div>
</section>
Step 4 - Javascript
Basically, this is the main part of this entire thing...
As per the documentation, you'll need to use getValue()
instead of document.getElementById("...").value()
<script id="rendered-js" >
var doc = document.getElementById('code_result').contentWindow.document;
var html_value;
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
styleActiveLine: true,
lineNumbers: true,
matchBrackets: true,
autoCloseBrackets: true,
autoCloseTags: true,
mode: "htmlmixed",
});
</script>
Running the code:
This is the code which will be used to run the code in the iframe:
function run() {
html_value = editor.getValue();
doc.open();
doc.write(html_value);
doc.close();
}
Final code:
<!DOCTYPE html>
<html lang="en" >
<head>
<meta charset="UTF-8">
<link rel='stylesheet' href='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/codemirror.css'>
<style>
*, *:after, *:before {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* ----------
WRAPPERS & CONTAINERS
---------- */
section {
position: relative;
padding: 2.5rem 0;
}
.container {
position: relative;
margin: auto;
padding: 0 20px;
width: 100%;
max-width: 970px;
}
section:after, .container:after, .row:after {
display: table;
content: '';
clear: both;
}
/* ----------
CODE BLOCK
---------- */
.code-container {
position: relative;
margin-bottom: 1.5rem;
overflow: hidden;
border-radius: 3px;
box-shadow: 3px 3px 6px rgba(0, 0, 0, .3);
}
.code-container:last-child {
margin-bottom: 0;
}
.btn {
background-color: #ed9d0a;
color: #fff;
padding: 4px 10px;
text-decoration: none;
border-radius: 3px;
box-shadow: 0 8px 6px -6px rgba(0, 0, 0, .15);
-webkit-backface-visibility: hidden;
-webkit-transition: 200ms -webkit-transform ease, 200ms transform ease, 200ms box-shadow ease;
transition: 200ms -webkit-transform ease, 200ms transform ease, 200ms box-shadow ease;
}
.btn:hover {
box-shadow: 0 6px 6px -4px rgba(0, 0, 0, .2);
-webkit-transform: translateY(-2px);
transform: translateY(-2px);
}
.btn.btn-left {
float: left;
}
.btn.btn-right {
float: right;
}
.row {
margin-bottom: 1.5rem;
width: 100%;
}
.row:last-child {
margin-bottom: 0;
}
</style>
</head>
<body translate="no" >
<section>
<div class="container">
<div class="code-container">
<textarea id="code"><!-- xml/html syntax -->
<!DOCTYPE html>
<html>
<head>
<!-- meta -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- title -->
<title>Example website</title>
<!-- css -->
<style type="text/css">
/* css syntax */
body {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
box-shadow: 0 0 50px #eee;
padding: 20px;
background: #fff
}
html {
background: #fafafa
}
</style>
</head>
<body>
<section>
<div class="container">
<h1>Example website</h1>
<p>This is just a HTML example</p>
</div>
</section>
</body>
</html>
</textarea>
</div>
<iframe id="code_result" width="100%" height="500px" style="border: 5px solid gray">
</iframe>
<button onclick="run()">Run code!</button>
</div>
</section>
<script src='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/codemirror.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/mode/xml/xml.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/mode/css/css.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/mode/javascript/javascript.js'></script>
<script src='https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.13.4/mode/htmlmixed/htmlmixed.js'></script>
<script id="rendered-js" >
var doc = document.getElementById('code_result').contentWindow.document;
var html_value;
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
styleActiveLine: true,
lineNumbers: true,
matchBrackets: true,
autoCloseBrackets: true,
autoCloseTags: true,
mode: "htmlmixed",
});
function run() {
html_value = editor.getValue();
doc.open();
doc.write(html_value);
doc.close();
}
</script>
</body>
</html>
Demo: https://webcode.rf.gd/beta/
Hope you found this useful!
Top comments (0)