- Rebrand گنجور -> دیوان across GanjooRazor; lang=ur; Urdu home page and footer - Hijri century groups with Urdu names - Noto Nastaliq Urdu (default) / Noto Naskh Arabic switch - Remove footer links to Ganjoor-only services; link Wikisource, data and code - Linux deployment: Dockerfile, docker-compose (SQL Server 2022, API, site, Caddy) - DIVAN.md: changes and deploy guide Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
226 lines
14 KiB
Plaintext
226 lines
14 KiB
Plaintext
@model GanjooRazor.Pages._FooterPartialModel
|
|
|
|
<div id="footer">
|
|
<div class="footer-contents">
|
|
<ul class="link-list-internals">
|
|
<li>
|
|
<a href="/">
|
|
<svg class="footer-icon" height="14px" viewBox="0 0 24 24" width="14px"><path d="M0 0h24v24H0z" fill="none" /><path d="M10 20v-6h4v6h5v-8h3L12 3 2 12h3v8z" /></svg> سرورق
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/random">
|
|
<svg class="footer-icon" height="14px" viewBox="0 0 24 24" width="14px"><path d="M0 0h24v24H0zm21.02 19c0 1.1-.9 2-2 2h-14c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v14z" fill="none" /><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zM7.5 18c-.83 0-1.5-.67-1.5-1.5S6.67 15 7.5 15s1.5.67 1.5 1.5S8.33 18 7.5 18zm0-9C6.67 9 6 8.33 6 7.5S6.67 6 7.5 6 9 6.67 9 7.5 8.33 9 7.5 9zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm4.5 4.5c-.83 0-1.5-.67-1.5-1.5s.67-1.5 1.5-1.5 1.5.67 1.5 1.5-.67 1.5-1.5 1.5zm0-9c-.83 0-1.5-.67-1.5-1.5S15.67 6 16.5 6s1.5.67 1.5 1.5S17.33 9 16.5 9z" /></svg> اتفاقی شعر
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/hashieha">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M280-240q-17 0-28.5-11.5T240-280v-80h520v-360h80q17 0 28.5 11.5T880-680v600L720-240H280ZM80-280v-560q0-17 11.5-28.5T120-880h520q17 0 28.5 11.5T680-840v360q0 17-11.5 28.5T640-440H240L80-280Z" /></svg> حاشیے
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/simi">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M458-280q18 0 35.5-4.5T526-298l98 98 56-56-98-98q9-15 13.5-32.5T600-422q0-58-41-98t-99-40q-58 0-99 41t-41 99q0 58 40 99t98 41Zm2-80q-25 0-42.5-17.5T400-420q0-25 17.5-42.5T460-480q25 0 42.5 17.5T520-420q0 25-17.5 42.5T460-360ZM240-80q-33 0-56.5-23.5T160-160v-640q0-33 23.5-56.5T240-880h320l240 240v480q0 33-23.5 56.5T720-80H240Zm280-520h200L520-800v200Z" /></svg> ملتے جلتے
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
<ul class="link-list-tools">
|
|
<li><a href="https://ur.wikisource.org"><svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z" /></svg> ماخذ: ویکی ماخذ</a></li>
|
|
<li><a href="https://github.com/anas-rashid/divan-data"><svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z" /></svg> ڈیٹا</a></li>
|
|
<li><a href="https://github.com/anas-rashid/divan"><svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z" /></svg> کوڈ</a></li>
|
|
<li><a href="https://github.com/ganjoor/GanjoorService"><svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M320-240 80-480l240-240 57 57-184 184 183 183-56 56Zm320 0-57-57 184-184-183-183 56-56 240 240-240 240Z" /></svg> گنجور پر مبنی</a></li>
|
|
</ul>
|
|
<ul class="link-list-about">
|
|
<li>
|
|
<a href="/about">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M160-80v-240h120v240H160Zm200 0v-476q-50 17-65 62.5T280-400h-80q0-128 75-204t205-76q100 0 150-49.5T680-880h80q0 88-37.5 157.5T600-624v544h-80v-240h-80v240h-80Zm120-640q-33 0-56.5-23.5T400-800q0-33 23.5-56.5T480-880q33 0 56.5 23.5T560-800q0 33-23.5 56.5T480-720Z" /></svg> تعارف
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/faq">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M560-360q17 0 29.5-12.5T602-402q0-17-12.5-29.5T560-444q-17 0-29.5 12.5T518-402q0 17 12.5 29.5T560-360Zm-30-128h60q0-29 6-42.5t28-35.5q30-30 40-48.5t10-43.5q0-45-31.5-73.5T560-760q-41 0-71.5 23T446-676l54 22q9-25 24.5-37.5T560-704q24 0 39 13.5t15 36.5q0 14-8 26.5T578-596q-33 29-40.5 45.5T530-488ZM320-240q-33 0-56.5-23.5T240-320v-480q0-33 23.5-56.5T320-880h480q33 0 56.5 23.5T880-800v480q0 33-23.5 56.5T800-240H320Zm0-80h480v-480H320v480ZM160-80q-33 0-56.5-23.5T80-160v-560h80v560h560v80H160Zm160-720v480-480Z" /></svg> عام سوالات
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/vazn">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="m105-233-65-47 200-320 120 140 160-260 109 163q-23 1-43.5 5.5T545-539l-22-33-152 247-121-141-145 233ZM863-40 738-165q-20 14-44.5 21t-50.5 7q-75 0-127.5-52.5T463-317q0-75 52.5-127.5T643-497q75 0 127.5 52.5T823-317q0 26-7 50.5T795-221L920-97l-57 57ZM643-217q42 0 71-29t29-71q0-42-29-71t-71-29q-42 0-71 29t-29 71q0 42 29 71t71 29Zm89-320q-19-8-39.5-13t-42.5-6l205-324 65 47-188 296Z" /></svg> اعداد و شمار
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/contribs">
|
|
<svg class="footer-icon" height="14px" viewBox="0 0 24 24" width="14px"><g><rect fill="none" height="24" width="24" /></g><g><g><path d="M6.32,13.01c0.96,0.02,1.85,0.5,2.45,1.34C9.5,15.38,10.71,16,12,16c1.29,0,2.5-0.62,3.23-1.66 c0.6-0.84,1.49-1.32,2.45-1.34C16.96,11.78,14.08,11,12,11C9.93,11,7.04,11.78,6.32,13.01z" /><path d="M4,13L4,13c1.66,0,3-1.34,3-3c0-1.66-1.34-3-3-3s-3,1.34-3,3C1,11.66,2.34,13,4,13z" /><path d="M20,13L20,13c1.66,0,3-1.34,3-3c0-1.66-1.34-3-3-3s-3,1.34-3,3C17,11.66,18.34,13,20,13z" /><path d="M12,10c1.66,0,3-1.34,3-3c0-1.66-1.34-3-3-3S9,5.34,9,7C9,8.66,10.34,10,12,10z" /><path d="M21,14h-3.27c-0.77,0-1.35,0.45-1.68,0.92C16.01,14.98,14.69,17,12,17c-1.43,0-3.03-0.64-4.05-2.08 C7.56,14.37,6.95,14,6.27,14H3c-1.1,0-2,0.9-2,2v4h7v-2.26c1.15,0.8,2.54,1.26,4,1.26s2.85-0.46,4-1.26V20h7v-4 C23,14.9,22.1,14,21,14z" /></g></g></svg> شراکت داروں کے اعداد
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/sources">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M480-60q-72-68-165-104t-195-36v-440q101 0 194 36.5T480-498q73-69 166-105.5T840-640v440q-103 0-195.5 36T480-60Zm0-104q63-47 134-75t146-37v-276q-73 13-143.5 52.5T480-394q-66-66-136.5-105.5T200-552v276q75 9 146 37t134 75Zm0-436q-66 0-113-47t-47-113q0-66 47-113t113-47q66 0 113 47t47 113q0 66-47 113t-113 47Zm0-80q33 0 56.5-23.5T560-760q0-33-23.5-56.5T480-840q-33 0-56.5 23.5T400-760q0 33 23.5 56.5T480-680Zm0-80Zm0 366Z" /></svg> مآخذ
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/contact">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M160-160q-33 0-56.5-23.5T80-240v-480q0-33 23.5-56.5T160-800h640q33 0 56.5 23.5T880-720v480q0 33-23.5 56.5T800-160H160Zm320-280L160-640v400h640v-400L480-440Zm0-80 320-200H160l320 200ZM160-640v-80 480-400Z" /></svg> رابطہ
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="/privacy">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M480-80q-139-35-229.5-159.5T160-516v-244l320-120 320 120v244q0 152-90.5 276.5T480-80Zm0-84q97-30 162-118.5T718-480H480v-315l-240 90v207q0 7 2 18h238v316Z" /></svg> رازداری
|
|
</a>
|
|
</li>
|
|
<li>
|
|
<a href="javascript:void(0);" onclick="openChangelogModal();" role="button" title="نیا کیا ہے">
|
|
<svg class="footer-icon" height="14px" viewBox="0 -960 960 960" width="14px"><path d="M480-80q-83 0-156-31.5T197-197q-54-54-85.5-127T80-480q0-83 31.5-156T197-763q54-54 127-85.5T480-880q83 0 156 31.5T763-763q54 54 85.5 127T880-480q0 20-2 39t-6 39l-76-76q1-11 1.5-21t.5-21q0-134-93-227t-227-93q-134 0-227 93t-93 227q0 134 93 227t227 93q11 0 21-.5t21-1.5l76 76q-20 4-39 6t-39 2Zm312 40L622-210q-14 8-29.5 13T560-192q-40 0-68-28t-28-68q0-40 28-68t68-28q40 0 68 28t28 68q0 9-1.5 17t-4.5 15l124 124-64 64ZM440-480v-280h80v247l180 108-40 68-220-143Z" /></svg> نیا کیا ہے
|
|
</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="changelog-modal" class="modal">
|
|
<span onclick="document.getElementById('changelog-modal').style.display='none'"
|
|
class="close" title="بند کریں">×</span>
|
|
<div class="modal-content animate changelog-modal-content">
|
|
<h2 class="changelog-title">دیوان میں نیا کیا ہے</h2>
|
|
<div id="changelog-list" class="changelog-list">
|
|
<div class="changelog-loading">لوڈ ہو رہا ہے...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<script>
|
|
var changelogLoaded = false;
|
|
|
|
function openChangelogModal() {
|
|
document.getElementById('changelog-modal').style.display = 'block';
|
|
if (!changelogLoaded) {
|
|
loadChangelog();
|
|
}
|
|
}
|
|
|
|
function loadChangelog() {
|
|
var listEl = document.getElementById('changelog-list');
|
|
fetch('/json/changelog.json', { cache: 'no-store' })
|
|
.then(function (response) {
|
|
if (!response.ok) {
|
|
throw new Error('network response was not ok');
|
|
}
|
|
return response.json();
|
|
})
|
|
.then(function (items) {
|
|
changelogLoaded = true;
|
|
if (!items || items.length === 0) {
|
|
listEl.innerHTML = '<div class="changelog-loading">دکھانے کے لیے کچھ نہیں۔</div>';
|
|
return;
|
|
}
|
|
// newest first
|
|
var reversed = items.slice().reverse();
|
|
var html = '';
|
|
for (var i = 0; i < reversed.length; i++) {
|
|
var item = reversed[i];
|
|
html += '<div class="changelog-item">'
|
|
+ '<span class="changelog-date">' + toPersianNumber(item.date) + '</span>'
|
|
+ '<span class="changelog-desc">' + item.description + '</span>'
|
|
+ '</div>';
|
|
}
|
|
listEl.innerHTML = html;
|
|
})
|
|
.catch(function () {
|
|
listEl.innerHTML = '<div class="changelog-loading">تبدیلیوں کی فہرست لوڈ نہیں ہو سکی۔</div>';
|
|
});
|
|
}
|
|
</script>
|
|
|
|
<a href="javascript:toggleDivanFont();" id="font-toggle" title="خط بدلیں: نستعلیق / نسخ">نستعلیق</a>
|
|
<script>
|
|
if (document.documentElement.classList.contains("font-naskh")) document.getElementById("font-toggle").textContent = "نسخ";
|
|
</script>
|
|
|
|
<a href="javascript:toggleColorScheme();" id="theme-toggle" title="رنگ بدلیں">
|
|
<span id="icon-sun"><svg height="24px" viewBox="0 -960 960 960" width="24px"><path d="M440-760v-160h80v160h-80Zm266 110-55-55 112-115 56 57-113 113Zm54 210v-80h160v80H760ZM440-40v-160h80v160h-80ZM254-652 140-763l57-56 113 113-56 54Zm508 512L651-255l54-54 114 110-57 59ZM40-440v-80h160v80H40Zm157 300-56-57 112-112 29 27 29 28-114 114Zm283-100q-100 0-170-70t-70-170q0-100 70-170t170-70q100 0 170 70t70 170q0 100-70 170t-170 70Z" /></svg></span>
|
|
<span id="icon-moon"><svg height="24px" viewBox="0 -960 960 960" width="24px"><path d="M480-120q-150 0-255-105T120-480q0-150 105-255t255-105q14 0 27.5 1t26.5 3q-41 29-65.5 75.5T444-660q0 90 63 153t153 63q55 0 101-24.5t75-65.5q2 13 3 26.5t1 27.5q0 150-105 255T480-120Z" /></svg></span>
|
|
</a>
|
|
|
|
<script>
|
|
applyPreferredColorScheme(getPreferredColorScheme());
|
|
</script>
|
|
|
|
@if (Model.StickyEnabled)
|
|
{
|
|
<script>
|
|
// When the user scrolls the page, execute stickyFunction
|
|
window.onscroll = function () { stickyFunction() };
|
|
|
|
// Get the navbar
|
|
var navbar = document.getElementById("main-navbar");
|
|
|
|
// Get the offset position of the navbar
|
|
var sticky = navbar.offsetTop;
|
|
|
|
if (sticky != null) {
|
|
var btnSticky = document.getElementById("pin_button");
|
|
if (stickyEnabled) {
|
|
btnSticky.classList.remove("color-disabled");
|
|
btnSticky.classList.add("color-white");
|
|
}
|
|
else {
|
|
btnSticky.classList.remove("color-white");;
|
|
btnSticky.classList.add("color-disabled")
|
|
}
|
|
}
|
|
|
|
|
|
// Add the sticky class to the navbar when you reach its scroll position. Remove "sticky" when you leave the scroll position
|
|
function stickyFunction() {
|
|
if (stickyEnabled && window.pageYOffset >= sticky) {
|
|
navbar.classList.add("sticky");
|
|
} else {
|
|
navbar.classList.remove("sticky");
|
|
}
|
|
}
|
|
|
|
function switchSticky() {
|
|
stickyEnabled = !stickyEnabled;
|
|
setCookie("stickyEnabled", stickyEnabled ? "true" : "false", 365);
|
|
var btnSticky = document.getElementById("pin_button");
|
|
if (stickyEnabled) {
|
|
btnSticky.classList.remove("color-disabled");
|
|
btnSticky.classList.add("color-white");
|
|
}
|
|
else {
|
|
btnSticky.classList.remove("color-white");;
|
|
btnSticky.classList.add("color-disabled")
|
|
}
|
|
stickyFunction();
|
|
}
|
|
</script>
|
|
}
|
|
|
|
@if (Model.GanjoorPage != null && Model.GanjoorPage.Poem != null)
|
|
{
|
|
<script>
|
|
var btnLineNumbers = document.getElementById("bnum-button");
|
|
if (lineNumbers) {
|
|
btnLineNumbers.classList.remove("color-disabled");
|
|
btnLineNumbers.classList.add("color-white");
|
|
}
|
|
else {
|
|
btnLineNumbers.classList.remove("color-white");;
|
|
btnLineNumbers.classList.add("color-disabled")
|
|
}
|
|
|
|
if (playerScrollLock) {
|
|
const lockButtons = document.querySelectorAll('.recitation-scrollunlock');
|
|
lockButtons.forEach(function (lockButton) {
|
|
lockButton.classList.toggle('recitation-scrollunlock');
|
|
lockButton.classList.toggle('recitation-scrolllock');
|
|
});
|
|
}
|
|
else {
|
|
const lockButtons = document.querySelectorAll('.recitation-scrolllock');
|
|
lockButtons.forEach(function (lockButtons) {
|
|
lockButtons.classList.toggle('recitation-scrollunlock');
|
|
lockButtons.classList.toggle('recitation-scrolllock');
|
|
});
|
|
}
|
|
</script>
|
|
}
|