ganjoor software changelog

This commit is contained in:
Hamid Reza Mohammadi 2026-09-27 18:06:03 +03:30
parent 601c29af36
commit 1351679a21
5 changed files with 1586 additions and 0 deletions

View File

@ -147,10 +147,69 @@
<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="بستن">&times;</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">' + 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: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>

View File

@ -1440,6 +1440,59 @@ ol {
cursor: pointer;
}
/* Changelog modal */
.changelog-modal-content {
max-width: 640px;
max-height: 80vh;
display: flex;
flex-direction: column;
}
.changelog-title {
color: var(--accent-text);
margin: 4px 0 10px 0;
font-size: 1.1em;
border-bottom: 1px dashed var(--border-gold);
padding-bottom: 8px;
}
.changelog-list {
overflow-y: auto;
font-size: 0.75em;
}
.changelog-loading {
text-align: center;
color: var(--accent-text);
padding: 20px 0;
}
.changelog-item {
display: flex;
align-items: baseline;
gap: 10px;
padding: 8px 4px;
border-bottom: 1px dashed var(--border-gold);
}
.changelog-item:last-child {
border-bottom: none;
}
.changelog-date {
flex: 0 0 auto;
color: var(--lapis);
font-weight: bold;
white-space: nowrap;
direction: ltr;
}
.changelog-desc {
flex: 1 1 auto;
color: var(--accent-text);
line-height: 1.7;
}
/* Add Zoom Animation */
.animate {
-webkit-animation: animatezoom 0.6s;

File diff suppressed because it is too large Load Diff

View File

@ -28,3 +28,9 @@ it needs a downloaded ONNX model and published embeddings data on top of the usu
covering the actual problems hit building this feature, not a generic checklist — worth reading
before assuming something new is broken.
## Changelog
The user-facing changelog shown in the site's footer ("تازه‌های نرم‌افزار") is generated and
maintained from git history. See **[docs/CHANGELOG_PROCESS.md](docs/CHANGELOG_PROCESS.md)** for
the JSON format and the process for adding new entries.

62
docs/CHANGELOG_PROCESS.md Normal file
View File

@ -0,0 +1,62 @@
# فرایند نگهداری فهرست تغییرات (Changelog)
فایل `GanjooRazor/wwwroot/json/changelog.json` فهرست تغییرات کاربرپسند این
پروژه را به زبان فارسی نگه می‌دارد و در پاورقی سایت («تازه‌های نرم‌افزار»)
نمایش داده می‌شود.
## ساختار فایل
فایل یک آرایهٔ JSON است که هر عضو آن به این شکل است:
```json
{
"date": "1405/07/05",
"description": "توضیح کاربرپسند و فارسیِ تغییر، به شکل یک جملهٔ کوتاه."
}
```
- `date`: تاریخ شمسی به قالب `yyyy/mm/dd`.
- `description`: توضیح فارسیِ روان (نه ترجمهٔ تحت‌اللفظیِ پیام Commit)، مناسب
برای خواننده‌ای که کاربر نهایی سایت است، نه توسعه‌دهنده.
- آرایه باید به ترتیب **صعودی** (قدیم به جدید) در فایل نگه داشته شود؛ نمایش
معکوس (جدید به قدیم) در سمت کلاینت با جاوااسکریپت (`_FooterPartial.cshtml`)
انجام می‌شود.
فقط تغییراتی که یک کاربر عادی سایت متوجهٔ آن می‌شود باید وارد این فایل شوند:
ویژگی‌های جدید، تغییرات محسوس رابط کاربری، رفع اشکال‌های قابل‌مشاهده،
بهبودهای کارایی محسوس و غیره. تغییرات صرفاً فنی (ریفکتور، بروزرسانی
وابستگی‌ها، CI/CD، migrationهای دیتابیس، تمیزکاری کد، تایپو در کد) نباید در
این فایل بیایند.
## به‌روزرسانی فهرست تغییرات پس از هر دوره از توسعه
از آنجا که نوشتن توضیح فارسیِ طبیعی و تشخیص اینکه کدام Commitها واقعاً برای
کاربر اهمیت دارند به قضاوت نیاز دارد (نه صرفاً یک تبدیل خودکار متن)، روش
پیشنهادی برای به‌روزرسانی، استفاده از دستیار هوش مصنوعی (مثلاً Claude) است:
1. لیست Commitهای جدید را از زمان آخرین به‌روزرسانی فهرست تغییرات بگیرید:
```bash
git log --no-merges --date=format:'%Y-%m-%d' --pretty=format:'%H|%ad|%s' \
--since="<تاریخ آخرین به‌روزرسانی>" > new_commits.txt
```
2. این فایل را همراه با فایل فعلی `changelog.json` به دستیار بدهید و از آن
بخواهید:
- Commitهای بی‌اهمیت برای کاربر نهایی را کنار بگذارد.
- Commitهای مرتبط با یک ویژگی/رفع‌اشکال را در یک مورد ادغام کند.
- برای هر مورد باقی‌مانده یک توضیح فارسیِ طبیعی و کوتاه بنویسد.
- تاریخ میلادی هر Commit را به شمسی (`yyyy/mm/dd`) تبدیل کند.
- موارد جدید را در انتهای آرایهٔ موجود در `changelog.json` اضافه کند (نه
جایگزینی کل فایل)، با حفظ ترتیب صعودی تاریخ.
3. فایل به‌روزشده را جایگزین `GanjooRazor/wwwroot/json/changelog.json` کنید و
کامیت نمایید.
## نمایش در سایت
پاورقی سایت (`GanjooRazor/Pages/Shared/_FooterPartial.cshtml`) یک لینک با
عنوان «تازه‌های نرم‌افزار» دارد که با کلیک، پنجرهٔ Modal مربوطه را باز کرده و
فایل `changelog.json` را با `fetch` بارگذاری می‌کند. لیست به‌صورت معکوس
(جدیدترین مورد در بالا) نمایش داده می‌شود. سبک‌های مربوط به این بخش در
`GanjooRazor/wwwroot/css/p8.css` (کلاس‌های `.changelog-*`) تعریف شده‌اند.