mirror of
https://github.com/rabbibotton/clog.git
synced 2025-12-06 10:40:45 -08:00
80 lines
3.9 KiB
Common Lisp
80 lines
3.9 KiB
Common Lisp
(defpackage #:clog-user
|
|
(:use #:cl #:clog)
|
|
(:export start-tutorial))
|
|
|
|
(in-package :clog-user)
|
|
|
|
;;; In previous tutorials we attached to an html file using bootstrap. For this tutorial we
|
|
;;; are going to create a bootstrap 4.0 page just using CLOG.
|
|
|
|
(defun on-index (body)
|
|
(load-css (html-document body) "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css")
|
|
;; Bootstrap requires jQuery but there is no need to load it as so does CLOG so already loaded
|
|
;; the generic boot.html
|
|
(load-script (html-document body) "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js")
|
|
(load-script (html-document body) "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js")
|
|
;; Root page setup
|
|
(setf (title (html-document body)) "Hello Boostrap")
|
|
(let* ((nav (create-section body :nav :class "nav"))
|
|
;; Nav Bar
|
|
(l1 (create-a nav :content "link1" :class "nav-link"))
|
|
(l2 (create-a nav :content "link2" :class "nav-link"))
|
|
(l3 (create-a nav :content "link3" :class "nav-link"))
|
|
(l4 (create-a nav :content "link3" :class "nav-link" :link "/page2"))
|
|
;; Jumbotron message
|
|
(jumbo (create-div body :class "jumbotron text-center"))
|
|
(jname (create-section jumbo :h1 :content "My First Bootstrap Page"))
|
|
(tmp (create-p jumbo :content "Resize this responsive page to see the effect!"))
|
|
;; Container for three columns of text
|
|
(container (create-div body :class "container"))
|
|
(row (create-div container :class "row"))
|
|
;; Column 1
|
|
(col1 (create-div row :class "col-sm-4"))
|
|
(tmp (create-section col1 :h3 :content "Column 1"))
|
|
(tmp (create-p col1 :content "Lorem ipsum dolor.."))
|
|
;; Column 2
|
|
(col2 (create-div row :class "col-sm-4"))
|
|
(tmp (create-section col2 :h3 :content "Column 2"))
|
|
(tmp (create-p col2 :content "Lorem ipsum dolor.."))
|
|
;; Column 3
|
|
(col3 (create-div row :class "col-sm-4"))
|
|
(tmp (create-section col3 :h3 :content "Column 3"))
|
|
(tmp (create-p col3 :content "Lorem ipsum dolor..")))
|
|
(declare (ignore tmp) (ignore l4))
|
|
(set-on-click l1 (lambda (obj)(declare (ignore obj))(alert (window body) "Clicked link1")))
|
|
(set-on-click l2 (lambda (obj)
|
|
(declare (ignore obj))
|
|
(let* ((alert (create-div body :class "alert alert-warning alert-dismissible fade show"))
|
|
(tmp (create-phrase alert :strong :content "Wow! You clicked link 2"))
|
|
(btn (create-button alert :class "close" :content "<span>×</span>")))
|
|
(declare (ignore tmp))
|
|
(setf (attribute alert "role") "alert")
|
|
(setf (attribute btn "data-dismiss") "alert")
|
|
(place-after nav alert))))
|
|
(set-on-click l3 (lambda (obj)(declare (ignore obj))(setf (color jname) (rgb 128 128 0)))))
|
|
(run body))
|
|
|
|
(defun on-page2 (body)
|
|
;; Since page2 is a new browser page we need to reload our bootstrap files.
|
|
(load-css (html-document body) "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css")
|
|
(load-script (html-document body) "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js")
|
|
(load-script (html-document body) "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js")
|
|
;; Setup page2
|
|
(setf (title (html-document body)) "Hello Boostrap - page2")
|
|
(let* ((nav (create-section body :nav :class "nav"))
|
|
;; Nav Bar
|
|
(l1 (create-a nav :content "link1" :class "nav-link"))
|
|
(l2 (create-a nav :content "link2" :class "nav-link"))
|
|
(l3 (create-a nav :content "link3" :class "nav-link"))
|
|
(l4 (create-a nav :content "page1" :class "nav-link" :link "/"))
|
|
;; Jumbotron
|
|
(jumbo (create-div body :class "jumbotron text-center"))
|
|
(jname (create-section jumbo :h1 :content "You found Page2")))
|
|
(declare (ignore l1) (ignore l2) (ignore l3) (ignore l4) (ignore jname)))
|
|
(run body))
|
|
|
|
(defun start-tutorial ()
|
|
"Start turtorial."
|
|
(initialize #'on-index)
|
|
(set-on-new-window #'on-page2 :path "/page2")
|
|
(open-browser))
|