Skip to content

Commit 446a5b6

Browse files
committed
Attach a heading role to the heading of each entry
instead of wrapping all entries in a list and wrapping each entry with a list item
1 parent f19591f commit 446a5b6

1 file changed

Lines changed: 41 additions & 30 deletions

File tree

src/clj/catalog/layout/fop.clj

Lines changed: 41 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -238,21 +238,27 @@
238238
See [[insert-zero-width-space]]"
239239
(comp insert-zero-width-space layout/render-narrators))
240240

241+
(defn- level-to-h [level]
242+
(keyword (str "h" level)))
243+
244+
(defn- level-to-role [level]
245+
(str "H" level))
246+
241247
(defmulti entry-heading-sexp
242248
"Return a hiccup style sexp for a heading for a given item."
243-
(fn [{fmt :format}] fmt))
249+
(fn [{fmt :format} _] fmt))
244250

245251
(defmethod entry-heading-sexp :ludo
246-
[{:keys [creator record-id title subtitles]}]
247-
(block {:keep-with-next.within-column "always" :role "Lbl"}
252+
[{:keys [creator record-id title subtitles]} level]
253+
(block {:keep-with-next.within-column "always" :role (level-to-role level)}
248254
(bold (link-to-online-catalog record-id (layout/periodify title)))
249255
(when subtitles " ")
250256
(layout/render-subtitles subtitles)
251257
(wrap creator " " "" false)))
252258

253259
(defmethod entry-heading-sexp :default
254-
[{:keys [creator record-id title subtitles name-of-part source-publisher source-date]}]
255-
(block {:keep-with-next.within-column "always" :role "Lbl"}
260+
[{:keys [creator record-id title subtitles name-of-part source-publisher source-date]} level]
261+
(block {:keep-with-next.within-column "always" :role (level-to-role level)}
256262
(bold
257263
(link-to-online-catalog
258264
record-id
@@ -279,16 +285,16 @@
279285
(bold "Verkauf:") " " price ". " (braille-signatures product-number))))
280286

281287
(defn- list-body [& args]
282-
(block {:role "LBody"} args))
288+
(block args))
283289

284290
(defn- list-item [heading & args]
285-
(block {:space-after "1em" :role "LI"}
291+
(block {:space-after "1em"}
286292
heading
287293
(list-body args)))
288294

289295
(defmulti entry-sexp
290296
"Return a hiccup style sexp for a given item."
291-
(fn [{fmt :format print-and-braille? :print-and-braille?} opts]
297+
(fn [{fmt :format print-and-braille? :print-and-braille?} level opts]
292298
(cond
293299
;; render print-and-braille items the same way as a :braille item
294300
print-and-braille? :braille
@@ -297,9 +303,10 @@
297303
(defmethod entry-sexp :hörbuch
298304
[{:keys [genre-text description duration narrators producer-brief
299305
produced-commercially? library-signature product-number price price-on-request?] :as item}
306+
level
300307
{:keys [show-genre?] :or {show-genre? true}}]
301308
(list-item
302-
(entry-heading-sexp item)
309+
(entry-heading-sexp item level)
303310
(when show-genre?
304311
(block (wrap genre-text "Genre: ")))
305312
(block (wrap description))
@@ -312,9 +319,10 @@
312319
(defmethod entry-sexp :text-hörbuch
313320
[{:keys [genre-text description duration narrators producer-brief
314321
library-signature accompanying-material] :as item}
322+
level
315323
{:keys [show-genre?] :or {show-genre? true}}]
316324
(list-item
317-
(entry-heading-sexp item)
325+
(entry-heading-sexp item level)
318326
(when show-genre?
319327
(block (wrap genre-text "Genre: ")))
320328
(block (wrap description))
@@ -326,9 +334,10 @@
326334
(defmethod entry-sexp :braille
327335
[{:keys [genre-text description producer-brief rucksackbuch? rucksackbuch-number
328336
library-signature] :as item}
337+
level
329338
{:keys [show-genre?] :or {show-genre? true}}]
330339
(list-item
331-
(entry-heading-sexp item)
340+
(entry-heading-sexp item level)
332341
(when show-genre?
333342
(block (wrap genre-text "Genre: ")))
334343
(block (wrap description))
@@ -341,9 +350,10 @@
341350

342351
(defmethod entry-sexp :grossdruck
343352
[{:keys [genre-text description library-signature volumes product-number price price-on-request?] :as item}
353+
level
344354
{:keys [show-genre?] :or {show-genre? true}}]
345355
(list-item
346-
(entry-heading-sexp item)
356+
(entry-heading-sexp item level)
347357
(when show-genre?
348358
(block (wrap genre-text "Genre: ")))
349359
(block (wrap description))
@@ -356,9 +366,10 @@
356366
(defmethod entry-sexp :e-book
357367
[{:keys [genre-text description library-signature
358368
accompanying-material] :as item}
369+
level
359370
{:keys [show-genre?] :or {show-genre? true}}]
360371
(list-item
361-
(entry-heading-sexp item)
372+
(entry-heading-sexp item level)
362373
(when show-genre?
363374
(block (wrap genre-text "Genre: ")))
364375
(block (wrap description))
@@ -369,9 +380,10 @@
369380
(defmethod entry-sexp :hörfilm
370381
[{:keys [personel-text movie_country genre-text
371382
description producer library-signature target-audience] :as item}
383+
level
372384
{:keys [show-genre?] :or {show-genre? true}}]
373385
(list-item
374-
(entry-heading-sexp item)
386+
(entry-heading-sexp item level)
375387
(block (wrap personel-text))
376388
(block (wrap movie_country))
377389
(when show-genre?
@@ -384,9 +396,10 @@
384396
(defmethod entry-sexp :ludo
385397
[{:keys [source-publisher genre-text description
386398
game-description accompanying-material library-signature] :as item}
399+
level
387400
{:keys [show-genre?] :or {show-genre? true}}]
388401
(list-item
389-
(entry-heading-sexp item)
402+
(entry-heading-sexp item level)
390403
(block (wrap source-publisher))
391404
(when show-genre?
392405
(block (wrap genre-text)))
@@ -396,19 +409,20 @@
396409
(verkauf item)))
397410

398411
(defmethod entry-sexp :musiknoten
399-
[{:keys [description producer-brief library-signature] :as item} opts]
412+
[{:keys [description producer-brief library-signature] :as item} level opts]
400413
(list-item
401-
(entry-heading-sexp item)
414+
(entry-heading-sexp item level)
402415
(block (wrap description))
403416
(block (wrap producer-brief))
404417
(ausleihe-multi library-signature)
405418
(verkauf item)))
406419

407420
(defmethod entry-sexp :taktilesbuch
408421
[{:keys [genre-text description producer-brief library-signature] :as item}
422+
level
409423
{:keys [show-genre?] :or {show-genre? true}}]
410424
(list-item
411-
(entry-heading-sexp item)
425+
(entry-heading-sexp item level)
412426
(when show-genre?
413427
(block (wrap genre-text "Genre: ")))
414428
(block (wrap description))
@@ -417,21 +431,18 @@
417431
(verkauf item)))
418432

419433
(defn entries-sexp
420-
"Return a hiccup style sexp for given `items` and `opts`"
421-
[items opts]
422-
[:fo:block {:role "L"}
423-
(map #(entry-sexp % opts) items)])
424-
425-
(defn- level-to-h [level]
426-
(keyword (str "h" level)))
434+
"Return a hiccup style sexp for given `items`, `level` and `opts`"
435+
[items level opts]
436+
[:fo:block
437+
(map #(entry-sexp % level opts) items)])
427438

428439
(defn subgenre-sexp
429440
"Return a hiccup style sexp for a subgenre"
430441
[items fmt genre subgenre level opts]
431442
[(heading (level-to-h level) [fmt genre subgenre] opts)
432443
(when-not (#{:kinder-und-jugendbücher} genre)
433444
(set-marker (layout/translations subgenre)))
434-
(entries-sexp items opts)])
445+
(entries-sexp items (inc level) opts)])
435446

436447
(defn subgenres-sexp
437448
"Return a hiccup style sexp for all subgenres for given `genre`"
@@ -447,10 +458,10 @@
447458
;; special case where the editorial or the recommendations are passed in the tree
448459
(#{:editorial :recommendations :recommendation} genre) (md-to-fop items [fmt genre] opts)
449460
;; special case when printing the whole catalog of tactile and print-and-braille books
450-
(#{:taktilesbuch :print-and-braille} fmt) (entries-sexp items opts)
461+
(#{:taktilesbuch :print-and-braille} fmt) (entries-sexp items (inc level) opts)
451462
(#{:kinder-und-jugendbücher} genre) (subgenres-sexp items fmt genre (inc level) opts)
452463
(#{:hörbuch} fmt) (subgenres-sexp items fmt genre (inc level) opts)
453-
:else (entries-sexp items opts))])
464+
:else (entries-sexp items (inc level) opts))])
454465

455466
(defn format-sexp
456467
"Return a hiccup style sexp for a format"
@@ -462,7 +473,7 @@
462473
(case fmt
463474
;; handle the special case where the editorial or the recommendations are passed in the tree
464475
(:editorial :recommendations :recommendation) (md-to-fop items [fmt] opts)
465-
(:hörfilm :ludo) (entries-sexp items opts)
476+
(:hörfilm :ludo) (entries-sexp items (inc level) opts)
466477
(mapcat #(genre-sexp (get items %) fmt % (inc level) opts) (keys items)))])
467478

468479
(defn- page-number []
@@ -1017,7 +1028,7 @@
10171028
(custom-cover-page title query customer)
10181029
;; start the items on a new page
10191030
(block {:break-after "page"})
1020-
(entries-sexp items {})]]])
1031+
(entries-sexp items 2 {})]]])
10211032

10221033
(defmethod document-sexp :custom
10231034
[items fmt year issue _ _ {:keys [description query customer]}]

0 commit comments

Comments
 (0)