event drop down now shows if events exist or not

This commit is contained in:
David Botton 2022-07-12 23:48:12 -04:00
parent a9e778c965
commit 4e539c7303
4 changed files with 113 additions and 79 deletions

View file

@ -170,6 +170,15 @@ after attachment is changed to one unique to this session."))
attribute-name (escape-string value)))
value)
(defgeneric has-attribute (clog-element attribute-name)
(:documentation "Returns t if ATTRIBUTE-NAME exists on CLOG-ELEMENT"))
(defmethod has-attribute ((obj clog-element) attribute-name)
(when (equal (jquery-query obj (format nil "attr('~A')!==undefined"
attribute-name))
"true")
t))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Placement - clog-element
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

View file

@ -1083,11 +1083,18 @@ optionally fill in with contents of data-list."))
;;;;;;;;;;;;;;;;;
(defgeneric select-text (clog-obj)
(:documentation "Returns the text of selected item."))
(:documentation "Get/Setf the text of selected item."))
(defmethod select-text ((obj clog-obj))
(clog-connection:query (connection-id obj)
(format nil "$('#~A option:selected').text()" (html-id obj))))
(js-query obj (format nil "$('#~A option:selected').text()" (html-id obj))))
(defgeneric (setf select-text) (value clog-obj)
(:documentation "Setf the text of selected item."))
(defmethod (setf select-text) (value (obj clog-obj))
(js-execute obj (format nil "$('#~A option:selected').text('~A')"
(html-id obj)
(escape-string value))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Implementation - clog-option

View file

@ -202,6 +202,7 @@ embedded in a native template application.)"
(set-styles generic-function)
(attribute generic-function)
(remove-attribute generic-function)
(has-attribute generic-function)
"CLOG-Element - Properties"
(access-key generic-function)

View file

@ -760,36 +760,59 @@ not a temporary attached one when using select-control."
(defun on-populate-control-events-win (obj)
"Populate the control events for the current control"
;; obj if current-control is nil must be content
(let* ((app (connection-data-item obj "builder-app-data"))
(event-win (control-events-win app))
(elist (events-list app))
(control (if (current-control app)
(current-control app)
obj)))
(control (current-control app)))
(when event-win
(setf (inner-html elist) "")
(remove-attribute elist "data-current-event")
(set-on-blur (event-editor app) nil)
(set-on-change elist nil)
(let ((info (control-info (attribute control "data-clog-type"))))
(add-select-option elist "" "Select Event")
(setf (inner-html elist) "")
(remove-attribute elist "data-current-event")
(setf (text-value (event-editor app)) "")
(labels ((on-blur (obj)
(when control
(let ((info (control-info (attribute control "data-clog-type"))))
(labels ((populate-options (&key (current ""))
(set-on-change elist nil)
(setf (inner-html elist) "")
(add-select-option elist "" "Select Event")
(dolist (event (getf info :events))
(let ((attr (format nil "data-~A" (getf event :name))))
(add-select-option elist
(getf event :name)
(format nil "~A ~A (panel ~A)"
(if (has-attribute control attr)
"■ "
"□ ")
(getf event :name)
(getf event :parameters))
:selected (equal attr current))))
(set-on-change elist #'on-change))
(on-blur (obj)
(declare (ignore obj))
(set-on-blur (event-editor app) nil)
(let ((attr (attribute elist "data-current-event")))
(unless (equalp attr "undefined")
(let ((txt (text-value (event-editor app))))
(let ((opt (select-text elist))
(txt (text-value (event-editor app))))
(setf (char opt 0) #\space)
(setf opt (string-left-trim "#\space" opt))
(cond ((or (equal txt "")
(equalp txt "undefined"))
(setf (select-text elist) (format nil "~A ~A" (code-char 9633) opt))
(remove-attribute control attr))
(t
(setf (select-text elist) (format nil "~A ~A" (code-char 9632) opt))
(setf (attribute control attr) (text-value (event-editor app))))))
(jquery-execute (get-placer control) "trigger('clog-builder-snap-shot')")))))
(set-on-change elist (lambda (obj)
(jquery-execute (get-placer control) "trigger('clog-builder-snap-shot')")))
(set-on-blur (event-editor app) #'on-blur))
(on-change (obj)
(declare (ignore obj))
(set-on-blur (event-editor app) nil)
(let ((event (select-value elist "clog-events")))
(cond ((equal event "")
(set-on-blur (event-editor app) nil)
(remove-attribute elist "data-current-event")
(setf (text-value (event-editor app)) ""))
(t
(let* ((attr (format nil "data-~A" event))
@ -799,21 +822,15 @@ not a temporary attached one when using select-control."
""
txt))
(setf (attribute elist "data-current-event") attr)
(focus (event-editor app))
(set-on-blur (event-editor app) #'on-blur))))))))
(dolist (event (getf info :events))
(add-select-option elist
(getf event :name)
(format nil "~A (panel ~A)"
(getf event :name)
(getf event :parameters))))))))
(set-on-blur (event-editor app) #'on-blur)))))))
(populate-options)))))))
(defun on-populate-control-properties-win (obj &key win)
"Populate the control properties for the current control"
;; obj if current-control is nil must be content
(with-sync-event (obj)
(let ((app (connection-data-item obj "builder-app-data")))
(on-populate-control-events-win obj)
(let ((app (connection-data-item obj "builder-app-data")))
(let* ((prop-win (control-properties-win app))
(control (if (current-control app)
(current-control app)