Source Code:
002 /**
003 * A lightweight, single page HTML editor with live preview and auto-save
004 * Author: Praveen Nair @ http://blog.ninethsense.com/
005 *
006 */
007
008 $f = $fn = "";
009 if (count($_GET) == 1) {
010 $f = key($_GET);
011 $fn = "$f.html";
012 } else {
013 die();
014 }
015
016 if ( isset($_POST["c"]) ) {
017 $content = $_POST["c"];
018 echo (file_put_contents($fn, $content))?"1":"-1";
019 die();
020 }
021
022 ?>
023 <html>
024 <head>
025 <meta http-equiv="content-type" content="text/html; charset=utf-8">
026 <style>
027 #tb {
028 margin-left: 5;
029 }
030 #editor, #preview {
031 flex: 1 0 0;
032 background:#eee;
033 margin: 5 5;
034 padding: 5 5;
035 overflow:auto;
036 }
037 #editor {
038 font-family: monospace;
039 }
040 #preview, a {
041 font-family: Arial, Helvetica, sans-serif;
042 }
043 [placeholder]:empty::before {
044 content: attr(placeholder);
045 color: #ccc;
046 }
047 #saved {
048 font-size:8pt;
049 margin-left:5px;
050 }
051 </style>
052 </head>
053 <body>
054 <div id="tb">
055 <input type="button" value="Save" onclick="Save()" /><span id="saved"></span>
056 <a href="preview.php?<?=$f?>" target="_blank" style="float:right;font-size:8pt">[Preview]</a>
057 </div>
058 <div style="display: flex;height:90%">
059
060 <div id="editor" contenteditable="true" onkeyup="LivePreview()" placeholder="Your HTML Code"></div>
061
062 <div id="preview" placeholder="Preview Area"></div>
063 </div>
064
065 <script>
066 var editor = document.getElementById("editor");
067 var preview = document.getElementById("preview");
068 var IsSaved = true;
069 editor.focus();
070 function LivePreview() {
071 preview.innerHTML = editor.innerText;
072 IsSaved = false;
073 }
074 function Save() {
075 var xhttp = new XMLHttpRequest();
076 xhttp.onreadystatechange = function() {
077 if (this.readyState == 4 && this.status == 200) {
078 if (xhttp.responseText == "1") {
079 document.getElementById("saved").style.color = 'green';
080 document.getElementById("saved").innerText = "Last saved at " + new Date() ;
081 IsSaved = true;
082 } else {
083 ShowError();
084 }
085 }
086 };
087 var formData = new FormData();
088 formData.append("c", editor.innerText);
089 xhttp.open("POST", "<?= $_SERVER["PHP_SELF"]. "?$f" ?>", true);
090 xhttp.send(formData);
091
092 }
093 setInterval(() => {
094 if (!IsSaved) {
095 Save();
096 }
097 }, 5000);
098
099 ShowError = function() {
100 var ele = document.getElementById("saved");
101 ele.style.color = 'red';
102 ele.innerText = "Couldn't Auto-save. Will retry soon" ;
103 }
104 window.onload = function() {
105 <?php
106 $content = "";
107 if ( $_SERVER['REQUEST_METHOD'] != 'POST' ) {
108 if (file_exists($fn)) {
109 $content = file_get_contents($fn);
110 }
111 echo "editor.innerText = `$content`;";
112 }
113 ?>
114 LivePreview();
115 }
116
117 </script>
118 </body>
119 </html>
120