Phase 1 PWA: prayer times, qibla, quran, hijri, tasbih, 99 names

This commit is contained in:
Hermes Bot
2026-08-06 11:55:47 +08:00
parent 4def05d0ef
commit 0d37e7ec1e
10869 changed files with 959465 additions and 18 deletions
+12 -12
View File
@@ -5,7 +5,7 @@
{ no: 3, ar: 'الْمَلِكُ', en: 'Al-Malik', meaning: 'The King' },
{ no: 4, ar: 'الْقُدُّوسُ', en: 'Al-Quddus', meaning: 'The Most Holy' },
{ no: 5, ar: 'السَّلَامُ', en: 'As-Salam', meaning: 'The Source of Peace' },
{ no: 6, ar: 'الْمُؤْمِنُ', en: 'Al-Mu\'min', meaning: 'The Guardian of Faith' },
{ no: 6, ar: 'الْمُؤْمِنُ', en: "Al-Mu'min", meaning: 'The Guardian of Faith' },
{ no: 7, ar: 'الْمُهَيْمِنُ', en: 'Al-Muhaymin', meaning: 'The Protector' },
{ no: 8, ar: 'الْعَزِيزُ', en: 'Al-Aziz', meaning: 'The Almighty' },
{ no: 9, ar: 'الْجَبَّارُ', en: 'Al-Jabbar', meaning: 'The Compeller' },
@@ -18,24 +18,24 @@
{ no: 16, ar: 'الْوَهَّابُ', en: 'Al-Wahhab', meaning: 'The Bestower' },
{ no: 17, ar: 'الرَّزَّاقُ', en: 'Ar-Razzaq', meaning: 'The Provider' },
{ no: 18, ar: 'الْفَتَّاحُ', en: 'Al-Fattah', meaning: 'The Opener' },
{ no: 19, ar: 'الْعَلِيمُ', en: 'Al-'Aleem', meaning: 'The All-Knowing' },
{ no: 19, ar: 'الْعَلِيمُ', en: "Al-'Aleem", meaning: 'The All-Knowing' },
{ no: 20, ar: 'الْقَابِضُ', en: 'Al-Qabid', meaning: 'The Constrictor' },
{ no: 21, ar: 'الْبَاسِطُ', en: 'Al-Basit', meaning: 'The Expander' },
{ no: 22, ar: 'الْخَافِضُ', en: 'Al-Khafid', meaning: 'The Abaser' },
{ no: 23, ar: 'الرَّافِعُ', en: 'Ar-Rafi', meaning: 'The Exalter' },
{ no: 24, ar: 'الْمُعِزُّ', en: 'Al-Mu\'izz', meaning: 'The Bestower of Honor' },
{ no: 24, ar: 'الْمُعِزُّ', en: "Al-Mu'izz", meaning: 'The Bestower of Honor' },
{ no: 25, ar: 'الْمُذِلُّ', en: 'Al-Mudhill', meaning: 'The Humiliator' },
{ no: 26, ar: 'السَّمِيعُ', en: 'As-Sami', meaning: 'The All-Hearing' },
{ no: 27, ar: 'الْبَصِيرُ', en: 'Al-Basir', meaning: 'The All-Seeing' },
{ no: 28, ar: 'الْحَكَمُ', en: 'Al-Hakam', meaning: 'The Judge' },
{ no: 29, ar: 'الْعَدْلُ', en: 'Al-'Adl', meaning: 'The Just' },
{ no: 29, ar: 'الْعَدْلُ', en: "Al-'Adl", meaning: 'The Just' },
{ no: 30, ar: 'اللَّطِيفُ', en: 'Al-Latif', meaning: 'The Subtle One' },
{ no: 31, ar: 'الْخَبِيرُ', en: 'Al-Khabir', meaning: 'The All-Aware' },
{ no: 32, ar: 'الْحَلِيمُ', en: 'Al-Halim', meaning: 'The Forbearing' },
{ no: 33, ar: 'الْعَظِيمُ', en: 'Al-'Azim', meaning: 'The Magnificent' },
{ no: 33, ar: 'الْعَظِيمُ', en: "Al-'Azim", meaning: 'The Magnificent' },
{ no: 34, ar: 'الْغَفُورُ', en: 'Al-Ghafur', meaning: 'The All-Forgiving' },
{ no: 35, ar: 'الشَّكُورُ', en: 'Ash-Shakur', meaning: 'The Appreciative' },
{ no: 36, ar: 'الْعَلِيُّ', en: 'Al-'Aliyy', meaning: 'The Most High' },
{ no: 36, ar: 'الْعَلِيُّ', en: "Al-'Aliyy", meaning: 'The Most High' },
{ no: 37, ar: 'الْكَبِيرُ', en: 'Al-Kabir', meaning: 'The Most Great' },
{ no: 38, ar: 'الْحَفِيظُ', en: 'Al-Hafiz', meaning: 'The Preserver' },
{ no: 39, ar: 'الْمُقِيتُ', en: 'Al-Muqit', meaning: 'The Sustainer' },
@@ -48,7 +48,7 @@
{ no: 46, ar: 'الْحَكِيمُ', en: 'Al-Hakim', meaning: 'The All-Wise' },
{ no: 47, ar: 'الْوَدُودُ', en: 'Al-Wadud', meaning: 'The Loving' },
{ no: 48, ar: 'الْمَجِيدُ', en: 'Al-Majid', meaning: 'The Glorious' },
{ no: 49, ar: 'الْبَاعِثُ', en: 'Al-Ba\'ith', meaning: 'The Resurrector' },
{ no: 49, ar: 'الْبَاعِثُ', en: "Al-Ba'ith", meaning: 'The Resurrector' },
{ no: 50, ar: 'الشَّهِيدُ', en: 'Ash-Shahid', meaning: 'The Witness' },
{ no: 51, ar: 'الْحَقُّ', en: 'Al-Haqq', meaning: 'The Truth' },
{ no: 52, ar: 'الْوَكِيلُ', en: 'Al-Wakil', meaning: 'The Trustee' },
@@ -58,7 +58,7 @@
{ no: 56, ar: 'الْحَمِيدُ', en: 'Al-Hamid', meaning: 'The Praiseworthy' },
{ no: 57, ar: 'الْمُحْصِي', en: 'Al-Muhsi', meaning: 'The Reckoner' },
{ no: 58, ar: 'الْمُبْدِئُ', en: 'Al-Mubdi', meaning: 'The Originator' },
{ no: 59, ar: 'الْمُعِيدُ', en: 'Al-Mu\'id', meaning: 'The Restorer' },
{ no: 59, ar: 'الْمُعِيدُ', en: "Al-Mu'id", meaning: 'The Restorer' },
{ no: 60, ar: 'الْمُحْيِي', en: 'Al-Muhyi', meaning: 'The Giver of Life' },
{ no: 61, ar: 'الْمُمِيتُ', en: 'Al-Mumit', meaning: 'The Taker of Life' },
{ no: 62, ar: 'الْحَيُّ', en: 'Al-Hayy', meaning: 'The Ever-Living' },
@@ -71,18 +71,18 @@
{ no: 69, ar: 'الْقَادِرُ', en: 'Al-Qadir', meaning: 'The Able' },
{ no: 70, ar: 'الْمُقْتَدِرُ', en: 'Al-Muqtadir', meaning: 'The Omnipotent' },
{ no: 71, ar: 'الْمُقَدِّمُ', en: 'Al-Muqaddim', meaning: 'The Advancer' },
{ no: 72, ar: 'الْمُؤَخِّرُ', en: 'Al-Mu\'akhkhir', meaning: 'The Delayer' },
{ no: 72, ar: 'الْمُؤَخِّرُ', en: "Al-Mu'akhkhir", meaning: 'The Delayer' },
{ no: 73, ar: 'الْأَوَّلُ', en: 'Al-Awwal', meaning: 'The First' },
{ no: 74, ar: 'الْآخِرُ', en: 'Al-Akhir', meaning: 'The Last' },
{ no: 75, ar: 'الظَّاهِرُ', en: 'Az-Zahir', meaning: 'The Manifest' },
{ no: 76, ar: 'الْبَاطِنُ', en: 'Al-Batin', meaning: 'The Hidden' },
{ no: 77, ar: 'الْوَالِي', en: 'Al-Wali', meaning: 'The Governor' },
{ no: 78, ar: 'الْمُتَعَالِي', en: 'Al-Muta\'ali', meaning: 'The Most Exalted' },
{ no: 78, ar: 'الْمُتَعَالِي', en: "Al-Muta'ali", meaning: 'The Most Exalted' },
{ no: 79, ar: 'الْبَرُّ', en: 'Al-Barr', meaning: 'The Source of Goodness' },
{ no: 80, ar: 'التَّوَّابُ', en: 'At-Tawwab', meaning: 'The Acceptor of Repentance' },
{ no: 81, ar: 'الْمُنْتَقِمُ', en: 'Al-Muntaqim', meaning: 'The Avenger' },
{ no: 82, ar: 'الْعَفُوُّ', en: 'Al-'Afuww', meaning: 'The Pardoner' },
{ no: 83, ar: 'الرَّؤُوفُ', en: 'Ar-Ra\'uf', meaning: 'The Kind' },
{ no: 82, ar: 'الْعَفُوُّ', en: "Al-'Afuww", meaning: 'The Pardoner' },
{ no: 83, ar: 'الرَّؤُوفُ', en: "Ar-Ra'uf", meaning: 'The Kind' },
{ no: 84, ar: 'مَالِكُ الْمُلْكِ', en: 'Malik-ul-Mulk', meaning: 'Master of the Kingdom' },
{ no: 85, ar: 'ذُو الْجَلَالِ وَالْإِكْرَامِ', en: 'Dhul-Jalal wal-Ikram', meaning: 'Lord of Majesty & Honor' },
{ no: 86, ar: 'الْمُقْسِطُ', en: 'Al-Muqsit', meaning: 'The Equitable' },
+4 -3
View File
@@ -31,7 +31,8 @@
<h2>📿 Tasbih Counter</h2>
<div class="tasbih-display">
<div class="counter-ring" onclick={increment}>
<!-- svelte-ignore a11y_click_events_have_key_events a11y_no_static_element_interactions -->
<div class="counter-ring" onclick={increment} role="button" tabindex="0" onkeydown={(e) => e.key === 'Enter' && increment()}>
<svg viewBox="0 0 120 120" width="160" height="160">
<circle cx="60" cy="60" r="52" fill="none" stroke="#e6f5f0" stroke-width="8" />
<circle
@@ -54,8 +55,8 @@
<div class="controls">
<div class="target-select">
<label>Beads:</label>
<select bind:value={target} onchange={() => { count = 0; }}>
<label for="bead-select">Beads:</label>
<select id="bead-select" bind:value={target} onchange={() => { count = 0; }}>
<option value={33}>33</option>
<option value={99}>99</option>
<option value={100}>100</option>