blob: d1de0c085784cd55382f0effbd102bf78295e47c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
|
;;;; user.lisp
(in-package :vampire)
;;; CLIENT UI
(defun create-new-playlist-form (parent &rest args)
(declare (ignorable args))
(with-clog-create parent
(div ()
(section (:h2 :content "Create New Playlist"))
(label (:content "Playlist Title:"))
(form-element (:text :bind pl-title))
(button (:content "Create" :bind btn)))
(set-on-click
btn
(thunk*
(new-playlist (session-user parent) :title (value pl-title))
(reload (location (connection-body parent)))))))
(defun url-to-playlist (pl)
(format nil "/playlist/~a"
(key pl)))
(defun create-playlist-listing (parent)
(dolist (pl (user-playlists (session-user parent)))
(let ((url
(url-to-playlist pl)))
(with-clog-create parent
(div ()
(section (:h4)
(a (:link url :content (playlist-title pl) :bind pl-link))))
(set-on-click
pl-link
(thunk*
(setf (url (location (connection-body parent)))
url)))))))
(defun create-invite-list-item (invite-list invite)
(with-clog-create invite-list
(list-item (:bind item)
(button (:bind delbtn :content "delete"))
(p ()
(span (:content "Code: "))
(span (:content (key invite))))
(p ()
(span (:content "Uses Remaining: "))
(span (:content
(format nil "~a"
(or (uses-remaining invite) "unlimited"))))))
(set-on-click delbtn (thunk*
(destroy-invite invite)
(destroy item)))) )
(defun create-invite-control (parent)
(let* ((user (session-user parent))
(container (create-div parent))
(invite-list (create-unordered-list parent)))
(place-after (create-section container :h3 :content "Your Invites")
invite-list)
;; list invites
(dolist (invite (invites-by-maker user))
(create-invite-list-item invite-list invite))
(with-clog-create container
(form ()
(button (:bind createbtn :content "Create Invite"))
(form-element (:number :bind count))
(p (:content "Uses are optional. Blank or Zero means unlimited use.")))
(setf (minimum count) 0
(place-holder count) "Uses"
(width count) 70)
(set-on-click
createbtn
(thunk*
(let ((invite (make-invite user (parse-integer (value count) :junk-allowed t))))
(create-invite-list-item invite-list invite)))))))
(defun user-home-page (body)
(with-clog-create body
(div ()
(navigation-header ())
(p (:content (format nil "Welcome ~a" (user-name (session-user body)))))
(new-playlist-form ())
(playlist-listing ())
(invite-control ()))))
|