Skip to content

Commit 4972bb8

Browse files
authored
Group ayah by page and render in order on Quran metadata pages (#683)
* fix mapping for indonesian_affairs * Group ayahs by page and order by ayah index on Quran metadata resources
1 parent 4251166 commit 4972bb8

8 files changed

Lines changed: 136 additions & 76 deletions

File tree

app/models/hizb.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@ class Hizb < QuranApiRecord
2121
include NavigationSearchable
2222
include HasVerseMapping
2323

24-
has_many :verses, foreign_key: :manzil_number
24+
has_many :verses, foreign_key: :hizb_number
2525
has_many :chapters, through: :verses
2626
end

app/views/resources/previews/quran_metadata/_hizb_preview.html.erb

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
<%
22
id = (params[:hizb].presence || 1).to_i.abs
33
hizb = Hizb.find_by(hizb_number: id) || Hizb.first
4+
cache_key = ["hizb", hizb.id, params.to_unsafe_h]
45
%>
56

7+
<% cache(cache_key, expires_in: 7.days) do %>
8+
<%
9+
verses_by_page = hizb.verses.includes(:chapter).order('verse_index ASC').group_by(&:page_number)
10+
%>
11+
612
<div class="flex flex-wrap items-center justify-center gap-4 mb-6">
713
<div class="flex items-center">
814
<%= label_tag :hizb, 'Jump to Hizb', class: 'me-2 font-medium' %>
@@ -35,7 +41,8 @@
3541
<p class="mt-2 text-sm text-gray-600">Total Ayahs:
3642
<strong>
3743
<%= hizb.verses_count %>
38-
</strong></p>
44+
</strong>
45+
| Pages: <strong><%= verses_by_page.keys.length %></strong></p>
3946
</div>
4047

4148
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 mb-4">
@@ -44,15 +51,21 @@
4451
<p><strong>To:</strong> <%= hizb.last_verse.chapter.name_simple %>, Ayah <%= hizb.last_verse.verse_number %></p>
4552
</div>
4653

47-
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4">
48-
<h2 class="text-lg font-semibold mb-4">Surahs in this Hizb</h2>
49-
<ul class="divide-y divide-gray-200">
50-
<% hizb.verse_mapping.each do |chapter_id, verses_range| %>
51-
<% chapter = Chapter.find(chapter_id) %>
52-
<li class="py-2">
53-
<span class="font-medium">Surah <%= chapter.name_simple %></span>: Ayahs <%= verses_range %>
54-
</li>
55-
<% end %>
56-
</ul>
57-
</div>
58-
</div>
54+
<% if verses_by_page.any? %>
55+
<div class="overflow-y-auto border border-gray-200 rounded-lg shadow-sm bg-white" style="max-height: 1600px;">
56+
<div class="flex flex-col gap-6 p-4">
57+
<% verses_by_page.sort.each do |page_num, page_verses| %>
58+
<div class="border-b pb-6 last:border-b-0">
59+
<div class="text-sm font-semibold text-gray-700 mb-3">Page <%= page_num %></div>
60+
<div class="qpc-hafs quran-text text-lg leading-relaxed">
61+
<% page_verses.each do |verse| %>
62+
<%= verse.text_qpc_hafs %>
63+
<% end %>
64+
</div>
65+
</div>
66+
<% end %>
67+
</div>
68+
</div>
69+
<% end %>
70+
</div>
71+
<% end %>

app/views/resources/previews/quran_metadata/_juz_preview.html.erb

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
<%
22
id = (params[:juz].presence || 1).to_i.abs
33
juz = Juz.find_by(juz_number: id) || Juz.first
4+
cache_key = ["juz", juz.id, params.to_unsafe_h]
45
%>
56

7+
<% cache(cache_key, expires_in: 7.days) do %>
8+
<%
9+
verses_by_page = juz.verses.includes(:chapter).order('verse_index ASC').group_by(&:page_number)
10+
%>
11+
612
<div class="flex flex-wrap items-center justify-center gap-4 mb-6">
713
<div class="flex items-center">
814
<%= label_tag :juz, 'Jump to Juz', class: 'me-2 font-medium' %>
@@ -35,7 +41,8 @@
3541
<p class="mt-2 text-sm text-gray-600">Total Ayahs:
3642
<strong>
3743
<%= juz.verses_count %>
38-
</strong></p>
44+
</strong>
45+
| Pages: <strong><%= verses_by_page.keys.length %></strong></p>
3946
</div>
4047

4148
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 mb-4">
@@ -44,15 +51,21 @@
4451
<p><strong>To:</strong> <%= juz.last_verse.chapter.name_simple %>, Ayah <%= juz.last_verse.verse_number %></p>
4552
</div>
4653

47-
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4">
48-
<h2 class="text-lg font-semibold mb-4">Surahs in this Juz</h2>
49-
<ul class="divide-y divide-gray-200">
50-
<% juz.verse_mapping.each do |chapter_id, verses_range| %>
51-
<% chapter = Chapter.find(chapter_id) %>
52-
<li class="py-2">
53-
<span class="font-medium">Surah <%= chapter.name_simple %></span>: Ayahs <%= verses_range %>
54-
</li>
55-
<% end %>
56-
</ul>
57-
</div>
58-
</div>
54+
<% if verses_by_page.any? %>
55+
<div class="overflow-y-auto border border-gray-200 rounded-lg shadow-sm bg-white" style="max-height: 600px;">
56+
<div class="flex flex-col gap-6 p-4">
57+
<% verses_by_page.sort.each do |page_num, page_verses| %>
58+
<div class="border-b pb-6 last:border-b-0">
59+
<div class="text-sm font-semibold text-gray-700 mb-3">Page <%= page_num %></div>
60+
<div class="qpc-hafs quran-text text-lg leading-relaxed">
61+
<% page_verses.each do |verse| %>
62+
<%= verse.text_qpc_hafs %>
63+
<% end %>
64+
</div>
65+
</div>
66+
<% end %>
67+
</div>
68+
</div>
69+
<% end %>
70+
</div>
71+
<% end %>

app/views/resources/previews/quran_metadata/_manzil_preview.html.erb

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
<%
22
id = (params[:manzil].presence || 1).to_i.abs
33
manzil = Manzil.find_by(manzil_number: id) || Manzil.first
4+
cache_key = ["manzil", manzil.id, params.to_unsafe_h]
45
%>
56

7+
<% cache(cache_key, expires_in: 7.days) do %>
8+
<%
9+
verses_by_page = manzil.verses.includes(:chapter).order('verse_index ASC').group_by(&:page_number)
10+
%>
11+
612
<div class="flex flex-wrap items-center justify-center gap-4 mb-6">
713
<div class="flex items-center">
814
<%= label_tag :manzil, 'Jump to Manzil', class: 'me-2 font-medium' %>
@@ -35,7 +41,8 @@
3541
<p class="mt-2 text-sm text-gray-600">Total Ayahs:
3642
<strong>
3743
<%= manzil.verses_count %>
38-
</strong></p>
44+
</strong>
45+
| Pages: <strong><%= verses_by_page.keys.length %></strong></p>
3946
</div>
4047

4148
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 mb-4">
@@ -44,15 +51,21 @@
4451
<p><strong>To:</strong> <%= manzil.last_verse.chapter.name_simple %>, Ayah <%= manzil.last_verse.verse_number %></p>
4552
</div>
4653

47-
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4">
48-
<h2 class="text-lg font-semibold mb-4">Surahs in this Manzil</h2>
49-
<ul class="divide-y divide-gray-200">
50-
<% manzil.verse_mapping.each do |chapter_id, verses_range| %>
51-
<% chapter = Chapter.find(chapter_id) %>
52-
<li class="py-2">
53-
<span class="font-medium">Surah <%= chapter.name_simple %></span>: Ayahs <%= verses_range %>
54-
</li>
55-
<% end %>
56-
</ul>
57-
</div>
58-
</div>
54+
<% if verses_by_page.any? %>
55+
<div class="overflow-y-auto border border-gray-200 rounded-lg shadow-sm bg-white" style="max-height: 600px;">
56+
<div class="flex flex-col gap-6 p-4">
57+
<% verses_by_page.sort.each do |page_num, page_verses| %>
58+
<div class="border-b pb-6 last:border-b-0">
59+
<div class="text-sm font-semibold text-gray-700 mb-3">Page <%= page_num %></div>
60+
<div class="qpc-hafs quran-text text-lg leading-relaxed">
61+
<% page_verses.each do |verse| %>
62+
<%= verse.text_qpc_hafs %>
63+
<% end %>
64+
</div>
65+
</div>
66+
<% end %>
67+
</div>
68+
</div>
69+
<% end %>
70+
</div>
71+
<% end %>

app/views/resources/previews/quran_metadata/_rub_preview.html.erb

Lines changed: 26 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,14 @@
11
<%
22
id = (params[:rub].presence || 1).to_i.abs
33
rub = RubElHizb.find_by(rub_el_hizb_number: id) || RubElHizb.first
4+
cache_key = ["rub", rub.id, params.to_unsafe_h]
45
%>
56

7+
<% cache(cache_key, expires_in: 7.days) do %>
8+
<%
9+
verses_by_page = rub.verses.includes(:chapter).order('verse_index ASC').group_by(&:page_number)
10+
%>
11+
612
<div class="flex flex-wrap items-center justify-center gap-4 mb-6">
713
<div class="flex items-center">
814
<%= label_tag :rub, 'Jump to Rub al-Hizb', class: 'me-2 font-medium' %>
@@ -35,7 +41,8 @@
3541
<p class="mt-2 text-sm text-gray-600">Total Ayahs:
3642
<strong>
3743
<%= rub.verses_count %>
38-
</strong></p>
44+
</strong>
45+
| Pages: <strong><%= verses_by_page.keys.length %></strong></p>
3946
</div>
4047

4148
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 mb-4">
@@ -44,15 +51,21 @@
4451
<p><strong>To:</strong> <%= rub.last_verse.chapter.name_simple %>, Ayah <%= rub.last_verse.verse_number %></p>
4552
</div>
4653

47-
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4">
48-
<h2 class="text-lg font-semibold mb-4">Surahs in this Rub al-Hizb</h2>
49-
<ul class="divide-y divide-gray-200">
50-
<% rub.verse_mapping.each do |chapter_id, verses_range| %>
51-
<% chapter = Chapter.find(chapter_id) %>
52-
<li class="py-2">
53-
<span class="font-medium">Surah <%= chapter.name_simple %></span>: Ayahs <%= verses_range %>
54-
</li>
55-
<% end %>
56-
</ul>
57-
</div>
58-
</div>
54+
<% if verses_by_page.any? %>
55+
<div class="overflow-y-auto border border-gray-200 rounded-lg shadow-sm bg-white" style="max-height: 600px;">
56+
<div class="flex flex-col gap-6 p-4">
57+
<% verses_by_page.sort.each do |page_num, page_verses| %>
58+
<div class="border-b pb-6 last:border-b-0">
59+
<div class="text-sm font-semibold text-gray-700 mb-3">Page <%= page_num %></div>
60+
<div class="qpc-hafs quran-text text-lg leading-relaxed">
61+
<% page_verses.each do |verse| %>
62+
<%= verse.text_qpc_hafs %>
63+
<% end %>
64+
</div>
65+
</div>
66+
<% end %>
67+
</div>
68+
</div>
69+
<% end %>
70+
</div>
71+
<% end %>

app/views/resources/previews/quran_metadata/_ruku_preview.html.erb

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
<%
22
id = (params[:ruku].presence || 1).to_i.abs
33
ruku = Ruku.find_by(ruku_number: id) || Ruku.first
4-
verses = ruku.verses
4+
cache_key = ["ruku", ruku.id, params.to_unsafe_h]
55
%>
66

7+
<% cache(cache_key, expires_in: 7.days) do %>
8+
<%
9+
verses_by_page = ruku.verses.includes(:chapter).order('verse_index ASC').group_by(&:page_number)
10+
%>
11+
712
<div class="flex flex-wrap items-center justify-center gap-4 mb-6">
813
<div class="flex items-center">
914
<%= label_tag :ruku, 'Jump to Ruku', class: 'me-2 font-medium' %>
@@ -22,7 +27,7 @@
2227
<% end %>
2328
<% end %>
2429

25-
<% if ruku.ruku_number < 30 %>
30+
<% if ruku.ruku_number < 558 %>
2631
<%= link_to detail_resources_path('quran-metadata', resource.id, ruku: ruku.ruku_number + 1), class: 'btn btn-secondary' do %>
2732
Next →
2833
<% end %>
@@ -36,7 +41,8 @@
3641
<p class="mt-2 text-sm text-gray-600">Total Ayahs:
3742
<strong>
3843
<%= ruku.verses_count %>
39-
</strong></p>
44+
</strong>
45+
| Pages: <strong><%= verses_by_page.keys.length %></strong></p>
4046
</div>
4147

4248
<div class="bg-white rounded-xl shadow-sm border border-gray-200 p-4 mb-4">
@@ -45,13 +51,21 @@
4551
<p><strong>To:</strong> <%= ruku.last_verse.chapter.name_simple %>, Ayah <%= ruku.last_verse.verse_number %></p>
4652
</div>
4753

48-
<div class="bg-white border border-gray-200 rounded-lg shadow-sm mb-2">
49-
<div class="p-6">
50-
<div class="qpc-hafs quran-text">
51-
<% verses.each do |verse| %>
52-
<%= verse.text_qpc_hafs %>
54+
<% if verses_by_page.any? %>
55+
<div class="overflow-y-auto border border-gray-200 rounded-lg shadow-sm bg-white" style="max-height: 600px;">
56+
<div class="flex flex-col gap-6 p-4">
57+
<% verses_by_page.sort.each do |page_num, page_verses| %>
58+
<div class="border-b pb-6 last:border-b-0">
59+
<div class="text-sm font-semibold text-gray-700 mb-3">Page <%= page_num %></div>
60+
<div class="qpc-hafs quran-text text-lg leading-relaxed">
61+
<% page_verses.each do |verse| %>
62+
<%= verse.text_qpc_hafs %>
63+
<% end %>
64+
</div>
65+
</div>
5366
<% end %>
5467
</div>
5568
</div>
56-
</div>
57-
</div>
69+
<% end %>
70+
</div>
71+
<% end %>

app/views/resources/previews/quran_metadata/_sajda_preview.html.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<%
2-
verses = Verse.unscoped.order('sajdah_number asc').where.not(sajdah_number: nil)
2+
verses = Verse.unscoped.order('sajdah_number ASC, verse_index ASC').where.not(sajdah_number: nil)
33
%>
44

55
<div class="space-y-6 text-gray-800 text-base leading-relaxed">

lib/importer/quran_enc.rb

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
# i = Importer::QuranEnc.new
2-
# i.import 'dagbani_ghatubo'
31
module Importer
42
class QuranEnc < Base
53
include Utils::StrongMemoize
@@ -335,11 +333,6 @@ def create_translation_with_footnote(verse, resource, footnote_resource, quran_e
335333
translation
336334
end
337335

338-
def swahili_barawani(verse, resource, footnote_resource, quran_enc_key, data)
339-
# this translation has footnote, but there is no footnote markers in translation.
340-
create_translation_with_footnote(verse, resource, footnote_resource, quran_enc_key, data, report_foonote_issues: false)
341-
end
342-
343336
def parse_pashto_zakaria(verse, resource, footnote_resource, quran_enc_key, data)
344337
data['translation'] = data['translation'].sub(/\d+-\d+/, '')
345338

@@ -421,7 +414,6 @@ def data_source
421414
spanish_mokhtasar: /^(\d*,)?\d+.(\s)?/, # 2:3-4
422415
english_hilali_khan: /\([A-Z]\.\d+(?::\d+)?\)/,
423416
ukrainian_yakubovych: /^\[[IVXLCDM]+\]/,
424-
indonesian_affairs: /^\*?\d+\)/,
425417
bengali_zakaria: /^\[\p{N}+\]/,
426418
hausa_gummi: /^\*/,
427419
punjabi_arif: /^[\d\p{M}\s]*/,
@@ -449,7 +441,7 @@ def data_source
449441
tajik_khawaja: [/\(\d+\)/, /\d+[.]/],
450442
spanish_montada_eu: [/\[\d+\]/, /\[\d+\]/],
451443
indonesian_complex: [/\d+/, /\d+[.\s]/],
452-
indonesian_affairs: [/\d+\)/, /(?<!\()\*?\b\d+\)/],
444+
indonesian_affairs: [/\[\d+\]/, /\[\d+\]/],
453445
french_montada: [/\[\d+\]/, /\[\d+\]/],
454446
english_hilali_khan: [/\[\d+\]/, /\[\d+\]/],
455447
english_saheeh: [/\[\d+\]/, /\[\d+\]-/],
@@ -502,12 +494,13 @@ def data_source
502494
ukrainian_yakubovych: [/\[[IVXLCDM]+\]/, /\[[IVXLCDM]+\]/],
503495
russian_aboadel: [/\[\d+\]/, /\[\d+\]/],
504496
romanian_project: [/\[\d+\]/, /\[\d+\]/],
505-
swahili_rwwad: [/\[\d+\]/, /\[\d+\]/]
497+
swahili_rwwad: [/\[\d+\]/, /\[\d+\]/],
498+
oromo_rwwad: [/\[\d+\]/, /\[\d+\]/]
506499
}.freeze
507500

508501
TRANSLATIONS_MAPPING = {
509-
zulu_adel: {id: 1642},
510-
oromo_rwwad: {id: 1640},
502+
zulu_adel: { id: 1642 },
503+
oromo_rwwad: { id: 1640 },
511504
uzbek_sadiq_latin: { id: 55 },
512505
dutch_center: { language: 118, name: 'Dutch Islamic Center', id: 942 },
513506
pashto_rwwad: { language: 132, name: 'Rowwad Translation Center', id: 943 },
@@ -648,6 +641,7 @@ def data_source
648641
}.freeze
649642

650643
TRANSLATIONS_WITH_FOOTNOTES = [
644+
'oromo_rwwad',
651645
'amharic_zain',
652646
'swahili_rwwad',
653647
'romanian_project',

0 commit comments

Comments
 (0)