diff options
Diffstat (limited to 'home.lisp')
-rw-r--r-- | home.lisp | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/home.lisp b/home.lisp new file mode 100644 index 0000000..c0ec8a6 --- /dev/null +++ b/home.lisp @@ -0,0 +1,56 @@ +;;;; user.lisp + +(in-package :vampire) + +;;; CLIENT STATE + +(defclass/std user-ctl () + ()) + + +;;; CLIENT CONTROL + +;;; 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 &rest args) + (declare (ignorable args)) + (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 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 ())))) + + |