7 changed files with 77 additions and 50 deletions
@ -1,27 +0,0 @@ |
|||||||
{ |
|
||||||
"page-title": "Free Pastebin for One-Off Markdown Publishing", |
|
||||||
"title": "Free and Hassle-free Pastebin for Markdown Notes.", |
|
||||||
"name": "NoteHub", |
|
||||||
"new-page": "New Page", |
|
||||||
"status-404": "Not Found", |
|
||||||
"status-400": "Bad Request", |
|
||||||
"status-403": "Forbidden", |
|
||||||
"status-500": "Internal Server Error", |
|
||||||
"footer": "Source code on [GitHub](https://github.com/chmllr/NoteHub) · Hosted on [Heroku](http://heroku.com) · DB on [RedisLabs](http://redislabs.com) · SSL by [CloudFlare](http://cloudflare.com) <br/> Created by [@chmllr](https://github.com/chmllr)", |
|
||||||
"loading": "Loading...", |
|
||||||
"set-passwd": "Password for editing", |
|
||||||
"enter-passwd": "Password", |
|
||||||
"publish": "Publish", |
|
||||||
"update": "Save", |
|
||||||
"published": "Published", |
|
||||||
"publisher": "Publisher", |
|
||||||
"edited": "Edited", |
|
||||||
"views": "Article Views", |
|
||||||
"statistics": "Statistics", |
|
||||||
"stats": "statistics", |
|
||||||
"export": "export", |
|
||||||
"notehub": "⌂ notehub", |
|
||||||
"edit": "edit", |
|
||||||
"short-url": "short url", |
|
||||||
"api-title": "API" |
|
||||||
} |
|
||||||
@ -0,0 +1,33 @@ |
|||||||
|
<!DOCTYPE html> |
||||||
|
<html> |
||||||
|
|
||||||
|
<head> |
||||||
|
<title>NoteHub — New Page</title> |
||||||
|
<meta charset="UTF-8" /> |
||||||
|
<meta content="width=device-width, initial-scale=1.0" name="viewport" /> |
||||||
|
<link href="/style.css" rel="stylesheet" type="text/css" /> |
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/marked/0.3.5/marked.min.js" type="text/javascript"></script> |
||||||
|
<script src="//cdnjs.cloudflare.com/ajax/libs/blueimp-md5/1.0.1/js/md5.min.js" type="text/javascript"></script> |
||||||
|
<script src="/js/publishing.js" type="text/javascript"></script> |
||||||
|
</head> |
||||||
|
|
||||||
|
<body onload="onLoad()"> |
||||||
|
<article id="preview" style="flex: none; -webkit-flex: none"></article> |
||||||
|
<div class="hidden" id="dashed-line"></div> |
||||||
|
<div class="central-element helvetica" style="margin-bottom: 3em"> |
||||||
|
<form action="/note" autocomplete="off" method="%METHOD%"> |
||||||
|
<input id="password" name="password" type="hidden"> |
||||||
|
<input id="session" name="session" type="hidden" value="%SESSION%" /> |
||||||
|
<input id="signature" name="signature" type="hidden" /> |
||||||
|
<textarea id="note" name="note">Loading...</textarea> |
||||||
|
<fieldset class="hidden" id="input-elems"> |
||||||
|
<input class="ui-elem" id="plain-password" name="plain-password" placeholder="Password for editing" type="text"> |
||||||
|
<input class="button ui-elem" id="publish-button" type="submit" value="Publish"> |
||||||
|
<br> |
||||||
|
<br> |
||||||
|
</fieldset> |
||||||
|
</form> |
||||||
|
</div> |
||||||
|
</body> |
||||||
|
|
||||||
|
</html> |
||||||
@ -1,41 +1,45 @@ |
|||||||
var $ = function(id){ return document.getElementById(id); } |
var $ = function(id) { |
||||||
|
return document.getElementById(id); |
||||||
|
} |
||||||
var iosDetected = navigator.userAgent.match("(iPad|iPod|iPhone)"); |
var iosDetected = navigator.userAgent.match("(iPad|iPod|iPhone)"); |
||||||
var timer = null; |
var timer = null; |
||||||
var timerDelay = iosDetected ? 800 : 400; |
var timerDelay = iosDetected ? 800 : 400; |
||||||
var show = function(elem) { elem.style.display = "block" } |
var show = function(elem) { |
||||||
|
elem.style.display = "block" |
||||||
|
} |
||||||
var $note, $action, $preview, $plain_password, $input_elems, $dashed_line, $proposed_title, updatePreview; |
var $note, $action, $preview, $plain_password, $input_elems, $dashed_line, $proposed_title, updatePreview; |
||||||
var backendTimer; |
var backendTimer; |
||||||
|
|
||||||
function md2html(input){ |
function md2html(input) { |
||||||
return marked(input); |
return marked(input); |
||||||
} |
} |
||||||
|
|
||||||
function onLoad () { |
function onLoad() { |
||||||
$note = $("note"); |
$note = $("note"); |
||||||
$action = $("action"); |
$action = document.getElementsByTagName("form")[0].method; |
||||||
$preview = $("preview"); |
$preview = $("preview"); |
||||||
$plain_password = $("plain-password"); |
$plain_password = $("plain-password"); |
||||||
$proposed_title = $("proposed-title"); |
$proposed_title = $("proposed-title"); |
||||||
$input_elems = $("input-elems"); |
$input_elems = $("input-elems"); |
||||||
$dashed_line = $("dashed-line"); |
$dashed_line = $("dashed-line"); |
||||||
updatePreview = function(){ |
updatePreview = function() { |
||||||
clearTimeout(timer); |
clearTimeout(timer); |
||||||
var content = $note.value; |
var content = $note.value; |
||||||
var delay = Math.min(timerDelay, timerDelay * (content.length / 400)); |
var delay = Math.min(timerDelay, timerDelay * (content.length / 400)); |
||||||
timer = setTimeout(function(){ |
timer = setTimeout(function() { |
||||||
show($dashed_line); |
show($dashed_line); |
||||||
show($input_elems); |
show($input_elems); |
||||||
$preview.innerHTML = md2html(content); |
$preview.innerHTML = md2html(content); |
||||||
}, delay); |
}, delay); |
||||||
}; |
}; |
||||||
if($action){ |
if ($action.value == "update") updatePreview(); |
||||||
if($action.value == "update") updatePreview(); else $note.value = ""; |
else $note.value = ""; |
||||||
$note.onkeyup = updatePreview; |
$note.onkeyup = updatePreview; |
||||||
$("publish-button").onclick = function(e) { |
$("publish-button").onclick = function(e) { |
||||||
if($plain_password.value != "") $("password").value = md5($plain_password.value); |
if ($plain_password.value != "") $("password").value = md5($plain_password.value); |
||||||
$plain_password.value = null; |
$plain_password.value = null; |
||||||
$("signature").value = md5($("session").value + $note.value); |
$("signature").value = md5($("session").value + $note.value); |
||||||
} |
|
||||||
if(iosDetected) $note.className += " ui-border"; else $note.focus(); |
|
||||||
} |
} |
||||||
|
if (iosDetected) $note.className += " ui-border"; |
||||||
|
else $note.focus(); |
||||||
} |
} |
||||||
|
|||||||
@ -1,10 +1,15 @@ |
|||||||
var marked = require("marked"); |
var marked = require("marked"); |
||||||
var fs = require("fs"); |
var fs = require("fs"); |
||||||
|
|
||||||
var template = fs.readFileSync("resources/template.html", "utf-8"); |
var pageTemplate = fs.readFileSync("resources/template.html", "utf-8"); |
||||||
var buildHTML = (id, title, content) => template |
var newNoteTemplate = fs.readFileSync("resources/new.html", "utf-8"); |
||||||
|
var buildPage = (id, title, content) => pageTemplate |
||||||
.replace("%TITLE%", title) |
.replace("%TITLE%", title) |
||||||
.replace(/%LINK%/g, id) |
.replace(/%LINK%/g, id) |
||||||
.replace("%CONTENT%", content); |
.replace("%CONTENT%", content); |
||||||
|
|
||||||
module.exports.build = note => buildHTML(note.id, note.title, marked(note.text)); |
module.exports.buildNote = note => buildPage(note.id, note.title, marked(note.text)); |
||||||
|
|
||||||
|
module.exports.newNotePage = session => newNoteTemplate |
||||||
|
.replace("%METHOD%", "POST") |
||||||
|
.replace("%SESSION%", session); |
||||||
|
|||||||
Loading…
Reference in new issue