From 9f749b30674ea1ec568403834ec367475ec74693 Mon Sep 17 00:00:00 2001
From: Philippe PITTOLI
Date: Tue, 3 Dec 2019 05:29:09 +0100
Subject: [PATCH] list lists ok
---
client/authd.ls | 45 +++++----
client/index.ls | 55 +++++------
client/todowebsocket.ls | 209 ++++++++++++++++++++++------------------
3 files changed, 166 insertions(+), 143 deletions(-)
diff --git a/client/authd.ls b/client/authd.ls
index 1e842e7..a0ace41 100644
--- a/client/authd.ls
+++ b/client/authd.ls
@@ -3,37 +3,39 @@ h = require 'maquette' .h
module.exports = {
- create-socket: ->
+ create-socket: (socket-url) ->
self = {}
request-types = {
- \get-token: 0
- \add-user: 1
- \get-user: 2
- \get-user-by-credentials: 3
- \mod-user: 4
+ "get-token": 0
+ "add-user": 1
+ "get-user": 2
+ "get-user-by-credentials": 3
+ "mod-user": 4
}
response-types = {
- \error: 0
- \token: 1
- \user: 2
- \user-added: 3
- \user-edited: 4
+ "error": 0
+ "token": 1
+ "user": 2
+ "user-added": 3
+ "user-edited": 4
}
# TODO: naming convention
# users can record functions to run on events
self.user-on-socket-error = []
- self.user-on-close = []
+ self.user-on-socket-close = []
self.callbacks = {}
- for key, value in response-types
- self.callbacks[key] = []
+ for key, value of response-types
+ self.callbacks[value] = []
# self.user-on-message = []
self.add-event-listener = (type, callback) ->
+ console.log "authd: add event listener", type, callback, response-types[type]
+ console.log response-types
type = response-types[type]
self.callbacks[type] ++= [callback]
@@ -48,13 +50,14 @@ module.exports = {
self.socket.close!
self.socket.onclose = (event) ->
- for f in self.user-on-close
+ for f in self.user-on-socket-close
f event
self.socket.onmessage = (event) ->
message = JSON.parse(event.data)
+ console.log "authd message received: ", message
- for f in self.callbacks[message.type]
+ for f in self.callbacks[message.mtype]
f JSON.parse(message.payload)
self.reopen = ->
@@ -68,13 +71,13 @@ module.exports = {
self.socket.send JSON.stringify { mtype: type, payload: opts }
self.get-token = (login, password) ->
- self.send request-type.get-token, JSON.stringify {
+ self.send request-types[\get-token], JSON.stringify {
login: login
password: password
}
self.get-user-by-credentials = (login, password) ->
- self.send request-type.get-user-by-credentials, JSON.stringify {
+ self.send request-types[\get-user-by-credentials], JSON.stringify {
login: login
password: password
}
@@ -85,20 +88,20 @@ module.exports = {
self.get-user = (uid) ->
- self.send request-type.get-user, JSON.stringify {
+ self.send request-types[\get-user], JSON.stringify {
uid: uid
}
# TODO: authd overhaul
#self.add-user = (login, password) ->
- # self.send request-type.add-user, JSON.stringify {
+ # self.send request-types[\add-user], JSON.stringify {
# login: login
# password: password
# }
# TODO: authd overhaul
#self.mod-user = (uid) ->
- # self.send request-type.mod-user, JSON.stringify {
+ # self.send request-types[\mod-user], JSON.stringify {
# uid: uid
# }
diff --git a/client/index.ls b/client/index.ls
index ab1ee02..331112f 100644
--- a/client/index.ls
+++ b/client/index.ls
@@ -85,7 +85,7 @@ model.todod-url =
(if location.protocol == 'https' then 'wss' else 'ws') +
'://' + location.hostname + \: +
model.port +
- "/kanban.JSON"
+ "/todo.JSON"
console.log "authd url: " + model.authd-url
console.log "todod url: " + model.todod-url
@@ -119,21 +119,22 @@ authd-on-websocket-close = (event) ->
# record changes that need to happen on a network event
model.authd-ws.user-on-socket-error ++= [ authd-on-websocket-error ]
-model.authd-ws.user-on-close ++= [ authd-on-websocket-close ]
+model.authd-ws.user-on-socket-close ++= [ authd-on-websocket-close ]
# authd message handlers
-authd.add-event-listener \token, (message) ->
+model.authd-ws.add-event-listener \token, (message) ->
model.jwt := message.token
model.current-view := "todo-list"
+ model.todod-ws.list-lists model.jwt
projector.schedule-render!
-authd.add-event-listener \error, (message) ->
+model.authd-ws.add-event-listener \error, (message) ->
console.log "authd error", message
projector.schedule-render!
-authd.add-event-listener \user, (message) ->
+model.authd-ws.add-event-listener \user, (message) ->
model.users[message.user.uid] := message.user
projector.schedule-render!
@@ -159,33 +160,29 @@ on-websocket-close = (event) ->
projector.schedule-render!
-on-websocket-message = (data) ->
- message = JSON.parse data
-
- switch message.type
- when "login"
- model.current-view := "todo-list"
- when "list-projects"
- model.todo-list := message.projects || []
- when "project"
- model.projects[message.project.id] = Project.new message.project, model
- when "user"
- if message.user
- model.users[message.user.uid] := message.user
- when "login-error"
- model.login-error = message.error
- else
- console.log "RECEIVED UNKNOWN MESSAGE TYPE: #{message.type}"
-
- projector.schedule-render!
-
- console.log message
+# TODO
+# on-websocket-message = (data) ->
+# message = JSON.parse data
+#
+# switch message.type
+# when "login"
+# model.current-view := "todo-list"
+# when "list-projects"
+# when "project"
+# model.projects[message.project.id] = Project.new message.project, model
+# when "user"
+# if message.user
+# model.users[message.user.uid] := message.user
# record changes that need to happen on a network event
model.todod-ws.user-on-socket-error ++= [ on-websocket-error ]
-model.todod-ws.user-on-close ++= [ on-websocket-close ]
-model.todod-ws.user-on-message ++= [ on-websocket-message ]
+model.todod-ws.user-on-socket-close ++= [ on-websocket-close ]
+model.todod-ws.add-event-listener \lists-list, (message) ->
+ console.log message
+ model.todo-list := message.lists
+
+ projector.schedule-render!
render-navbar = ->
h \div.navbar [
@@ -215,7 +212,7 @@ render-todo-list = ->
model.viewed-project := project.id
model.todod-ws.get-project project.id
} [
- bulma.title 4 project.name
+ bulma.title 4 project.title
]
render-new-project-button = ->
diff --git a/client/todowebsocket.ls b/client/todowebsocket.ls
index 870063a..d888452 100644
--- a/client/todowebsocket.ls
+++ b/client/todowebsocket.ls
@@ -8,29 +8,66 @@ module.exports = {
create-socket: (socket-url) ->
self = {}
+ request-types = {
+ "list-lists": 0
+ "get-list": 1
+ "add-list": 2
+ "edit-list": 3
+ "remove-list": 4
+ "get-tasks": 5
+ "get-task": 6
+ "add-task": 7
+ "remove-task": 8
+ "edit-task": 9
+ }
+
+ response-types = {
+ "ok": 0
+ "error": 1
+ "lists-list": 2
+ "new-list": 3
+ "list-removed": 4
+ "list-updated": 5
+ "tasks": 6
+ "task": 7
+ "task-created": 8
+ "task-removed": 9
+ "task-updated": 10
+ }
+
# users can record functions to run on events
- self.user-on-error = []
- self.user-on-close = []
- self.user-on-message = []
+ self.user-on-socket-error = []
+ self.user-on-socket-close = []
+
+ self.callbacks = {}
+ for key, value of response-types
+ self.callbacks[value] = []
+
+ self.add-event-listener = (type, callback) ->
+ console.log "add event listener", type, callback, response-types[type]
+ type = response-types[type]
+
+ self.callbacks[type] ++= [callback]
self.open-socket = ->
console.log "Opening socket to #{socket-url}"
self.socket := new WebSocket socket-url
self.socket.onerror = (event) ->
- for f in self.user-on-error
+ for f in self.user-on-socket-error
f event
self.socket.close!
self.socket.onclose = (event) ->
- for f in self.user-on-close
+ for f in self.user-on-socket-close
f event
self.socket.onmessage = (event) ->
- data = JSON.parse(event.data).payload
+ message = JSON.parse(event.data)
+ console.log "todod message received: ", message
- for f in self.user-on-message
- f data
+ for f in self.callbacks[message.mtype]
+ f JSON.parse(message.payload)
self.reopen = ->
self.socket.close!
@@ -38,109 +75,95 @@ module.exports = {
self.open-socket!
- self.send = (opts) ->
- console.log JSON.stringify {
- mtype: 0,
- payload: opts
+ self.send = (type, opts) ->
+ console.log JSON.stringify { mtype: type, payload: opts }
+ self.socket.send JSON.stringify { mtype: type, payload: opts }
+
+
+ self.list-lists = (token) ->
+ self.send request-types[\list-lists], JSON.stringify {
+ token: token
}
- self.socket.send JSON.stringify {
- mtype: 0,
- payload: opts
- }
+ # self.get-user = (uid) ->
+ # self.send JSON.stringify {
+ # type: "get-user"
+ # uid: uid
+ # }
- self.get-project = (project-id) ->
- self.send JSON.stringify {
- type: "project",
- project: project-id
- }
+ # self.new-project = (name) ->
+ # self.send JSON.stringify {
+ # type: "new-project"
+ # name: name
+ # }
- self.login = (login, password) ->
- self.send JSON.stringify {
- type: "login",
- login: login
- password: password
- }
+ # self.edit-task = (project-id, task-id, options) ->
+ # payload = {
+ # type: "edit-task"
+ # project: project-id
+ # task: task-id
+ # }
- self.get-user = (uid) ->
- self.send JSON.stringify {
- type: "get-user"
- uid: uid
- }
+ # for key, value of options
+ # payload[key] = value
- self.new-project = (name) ->
- self.send JSON.stringify {
- type: "new-project"
- name: name
- }
+ # self.send JSON.stringify payload
- self.edit-task = (project-id, task-id, options) ->
- payload = {
- type: "edit-task"
- project: project-id
- task: task-id
- }
+ # self.delete-task = (project-id, task-id) ->
+ # self.send JSON.stringify {
+ # type: "delete-task"
+ # project: project-id
+ # task: task-id
+ # }
- for key, value of options
- payload[key] = value
+ # self.edit-column = (project-id, column-id, options) ->
+ # payload = {
+ # type: "edit-column"
+ # project: project-id
+ # column: column-id
+ # }
- self.send JSON.stringify payload
+ # for key, value of options
+ # payload[key] = value
- self.delete-task = (project-id, task-id) ->
- self.send JSON.stringify {
- type: "delete-task"
- project: project-id
- task: task-id
- }
+ # self.send JSON.stringify payload
- self.edit-column = (project-id, column-id, options) ->
- payload = {
- type: "edit-column"
- project: project-id
- column: column-id
- }
+ # self.delete-column = (project-id, column-id) ->
+ # self.send JSON.stringify {
+ # type: "delete-column"
+ # project: project-id
+ # column: column-id
+ # }
- for key, value of options
- payload[key] = value
+ # self.new-column = (project-id, name) ->
+ # self.send JSON.stringify {
+ # type: "new-column"
+ # project: project-id
+ # name: name
+ # }
- self.send JSON.stringify payload
+ # self.new-task = (project-id, column-id, options) ->
+ # payload = {
+ # type: "new-task"
+ # project: project-id
+ # column: column-id
+ # }
- self.delete-column = (project-id, column-id) ->
- self.send JSON.stringify {
- type: "delete-column"
- project: project-id
- column: column-id
- }
+ # for key, value of options
+ # payload[key] = value
- self.new-column = (project-id, name) ->
- self.send JSON.stringify {
- type: "new-column"
- project: project-id
- name: name
- }
+ # self.send JSON.stringify payload
- self.new-task = (project-id, column-id, options) ->
- payload = {
- type: "new-task"
- project: project-id
- column: column-id
- }
+ # self.edit-project = (project-id, options) ->
+ # payload = {
+ # type: "edit-project"
+ # project: project-id
+ # }
- for key, value of options
- payload[key] = value
+ # for key, value of options
+ # payload[key] = value
- self.send JSON.stringify payload
-
- self.edit-project = (project-id, options) ->
- payload = {
- type: "edit-project"
- project: project-id
- }
-
- for key, value of options
- payload[key] = value
-
- self.send JSON.stringify payload
+ # self.send JSON.stringify payload
self
}