people tags #387

This commit is contained in:
Hamid Reza Mohammadi 2026-10-03 08:10:12 +03:30
parent 854bae2873
commit 5ce8973ca3
15 changed files with 100 additions and 100 deletions

View File

@ -352,7 +352,7 @@ else
} }
@if (summaryPersonCount > 0) @if (summaryPersonCount > 0)
{ {
<span class="up-badge up-badge--primary">برچسب شخصیت دارد (@summaryPersonCount.ToPersianNumbers())</span> <span class="up-badge up-badge--primary">برچسب نامبرده دارد (@summaryPersonCount.ToPersianNumbers())</span>
} }
</td> </td>
</tr> </tr>
@ -887,7 +887,7 @@ else
var isPersonTag = geoTag.PersonId != null || !string.IsNullOrEmpty(geoTag.SuggestedPersonGraphJson) || (existingTagForKindCheck != null && existingTagForKindCheck.PersonId != null); var isPersonTag = geoTag.PersonId != null || !string.IsNullOrEmpty(geoTag.SuggestedPersonGraphJson) || (existingTagForKindCheck != null && existingTagForKindCheck.PersonId != null);
<tr> <tr>
<td colspan="2"> <td colspan="2">
@(isPersonTag ? "برچسب شخصیت" : "برچسب جغرافیایی/تاریخی") @(isPersonTag ? "برچسب نامبرده" : "برچسب جغرافیایی/تاریخی")
@{ @{
var geoCouplet = geoTag.CoupletIndex == null ? null : (Model.Couplets ?? Array.Empty<Tuple<int, string>>()).Where(c => c.Item1 == geoTag.CoupletIndex).Select(c => c.Item2).FirstOrDefault(); var geoCouplet = geoTag.CoupletIndex == null ? null : (Model.Couplets ?? Array.Empty<Tuple<int, string>>()).Where(c => c.Item1 == geoTag.CoupletIndex).Select(c => c.Item2).FirstOrDefault();
} }
@ -957,12 +957,12 @@ else
<p class="green-color"> <p class="green-color">
@if (geoTag.PersonId != null) @if (geoTag.PersonId != null)
{ {
<text>شخصیت: @(geoTag.Person != null ? geoTag.Person.Name : $"شخصیت #{geoTag.PersonId}")</text> <text>نامبرده: @(geoTag.Person != null ? geoTag.Person.Name : $"نامبرده #{geoTag.PersonId}")</text>
<a href="/User/SuggestPersonEdit?id=@geoTag.PersonId" target="_blank" class="up-icon-btn" title="پیشنهاد ویرایش این شخصیت" aria-label="پیشنهاد ویرایش این شخصیت">✎</a> <a href="/User/SuggestPersonEdit?id=@geoTag.PersonId" target="_blank" class="up-icon-btn" title="پیشنهاد ویرایش این نامبرده" aria-label="پیشنهاد ویرایش این نامبرده">✎</a>
} }
else if (personGraph?.Person != null) else if (personGraph?.Person != null)
{ {
<text>شخصیت جدید: @personGraph.Person.Name</text> <text>نامبردۀ جدید: @personGraph.Person.Name</text>
if (personGraph.Relations != null && personGraph.Relations.Count > 0) if (personGraph.Relations != null && personGraph.Relations.Count > 0)
{ {
<text> (@personGraph.Relations.Count.ToPersianNumbers() رابطهٔ همراه)</text> <text> (@personGraph.Relations.Count.ToPersianNumbers() رابطهٔ همراه)</text>
@ -970,7 +970,7 @@ else
} }
else if (personGraphError != null) else if (personGraphError != null)
{ {
<span class="red-color">خطا در تفسیر اطلاعات شخصیت پیشنهادی: @personGraphError</span> <span class="red-color">خطا در تفسیر اطلاعات نامبردۀ پیشنهادی: @personGraphError</span>
} }
</p> </p>
@if (!string.IsNullOrEmpty(geoTag.SuggestionNote)) @if (!string.IsNullOrEmpty(geoTag.SuggestionNote))
@ -1015,17 +1015,17 @@ else
<tr> <tr>
<td colspan="2"> <td colspan="2">
<p class="up-hint"> <p class="up-hint">
اگر کاربر شخصیت را اشتباه تشخیص داده (مثلاً شخصیتی که از قبل در فهرست است را به‌عنوان شخصیت جدید پیشنهاد کرده)، به‌جای رد کردن می‌توانید آن را به شخصیت موجود متصل کنید؛ اگر کاربر نامبرده را اشتباه تشخیص داده (مثلاً نامبرده‌ای که از قبل در فهرست است را به‌عنوان نامبردۀ جدید پیشنهاد کرده)، به‌جای رد کردن می‌توانید آن را به نامبردۀ موجود متصل کنید؛
برای شخصیت تازه فقط نام قابل اصلاح است - اصلاح روابط/تاریخ‌ها نیازمند رد کردن و ارسال دوبارهٔ پیشنهاد توسط کاربر است: برای نامبردۀ تازه فقط نام قابل اصلاح است - اصلاح روابط/تاریخ‌ها نیازمند رد کردن و ارسال دوبارهٔ پیشنهاد توسط کاربر است:
</p> </p>
<label for="geotag@(geoIndex)_person_search">اتصال به شخصیت موجود در فهرست (در صورت وجود اشتباه در تشخیص شخصیت):</label> <label for="geotag@(geoIndex)_person_search">اتصال به نامبردۀ موجود در فهرست (در صورت وجود اشتباه در تشخیص نامبرده):</label>
<div class="up-autocomplete-wrap"> <div class="up-autocomplete-wrap">
<input type="text" id="geotag@(geoIndex)_person_search" autocomplete="off" placeholder="نام شخصیت را تایپ کنید..." <input type="text" id="geotag@(geoIndex)_person_search" autocomplete="off" placeholder="نام نامبرده را تایپ کنید..."
value="@(geoTag.PersonId != null ? (Model.People ?? new List<GanjoorRelatedPerson>()).Where(p => p.Id == geoTag.PersonId).Select(p => p.Name).FirstOrDefault() : null)" /> value="@(geoTag.PersonId != null ? (Model.People ?? new List<GanjoorRelatedPerson>()).Where(p => p.Id == geoTag.PersonId).Select(p => p.Name).FirstOrDefault() : null)" />
<input type="hidden" id="geotag@(geoIndex)_person_select" name="geotag@(geoIndex)_person_select" value="@(geoTag.PersonId ?? 0)" /> <input type="hidden" id="geotag@(geoIndex)_person_select" name="geotag@(geoIndex)_person_select" value="@(geoTag.PersonId ?? 0)" />
<div id="geotag@(geoIndex)_person_results" class="up-autocomplete-results" style="display:none;"></div> <div id="geotag@(geoIndex)_person_results" class="up-autocomplete-results" style="display:none;"></div>
</div> </div>
<p class="up-hint">برای اتصال به یک شخصیت موجود، نام او را تایپ کنید و از فهرست انتخاب کنید؛ برای رها کردن اتصال و پیشنهاد به‌عنوان شخصیت جدید، این فیلد را خالی کنید.</p> <p class="up-hint">برای اتصال به یک نامبردۀ موجود، نام او را تایپ کنید و از فهرست انتخاب کنید؛ برای رها کردن اتصال و پیشنهاد به‌عنوان نامبردۀ جدید، این فیلد را خالی کنید.</p>
<script> <script>
setupPersonAutocomplete( setupPersonAutocomplete(
document.getElementById('geotag@(geoIndex)_person_search'), document.getElementById('geotag@(geoIndex)_person_search'),
@ -1040,7 +1040,7 @@ else
{ {
<div id="geotag@(geoIndex)_new_person_fields"> <div id="geotag@(geoIndex)_new_person_fields">
<br> <br>
<label for="geotag@(geoIndex)_person_name">نام اصلاح‌شدهٔ شخصیت:</label> <label for="geotag@(geoIndex)_person_name">نام اصلاح‌شدهٔ نامبرده:</label>
<input type="text" id="geotag@(geoIndex)_person_name" name="geotag@(geoIndex)_person_name" size="30" /> <input type="text" id="geotag@(geoIndex)_person_name" name="geotag@(geoIndex)_person_name" size="30" />
</div> </div>
} }

View File

@ -511,7 +511,7 @@ namespace GanjooRazor.Areas.Admin.Pages
} }
catch (Exception) catch (Exception)
{ {
return new BadRequestObjectResult("برچسب شخصیت پیشنهادی قابل تفسیر نیست."); return new BadRequestObjectResult("برچسب نامبردۀ پیشنهادی قابل تفسیر نیست.");
} }
} }
} }

