-;;;; * AJAX stuff
-
-;;;; TODO: This search stuff should probably me refactored elsewhere
-
-(defmethod find-slots-of-type (model &key (type 'string)
- (types '((string)) types-supplied-p))
- "returns a list of slots matching TYPE, or matching any of TYPES"
- (let (ty)
- (if types-supplied-p
- (setf ty types)
- (setf ty (list type)))
- (remove nil (mapcar #'(lambda (st) (when (member (second st) ty)
- (first st)))
- (lisp-on-lines::list-slot-types model)))))
-
-(defslot-presentation ajax-foreign-key-slot-presentation (foreign-key-slot-presentation)
- ((search-slots :accessor search-slots :initarg :search-slots :initform nil)
- (live-search
- :accessor live-search
- :component (lisp-on-lines:auto-complete
- :values-generator
- (lambda (value)
- (when (< 0 (length value))
- (limited-word-search 'person '(first-name last-name company-name) (list value))))
-
- :render (lambda (x)
- (<:as-html (if (> (length (last-name x)) 0)
- (strcat (last-name x) ", ")
- " ")
- (first-name x)" " (company-name x)))
- :as-value (lambda (x) x)
- :submit-on-click-p nil)))
- (:type-name ajax-foreign-key))
-
-
-(defmethod shared-initialize :after ((slot ajax-foreign-key-slot-presentation) slots &rest args)
- ;; If no search-slots than use the any slots of type string
- (unless (search-slots slot)
- (setf (search-slots slot) t)
- (let ((l (live-search slot)))
- (setf (lisp-on-lines::values-generator l) t))))
-
-
-(defmethod present-slot :around ((slot ajax-foreign-key-slot-presentation) instance)
- (setf (foreign-instance slot)
- (when (presentation-slot-value slot instance)
- (meta-model:explode-foreign-key instance (slot-name slot))))
- (flet ((render () (when (foreign-instance slot)(call-next-method))))
- (if (slot-boundp slot 'place)
- (cond
- ((editablep slot)
-
- (<ucw:submit :action (search-records slot instance) :value "find" :style "display:inline"))
- ((linkedp slot)
- (<ucw:a :action (view-instance slot (foreign-instance slot))
- (render)))
- (t
- (render)))
- ;; presentation is used only for rendering
- (render))))