Skip to content

Commit 1490c44

Browse files
authored
updated the search page to include more translations (#214)
1 parent 4a1a50e commit 1490c44

File tree

15 files changed

+194
-1005
lines changed

15 files changed

+194
-1005
lines changed

src/app.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
<link crossorigin="anonymous" rel="manifest" href="%sveltekit.assets%/manifest.json" />
1717
<link crossorigin="anonymous" rel="icon" type="image/png" href="%sveltekit.assets%/images/favicon.png" />
1818
<link crossorigin="anonymous" href="%sveltekit.assets%/images/apple-touch-icon.png" rel="apple-touch-icon" />
19-
<link crossorigin="anonymous" rel="stylesheet" href="%sveltekit.assets%/css/global.css?version=17" />
19+
<link crossorigin="anonymous" rel="stylesheet" href="%sveltekit.assets%/css/global.css?version=19" />
2020

2121
<!--
2222
If the user's browser do not support Optional chaining (?.), redirect to old v3 website

src/components/display/verses/translations/Layout.svelte

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,10 @@
77
import { __userSettings, __verseTranslations, __currentPage } from '$utils/stores';
88
import { selectableVerseTranslations, rightToLeftVerseTranslations } from '$data/options';
99
10+
// Retrieve URL parameters
11+
const params = new URLSearchParams(window.location.search);
12+
const searchQuery = params.get('query') === null ? '' : params.get('query');
13+
1014
const translationFootnoteClasses = `hidden my-2 footnote-block px-2 py-2 border-2 border-gray-200 rounded-2xl theme-grayscale footnote-${value.meta.chapter}-${value.meta.verse}-${verseTranslationID}`;
1115
const footnoteSupClasses = 'ml-1 mt-1 px-2 py-1 bg-gray-200 rounded-full font-semibold cursor-pointer system-font';
1216
@@ -65,6 +69,26 @@
6569
return rightToLeftVerseTranslations.includes(selectableVerseTranslations[id].resource_id);
6670
}
6771
72+
// Function to highlight the searched text in verse text
73+
function highlightSearchedText(searchQuery, verseText) {
74+
const regex = new RegExp(`(?<!<[^>]*)\\b(${searchQuery})\\b(?![^<]*>)`, 'gi');
75+
const result = verseText.replace(regex, (match) => `<b>${match}</b>`);
76+
return result;
77+
}
78+
79+
// Function to modify the verse text
80+
function verseTextModifier(verseText) {
81+
let updatedVerseText = verseText;
82+
83+
// If query parameter was set (from the search page), highlight the query in the verse translation
84+
if (params.get('query') !== null) {
85+
updatedVerseText = highlightSearchedText(searchQuery, updatedVerseText);
86+
}
87+
88+
updatedVerseText = updatedVerseText.replace(/<sup/g, `<sup onclick='supClick(this)' title='Show footnote' data-chapter='${value.meta.chapter}' data-verse='${value.meta.verse}' data-translation=${verseTranslationID} class='${footnoteSupClasses}'`);
89+
return updatedVerseText;
90+
}
91+
6892
// function detectVersesInFootnote(footnote) {
6993
// const regex = /\d{0,9}(:\d{0,9})*/g;
7094
// let matches = footnote.match(regex);
@@ -79,7 +103,7 @@
79103

80104
<div class="flex flex-col print:break-inside-avoid">
81105
<span class="{isTranslationRTL(verseTranslation.resource_id) && 'direction-rtl'} {isTranslationUrduOrPersian(verseTranslation.resource_id) && 'font-Urdu'}">
82-
{@html verseTranslation.text.replace(/<sup/g, `<sup onclick='supClick(this)' title='Show footnote' data-chapter='${value.meta.chapter}' data-verse='${value.meta.verse}' data-translation=${verseTranslationID} class='${footnoteSupClasses}' `)}
106+
{@html verseTextModifier(verseTranslation.text)}
83107
</span>
84108

85109
<!-- translation footnotes -->

