Introduction
Introduction Statistics Contact Development Disclaimer Help
add support for tags in articles + improve code - cl-yag - Common Lisp Yet Anot…
git clone git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
LICENSE
---
commit e94fc554f9a4f95d8b8df4ea8629a330ef129d13
parent 2031387fa4e3079bf8d57e7b3e009b3305ec4c5a
Author: solene rapenne <[email protected]>
Date: Tue, 3 May 2016 14:58:53 +0200
add support for tags in articles + improve code
Diffstat:
M generator.lisp | 64 +++++++++++++++++++----------…
M template/article.tpl | 2 +-
2 files changed, 41 insertions(+), 25 deletions(-)
---
diff --git a/generator.lisp b/generator.lisp
@@ -37,6 +37,11 @@
data))
"~" "~~"))
+;; we have to remove the quotes
+;; when using collect in a loop
+(defun strip-quotes(input)
+ (format nil "~{~d~}" input))
+
;; save a string in a file
(defun save-file(path data)
(with-open-file (stream (concatenate 'string "output/" path) :direction :out…
@@ -61,7 +66,7 @@
(generate-layout ,@data))))
;; generate the list of tags
-(defun the-tags()
+(defun articles-by-tag()
(let ((tag-list))
(loop for article in *articles* do
(if (getf article :tag nil) ;; we don't want an error if no tag
@@ -73,8 +78,21 @@
(loop for i from 1 to (length tag-list) by 2 collect ;; removing the keywo…
(nth i tag-list))))
-
-
+;; generates the html of the list of tags for an article
+(defun get-tag-list-article(&optional article)
+ (strip-quotes
+ (mapcar #'(lambda (item)
+ (prepare "template/one-tag.tpl" (template "%%Name%%" item)))
+ (split-str (getf article :tag)))))
+
+;; generates the html of the whole list of tags
+(defun get-tag-list()
+ (strip-quotes
+ (mapcar #'(lambda (item)
+ (prepare "template/one-tag.tpl"
+ (template "%%Name%%" (getf item :name))))
+ (articles-by-tag))))
+
;; generates the html of one only article
;; this is called in a loop to produce the homepage
@@ -84,6 +102,7 @@
(template "%%Date%%" (getf article :date))
(template "%%Title%%" (getf article :title))
(template "%%Id%%" (getf article :id))
+ (template "%%Tags%%" (get-tag-list-article article))
(template "%%Text%%" (if (and tiny (member :tiny article))
(getf article :tiny) (load-file (format ni…
@@ -92,38 +111,35 @@
(defun generate-layout(body)
(prepare "template/layout.tpl"
(template "%%Title%%" (getf *config* :title))
- (template "%%Tags%%"
- (format nil "~{~d~}" (loop for tag in (the-tags) collect
- (prepare "template/one-tag.tpl"
- (template "%%Name%%" …
+ (template "%%Tags%%" (get-tag-list))
(template "%%Body%%" body)
output))
;; html generation of index homepage
(defun generate-semi-mainpage()
- (format nil "~{~d~}"
- (loop for article in *articles* collect
- (create-article article :tiny t))))
+ (strip-quotes
+ (loop for article in *articles* collect
+ (create-article article :tiny t))))
;; html generation of a tag homepage
(defun generate-tag-mainpage(articles-in-tag)
- (format nil "~{~d~}"
- (loop for article in *articles*
- when (member (getf article :id) articles-in-tag :test #'equal)
- collect (create-article article :tiny t))))
+ (strip-quotes
+ (loop for article in *articles*
+ when (member (getf article :id) articles-in-tag :test #'equal)
+ collect (create-article article :tiny t))))
;; xml generation of the items for the rss
(defun generate-rss-item()
- (format nil "~{~d~}"
- (loop for article in *articles* collect
- (prepare "template/rss-item.tpl"
- (template "%%Title%%" (getf article :title))
- (template "%%Description%%" (getf article :short ""))
- (template "%%Url%%"
- (format nil "~d/article-~d.html"
- (getf *config* :url)
- (getf article :id)))))))
+ (strip-quotes
+ (loop for article in *articles* collect
+ (prepare "template/rss-item.tpl"
+ (template "%%Title%%" (getf article :title))
+ (template "%%Description%%" (getf article :short ""))
+ (template "%%Url%%"
+ (format nil "~d/article-~d.html"
+ (getf *config* :url)
+ (getf article :id)))))))
;; Generate the rss xml data
(defun generate-rss()
@@ -147,7 +163,7 @@
(create-article article :tiny nil)))
;; produce index file for each tag
- (loop for tag in (the-tags) do
+ (loop for tag in (articles-by-tag) do
(generate (format nil"tag-~d.html" (getf tag :NAME))
(generate-tag-mainpage (getf tag :VALUE))))
diff --git a/template/article.tpl b/template/article.tpl
@@ -1,6 +1,6 @@
<div class="article">
<div class="informations">
- <b><a href="article-%%Id%%.html"><em>%%Author%%</em> wrote "%%Title%%" on …
+ <b><a href="article-%%Id%%.html"><em>%%Author%%</em> wrote "%%Title%%" on …
</div>
<p>%%Text%%</p>
</div>
You are viewing proxied material from bitreich.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.