aboutsummaryrefslogtreecommitdiff
path: root/app.js
diff options
context:
space:
mode:
Diffstat (limited to 'app.js')
-rw-r--r--app.js193
1 files changed, 193 insertions, 0 deletions
diff --git a/app.js b/app.js
new file mode 100644
index 0000000..da1a07c
--- /dev/null
+++ b/app.js
@@ -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()
+}
+