src/components/display/verses/translations/Translations.svelte

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,22 +7,20 @@
77
import { __currentPage, __verseKey, __verseTranslations, __verseTranslationData, __chapterData, __userSettings } from '$utils/stores';
88
import { fetchVerseTranslationData } from '$utils/fetchData';
99
10-
$: fontSizes = JSON.parse($__userSettings).displaySettings.fontSizes;
1110
let verseTranslationData;
1211
12+
$: fontSizes = JSON.parse($__userSettings).displaySettings.fontSizes;
1313
$: verseTranslationClasses = `verseTranslationText flex flex-col space-y-4 leading-normal ${isBody ? 'theme' : ''} ${fontSizes.verseTranslationText}`;
1414
1515
// Setting the variables depending on the page
1616
$: chapterData = $__currentPage === 'mushaf' ? JSON.parse(localStorage.getItem('pageData')) : $__chapterData;
1717
$: chapterToFetch = $__currentPage === 'mushaf' ? parseInt($__verseKey.split(':')[0], 10) : value.meta.chapter;
1818
1919
// Fetch verse translations for pages other than chapter
20-
$: {
21-
if ($__currentPage !== 'chapter') {
22-
(async () => {
23-
verseTranslationData = await fetchVerseTranslationData(chapterToFetch);
24-
})();
25-
}
20+
$: if ($__currentPage !== 'chapter') {
21+
(async () => {
22+
verseTranslationData = await fetchVerseTranslationData(chapterToFetch, $__verseTranslations.toString());
23+
})();
2624
}
2725
</script>
2826

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<script>
2+
export let size = 4;
3+
</script>
4+
5+
<svg xmlns="http://www.w3.org/2000/svg" class="w-{size} h-{size}" fill="currentColor" id="Layer_1" data-name="Layer 1" viewBox="0 0 24 24">
6+
<path d="M10,15h-.33l-.219,1.655c-.327,2.477-2.458,4.345-4.957,4.345h-.494c0,1.654-1.346,3-3,3-.552,0-1-.447-1-1s.448-1,1-1,1-.448,1-1v-1c0-.553,.448-1,1-1h1.494c1.499,0,2.778-1.12,2.974-2.606l.334-2.524c.065-.497,.49-.869,.991-.869h1.207c-.082-.807-2.458-5.722-3.777-7.353C4.774,3.715,2.806,2.389,.8,1.979,.259,1.869-.09,1.342,.02,.8,.13,.259,.659-.092,1.2,.021,3.68,.525,6.085,2.129,7.8,4.419c1.268,1.566,4.2,7.161,4.2,8.581,0,.97-.701,2-2,2ZM18.441,2.9c-.038,0-.071,.026-.079,.063l-.787,3.437h1.757l-.811-3.437c-.009-.037-.041-.063-.079-.063Zm5.559,.1v5c0,1.657-1.343,3-3,3h-5c-1.657,0-3-1.343-3-3v-3.853l-1.818-2.459c-.488-.686,.064-1.715,.904-1.688h8.914c1.657,0,3,1.343,3,3Zm-2.696,5.644l-1.363-5.948c-.267-1.569-2.627-1.535-2.898-.049l-1.413,5.993c-.104,.439,.23,.86,.681,.86h0c.324,0,.606-.223,.681-.539l.274-1.161h2.409l.265,1.157c.073,.318,.356,.543,.682,.543h.002c.449,0,.782-.418,.682-.856Zm2.696,7.356v5c0,1.657-1.343,3-3,3H12.086c-.841,.027-1.392-1.003-.904-1.688l1.818-2.459v-3.853c0-1.657,1.343-3,3-3h5c1.657,0,3,1.343,3,3Zm-2,.116c0-.34-.276-.616-.616-.616h-2.257v-.384c0-.34-.276-.616-.616-.616h-.021c-.34,0-.616,.276-.616,.616v.384h-2.257c-.34,0-.616,.276-.616,.616v.021c0,.34,.276,.616,.616,.616h4.191c-.111,.963-.484,2.151-1.303,3.071-.276-.31-.507-.648-.692-1-.106-.202-.318-.325-.545-.325-.464,0-.769,.492-.553,.903,.225,.43,.501,.843,.83,1.22-.539,.328-1.189,.559-1.977,.635-.32,.031-.568,.293-.568,.614v.021c0,.365,.316,.648,.679,.614,1.146-.107,2.079-.485,2.832-1.022,.749,.533,1.671,.913,2.808,1.022,.364,.035,.68-.248,.68-.613v-.021c0-.316-.24-.583-.555-.613-.792-.075-1.442-.31-1.984-.639,.99-1.135,1.485-2.591,1.607-3.866h.316c.34,0,.616-.276,.616-.616v-.021Z"/>
7+
</svg>

src/components/ui/BottomToolbar/DisplayChangeButton.svelte

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
<script>
22
import Eye from '$svgs/Eye.svelte';
33
import Tooltip from '$ui/FlowbiteSvelte/tooltip/Tooltip.svelte';
4+
import DisplayTypeSelector from '$ui/SettingsDrawer/DisplayTypeSelector.svelte';
45
import { __chapterNumber, __displayType, __currentPage, __selectedDisplayId, __settingsSelectorModal } from '$utils/stores';
56
import { disabledClasses } from '$data/commonClasses';
6-
7-
const radioClasses = 'font-normal';
8-
const dropdownClasses = 'w-52 p-3 space-y-3 text-sm max-h-64 overflow-y-scroll theme-grayscale';
97
</script>
108

11-
<button id="changeDisplayButton" type="button" title="Display Type" class="inline-flex flex-col items-center justify-center px-5 relative inline-flex items-center hover:bg-lightGray group {['chapter', 'mushaf'].includes($__currentPage) ? 'opacity-70' : disabledClasses}" on:click={() => __settingsSelectorModal.set({ visible: true, title: 'Display Type' })}>
9+
<button id="changeDisplayButton" type="button" title="Display Type" class="inline-flex flex-col items-center justify-center px-5 relative inline-flex items-center hover:bg-lightGray group {['chapter', 'mushaf'].includes($__currentPage) ? 'opacity-70' : disabledClasses}" on:click={() => __settingsSelectorModal.set({ component: DisplayTypeSelector, visible: true, title: 'Display Type' })}>
1210
<Eye />
1311
<span class="sr-only">Display Type</span>
1412
</button>

src/components/ui/Modals/QuranNavigationModal.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@
250250
<span class="text-xs font-semibold {searchResults && 'pt-2'}">Search Quran</span>
251251
<div class={linkClasses}>
252252
<span>{@html '&#10230'}</span>
253-
<a href="/search?text={searchedKey}&translation=0" class={linkTextClasses}>"{searchedKey}"</a>
253+
<a href="/search?query={searchedKey}" class={linkTextClasses}>"{searchedKey}"</a>
254254
</div>
255255
{/if}
256256
</div>
Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
<script>
22
import Modal from '$ui/FlowbiteSvelte/modal/Modal.svelte';
3-
import DisplayTypeSelector from '$ui/SettingsDrawer/DisplayTypeSelector.svelte';
43
import { __settingsSelectorModal } from '$utils/stores';
54
import { getModalTransition } from '$utils/getModalTransition';
65
</script>
76

87
<Modal id="settingsSelectorModal" bind:open={$__settingsSelectorModal.visible} transitionParams={getModalTransition('bottom')} size="xs" class="!rounded-b-none md:!rounded-3xl theme" bodyClass="p-6" position="bottom" center outsideclose>
98
<h3 id="modal-title" class="mb-8 text-xl font-medium text-black">{$__settingsSelectorModal.title}</h3>
10-
<div class="max-h-[70vh] overflow-y-scroll pr-2"><DisplayTypeSelector /></div>
9+
<div class="max-h-[70vh] w-full overflow-y-scroll pr-2"><svelte:component this={$__settingsSelectorModal.component} /></div>
1110
</Modal>

src/components/ui/SettingsDrawer/VerseTranslationSelector.svelte

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
{#each Object.values(selectableVerseTranslations) as translation}
1717
{#if translation.language_id === language.language_id}
1818
<div class="flex items-center w-full">
19-
<Checkbox on:click={() => updateSettings({ type: 'verseTranslation', value: translation.resource_id })} custom>
19+
<Checkbox class="w-full" on:click={() => updateSettings({ type: 'verseTranslation', value: translation.resource_id })} custom>
2020
<div class="inline-flex justify-between items-center p-5 w-full text-gray-500 bg-white rounded-lg border border-gray-200 cursor-pointer peer-checked:border-primary-600 peer-checked:text-primary-600 hover:text-gray-600 hover:bg-gray-100 {$__verseTranslations.includes(translation.resource_id) && selectedRadioClasses}">
2121
<div class="w-full">{translation.resource_name}</div>
2222

0 commit comments

Comments
 (0)