;;;; 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 location) (format nil "~a//~a/playlist/~a" (protocol location) (host location) (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 (location (connection-body parent))))) (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 () (p (:content (format nil "Welcome ~a" (user-name (session-user body))))) (new-playlist-form ()) (playlist-listing ()))))