From a718f89e0823170fc65bc56d7b0a3265e0689448 Mon Sep 17 00:00:00 2001 From: ansuz Date: Sat, 30 Jan 2016 13:59:20 +0100 Subject: [PATCH] make a new pad that doesn't allow input. It simply renders markdown that's being written in the same channel but in another editor that allows input. --- www/render/index.html | 41 +++++++++++++ www/render/main.js | 138 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) create mode 100644 www/render/index.html create mode 100644 www/render/main.js diff --git a/www/render/index.html b/www/render/index.html new file mode 100644 index 000000000..b5cc16947 --- /dev/null +++ b/www/render/index.html @@ -0,0 +1,41 @@ + + + + + + + + + +
+
+
+ + + diff --git a/www/render/main.js b/www/render/main.js new file mode 100644 index 000000000..9e42eef28 --- /dev/null +++ b/www/render/main.js @@ -0,0 +1,138 @@ +define([ + '/api/config?cb=' + Math.random().toString(16).substring(2), + '/common/realtime-input.js', + '/common/messages.js', + '/common/crypto.js', + '/common/marked.js', + '/common/convert.js', + '/bower_components/jquery/dist/jquery.min.js', + '/customize/pad.js' +], function (Config, Realtime, Messages, Crypto, Marked, Convert) { + var $ = jQuery; + + var Vdom = Convert.core.vdom, + Hyperjson = Convert.core.hyperjson, + Hyperscript = Convert.core.hyperscript; + + window.Vdom = Vdom; + window.Hyperjson = Hyperjson; + window.Hyperscript = Hyperscript; + + $(window).on('hashchange', function() { + window.location.reload(); + }); + if (window.location.href.indexOf('#') === -1) { + window.location.href = window.location.href + '#' + Crypto.genKey(); + return; + } + + var key = Crypto.parseKey(window.location.hash.substring(1)); + + var $textarea = $('textarea'), + $target = $('#target'); + + var stripScripts = function (md) { + return md.replace(/<[\s\S]*?script[\s\S]*?>[\s\S]*?<\/script[\s\S]*?>/ig, ""); + }; + + window.$textarea = $textarea; + + // set markdwon rendering options + Marked.setOptions({ + sanitize: true + }); + + window.draw = (function () { + var target = $target[0], + inner = $target.find('#inner')[0]; + + if (!target) { throw new Error(); } + + var Previous = Convert.dom.to.vdom(inner); + return function (md) { + // strip scripts or people get xss + var rendered = stripScripts(Marked(md||"")); + // make a dom + var R = $('
'+rendered+'
')[0]; + var New = Convert.dom.to.vdom(R); + var patches = Vdom.diff(Previous, New); + Vdom.patch(inner, patches); + Previous = New; + return patches; + }; + }()); + + window.colour = (function () { + var r = 0.6, + n = 24, + i = 0, + t = [], + rgb = [0,2,4]; + + while(i