[Add new query-list-chooser and item-viewer code clinton@unknownlamer.org**20080327143551] { addfile ./src/query-list-chooser.lisp hunk ./src/query-list-chooser.lisp 1 +(in-package :com.tee-it-up-golf.web) + +;; Show Viewer + +(defcomponent item-viewer () + ((item :initarg :item :accessor viewer-item))) + +(defgeneric render-item (item-viewer item) + (:documentation "Render item contained within item-viewer")) + +(defmethod render ((self item-viewer)) + (render-item self (viewer-item self))) + +(defmethod render-item ((viewer item-viewer) (item null)) + (declare (ignore viewer item)) + (<:as-html "No Item")) + +;; Show Selector + +(defcomponent item-selector (item-viewer) + ((full-viewer-class :initarg :viewer-class :initform 'item-viewer + :accessor viewer-class))) + +(defgeneric render-item-for-select (item-selector item) + (:documentation "Render item for being selected. This should wrap + the object in a link, add controls, etc. to invoke the viewer-class + of the item-selector.")) +(defgeneric render-item-in-select (selector) + (:documentation "Calls the primary method of render-item when it + must be used within render-item-for-select.")) + +(defmethod render-item-in-select ((selector item-selector)) + (declare (special *selector-item* *render-item*)) + (funcall *render-item* selector *selector-item*)) + +;; after updating swank kill render (item-selector) + +(defmethod render-item :around ((selector item-selector) item) + (let ((*selector-item* item) + (*render-item* #'call-next-method)) + (declare (special *selector-item* *render-item*)) + (render-item-for-select selector item))) + +(defmethod render-item-for-select ((selector item-selector) item) + (