Skip to content

Commit

Permalink
Add full content possibility to translations
Browse files Browse the repository at this point in the history
  • Loading branch information
briff committed Feb 13, 2025
1 parent 7b1d387 commit 85fc742
Show file tree
Hide file tree
Showing 5 changed files with 111 additions and 65 deletions.
137 changes: 74 additions & 63 deletions app/Http/Controllers/Display/TextDisplayController.php
Original file line number Diff line number Diff line change
Expand Up @@ -72,9 +72,18 @@ public function showTranslation($translationAbbrev)
{
$translation = $this->translationRepository->getByAbbrev($translationAbbrev);
$books = $this->translationRepository->getBooks($translation);
$bookHeaders = [];
$toc = request()->has("toc");
if ($toc) {
foreach ($books as $book) {
$bookHeaders[$book->abbrev] = $this->getBookViewArray($book, $translation, CanonicalReference::fromString("{$book->abbrev}", $translation->id), CanonicalReference::fromString("{$book->abbrev}", $translation->id));
}
}
return View::make('textDisplay.translation',
['translation' => $translation,
'books' => $books]);
'books' => $books,
'bookHeaders' => $bookHeaders,
'toc' => $toc]);
}

public function showReferenceText($reference)
Expand Down Expand Up @@ -230,76 +239,78 @@ private function bookView($translationAbbrev, CanonicalReference $canonicalRef)
$translation = $this->translationRepository->getByAbbrev($translationAbbrev ? $translationAbbrev : Config::get('settings.defaultTranslationAbbrev'));
$translatedRef = $this->referenceService->translateReference($canonicalRef, $translation->id);
$book = $this->bookRepository->getByAbbrevForTranslation($translatedRef->bookRefs[0]->bookId, $translation->id);
if ($book) {
$chapters = [];
$verses = $this->verseRepository->getVerses($book->id);
$groupedVerses = [];
if ($book) {
return View::make('textDisplay.book', $this->getBookViewArray($book, $translation, $canonicalRef, $translatedRef));
} else {
abort(404);
}
}

