compiled-boot-html support and support for custom html from boot-function alone

This commit is contained in:
David Botton 2022-04-06 16:20:29 -04:00
parent a27e86a197
commit 85b006e109
2 changed files with 64 additions and 29 deletions

View file

@ -46,6 +46,7 @@ script."
"CLOG system utilities"
(escape-string function)
(compiled-boot-html function)
"CLOG connections"
@ -305,6 +306,7 @@ the default answer. (Private)"
(port 8080)
(boot-file "/boot.html")
(boot-function nil)
(static-boot-html nil)
(static-boot-js nil)
(static-root #P"./static-files/"))
"Initialize CLOG on a socket using HOST and PORT to serve BOOT-FILE
@ -314,9 +316,10 @@ clog-path's will be setup, use clog-path to add. The
on-connect-handler needs to indentify the path by querying the
browser. See PATH-NAME (in CLOG-LOCATION). If static-boot-js is nil
then boot.js is served from the file /js/boot.js instead of the
compiled version. boot-function if set is called with the url and the
contents of boot-file and its return value replaces the contents sent
to the brower."
compiled version. Is static-boot-html is t if boot.html is not present
will use compiled version. boot-function if set is called with the url
and the contents of boot-file and its return value replaces the
contents sent to the brower."
(set-on-connect on-connect-handler)
(when boot-file
(set-clog-path "/" boot-file))
@ -339,9 +342,14 @@ to the brower."
(let ((file (uiop:subpathname static-root clog-path)))
(with-open-file (stream file :direction :input
:if-does-not-exist nil)
(let ((page-data (make-string (file-length stream)))
(let ((page-data (if stream
(make-string (file-length stream))
(if static-boot-html
(compiled-boot-html nil nil)
"")))
(post-data))
(read-sequence page-data stream)
(when stream
(read-sequence page-data stream))
(when boot-function
(setf page-data (funcall boot-function
(getf env :path-info)
@ -539,6 +547,30 @@ the browser contents in case of connection loss."
(execute connection-id (format nil "clog['html_on_close']='~A'"
(escape-string html))))
;;;;;;;;;;;;;;;;;;;;;;;;
;; compiled-boot-html ;;
;;;;;;;;;;;;;;;;;;;;;;;;
(defun compiled-boot-html (path content)
"Returns a compiled version of current version of boot.html"
"<!doctype HTML>
<HTML>
<HEAD>
<meta http-equiv='Cache-Control' content='no-cache, no-store, must-revalidate' />
<meta http-equiv='Pragma' content='no-cache' />
<meta http-equiv='Expires' content='0' />
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<script src='/js/jquery.min.js' type='text/javascript'></script>
<script src='/js/boot.js' type='text/javascript'></script>
<noscript><%= (@ meta) %></noscript>
</HEAD>
<BODY>
<noscript><%= (@ body) %></noscript>
</BODY>
<noscript>Your browser must support JavaScript and be HTML 5 compilant to see this site.</noscript>
</HTML>")
;;;;;;;;;;;;;;;;;;;;;;
;; compiled-boot-js ;;
;;;;;;;;;;;;;;;;;;;;;;

View file

@ -52,6 +52,7 @@ the same as the clog directy this overides the relative paths used in them.")
(port 8080)
(boot-file "/boot.html")
(boot-function nil)
(static-boot-html nil)
(static-boot-js nil)
(static-root (merge-pathnames "./static-files/"
(asdf:system-source-directory :clog))))
@ -60,15 +61,17 @@ as the default route to establish web-socket connections and static
files located at STATIC-ROOT. If CLOG was already initialized and not
shut down, this function does the same as set-on-new-window (does not
change the static-root). If ON-NEW-WINDOW-HANDLER is nil no handler is
set and none is removed. STATIC-ROOT by default is the \"directory CLOG
is installed in ./static-files\" If the variable clog:*overide-static-root*
is set STATIC-ROOT will be ignored. If BOOT-FILE is nil no default
boot-file will be set for root path, i.e. /. If static-boot-js is t
then boot.js is served from the file /js/boot.js instead of the
compiled version. boot-function if set is called with the url and the
contents of boot-file and its return value replaces the contents sent
to the brower, this allows adding content for search engine optimization,
see tutorial 12 for an example."
set and none is removed. STATIC-ROOT by default is the \"directory
CLOG is installed in ./static-files\" If the variable
clog:*overide-static-root* is set STATIC-ROOT will be ignored. If
BOOT-FILE is nil no default boot-file will be set for root path,
i.e. /. If static-boot-js is t then boot.js is served from the file
/js/boot.js instead of the compiled version. Is static-boot-html is t
if boot.html is not present will use compiled version. boot-function
if set is called with the url and the contents of boot-file and its
return value replaces the contents sent to the brower, this allows
adding content for search engine optimization, see tutorial 12 for an
example."
(when on-new-window-handler
(set-on-new-window on-new-window-handler :path "/" :boot-file boot-file))
(unless *clog-running*
@ -81,6 +84,7 @@ see tutorial 12 for an example."
:port port
:boot-file boot-file
:boot-function boot-function
:static-boot-html static-boot-html
:static-boot-js static-boot-js
:static-root *static-root*)))
@ -129,4 +133,3 @@ for openning windows on remote machines."
(trivial-open-browser:open-browser url)
(error (c)
(format t "Unable to open browser.~%~%~A" c))))