Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

76 строки
2.4KB

  1. (in-package :cl-user)
  2. (defpackage #:cl-deck-builder2.view
  3. (:use #:cl)
  4. (:import-from #:cl-deck-builder2.config
  5. #:*template-directory*)
  6. (:import-from #:cl-deck-builder2.i18n
  7. #:with-locale)
  8. (:import-from #:caveman2
  9. #:*response*
  10. #:response-headers)
  11. (:import-from #:djula
  12. #:add-template-directory
  13. #:compile-template*
  14. #:render-template*
  15. #:*djula-execute-package*)
  16. (:import-from #:datafly
  17. #:encode-json)
  18. (:export #:render
  19. #:render-json)
  20. (:documentation "The VIEW package.
  21. We just use the defaults generated by Caveman2.
  22. It provides rendering functions for web view.
  23. Additionally, we have i18n support with gettext."))
  24. (in-package :cl-deck-builder2.view)
  25. (djula:add-template-directory *template-directory*)
  26. (defparameter *template-registry* (make-hash-table :test 'equal)
  27. "Hash table of registered templates. Used for caching.")
  28. (defun render (template-path &optional env (lang "en_US"))
  29. "Use Djula to render a template."
  30. (let ((template (gethash template-path *template-registry*)))
  31. (unless template
  32. (setf template (djula:compile-template* (princ-to-string template-path)))
  33. (setf (gethash template-path *template-registry*) template))
  34. (with-locale (lang)
  35. (apply #'djula:render-template* template nil env))))
  36. (defun render-json (object)
  37. "Use Datafly to render a JSON object."
  38. (setf (getf (response-headers *response*) :content-type) "application/json")
  39. (encode-json object))
  40. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  41. ;;
  42. ;; Execute package definition
  43. (defpackage #:cl-deck-builder2.djula
  44. (:use :cl)
  45. (:import-from :cl-deck-builder2.config
  46. :config
  47. :appenv
  48. :developmentp
  49. :productionp)
  50. (:import-from :caveman2
  51. :url-for)
  52. (:documentation "The package in which template expressions are evaluated.
  53. SEE <https://quickref.common-lisp.net/djula.html#g_t_276866_2769>"))
  54. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  55. (setf djula:*djula-execute-package* (find-package :cl-deck-builder2.djula))
  56. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  57. (in-package #:djula)
  58. (djula:def-filter :describe (it)
  59. (with-output-to-string (s) (describe it s)))