diff --git a/source/clog-document.lisp b/source/clog-document.lisp index 1d00ca9..45e3648 100644 --- a/source/clog-document.lisp +++ b/source/clog-document.lisp @@ -141,11 +141,28 @@ clog-document object. (Private)")) ;;;;;;;;;;;;;;;;; (defgeneric ready-state (clog-document) - (:documentation "Get ready-state.")) + (:documentation "Get ready-state. Returns 'loading'|'interactive'|'complete'. +The state would only change if the boot-page was still loading css, graphics, etc. +Under normal circumstance there is no need in CLOG to check if the state is ready +as on-new-window is only called once one can interact with page. See also +SET-ON-READY-STATE-CHANGE")) (defmethod ready-state ((obj clog-document)) (query obj "readyState")) +;;;;;;;;;;;;;;;;;;;;;; +;; visibility-state ;; +;;;;;;;;;;;;;;;;;;;;;; + +(defgeneric visibility-state (clog-document) + (:documentation "Get visibility-state. Returns the string 'visible' if +browser is in non-minmized state and is partialy visible and 'hidden' is +browser is minimized or no part of page is visible including an OS screen +lock.")) + +(defmethod visibility-state ((obj clog-document)) + (query obj "visibilityState")) + ;;;;;;;;;;;;;; ;; load-css ;; ;;;;;;;;;;;;;; @@ -286,3 +303,30 @@ If ON-FULL-SCREEN-CHANGE-HANDLER is nil unbind the event.")) (defmethod set-on-full-screen-change ((obj clog-document) handler) (set-on-event obj "fullscreenchange" handler)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; set-on-visibility-change ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defgeneric set-on-visibility-change (clog-document + on-visibility-change-handler) + (:documentation "Set the ON-VISIBILITY-CHANGE-HANDLER for CLOG-OBJ. +If ON-VISIBILITY-CHANGE-HANDLER is nil unbind the event. This event +is fired when the page visibility has changed such as a tab being +switch of browser minimized. Use the VISIBILITY-STATE property to +identify chage.")) + +(defmethod set-on-visibility-change ((obj clog-document) handler) + (set-on-event obj "visibilitychange" handler)) + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; set-on-ready-state-change ;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +(defgeneric set-on-ready-state-change (clog-document + on-ready-state-change-handler) + (:documentation "Set the ON-READY-STATE-CHANGE-HANDLER for CLOG-OBJ. +If ON-READY-STATE-CHANGE-HANDLER is nil unbind the event.")) + +(defmethod set-on-ready-state-change ((obj clog-document) handler) + (set-on-event obj "readystatechange" handler)) diff --git a/source/clog-helpers.lisp b/source/clog-helpers.lisp index ab7711b..883b815 100644 --- a/source/clog-helpers.lisp +++ b/source/clog-helpers.lisp @@ -92,12 +92,15 @@ ;; clog-repl ;; ;;;;;;;;;;;;;;; -(defun clog-repl (&key (clog-gui-initialize t) (clog-web-initialize t)) +(defun clog-repl (&key (clog-gui-initialize t) + (clog-web-initialize t) + (boot-file "/debug.html") + (port 8080)) "Set a path /repl that opens a blank page and sets the global clog-user:*body* to last window openned to /repl. Debug mode is -set (logging to browser console), " +set (logging to browser console) in the default debug.html boot-file." (unless *clog-running* - (initialize nil :boot-file "/debug.html")) + (initialize nil :boot-file boot-file :port port)) (set-on-new-window (lambda (body) (clog-connection:debug-mode (connection-id body)) (when clog-web-initialize diff --git a/source/clog.lisp b/source/clog.lisp index bbb1532..f6ea093 100644 --- a/source/clog.lisp +++ b/source/clog.lisp @@ -1010,6 +1010,7 @@ embedded in a native template application.)" (head-element generic-function) (body-element generic-function) (document-element generic-function) + (visibility-state generic-function) (ready-state generic-function) (load-css generic-function) (load-script generic-function) @@ -1020,6 +1021,8 @@ embedded in a native template application.)" "CLOG-Document - Events" (set-on-full-screen-change generic-function) + (set-on-visibility-change generic-function) + (set-on-ready-state-change generic-function) (set-on-load-script generic-function)) (defsection @clog-navigator (:title "CLOG Navigator Objects")