diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/htmlbuilder.js | 46 | ||||
-rw-r--r-- | lib/key.js | 16 | ||||
-rw-r--r-- | lib/sd.js | 61 | ||||
-rw-r--r-- | lib/stores.js | 12 |
4 files changed, 135 insertions, 0 deletions
diff --git a/lib/htmlbuilder.js b/lib/htmlbuilder.js new file mode 100644 index 0000000..7343116 --- /dev/null +++ b/lib/htmlbuilder.js @@ -0,0 +1,46 @@ +function makeSigmaHtmlPlusElement(elem) { + elem.child = function (type) { + let childElem = makeSigmaHtmlPlusElement(document.createElement(type)); + elem.appendChild(childElem) + return childElem; + } + elem.html = function (html) { + elem.innerHTML = html; + return elem; + } + elem.text = function (text) { + elem.innerText = text; + return elem; + } + elem.attr = function (attribute, value) { + elem.setAttribute(attribute, value); + return elem; + } + elem.class = function (className) { + elem.classList.add(className) + return elem; + } + elem.do = function (a, params) { + elem.a(...params) + return elem; + } + elem.ev = function (event, listener) { + elem.addEventListener(event, listener) + return elem; + } + elem.up = function () { + return elem.parentElement + } + elem.for = function (array, func) { + array.forEach(element => elem.appendChild(func(element))); + return elem + } + return elem; +} + +/** + * @param {String} type HTML element type + */ +export default function make(type) { + return makeSigmaHtmlPlusElement(document.createElement(type)); +} \ No newline at end of file diff --git a/lib/key.js b/lib/key.js new file mode 100644 index 0000000..7f7971a --- /dev/null +++ b/lib/key.js @@ -0,0 +1,16 @@ +window.onkeydown = function (e) { + if (!e) e = window.event; + shiftHeld = e.shiftKey; +}; + +window.onkeyup = function (e) { + if (!e) e = window.event; + shiftHeld = e.shiftKey; +}; + +window.onmousemove = function (e) { + if (!e) e = window.event; + shiftHeld = e.shiftKey; +}; + +export let shiftHeld; \ No newline at end of file diff --git a/lib/sd.js b/lib/sd.js new file mode 100644 index 0000000..69bd067 --- /dev/null +++ b/lib/sd.js @@ -0,0 +1,61 @@ +import "https://unpkg.com/eventemitter3@latest/dist/eventemitter3.umd.min.js" + +export default class SoktDeer { + /** @type {string} */ + token = ''; + /** @type {boolean} */ + loggedIn = false; + /** @type {WebSocket} */ + ws; + /** @type {import("node:events").EventEmitter} */ + wsEvents = new EventEmitter3(); + + /** @type {any[]} */ + messages = []; + constructor (wsUri="wss://sokt.meltland.dev") { + this.ws = new WebSocket(wsUri); + this.ws.onmessage = (rdata) => { + const data = JSON.parse(rdata.data.toString()); + console.info("SD", "INCOMING", data) + if ('token' in data) return this.wsEvents.emit('token', data.token); + if ('command' in data) return this.wsEvents.emit(data.command, data); + if ('error' in data) return this.wsEvents.emit('error', data); + } + this.wsEvents.on('greet', greetp => { + this.messages = greetp.messages + }) + this.wsEvents.on('new_post', ({data: post}) => { + this.messages.push(post) + }) + } + login(username, password) { + return new Promise((resolve, reject) => { + this.ws.send(JSON.stringify({ + command: "login_pswd", + username, + password + })) + this.wsEvents.once('token', token => { + this.token = token; + resolve(token) + }) + this.wsEvents.once('error', error => { + if(error.error) { + reject(error.code) + } + }) + }) + } + loginToken(token) { + return new Promise((resolve, reject) => { + this.ws.send(JSON.stringify({ + command: "login_token", + token + })) + this.wsEvents.once('error', error => { + if(error.error) reject(error.code) + else resolve() + }) + }) + } +} \ No newline at end of file diff --git a/lib/stores.js b/lib/stores.js new file mode 100644 index 0000000..eacb5e2 --- /dev/null +++ b/lib/stores.js @@ -0,0 +1,12 @@ +export function set(store, value) { + window.stores[store] = value + Object.values(window.storesEvents).forEach(ev => {if(ev.store == store) cb()}) +} +export function update(store) { + Object.values(window.storesEvents).forEach(ev => {if(ev.store == store) cb()}) +} +export function onChange(store, cb) { + let id = nextStoresEventID++; + storesEvents[id] = {store, cb}; + return id; +} \ No newline at end of file |