list lists ok

dev
Philippe PITTOLI 2019-12-03 05:29:09 +01:00
parent 4f3517eb03
commit 9f749b3067
3 changed files with 166 additions and 143 deletions

View File

@ -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
# }

View File

@ -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 = ->

View File

@ -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
}