View File

@ -4,7 +4,7 @@
@using DNTPersianUtils.Core @using DNTPersianUtils.Core
@{ @{
Layout = "_AdminLayout"; Layout = "_AdminLayout";
ViewData["Title"] = "بازبینی پیشنهادهای ویرایش شخصیت‌ها"; ViewData["Title"] = "بازبینی پیشنهادهای ویرایش نامبردگان";
} }
<div class="up-page-header"> <div class="up-page-header">
@ -48,8 +48,8 @@ else
@if (s.SuggestedForDeletion) @if (s.SuggestedForDeletion)
{ {
<div class="up-alert up-alert--danger"> <div class="up-alert up-alert--danger">
<strong>این پیشنهاد درخواست حذف کامل شخصیت «@p.Name» است.</strong> <strong>این پیشنهاد درخواست حذف کامل نامبردۀ «@p.Name» است.</strong>
در صورت تأیید، این شخصیت و همهٔ نسبت‌های خویشاوندی/وابستگی‌های آن حذف خواهد شد و هرگونه پیشنهاد در حال بررسی مرتبط با آن‌ها به طور خودکار رد می‌شود. فیلدهای زیر در این حالت نادیده گرفته می‌شوند. در صورت تأیید، این نامبرده و همهٔ نسبت‌های خویشاوندی/وابستگی‌های آن حذف خواهد شد و هرگونه پیشنهاد در حال بررسی مرتبط با آن‌ها به طور خودکار رد می‌شود. فیلدهای زیر در این حالت نادیده گرفته می‌شوند.
</div> </div>
} }
else else

View File

