diff options
Diffstat (limited to 'app.js')
-rw-r--r-- | app.js | 193 |
1 files changed, 193 insertions, 0 deletions
@@ -0,0 +1,193 @@ +var screen = h('div', {id: 'screen'}) + +document.body.appendChild(screen) + +var header = h('div', {classList: 'message'}) + +var keys = getKeys() + +function compose (keys, opts) { + var header = h('div', {classList: 'message'}) + var scroller = document.getElementById('scroller') + + scroller.insertBefore(header, scroller.firstChild) + + var textarea = h('textarea', {placeholder: 'Write a new bog post'}) + + header.appendChild(textarea) + + var composer = h('div', [ + h('button', { + onclick: function () { + if (textarea.value) { + var content = { + author: keys.publicKey, + type: 'post', + text: textarea.value, + timestamp: Date.now() + } + textarea.value = '' + publish(content, keys) + } + } + }, ['Publish']) + ]) + + header.appendChild(composer) +} + +function route () { + src = window.location.hash.substring(1) + var scroller = h('div', {id: 'scroller'}) + var screen = document.getElementById('screen') + + + screen.appendChild(scroller) + + if (src === 'key') { + var keyMessage = h('div', {classList: 'message'}) + + // delete key button + keyMessage.appendChild(h('button', {classList: 'right', + onclick: function () { + localStorage['id'] = '' + location.reload() + } + }, ['Delete Key'])) + + // print stringified keypair + keyMessage.appendChild(h('pre', {style: 'width: 80%'}, [h('code', [JSON.stringify(keys)])])) + + scroller.appendChild(keyMessage) + } + + else if (src[0] === '@') { + var profile = h('div', {classList: 'message'}) + scroller.appendChild(profile) + + var nameInput = h('input', {placeholder: 'Publish a new name'}) + + var namePublisher = h('div',[ + nameInput, + h('button', { + onclick: function () { + if (nameInput.value) { + + var content = { + author: keys.publicKey, + type: 'name', + text: nameInput.value, + timestamp: Date.now() + } + + publish(content, keys) + } + } + }, ['Publish']) + ]) + + profile.appendChild(namePublisher) + + readFile() + + var imageInput = h('span', [ + h('input', {id: 'inp', type:'file'}), + h('span', {id: 'b64'}), + h('img', {id: 'img'}) + ]) + + var imagePublisher = h('div', [ + imageInput, + h('button', { + onclick: function () { + var content = { + author: keys.publicKey, + type: 'image', + image: document.getElementById("img").src, + timestamp: Date.now() + } + + publish(content, keys) + } + }, ['Publish']) + ]) + + profile.appendChild(imagePublisher) + + document.getElementById("inp").addEventListener("change", readFile); + + + var ws = new WebSocket('ws://localhost:8080/' + src) + + var clientLog = { + publicKey: src + } + + if (localStorage[src]) { + clientLog.log = JSON.parse(localStorage[src]) + } else { + clientLog.log = [] + } + + /*if (localSTorage['log']) { + var publicLog = localStorage['log'] + } else { + var publicLog = [] + }*/ + + ws.onopen = function () { + ws.send(JSON.stringify(clientLog)) + } + + ws.onmessage = function (ev) { + var serverData = JSON.parse(ev.data) + if (serverData.log.length > clientLog.log.length) { + localStorage[src] = JSON.stringify(serverData.log) + location.reload() + } + } + + if (localStorage[src]) { + var log = JSON.parse(localStorage[src]) + for (var i=0; i < log.length; i++) { + var post = log[i] + scroller.appendChild(renderMessage(post)) + } + } + } + + else if (src[0] === '%') { + if (localStorage['log']) { + var log = JSON.parse(localStorage['log']) + for (var i=0; i < log.length; i++) { + if (log[i].key === src) { + var post = log[i] + scroller.appendChild(renderMessage(post)) + } + } + } + } + + else { + compose(keys) + if (localStorage['log']) { + var log = JSON.parse(localStorage['log']) + for (var i=0; i < log.length; i++) { + var post = log[i] + scroller.appendChild(renderMessage(post)) + + } + } + } +} + + +route() + +window.onhashchange = function () { + var oldscreen = document.getElementById('screen') + var newscreen = h('div', {id: 'screen'}) + oldscreen.parentNode.replaceChild(newscreen, oldscreen) + route() +} + |