(in-package #:cl-bible.chapter) (defclass chapter () ((%verses :initarg :verses :reader verses))) (defgeneric chapter-to-clog (chapter parent)) (defgeneric book/chapter-window (canvas)) (defgeneric translations-drop-down (div display chapter drop-down)) (defgeneric display-chapter-or-book (canvas chapter)) (defgeneric load-chapter (canvas book chapter)) (defgeneric load-position (canvas pos)) (defmethod chapter-to-clog ((chapter chapter) (parent clog:clog-obj)) (labels ((verse-to-clog (verse) (create-p parent :content (concatenate 'string (if (string= (v:vnumber verse) "1") (format nil "~A ~A:
" (v:bname verse) (v:chapter verse)) "") (v:verse-to-string verse))))) (mapcar #'verse-to-clog (verses chapter)))) (defmethod book/chapter-window (canvas) (create-div (create-web-content (create-web-main canvas)))) (defmethod display-chapter-or-book (canvas (chapter chapter)) (chapter-to-clog chapter (book/chapter-window canvas))) (defmethod load-chapter (canvas (book string) (chapter string)) (let* ((bk (s:find-book d:*bible* book)) (verses (if (find #\- chapter) (loop :for chap :in (uiop:split-string chapter :separator '(#\-)) :append (s:find-chapter bk chap)) (s:find-chapter bk chapter)))) (display-chapter-or-book canvas (make-instance 'chapter :verses verses)))) (defmethod load-position ((canvas clog:clog-body) (pos string)) (display-chapter-or-book canvas (make-instance 'chapter :verses (s:find-verse d:*bible* (s:parse-position pos)))))