@ -284,16 +284,16 @@
// parent). Non-family affiliations default the other way around - see // parent). Non-family affiliations default the other way around - see
// togglePersonRelativeKind(), which flips this select's value on kind change. // togglePersonRelativeKind(), which flips this select's value on kind change.
'<select id="person-relative-direction-' + idx + '" onchange="updatePersonRelativeHint(' + idx + ')">' + '<select id="person-relative-direction-' + idx + '" onchange="updatePersonRelativeHint(' + idx + ')">' +
'<option value="otherFirst" selected="selected">شخصیت دیگر، طرف اول رابطه است (مثلاً پدر/وزیر این شخصیت جدید)</option>' + '<option value="otherFirst" selected="selected">نامبردۀ دیگر، طرف اول رابطه است (مثلاً پدر/وزیر این نامبردۀ جدید)</option>' +
'<option value="newFirst">این شخصیت جدید، طرف اول رابطه است (مثلاً پدر/وزیر طرف دوم)</option>' + '<option value="newFirst">این نامبردۀ جدید، طرف اول رابطه است (مثلاً پدر/وزیر طرف دوم)</option>' +
'</select>' + '</select>' +
'</div>' + '</div>' +
'</div>' + '</div>' +
'<div class="up-field-row">' + '<div class="up-field-row">' +
'<div class="up-field">' + '<div class="up-field">' +
'<label>شخصیت دیگر (باید از قبل در فهرست موجود باشد)</label>' + '<label>نامبردۀ دیگر (باید از قبل در فهرست موجود باشد)</label>' +
'<div class="up-autocomplete-wrap">' + '<div class="up-autocomplete-wrap">' +
'<input type="text" id="person-relative-person-search-' + idx + '" autocomplete="off" placeholder="نام شخصیت را تایپ کنید..." oninput="updatePersonRelativeHint(' + idx + ')" />' + '<input type="text" id="person-relative-person-search-' + idx + '" autocomplete="off" placeholder="نام نامبرده را تایپ کنید..." oninput="updatePersonRelativeHint(' + idx + ')" />' +
'<input type="hidden" id="person-relative-person-id-' + idx + '" />' + '<input type="hidden" id="person-relative-person-id-' + idx + '" />' +
'<div id="person-relative-person-results-' + idx + '" class="up-autocomplete-results" style="display:none;"></div>' + '<div id="person-relative-person-results-' + idx + '" class="up-autocomplete-results" style="display:none;"></div>' +
'</div>' + '</div>' +
@ -319,7 +319,7 @@
updatePersonRelativeHint(idx); updatePersonRelativeHint(idx);
}, },
function (typedText) { function (typedText) {
upToast('این شخصیت در فهرست نیست. طرف دیگر یک رابطه باید از قبل تعریف‌شده باشد؛ برای دو شخصیت تازه، ابتدا این فرم را برای یکی از آن‌ها به‌صورت جدا تکمیل و ثبت کنید.', 'error'); upToast('این نامبرده در فهرست نیست. طرف دیگر یک رابطه باید از قبل تعریف‌شده باشد؛ برای دو نامبردۀ تازه، ابتدا این فرم را برای یکی از آن‌ها به‌صورت جدا تکمیل و ثبت کنید.', 'error');
} }
); );
@ -390,8 +390,8 @@
? $('#person-relative-familytype-' + idx).val() ? $('#person-relative-familytype-' + idx).val()
: $('#person-relative-affiliationtype-' + idx).val(); : $('#person-relative-affiliationtype-' + idx).val();
var direction = $('#person-relative-direction-' + idx).val(); var direction = $('#person-relative-direction-' + idx).val();
var otherName = ($('#person-relative-person-search-' + idx).val() || '').trim() || 'شخصیت دیگر'; var otherName = ($('#person-relative-person-search-' + idx).val() || '').trim() || 'نامبردۀ دیگر';
var newName = ($('#geotag-new-person-name').val() || '').trim() || 'این شخصیت جدید'; var newName = ($('#geotag-new-person-name').val() || '').trim() || 'این نامبردۀ جدید';
var person1Name = direction === 'otherFirst' ? otherName : newName; var person1Name = direction === 'otherFirst' ? otherName : newName;
var person2Name = direction === 'otherFirst' ? newName : otherName; var person2Name = direction === 'otherFirst' ? newName : otherName;
var build = (PERSON_RELATIVE_HINT_TEMPLATES[kind] || {})[type]; var build = (PERSON_RELATIVE_HINT_TEMPLATES[kind] || {})[type];
@ -540,7 +540,7 @@
function buildPersonGraphJson() { function buildPersonGraphJson() {
var name = ($('#geotag-new-person-name').val() || '').trim(); var name = ($('#geotag-new-person-name').val() || '').trim();
if (name == '') { if (name == '') {
upToast('لطفاً نام شخصیت جدید را وارد کنید.', 'error'); upToast('لطفاً نام نامبردۀ جدید را وارد کنید.', 'error');
return null; return null;
} }
@ -572,7 +572,7 @@
var idx = rows[r].id.replace('person-relative-row-', ''); var idx = rows[r].id.replace('person-relative-row-', '');
var otherPersonId = $('#person-relative-person-id-' + idx).val(); var otherPersonId = $('#person-relative-person-id-' + idx).val();
if (!otherPersonId) { if (!otherPersonId) {
upToast('برای یکی از روابط افزوده‌شده، شخصیت دیگر انتخاب نشده است.', 'error'); upToast('برای یکی از روابط افزوده‌شده، نامبردۀ دیگر انتخاب نشده است.', 'error');
return null; return null;
} }
otherPersonId = parseInt(otherPersonId); otherPersonId = parseInt(otherPersonId);
@ -652,7 +652,7 @@
container.innerHTML = ''; container.innerHTML = '';
return; return;
} }
var html = '<table><tr><th>وضعیت</th><th>بیت</th><th>شخصیت</th><th>#</th></tr>'; var html = '<table><tr><th>وضعیت</th><th>بیت</th><th>نامبرده</th><th>#</th></tr>';
for (var r = 0; r < rows.length; r++) { for (var r = 0; r < rows.length; r++) {
var i = rows[r]; var i = rows[r];
var s = geoDateTagSuggestions[i]; var s = geoDateTagSuggestions[i];
@ -661,13 +661,13 @@
var personText = ''; var personText = '';
if (!s.markForDelete) { if (!s.markForDelete) {
if (s.personId) { if (s.personId) {
personText = (allGeoPeople.filter(function (p) { return p.id === s.personId; })[0] || {}).name || ('شخصیت #' + s.personId); personText = (allGeoPeople.filter(function (p) { return p.id === s.personId; })[0] || {}).name || ('نامبرده #' + s.personId);
} else if (s.suggestedPersonGraphJson) { } else if (s.suggestedPersonGraphJson) {
try { try {
var parsedGraph = JSON.parse(s.suggestedPersonGraphJson); var parsedGraph = JSON.parse(s.suggestedPersonGraphJson);
personText = 'شخصیت جدید: ' + (parsedGraph.person ? parsedGraph.person.name : ''); personText = 'نامبردۀ جدید: ' + (parsedGraph.person ? parsedGraph.person.name : '');
} catch (e) { } catch (e) {
personText = 'شخصیت جدید'; personText = 'نامبردۀ جدید';
} }
} }
} }
@ -792,7 +792,7 @@
if (!hasPerson) { if (!hasPerson) {
if (showErrorIfEmpty) { if (showErrorIfEmpty) {
upToast('لطفاً یک شخصیت موجود را انتخاب کنید یا شخصیت جدیدی تعریف کنید.', 'error'); upToast('لطفاً یک نامبردۀ موجود را انتخاب کنید یا نامبردۀ جدیدی تعریف کنید.', 'error');
} }
return null; return null;
} }
@ -1732,7 +1732,7 @@ else
} }
<a role="button" href="#summaries" class="up-btn up-btn--sm up-btn--ghost">💬 بخش معنی</a> <a role="button" href="#summaries" class="up-btn up-btn--sm up-btn--ghost">💬 بخش معنی</a>
<a role="button" href="#geo-date-section" class="up-btn up-btn--sm up-btn--ghost">🗺️ بخش زمان و مکان</a> <a role="button" href="#geo-date-section" class="up-btn up-btn--sm up-btn--ghost">🗺️ بخش زمان و مکان</a>
<a role="button" href="#person-tag-section" class="up-btn up-btn--sm up-btn--ghost">🧑‍🎓 بخش شخصیت‌ها</a> <a role="button" href="#person-tag-section" class="up-btn up-btn--sm up-btn--ghost">🧑‍🎓 بخش نامبردگان</a>
<a role="button" href="#footer" class="up-btn up-btn--sm up-btn--ghost">⬇ پایین صفحه</a> <a role="button" href="#footer" class="up-btn up-btn--sm up-btn--ghost">⬇ پایین صفحه</a>
</div> </div>
@ -2602,22 +2602,22 @@ else
with its own "existing tags" table, its own pending list, and its own add button - a with its own "existing tags" table, its own pending list, and its own add button - a
suggestion coming out of this card never carries a location or a date. *@ suggestion coming out of this card never carries a location or a date. *@
<div class="up-card" id="person-tag-section"> <div class="up-card" id="person-tag-section">
<h2 class="up-card__title">🧑‍🎓 برچسب‌های شخصیت (پیشنهادی)</h2> <h2 class="up-card__title">🧑‍🎓 برچسب‌های نامبرده (پیشنهادی)</h2>
<p class="up-hint">می‌توانید پیشنهاد دهید که این شعر به یک شخصیت (تاریخی یا داستانی) اشاره دارد. پیشنهادهای شما پس از بررسی ناظران اعمال خواهد شد. با دکمهٔ «ذخیره» بالا همراه با بقیهٔ تغییرات ثبت می‌شود.</p> <p class="up-hint">می‌توانید پیشنهاد دهید که این شعر به یک نامبرده (تاریخی یا داستانی) اشاره دارد. پیشنهادهای شما پس از بررسی ناظران اعمال خواهد شد. با دکمهٔ «ذخیره» بالا همراه با بقیهٔ تغییرات ثبت می‌شود.</p>
@if (Model.PoemGeoDateTags != null && Model.PoemGeoDateTags.Any(t => t.PersonId != null)) @if (Model.PoemGeoDateTags != null && Model.PoemGeoDateTags.Any(t => t.PersonId != null))
{ {
<table> <table>
<tr> <tr>
<th>بیت</th> <th>بیت</th>
<th>شخصیت</th> <th>نامبرده</th>
<th>#</th> <th>#</th>
</tr> </tr>
@foreach (var tag in Model.PoemGeoDateTags.Where(t => t.PersonId != null)) @foreach (var tag in Model.PoemGeoDateTags.Where(t => t.PersonId != null))
{ {
<tr id="existing-geotag-@tag.Id"> <tr id="existing-geotag-@tag.Id">
<td>@(Model.Couplets.Where(c => c.Item1 == tag.CoupletIndex).Select(c => c.Item2).FirstOrDefault() ?? "— کل شعر —")</td> <td>@(Model.Couplets.Where(c => c.Item1 == tag.CoupletIndex).Select(c => c.Item2).FirstOrDefault() ?? "— کل شعر —")</td>
<td>@(tag.Person != null ? tag.Person.Name : $"شخصیت #{tag.PersonId}")</td> <td>@(tag.Person != null ? tag.Person.Name : $"نامبرده #{tag.PersonId}")</td>
<td> <td>
<a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="requestDeleteExistingPersonTag(@tag.Id, this)">🗑️ درخواست حذف</a> <a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="requestDeleteExistingPersonTag(@tag.Id, this)">🗑️ درخواست حذف</a>
</td> </td>
@ -2641,14 +2641,14 @@ else
</div> </div>
<div class="up-field"> <div class="up-field">
<label for="geotag-person-search">شخصیت</label> <label for="geotag-person-search">نامبرده</label>
<div class="up-autocomplete-wrap"> <div class="up-autocomplete-wrap">
<input type="text" id="geotag-person-search" autocomplete="off" placeholder="نام شخصیت را تایپ کنید..." /> <input type="text" id="geotag-person-search" autocomplete="off" placeholder="نام نامبرده را تایپ کنید..." />
<input type="hidden" id="geotag-person-select" /> <input type="hidden" id="geotag-person-select" />
<div id="geotag-person-results" class="up-autocomplete-results" style="display:none;"></div> <div id="geotag-person-results" class="up-autocomplete-results" style="display:none;"></div>
</div> </div>
<p class="up-hint">شروع به تایپ کنید تا فهرست شخصیت‌ها بر اساس نام فیلتر شود؛ اگر شخصیت مورد نظر پیدا نشد، گزینهٔ تعریف او به‌عنوان شخصیت جدید نمایش داده می‌شود.</p> <p class="up-hint">شروع به تایپ کنید تا فهرست نامبردگان بر اساس نام فیلتر شود؛ اگر نامبردۀ مورد نظر پیدا نشد، گزینهٔ تعریف او به‌عنوان نامبردۀ جدید نمایش داده می‌شود.</p>
<a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="toggleNewPersonWidget()">👤 شخصیت جدید پیشنهاد بده</a> <a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="toggleNewPersonWidget()">👤 نامبردۀ جدید پیشنهاد بده</a>
</div> </div>
<div id="new-person-widget" style="display:none;"> <div id="new-person-widget" style="display:none;">
@ -2665,20 +2665,20 @@ else
<input type="text" id="geotag-new-person-wikiurl" /> <input type="text" id="geotag-new-person-wikiurl" />
</div> </div>
<div class="up-field"> <div class="up-field">
<label for="geotag-new-person-familytreecaption">عنوان تبارنامه (اختیاری، فقط اگر این شخصیت ریشهٔ یک خانواده/سلسله شناخته‌شده است - مثلاً «ساسانیان»)</label> <label for="geotag-new-person-familytreecaption">عنوان تبارنامه (اختیاری، فقط اگر این نامبرده ریشهٔ یک خانواده/سلسله شناخته‌شده است - مثلاً «ساسانیان»)</label>
<input type="text" id="geotag-new-person-familytreecaption" /> <input type="text" id="geotag-new-person-familytreecaption" />
</div> </div>
<p class="up-hint"> <p class="up-hint">
اگر خویشاوندی یا وابستگی این شخصیت با شخصیتی دیگر را می‌دانید، می‌توانید همین‌جا اضافه کنید (شخصیت دیگر باید از قبل در فهرست موجود باشد؛ اگر خویشاوندی یا وابستگی این نامبرده با نامبردۀ دیگری را می‌دانید، می‌توانید همین‌جا اضافه کنید (نامبردۀ دیگر باید از قبل در فهرست موجود باشد؛
برای شخصیتی که او هم تازه است، ابتدا این فرم را برای او هم به‌صورت جدا تکمیل و ثبت کنید، سپس این رابطه را اضافه کنید). برای نامبرده‌ای که او هم تازه است، ابتدا این فرم را برای او هم به‌صورت جدا تکمیل و ثبت کنید، سپس این رابطه را اضافه کنید).
</p> </p>
<div id="geotag-person-relatives-list"></div> <div id="geotag-person-relatives-list"></div>
<a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="addPersonRelativeRow()">➕ افزودن خویشاوند یا وابستگی</a> <a role="button" class="up-btn up-btn--sm up-btn--ghost" onclick="addPersonRelativeRow()">➕ افزودن خویشاوند یا وابستگی</a>
</div> </div>
<div class="up-field"> <div class="up-field">
<label for="persontag-note">دلیل این برچسب (اختیاری، به‌ویژه برای اشاره‌های غیرمستقیم به این شخصیت)</label> <label for="persontag-note">دلیل این برچسب (اختیاری، به‌ویژه برای اشاره‌های غیرمستقیم به این نامبرده)</label>
<textarea id="persontag-note" rows="2"></textarea> <textarea id="persontag-note" rows="2"></textarea>
</div> </div>

View File

@ -280,7 +280,7 @@ else
{ {
<tr> <tr>
<td colspan="3"> <td colspan="3">
@(GeoDateTagCorrectionDisplay.IsPersonTag(geoTag) ? "شخصیت" : "برچسب جغرافیایی/تاریخی") - @(GeoDateTagCorrectionDisplay.IsPersonTag(geoTag) ? "نامبرده" : "برچسب جغرافیایی/تاریخی") -
@if (geoTag.CoupletIndex == null) @if (geoTag.CoupletIndex == null)
{ {
<text>کل شعر</text> <text>کل شعر</text>
@ -315,12 +315,12 @@ else
<p style="color:green"> <p style="color:green">
@if (geoTag.PersonId != null) @if (geoTag.PersonId != null)
{ {
<a href="javascript:void(0)" onclick="PersonWindow.open(@geoTag.PersonId)">@(geoTag.Person != null ? geoTag.Person.Name : $"شخصیت #{geoTag.PersonId}")</a> <a href="javascript:void(0)" onclick="PersonWindow.open(@geoTag.PersonId)">@(geoTag.Person != null ? geoTag.Person.Name : $"نامبرده #{geoTag.PersonId}")</a>
} }
else else
{ {
var suggestedPersonName = GeoDateTagCorrectionDisplay.GetSuggestedPersonName(geoTag.SuggestedPersonGraphJson); var suggestedPersonName = GeoDateTagCorrectionDisplay.GetSuggestedPersonName(geoTag.SuggestedPersonGraphJson);
<text>شخصیت جدید@(string.IsNullOrEmpty(suggestedPersonName) ? "" : $": {suggestedPersonName}")</text> <text>نامبردۀ جدید@(string.IsNullOrEmpty(suggestedPersonName) ? "" : $": {suggestedPersonName}")</text>
} }
</p> </p>
</td> </td>

View File

@ -291,7 +291,7 @@ namespace GanjooRazor.Areas.User.Pages
// onto this same record when the delete request was approved, so it's already // onto this same record when the delete request was approved, so it's already
// available here for GeoDateTagCorrectionDisplay.IsPersonTag to tell the two kinds // available here for GeoDateTagCorrectionDisplay.IsPersonTag to tell the two kinds
// of tag apart for the note text below. // of tag apart for the note text below.
var geoTagLabel = GeoDateTagCorrectionDisplay.IsPersonTag(geoTag) ? "شخصیت" : "برچسب جغرافیایی/تاریخی"; var geoTagLabel = GeoDateTagCorrectionDisplay.IsPersonTag(geoTag) ? "نامبرده" : "برچسب جغرافیایی/تاریخی";
if (geoTag.MarkForDelete) if (geoTag.MarkForDelete)
{ {
// the original request deleted an existing tag - undo that by re-adding a tag with // the original request deleted an existing tag - undo that by re-adding a tag with

View File

@ -32,7 +32,7 @@ else
<table> <table>
<tr> <tr>
<td>خویشاوند یا شخصیت دیگر:</td> <td>خویشاوند یا نامبردۀ دیگر:</td>
<td> <td>
<select asp-for="OtherPersonId"> <select asp-for="OtherPersonId">
<option value="0">— انتخاب کنید —</option> <option value="0">— انتخاب کنید —</option>
@ -59,12 +59,12 @@ else
<td>نسبت با @Model.Person.Name:</td> <td>نسبت با @Model.Person.Name:</td>
<td> <td>
<select asp-for="RelationKind"> <select asp-for="RelationKind">
<option value="Child">فرزند این شخصیت است</option> <option value="Child">فرزند این نامبرده است</option>
<option value="Parent">پدر یا مادر این شخصیت است</option> <option value="Parent">پدر یا مادر این نامبرده است</option>
<option value="Sibling">خواهر یا برادر این شخصیت است</option> <option value="Sibling">خواهر یا برادر این نامبرده است</option>
<option value="Spouse">همسر این شخصیت است</option> <option value="Spouse">همسر این نامبرده است</option>
<option value="DistantAncestor">نیای دور این شخصیت است (بدون نسل مشخص)</option> <option value="DistantAncestor">نیای دور این نامبرده است (بدون نسل مشخص)</option>
<option value="DistantDescendant">نوادهٔ دور این شخصیت است (بدون نسل مشخص)</option> <option value="DistantDescendant">نوادهٔ دور این نامبرده است (بدون نسل مشخص)</option>
</select> </select>
</td> </td>
</tr> </tr>
@ -82,22 +82,22 @@ else
<td>وابستگی با @Model.Person.Name:</td> <td>وابستگی با @Model.Person.Name:</td>
<td> <td>
<select asp-for="AffiliationKind"> <select asp-for="AffiliationKind">
<option value="Minister_Other">او وزیر یا کارگزار این شخصیت بود</option> <option value="Minister_Other">او وزیر یا کارگزار این نامبرده بود</option>
<option value="Minister_Subject">این شخصیت وزیر یا کارگزار او بود</option> <option value="Minister_Subject">این نامبرده وزیر یا کارگزار او بود</option>
<option value="Advisor_Other">او مشاور این شخصیت بود</option> <option value="Advisor_Other">او مشاور این نامبرده بود</option>
<option value="Advisor_Subject">این شخصیت مشاور او بود</option> <option value="Advisor_Subject">این نامبرده مشاور او بود</option>
<option value="Courtier_Other">او از درباریان/همراهان این شخصیت بود</option> <option value="Courtier_Other">او از درباریان/همراهان این نامبرده بود</option>
<option value="Courtier_Subject">این شخصیت از درباریان/همراهان او بود</option> <option value="Courtier_Subject">این نامبرده از درباریان/همراهان او بود</option>
<option value="Servant_Other">او خدمتگزار این شخصیت بود</option> <option value="Servant_Other">او خدمتگزار این نامبرده بود</option>
<option value="Servant_Subject">این شخصیت خدمتگزار او بود</option> <option value="Servant_Subject">این نامبرده خدمتگزار او بود</option>
<option value="Patron_Other">او از این شخصیت حمایت می‌کرد (حامی او بود)</option> <option value="Patron_Other">او از این نامبرده حمایت می‌کرد (حامی او بود)</option>
<option value="Patron_Subject">این شخصیت از او حمایت می‌کرد (حامی او بود)</option> <option value="Patron_Subject">این نامبرده از او حمایت می‌کرد (حامی او بود)</option>
<option value="Successor_Other">او جانشین این شخصیت شد (پس از او آمد)</option> <option value="Successor_Other">او جانشین این نامبرده شد (پس از او آمد)</option>
<option value="Successor_Subject">این شخصیت جانشین او شد (پس از او آمد)</option> <option value="Successor_Subject">این نامبرده جانشین او شد (پس از او آمد)</option>
<option value="Panegyrized_Other">او در شعری این شخصیت را مدح/ستایش کرد (مدح‌گوی او بود)</option> <option value="Panegyrized_Other">او در شعری این نامبرده را مدح/ستایش کرد (مدح‌گوی او بود)</option>
<option value="Panegyrized_Subject">این شخصیت در شعری او را مدح/ستایش کرد (مدح‌گوی او بود)</option> <option value="Panegyrized_Subject">این نامبرده در شعری او را مدح/ستایش کرد (مدح‌گوی او بود)</option>
<option value="Satirized_Other">او در شعری این شخصیت را هجو کرد (هجوگوی او بود)</option> <option value="Satirized_Other">او در شعری این نامبرده را هجو کرد (هجوگوی او بود)</option>
<option value="Satirized_Subject">این شخصیت در شعری او را هجو کرد (هجوگوی او بود)</option> <option value="Satirized_Subject">این نامبرده در شعری او را هجو کرد (هجوگوی او بود)</option>
<option value="Ally">با او متحد/هم‌پیمان بود</option> <option value="Ally">با او متحد/هم‌پیمان بود</option>
<option value="Rival">با او رقیب/دشمن بود</option> <option value="Rival">با او رقیب/دشمن بود</option>
<option value="Companion">با او همراه/همدم بود</option> <option value="Companion">با او همراه/همدم بود</option>

View File

@ -81,7 +81,7 @@ namespace GanjooRazor.Areas.User.Pages
Person = JsonConvert.DeserializeObject<GanjoorRelatedPerson>(await response.Content.ReadAsStringAsync()); Person = JsonConvert.DeserializeObject<GanjoorRelatedPerson>(await response.Content.ReadAsStringAsync());
if (Person == null) if (Person == null)
{ {
LastError = "شخصیتی با این کد پیدا نشد."; LastError = "نامبرده‌ای با این کد پیدا نشد.";
return false; return false;
} }
@ -129,7 +129,7 @@ namespace GanjooRazor.Areas.User.Pages
if (OtherPersonId == 0 || OtherPersonId == personId) if (OtherPersonId == 0 || OtherPersonId == personId)
{ {
LastResult = "لطفاً خویشاوند یا شخصیت مورد نظر را انتخاب کنید."; LastResult = "لطفاً خویشاوند یا نامبردۀ مورد نظر را انتخاب کنید.";
return Page(); return Page();
} }
@ -314,7 +314,7 @@ namespace GanjooRazor.Areas.User.Pages
return Page(); return Page();
} }
LastResult = $"پیشنهاد شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({personId})\" class=\"actionlink\">مشاهدهٔ اطلاعات این شخصیت</a>"; LastResult = $"پیشنهاد شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({personId})\" class=\"actionlink\">مشاهدهٔ اطلاعات این نامبرده</a>";
return Page(); return Page();
} }

View File

@ -3,7 +3,7 @@
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{ @{
Layout = "_UserPanelLayout"; Layout = "_UserPanelLayout";
ViewData["Title"] = "پیشنهاد ویرایش شخصیت"; ViewData["Title"] = "پیشنهاد ویرایش نامبرده";
await GanjooRazor.Utils.GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData); await GanjooRazor.Utils.GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);
} }
@if (!string.IsNullOrEmpty(Model.LastError)) @if (!string.IsNullOrEmpty(Model.LastError))
@ -44,10 +44,10 @@ else
<table> <table>
<tr> <tr>
<td>پیشنهاد حذف این شخصیت:</td> <td>پیشنهاد حذف این نامبرده:</td>
<td> <td>
<input asp-for="Suggestion.SuggestedForDeletion" id="suggestedForDeletion" /> <input asp-for="Suggestion.SuggestedForDeletion" id="suggestedForDeletion" />
<p class="up-hint"><small>در صورت انتخاب این گزینه سایر فیلدها نادیده گرفته خواهد شد و در صورت تأیید مدیران، این شخصیت و همهٔ نسبت‌ها/وابستگی‌های آن حذف می‌شود.</small></p> <p class="up-hint"><small>در صورت انتخاب این گزینه سایر فیلدها نادیده گرفته خواهد شد و در صورت تأیید مدیران، این نامبرده و همهٔ نسبت‌ها/وابستگی‌های آن حذف می‌شود.</small></p>
</td> </td>
</tr> </tr>
<tr> <tr>
@ -61,7 +61,7 @@ else
<tr> <tr>
<td> <td>
عنوان تبارنامه: عنوان تبارنامه:
<p class="up-hint"><small>پُر کنید تا این شخصیت در <a href="javascript:void(0)" onclick="PeopleExplorer.open()">فهرست تبارنامه‌ها</a> با این عنوان دیده شود.</small></p> <p class="up-hint"><small>پُر کنید تا این نامبرده در <a href="javascript:void(0)" onclick="PeopleExplorer.open()">فهرست تبارنامه‌ها</a> با این عنوان دیده شود.</small></p>
</td> </td>
<td><input asp-for="Suggestion.SuggestedFamilyTreeCaption" size="40" /></td> <td><input asp-for="Suggestion.SuggestedFamilyTreeCaption" size="40" /></td>
</tr> </tr>

View File

@ -64,7 +64,7 @@ namespace GanjooRazor.Areas.User.Pages
Person = JsonConvert.DeserializeObject<GanjoorRelatedPerson>(await response.Content.ReadAsStringAsync()); Person = JsonConvert.DeserializeObject<GanjoorRelatedPerson>(await response.Content.ReadAsStringAsync());
if (Person == null) if (Person == null)
{ {
LastError = "شخصیتی با این کد پیدا نشد."; LastError = "نامبرده‌ای با این کد پیدا نشد.";
return false; return false;
} }
@ -146,7 +146,7 @@ namespace GanjooRazor.Areas.User.Pages
return Page(); return Page();
} }
LastResult = $"پیشنهاد ویرایش شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({id})\" class=\"actionlink\">مشاهدهٔ اطلاعات این شخصیت</a>"; LastResult = $"پیشنهاد ویرایش شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({id})\" class=\"actionlink\">مشاهدهٔ اطلاعات این نامبرده</a>";
FillSuggestionFromCurrentPerson(); FillSuggestionFromCurrentPerson();

View File

@ -201,7 +201,7 @@ namespace GanjooRazor.Areas.User.Pages
return Page(); return Page();
} }
LastResult = $"پیشنهاد شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({Person1Id})\" class=\"actionlink\">مشاهدهٔ اطلاعات این شخصیت</a>"; LastResult = $"پیشنهاد شما ثبت شد و پس از بررسی توسط مدیران اعمال خواهد شد. <a role=\"button\" href=\"javascript:void(0)\" onclick=\"PersonWindow.open({Person1Id})\" class=\"actionlink\">مشاهدهٔ اطلاعات این نامبرده</a>";
FillSuggestionFromCurrent(); FillSuggestionFromCurrent();

