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)))