diff --git a/source/clog-base.lisp b/source/clog-base.lisp index 9c65df6..c47fc05 100644 --- a/source/clog-base.lisp +++ b/source/clog-base.lisp @@ -625,11 +625,17 @@ option passed from javascript calling the jQuery custom event mechanism (defgeneric set-on-resize (clog-obj on-resize-handler) (:documentation "Set the ON-RESIZE-HANDLER for CLOG-OBJ. If ON-RESIZE-HANDLER is nil unbind the event. In most modern browser this only works on the clog-window -object. One can set-on-resize and then re-trigger this event on any clog-obj -using (jquery-trigger obj \"resize\").")) +object, unless a ResizeObserver is put in place, so one is installed except for +clog-window making this event functional.")) (defmethod set-on-resize ((obj clog-obj) handler) - (set-on-event obj "resize" handler :cancel-event t)) + (set-on-event obj "resize" handler :cancel-event t) + (unless (typep obj 'clog-window) + (js-execute obj (format nil "new ResizeObserver(() => { + ~A.trigger('resize'); + }).observe(~A)" + (jquery obj) + (script-id obj))))) ;;;;;;;;;;;;;;;;;; ;; set-on-focus ;; diff --git a/tools/clog-builder-panels.lisp b/tools/clog-builder-panels.lisp index 35ad4b4..27d1a3b 100644 --- a/tools/clog-builder-panels.lisp +++ b/tools/clog-builder-panels.lisp @@ -212,8 +212,11 @@ return t on success" (getf control-record :positioning)) (t :absolute))) - (parent (when (getf data :shift-key) - (current-control app))) + (auto-parent (attribute content "data-clog-auto-parent")) + (parent (if (getf data :shift-key) + (current-control app) + (when auto-parent + (get-from-control-list app (html-id content) auto-parent)))) (control (create-control (if parent parent content) diff --git a/tools/clog-builder-render.lisp b/tools/clog-builder-render.lisp index 58a0349..1d7946e 100644 --- a/tools/clog-builder-render.lisp +++ b/tools/clog-builder-render.lisp @@ -111,28 +111,14 @@ handler) events)))))) ;; Set on-create (from user in builder) and on-setup (from control-record) - (let ((resizeh (attribute control "data-on-resize")) - (handler (attribute control "data-on-create"))) + (let ((handler (attribute control "data-on-create"))) (when (equalp handler "undefined") (setf handler "")) - (when (equalp resizeh "undefined") - (setf resizeh "")) (when (getf control-record :on-setup) (setf handler (format nil "~A~A" (funcall (getf control-record :on-setup) control control-record) handler))) - (unless (equal resizeh "") - (push (format nil - " \(js-execute panel - \(format nil \"new ResizeObserver\(\(\) => { - ~~A.trigger\('resize'\); - }\).observe\(~~A\)\" - \(jquery \(~A panel\)\) - \(script-id \(~A panel\)\)\)\)" - vname - vname) - creates)) (unless (equal handler "") (push (format nil " \(let \(\(target \(~A panel\)\)\) ~