View File

@ -32,7 +32,7 @@
<div class="poemtablinks"><a href="#pretab">آمار</a></div> <div class="poemtablinks"><a href="#pretab">آمار</a></div>
<div class="poemtablinks active"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div> <div class="poemtablinks active"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div>
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
@ -55,7 +55,7 @@
<div class="poemtablinks"><a href="#pretab">آمار</a></div> <div class="poemtablinks"><a href="#pretab">آمار</a></div>
<div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div> <div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div>
<div class="poemtablinks active"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks active"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
@ -78,12 +78,12 @@
<div class="poemtablinks"><a href="#pretab">آمار</a></div> <div class="poemtablinks"><a href="#pretab">آمار</a></div>
<div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div> <div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div>
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks active"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks active"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
<div class="century cursor-pointer" id="load-persongraph" onclick="loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)"> <div class="century cursor-pointer" id="load-persongraph" onclick="loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">
بارگذاری شخصیت‌های این بخش بارگذاری نامبردگانی این بخش
</div> </div>
<div id="persongraph-placeholder"></div> <div id="persongraph-placeholder"></div>
</div> </div>
@ -94,7 +94,7 @@
<div class="poemtablinks"><a href="#pretab">آمار</a></div> <div class="poemtablinks"><a href="#pretab">آمار</a></div>
<div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div> <div class="poemtablinks"><a href="#words" onclick="javascript:loadWordCounts(@Model.GanjoorPage.PoetOrCat.Cat.Id, @Model.GanjoorPage.PoetOrCat.Poet.Id, false)">واژگان</a></div>
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks active"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks active"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">

