(in-package #:blank-site) ;;step 1 serve the modified js (alexandria:define-constant +boot-js+ (alexandria:read-file-into-string "static/boot.js") :test #'string=) (setf (ningle:route *app* "/static/boot.js") (lambda (params) (setf (lack.response:response-headers ningle:*response*) (append (lack.response:response-headers ningle:*response*) (list :content-type "application/javascript"))) (str:replace-all "((PORT))" (format nil "~D" *clog-port*) +boot-js+))) (alexandria:define-constant +jquery+ (alexandria:read-file-into-string "static/jquery.min.js") :test #'string=) (setf (ningle:route *app* "/static/jquery.min.js") (lambda (params) (setf (lack.response:response-headers ningle:*response*) (append (lack.response:response-headers ningle:*response*) (list :content-type "application/javascript"))) +jquery+)) ;;step 2 add those scripts to a clog-page class (defclass clog-page (page) ()) (defmethod scripts progn ((page clog-page) &rest args) (declare (ignore args)) (spinneret:with-html (:script :src "/static/jquery.min.js") (:script :src "/static/boot.js"))) ;;step 3 write the code for handling the connection and start clog on chosen port (defclass clog-routine () ()) (defgeneric execute-clog (clog-routine body)) (defmethod execute-clog ((c main-routine) body) (let* ((div (clog:create-div body)) (p (clog:create-p div :content "hi hi I am clog powered"))))) (defun handle-clog-connection (body) (let* ((connection-data (clog:connection-data body)) (path (gethash "clog-path" connection-data))) (cond ((string= path "/") (execute-clog (make-instance 'main-routine) body))))) ;;step 4 win