Yu-Gi-Oh! Deck Building and Card Inventory Management web interface written in Common Lisp, utilizing HTMX.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

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