View File

@ -54,7 +54,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
@ -72,7 +72,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
@ -88,7 +88,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
@ -112,7 +112,7 @@
<div class="poemtablinks active"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks active"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
@ -138,7 +138,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks active"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks active"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="poemtabcontent"> <div class="poemtabcontent">
@ -174,7 +174,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks active"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks active"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="poemtabcontent related-images-frame"> <div class="poemtabcontent related-images-frame">
@ -216,7 +216,7 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks active"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks active"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
@ -235,12 +235,12 @@
<div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div> <div class="poemtablinks"><a href="#recitations" onclick="javascript:loadCatRecitations(@Model.GanjoorPage.PoetOrCat.Cat.Id)">خوانش‌ها</a></div>
<div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div> <div class="poemtablinks"><a href="#photos">تصاویر چهره</a></div>
<div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div> <div class="poemtablinks"><a href="#papersources">منابع کاغذی</a></div>
<div class="poemtablinks active"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">شخصیت‌ها</a></div> <div class="poemtablinks active"><a href="#persongraph" onclick="javascript:loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">نامبردگان</a></div>
<div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div> <div class="poemtablinks"><a href="#topvisits" onclick="javascript:loadTopVisits('@Model.GanjoorPage.FullUrl')">پربازدیدها</a></div>
</div> </div>
<div class="related-images-frame poemtabcontent"> <div class="related-images-frame poemtabcontent">
<div class="century cursor-pointer" id="load-persongraph" onclick="loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)"> <div class="century cursor-pointer" id="load-persongraph" onclick="loadPersonGraph(@Model.GanjoorPage.PoetOrCat.Cat.Id)">
بارگذاری شخصیت‌های این بخش بارگذاری نامبردگانی این بخش
</div> </div>
<div id="persongraph-placeholder"></div> <div id="persongraph-placeholder"></div>
</div> </div>

