Introduction
Introduction Statistics Contact Development Disclaimer Help
Add date in posts url - cl-yag - Common Lisp Yet Another website Generator
git clone git://bitreich.org/cl-yag/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws…
Log
Files
Refs
Tags
README
LICENSE
---
commit 76cfe4f9da795b24680eba4e8c940e042b1d6e11
parent fc0d8912469f5ce1e210ded72b2f52f49d307352
Author: solene rapenne <[email protected]>
Date: Thu, 14 Dec 2017 00:23:40 +0100
Add date in posts url
Diffstat:
M generator.lisp | 92 ++++++++++++++++++-----------…
M templates/article.tpl | 3 ++-
2 files changed, 55 insertions(+), 40 deletions(-)
---
diff --git a/generator.lisp b/generator.lisp
@@ -1,3 +1,5 @@
+;;;; GLOBAL VARIABLES
+
(defparameter *articles* '())
(defparameter *converters* '())
(defparameter *days* '("Monday" "Tuesday" "Wednesday" "Thursday"
@@ -7,36 +9,19 @@
"October" "November" "December"))
;; structure to store links
-(defstruct article title tag date id tiny author)
+(defstruct article title tag date id tiny author rawdate)
(defstruct converter name command extension)
-(defun post(&optional &key title tag date id (tiny nil) (author nil))
- (push (make-article :title title
- :tag tag
- :date date
- :tiny tiny
- :author author
- :id id)
- *articles*))
-
-;; we add a converter to the list of the one availables
-(defun converter(&optional &key name command extension)
- (push (make-converter :name name
- :command command
- :extension extension)
- *converters*))
-
-(load "data/articles.lisp")
-(setf *articles* (reverse *articles*))
-
+;;;; FUNCTIONS
;; return the day of the week
(defun get-day-of-week(day month year)
(multiple-value-bind
- (second minute hour date month year day-of-week dst-p tz)
- (decode-universal-time (encode-universal-time 0 0 0 day month year))
- (declare (ignore second minute hour date month year dst-p tz))
- day-of-week))
+ (second minute hour date month year day-of-week dst-p tz)
+ (decode-universal-time (encode-universal-time 0 0 0 day month year))
+ (declare (ignore second minute hour date month year dst-p tz))
+ day-of-week))
+
;; parse the date to
(defun date-parse(date)
@@ -52,7 +37,28 @@
:monthname month
:monthnumber monthnum
:year year))
- nil))
+ nil))
+
+(defun post(&optional &key title tag date id (tiny nil) (author nil))
+ (push (make-article :title title
+ :tag tag
+ :date (date-parse date)
+ :rawdate date
+ :tiny tiny
+ :author author
+ :id id)
+ *articles*))
+
+;; we add a converter to the list of the one availables
+(defun converter(&optional &key name command extension)
+ (push (make-converter :name name
+ :command command
+ :extension extension)
+ *converters*))
+
+;; load data from metadata and load config
+(load "data/articles.lisp")
+(setf *articles* (reverse *articles*))
;; common-lisp don't have a replace string function natively
@@ -115,9 +121,9 @@
(defun date-format(format date)
(let ((output format))
(template "%DayName" (getf date :dayname))
- (template "%DayNumber" (write-to-string (getf date :daynumber)))
+ (template "%DayNumber" (format nil "~2,'0d" (getf date :daynumber)))
(template "%MonthName" (getf date :monthname))
- (template "%MonthNumber" (write-to-string (getf date :monthnumber)))
+ (template "%MonthNumber" (format nil "~2,'0d" (getf date :monthnumber)))
(template "%Year" (write-to-string (getf date :year )))
output))
@@ -162,18 +168,20 @@
(articles-by-tag))))
-;; generates the html of one only article
+;; generates the html of only one article
;; this is called in a loop to produce the homepage
(defun create-article(article &optional &key (tiny t) (no-text nil))
(prepare "templates/article.tpl"
(template "%%Author%%" (let ((author (article-author article)))
(or author (getf *config* :webmaster))))
(template "%%Date%%" (date-format (getf *config* :date-format)
- (date-parse (article-date artic…
- (template "%%Raw-Date%%" (article-date article))
+ (article-date article)))
+ (template "%%Raw-Date%%" (article-rawdate article))
(template "%%Title%%" (article-title article))
(template "%%Id%%" (article-id article))
(template "%%Tags%%" (get-tag-list-article article))
+ (template "%%Date-Url%%" (date-format "%Year-%MonthNumber-%DayNumb…
+ (article-date article)))
(template "%%Text%%" (if no-text
""
(if (and tiny (article-tiny article))
@@ -212,10 +220,11 @@
(prepare "templates/rss-item.tpl"
(template "%%Title%%" (article-title article))
(template "%%Description%%" (load-file (format nil "tem…
- (let ((date (date-parse (article-date article))))
- (template "%%Date%%" (format nil (date-format "~a, %D…
- (subseq (getf date :dayn…
- (subseq (getf date :mont…
+ (template "%%Date%%" (format nil
+ (date-format "~a, %DayNumb…
+ (article-date…
+ (subseq (getf (article-dat…
+ (subseq (getf (article-dat…
(template "%%Url%%"
(format nil "~darticle-~d.html"
(getf *config* :url)
@@ -238,10 +247,14 @@
(generate "output/html/index-titles.html" (generate-semi-mainpage :no-text t…
;; produce each article file
- (dolist (article *articles*)
- (generate (format nil "output/html/article-~d.html" (article-id article))
- (create-article article :tiny nil)
- :title (concatenate 'string (getf *config* :title) " : " (articl…
+ (loop for article in *articles*
+ do
+ (generate (format nil "output/html/~d-~d.html"
+ (date-format "%Year-%MonthNumber-%DayNumber"
+ (article-date article))
+ (article-id article))
+ (create-article article :tiny nil)
+ :title (concatenate 'string (getf *config* :title) " : " (a…
;; produce index file for each tag
(loop for tag in (articles-by-tag) do
@@ -269,7 +282,7 @@
(if (< 80 (l…
(subseq …
(article-t…
- (replace title (article-date ar…
+ (replace title (article-rawdate…
(getf *config* :gopher-path)
@@ -296,6 +309,7 @@
(if (getf *config* :gopher)
(create-gopher-hole)))
+;;;; EXECUTION
(generate-site)
diff --git a/templates/article.tpl b/templates/article.tpl
@@ -1,7 +1,8 @@
<article id="%%Raw-Date%%">
<header>
- <h1><a href="article-%%Id%%.html">%%Title%%</a></h1>
+
+ <h1><a href="%%Date-Url%%-%%Id%%.html">%%Title%%</a></h1>
<p>Written by <em>%%Author%%</em>, on %%Date%%.<br/>Tags: %%Tags%%</p>
</header>
%%Text%%
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.