private function getBookViewArray($book, $translation, $canonicalRef, $translatedRef) {
$chapters = [];
$verses = $this->verseRepository->getVerses($book->id);
$groupedVerses = [];
foreach ($verses as $verse) {
$type = $verse->getType();
if (preg_match('/^heading[5-9]{1}/', $type)) {
$gepi = $verse->gepi;
if (!isset($groupedVerses[$gepi])) {
$groupedVerses[$gepi] = [];
}
$groupedVerses[$gepi][] = $verse;
}
}
$chapterHeadings = [];
foreach ($groupedVerses as $gepi => $verses) {
$verseContainer = new VerseContainer($book);
foreach ($verses as $verse) {
$type = $verse->getType();
if (preg_match('/^heading[5-9]{1}/', $type)) {
$gepi = $verse->gepi;
if (!isset($groupedVerses[$gepi])) {
$groupedVerses[$gepi] = [];
}
$groupedVerses[$gepi][] = $verse;
$verseContainer->addVerse($verse);
}
$headings = $this->textService->getHeadings([$verseContainer]);
if (!empty($headings)) {
if (!isset($chapterHeadings[$verse->chapter])) {
$chapterHeadings[$verse->chapter] = [];
}
$chapterHeadings[$verse->chapter] = array_merge($chapterHeadings[$verse->chapter], $headings);
}
$chapterHeadings = [];
foreach ($groupedVerses as $gepi => $verses) {
}
$firstVerses = $this->verseRepository->getLeadVerses($book->id);

foreach ($firstVerses as $verse) {
$type = $verse->getType();
if ($type == 'text' || $type == 'poemLine') {
$verseContainer = new VerseContainer($book);
foreach ($verses as $verse) {
$verseContainer->addVerse($verse);
}
$headings = $this->textService->getHeadings([$verseContainer]);
if (!empty($headings)) {
if (!isset($chapterHeadings[$verse->chapter])) {
$chapterHeadings[$verse->chapter] = [];
$verseContainer->addVerse($verse);
$oldText = "";
if(isset($chapters[$verse['chapter']]['leadVerses'])) {
if (array_has($chapters[$verse['chapter']]['leadVerses'], $verse['numv'])) {
$oldText = $chapters[$verse['chapter']]['leadVerses'][$verse['numv']];
}
$chapterHeadings[$verse->chapter] = array_merge($chapterHeadings[$verse->chapter], $headings);
}
$chapters[$verse['chapter']]['leadVerses'][$verse['numv']] = $oldText . $this->textService->getTeaser([$verseContainer]);
}
$firstVerses = $this->verseRepository->getLeadVerses($book->id);

foreach ($firstVerses as $verse) {
$type = $verse->getType();
if ($type == 'text' || $type == 'poemLine') {
$verseContainer = new VerseContainer($book);
$verseContainer->addVerse($verse);
$oldText = "";
if(isset($chapters[$verse['chapter']]['leadVerses'])) {
if (array_has($chapters[$verse['chapter']]['leadVerses'], $verse['numv'])) {
$oldText = $chapters[$verse['chapter']]['leadVerses'][$verse['numv']];
}
}
$allTranslations = $this->translationRepository->getAllOrderedByDenom();
$bookTranslations = $this->getAllBookTranslations($book->number);
$bookViewArray = [
'translation' => $translation,
'reference' => $translatedRef,
'book' => $book,
'chapters' => $chapters,
'headings' => $chapterHeadings,
'translations' => $allTranslations,
'translationLinks' => $allTranslations->map(
function ($translation) use ($canonicalRef, $bookTranslations) {
$bookExistsInTranslation = $bookTranslations->contains($translation->id);
return [
'id' => $translation->id,
'link' => $this->referenceService->getCanonicalUrl($canonicalRef, $translation->id),
'abbrev' => $translation->abbrev,
'enabled' => $bookExistsInTranslation];
}
$chapters[$verse['chapter']]['leadVerses'][$verse['numv']] = $oldText . $this->textService->getTeaser([$verseContainer]);
}
}
$allTranslations = $this->translationRepository->getAllOrderedByDenom();
$bookTranslations = $this->getAllBookTranslations($book->number);
return View::make('textDisplay.book', [
'translation' => $translation,
'reference' => $translatedRef,
'book' => $book,
'chapters' => $chapters,
'headings' => $chapterHeadings,
'translations' => $allTranslations,
'translationLinks' => $allTranslations->map(
function ($translation) use ($canonicalRef, $bookTranslations) {
$bookExistsInTranslation = $bookTranslations->contains($translation->id);
return [
'id' => $translation->id,
'link' => $this->referenceService->getCanonicalUrl($canonicalRef, $translation->id),
'abbrev' => $translation->abbrev,
'enabled' => $bookExistsInTranslation];
}
)

]);

} else {
abort(404);
}

)
];
return $bookViewArray;
}

private function getTitle($verseContainers, $translation)
Expand Down
8 changes: 8 additions & 0 deletions resources/assets/js/pages/translation.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
import quickChapterSelector from '../quickChapterSelector.js';

quickChapterSelector(translation);
$("#showToc").click(function() {
$(".interstitial").show();
window.location=$(this).data('url');
});
$("#hideToc").click(function() {
$(".interstitial").show();
window.location=$(this).data('url');
});
4 changes: 4 additions & 0 deletions resources/assets/less/app.less
Original file line number Diff line number Diff line change
Expand Up @@ -330,4 +330,8 @@ div.searchResult {
text-align: center;
padding-top: 20%;
font-size: 2rem;
}

div.tocItem {
margin-left: 1rem;
}
2 changes: 1 addition & 1 deletion resources/views/layout.twig
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@

</head>
<body>
<div class="interstitial">Kis türelmet...</div>
<div class="interstitial">Kis türelmet <i class="fa-solid fa-circle-notch fa-spin"></i></div>
<div class="container">
{% include 'navbar' %}
<div class="row">
Expand Down
25 changes: 24 additions & 1 deletion resources/views/textDisplay/translation.twig
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,39 @@
<li><a href="/{{ translation.abbrev }}/{{ book.abbrev }}" class="link">{{ book.name }} ({{book.abbrev}})</a></li>
{% endmacro %}

{% macro tocContent(translation, book, bookHeaders) %}
{% set headers = bookHeaders[book.abbrev] %}
{% if headers %}
<div class="tocItem">
{% for chapterId, chapter in headers.chapters %}
{%set chapterLink %}/{{ translation.abbrev }}/{{ book.abbrev }}{{ chapterId }}{% endset %}
{%set chapterText %}{{ chapterId }}{% endset %}
<strong><a href="{{ chapterLink}}">{{ chapterText }}</a></strong>
{% set chheadings = headers.headings[chapterId] %}
{% if chheadings|length > 0 %}
{%- for heading in chheadings -%}
<a href='/{{ translation.abbrev }}/{{ book.abbrev }}{{ chapterId}}#heading_{{ heading.gepi }}_{{ heading.headingLevel }}' class='link'>{{ heading.content|striptags('<br><a>')|raw }}</a>{% if not loop.last %} ● {% endif %}
{% endfor %}
{% endif %}
<br>
{% endfor %}
</div>
{% endif %}
{% endmacro %}

{% block content %}
{% include 'textDisplay.breadcrumb' %}

{% include 'bookAbbrevList' with { 'translation' : translation } %}

{% include 'quickChapterSelector' %}

<a data-url="/{{ translation.abbrev }}?toc" tabindex="0" class="btn btn-info {{ toc ? "hidden" : "" }}" role="button" id="showToc"><i class="fa-solid fa-book-bookmark"></i> Teljes tartalomjegyzék</a>
<a data-url="/{{ translation.abbrev }}" tabindex="0" class="btn btn-info {{ not toc ? "hidden": '' }}" role="button" id="hideToc"><i class="fa-solid fa-book-bookmark"></i> Csak könyvnevek</a>
<h4>Újszövetség</h4>
<ul class="list-unstyled">
{% for book in books|filter(book => not book.old_testament) %}
{{ _self.bookLink(translation, book) }}
{{ _self.tocContent(translation, book, bookHeaders) }}
{% endfor %}
</ul>
</td>
Expand All @@ -31,6 +53,7 @@
<ul class="list-unstyled">
{% for book in books|filter(book => book.old_testament) %}
{{ _self.bookLink(translation, book) }}
{{ _self.tocContent(translation, book, bookHeaders) }}
{% endfor %}
</ul>
<script>const translation="{{ translation.abbrev }}";</script>
Expand Down

0 comments on commit 85fc742

Please sign in to comment.