View File

@ -2,7 +2,7 @@
@if (Model.Graph == null || Model.Graph.Nodes == null || Model.Graph.Nodes.Count == 0) @if (Model.Graph == null || Model.Graph.Nodes == null || Model.Graph.Nodes.Count == 0)
{ {
<p>برای این بخش هنوز شخصیتی برچسب‌گذاری نشده است.</p> <p>برای این بخش هنوز نامبرده‌ای برچسب‌گذاری نشده است.</p>
} }
else else
{ {
@ -17,9 +17,9 @@ else
</small></p> </small></p>
<div style="margin-bottom:10px;"> <div style="margin-bottom:10px;">
<input type="text" id="pg-cat-search" placeholder="جستجوی نام شخصیت..." style="width:240px;" /> <input type="text" id="pg-cat-search" placeholder="جستجوی نام نامبرده..." style="width:240px;" />
<a role="button" id="pg-cat-reset" class="up-btn up-btn--ghost up-btn--sm">نمایش همه</a> <a role="button" id="pg-cat-reset" class="up-btn up-btn--ghost up-btn--sm">نمایش همه</a>
<a role="button" href="javascript:void(0)" onclick="PeopleExplorer.open()" class="up-btn up-btn--ghost up-btn--sm">نمایش شبکهٔ کامل شخصیت‌ها</a> <a role="button" href="javascript:void(0)" onclick="PeopleExplorer.open()" class="up-btn up-btn--ghost up-btn--sm">نمایش شبکهٔ کامل نامبردگان</a>
</div> </div>
<div id="pg-cat-legend" class="pg-legend"></div> <div id="pg-cat-legend" class="pg-legend"></div>

View File

@ -15,7 +15,7 @@ else
@Model.Person.Name @Model.Person.Name
@if (Model.LoggedIn) @if (Model.LoggedIn)
{ {
<a href="/User/SuggestPersonEdit?id=@Model.Person.Id" class="up-icon-btn" title="پیشنهاد ویرایش این شخصیت" aria-label="پیشنهاد ویرایش این شخصیت">✎</a> <a href="/User/SuggestPersonEdit?id=@Model.Person.Id" class="up-icon-btn" title="پیشنهاد ویرایش این نامبرده" aria-label="پیشنهاد ویرایش این نامبرده">✎</a>
} }
</h2> </h2>
@ -119,7 +119,7 @@ else
@if (Model.Poems != null && Model.Poems.Length > 0) @if (Model.Poems != null && Model.Poems.Length > 0)
{ {
<h3>اشعار برچسب‌خورده با این شخصیت</h3> <h3>اشعار برچسب‌خورده با این نامبرده</h3>
<ul> <ul>
@foreach (var tag in Model.Poems) @foreach (var tag in Model.Poems)
{ {
@ -142,7 +142,7 @@ else
} }
else else
{ {
<p><small>هنوز شعری با این شخصیت برچسب‌گذاری نشده است.</small></p> <p><small>هنوز شعری با این نامبرده برچسب‌گذاری نشده است.</small></p>
} }
</div> </div>
} }