diff --git a/clog.lisp b/clog/clog.lisp similarity index 100% rename from clog.lisp rename to clog/clog.lisp diff --git a/clog/tutorials-simple-element.lisp b/clog/tutorials-simple-element.lisp new file mode 100644 index 0000000..747ad87 --- /dev/null +++ b/clog/tutorials-simple-element.lisp @@ -0,0 +1,87 @@ + +(ql:quickload :clog) + +(clog-install-dir) +;; #P"/home/efim/quicklisp/local-projects/clog/" + +(clog:run-tutorial 1) + +(in-package clog-user) + +(defun my-setup (body) + (let ((header (create-child body "

lalalla

")) + (colors '(:black :blue :green))) + (setf (color header) :pink) + (set-on-click header + (lambda (obj) + (declare (ignore obj)) + ;; if set value in debugger, this is how to delete it + ;; since it's just created in image + ;; (boundp 'colors) + ;; (makunbound 'colors) + (nth (random (length colors)) colors) + (setf (color header) (nth (random (length colors)) colors))))) + (create-child body "

lalalla

")) ; now, that doesn't work. + +(initialize #'my-setup) +(open-browser) + +;; now again, what about color keywords +;; well, maybe there's some kind of filtering for correct color values + +;; and ispecting source is easier with sly-inspect-definition + +;; let's look at second tutorial? + +;; more lispier creation of elements +(clog:run-tutorial 2) + + + ;; :address :article :aside :header :main :nav :hgroup + ;; :p :pre :section :blockquote :h1 :h2 :h3 :h4 :h5 :h6 +(defun my-setup-with-more-elements (body) + (let ((my-h1 (create-section body :h1 :content "content of h1"))) + (create-section body :address :content "what-s content of address?") + (create-section body :article :content "what-s content of article?") + (create-section body :aside :content "what-s content of aside?") + (format t "running setup on ~S with ~S" body my-h1))) + +;; article is "independent content" which should be reasonable to distribute on its own +;; aside - to put content out of main column? +;; main - The content inside the
element should be unique to the +;; document. It should not contain any content that is repeated across documents +;; such as sidebars, navigation links, copyright information, site logos, and +;; search forms. + +;; what would be comfortable way to compose that? +;; apart from using let? +;; maybe that's in tutorial 3? + +(initialize #'my-setup-with-more-elements) +(open-browser) + +(clog:run-tutorial 3) + +;; tutorial 3 is about wrapping code into (with-sync-event (obj) ... ) +;; that would guard start of function on some event until after previous completes. cool + +(clog:run-tutorial 4) +;; reusing handler, and function generic, without much of type specification, looks unusual + +(clog:run-tutorial 5) + +;; so, connection-data-item on obj - target, or *body* seems to not care, having strigly named attributes +;; shareable by components? + +;; how'd I use that? +;; I guess to maybe pass component to act upon, without doing elaborate nested LET expressions +;; just during creation of some component, save it as such variable, +;; then in handler it could be targeted by being taken by name +;; +;; but, yeah, also passing values between handlers or something + +(clog:run-tutorial 6) +;; every click / handler starts in new thread. +;; so if I want reentrant code, use `connection-data-item` + +(clog:run-tutorial 7)