summaryrefslogtreecommitdiff
path: root/internal/web/render.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/web/render.go')
-rw-r--r--internal/web/render.go26
1 files changed, 17 insertions, 9 deletions
diff --git a/internal/web/render.go b/internal/web/render.go
index 3ea52e3..b7fb3ed 100644
--- a/internal/web/render.go
+++ b/internal/web/render.go
@@ -59,6 +59,7 @@ type columnView struct {
type blockView struct {
VNum, Text string
Refrain bool
+ Marked bool // the reader flags a bookmarked verse with a red "*"
}
// ilSectionView, ilVerseView and ilLineView are what
@@ -74,8 +75,9 @@ type ilSectionView struct {
}
type ilVerseView struct {
- VNum string
- Lines []ilLineView
+ VNum string
+ Lines []ilLineView
+ Marked bool // the reader flags a bookmarked verse with a red "*"
}
type ilLineView struct {
@@ -314,19 +316,21 @@ func UnionChapters(canonical string) []int {
// name in the sigla dialect (the section heading is "<name> <chap>"). versions
// are corpus versions; one lacking the chapter shows a localized "(not in X)"
// note (columns) or is skipped (interlinear). lang localizes the version labels.
-func RenderPassage(canonical, name string, chap int, versions []string, display, lang string) template.HTML {
+// marked (keyed by "chap:verse") flags verses that carry a bookmark, so the
+// reader can show a red "*"; pass nil for no marks.
+func RenderPassage(canonical, name string, chap int, versions []string, display, lang string, marked map[string]bool) template.HTML {
heading := fmt.Sprintf("%s %d", name, chap)
switch display {
case "interlinear":
- return renderTemplate("readings-interlinear.html", passageInterlinear(canonical, heading, chap, versions, lang))
+ return renderTemplate("readings-interlinear.html", passageInterlinear(canonical, heading, chap, versions, lang, marked))
case "vertical":
- return renderTemplate("readings-vertical.html", passageColumns(canonical, heading, chap, versions, lang))
+ return renderTemplate("readings-vertical.html", passageColumns(canonical, heading, chap, versions, lang, marked))
default:
- return renderTemplate("readings.html", passageColumns(canonical, heading, chap, versions, lang))
+ return renderTemplate("readings.html", passageColumns(canonical, heading, chap, versions, lang, marked))
}
}
-func passageColumns(canonical, heading string, chap int, versions []string, lang string) []sectionView {
+func passageColumns(canonical, heading string, chap int, versions []string, lang string, marked map[string]bool) []sectionView {
cols := make([]columnView, 0, len(versions))
for _, v := range versions {
verses := bible.Verses(v, canonical, chap)
@@ -335,14 +339,15 @@ func passageColumns(canonical, heading string, chap int, versions []string, lang
blocks = append(blocks, blockView{Text: fmt.Sprintf(i18n.Get(lang).NoVersion, v)})
}
for _, ve := range verses {
- blocks = append(blocks, blockView{VNum: fmt.Sprintf("%d:%d", ve.Chapter, ve.Verse), Text: ve.Text})
+ vnum := fmt.Sprintf("%d:%d", ve.Chapter, ve.Verse)
+ blocks = append(blocks, blockView{VNum: vnum, Text: ve.Text, Marked: marked[vnum]})
}
cols = append(cols, columnView{Label: webVersionLabel(v, lang), Blocks: blocks})
}
return []sectionView{{Heading: heading, PartID: "reader", Columns: cols}}
}
-func passageInterlinear(canonical, heading string, chap int, versions []string, lang string) []ilSectionView {
+func passageInterlinear(canonical, heading string, chap int, versions []string, lang string, marked map[string]bool) []ilSectionView {
var sets []verseSet
for _, v := range versions {
verses := bible.Verses(v, canonical, chap)
@@ -357,6 +362,9 @@ func passageInterlinear(canonical, heading string, chap int, versions []string,
return []ilSectionView{view}
}
view.Verses = interleaveVerses(sets)
+ for i := range view.Verses {
+ view.Verses[i].Marked = marked[view.Verses[i].VNum]
+ }
return []ilSectionView{view}
}