| 1 |
(in-package :bos.web) |
|---|
| 2 |
|
|---|
| 3 |
(enable-interpol-syntax) |
|---|
| 4 |
|
|---|
| 5 |
(defun text-with-linebreaks (text) |
|---|
| 6 |
(loop for line in (split #?r"\r?\n" text) |
|---|
| 7 |
do (html (:princ-safe line) :br))) |
|---|
| 8 |
|
|---|
| 9 |
(define-bknr-tag news-headlines (&key archive) |
|---|
| 10 |
(let ((language (request-language))) |
|---|
| 11 |
(let* ((now (get-universal-time)) |
|---|
| 12 |
(news-items (if archive |
|---|
| 13 |
(all-news-items language) |
|---|
| 14 |
(let ((items (sort (remove-if |
|---|
| 15 |
#'(lambda (news-item) |
|---|
| 16 |
(> (- now (news-item-time news-item)) *maximum-news-item-age*)) |
|---|
| 17 |
(all-news-items language)) |
|---|
| 18 |
#'> |
|---|
| 19 |
:key #'news-item-time))) |
|---|
| 20 |
(subseq items 0 (min (length items) 3)))))) |
|---|
| 21 |
(labels ((show-news-entry (news-item) |
|---|
| 22 |
(html ((:a :href "#" :onclick (format nil "return window_news('/~a/news/~a')" language (store-object-id news-item)) |
|---|
| 23 |
:class "more") |
|---|
| 24 |
(:strong (:princ-safe (format-date-time (news-item-time news-item) :show-time nil)) |
|---|
| 25 |
:br |
|---|
| 26 |
(:princ-safe (news-item-title news-item language))))))) |
|---|
| 27 |
(loop for news-item in news-items |
|---|
| 28 |
for index from 1 |
|---|
| 29 |
do (if archive |
|---|
| 30 |
(html (show-news-entry news-item) |
|---|
| 31 |
:br :br) |
|---|
| 32 |
(html ((:div :id (format nil "newsbox~a" index)) |
|---|
| 33 |
(show-news-entry news-item))))))))) |
|---|
| 34 |
|
|---|
| 35 |
(define-bknr-tag news-item () |
|---|
| 36 |
(let ((news-item (find-store-object (parse-integer (nth-value 1 (parse-url))))) |
|---|
| 37 |
(language (request-language))) |
|---|
| 38 |
(html ((:h1 :class "extra") |
|---|
| 39 |
(:princ-safe (format-date-time (news-item-time news-item) :show-time nil)) |
|---|
| 40 |
", " |
|---|
| 41 |
(:princ-safe (news-item-title news-item language))) |
|---|
| 42 |
((:p :class "text_content") |
|---|
| 43 |
(:princ (news-item-text news-item language)))))) |
|---|