divan/GanjooRazor/Areas/Admin/Pages/EditQuoted.cshtml
2026-09-27 14:03:38 +03:30

428 lines
18 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

@page
@model GanjooRazor.Areas.Admin.Pages.EditQuotedModel
@using DNTPersianUtils.Core
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_AdminLayout";
ViewData["Title"] = "پیشنهاد مشق شعر";
}
<div class="up-page-header">
<h1>@ViewData["Title"]</h1>
</div>
@if (!string.IsNullOrEmpty(Model.LastMessage))
{
<div class="up-alert up-alert--info">@Html.Raw(Model.LastMessage)</div>
}
@if (Model.DisplayAll)
{
<script>
async function deleteUnpublished(id) {
var ok = await upConfirm('آیا از حذف این مورد منتشر نشده اطمینان دارید؟');
if (!ok) return;
$.ajax({
type: "DELETE",
url: '',
data: {
id: id
},
error: function (e) {
upToast(e.responseText || String(e), 'error');
},
success: function () {
var elem = document.getElementById('tr-' + id);
elem.parentNode.removeChild(elem);
},
});
}
</script>
<div class="up-page-header">
<h2>همهٔ مشق‌های منتشر نشده</h2>
</div>
@if (Model.AllPoemQuoteds != null && Model.AllPoemQuoteds.Length > 0)
{
<table>
<tr>
<td>#</td>
<td>شاعر</td>
<td>۱</td>
<td>۲</td>
<td>۱</td>
<td>۲</td>
<td>حذف</td>
</tr>
@foreach (var q in Model.AllPoemQuoteds)
{
<tr id="tr-@q.Id">
<td><a href="/Admin/EditQuoted/?p=@q.PoemId&id=@q.Id">@q.PoemId-@q.RelatedPoemId</a> </td>
<td>@q.CachedRelatedPoemPoetName</td>
<td>
@if (q.CoupletVerse1ShouldBeEmphasized)
{
<span class="red-color">@q.CoupletVerse1</span>
}
else
{
@q.CoupletVerse1
}
</td>
<td>
@if (q.CoupletVerse2ShouldBeEmphasized)
{
<span class="red-color">@q.CoupletVerse2</span>
}
else
{
@q.CoupletVerse2
}
</td>
<td>
@if (q.RelatedCoupletVerse1ShouldBeEmphasized)
{
<span class="red-color">@q.RelatedCoupletVerse1</span>
}
else
{
@q.RelatedCoupletVerse1
}
</td>
<td>
@if (q.RelatedCoupletVerse2ShouldBeEmphasized)
{
<span class="red-color">@q.RelatedCoupletVerse2</span>
}
else
{
@q.RelatedCoupletVerse2
}
</td>
<td><a role="button" onclick="deleteUnpublished('@q.Id')" class="up-icon-btn" title="حذف" aria-label="حذف این مورد">🗑</a></td>
</tr>
<tr>
<td colspan="7">
<hr />
</td>
</tr>
}
</table>
}
else
{
<partial name="_EmptyState" model="@("موردی منتشرنشده یافت نشد.")" />
}
return;
}
<p>
<a href="?all=true" class="up-btn up-btn--ghost">📚 همهٔ مشق‌های منتشر نشده</a>
</p>
@if (Model.GanjoorQuotedPoem != null && Model.Couplets != null)
{
<script>
function selectGanjoorPage() {
document.getElementById('display-frame').style.display = 'none';
document.getElementById('select-poem').style.display = 'block';
document.getElementById('finalize-select').style.display = 'block';
}
function finalizeSelectPage() {
document.getElementById('display-frame').style.display = 'block';
document.getElementById('select-poem').style.display = 'none';
document.getElementById('finalize-select').style.display = 'none';
const currentUrl = document.getElementById('select-poem').contentWindow.location.href;
var url = currentUrl.substring(currentUrl.indexOf('/', currentUrl.indexOf('//') + 2));
fetch('@(GanjooRazor.APIRoot.InternetUrl)/api/ganjoor/page?url=' + url)
.then((response) => response.json())
.then((json) => {
upToast(String(json.poem.id));
document.getElementById('GanjoorQuotedPoem_RelatedPoemId').value = json.poem.id;
document.getElementById('GanjoorQuotedPoem_RelatedPoetId').value = json.poem.category.poet.id;
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemPoetName').value = json.poem.category.poet.nickname;
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemPoetDeathYearInLHijri').value = json.poem.category.poet.deathYearInLHijri.toString();
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemPoetUrl').value = json.poem.category.poet.fullUrl;
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemPoetImage').value = json.poem.category.poet.imageUrl;
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemFullTitle').value = json.poem.fullTitle;
document.getElementById('GanjoorQuotedPoem_CachedRelatedPoemFullUrl').value = json.poem.fullUrl;
var coupletIndices = [];
var coupletTexts = [];
for (var i = 0; i < json.poem.verses.length; i++) {
var verse = json.poem.verses[i];
if (coupletIndices.indexOf(verse.coupletIndex) != -1) {
coupletTexts[coupletIndices.indexOf(verse.coupletIndex)] += ' - ';
coupletTexts[coupletIndices.indexOf(verse.coupletIndex)] += verse.text;
}
else {
coupletIndices.push(verse.coupletIndex);
coupletTexts.push(verse.text);
}
}
var x = document.getElementById("GanjoorQuotedPoem_RelatedCoupletIndex");
x.length = 0;
for (var i = 0; i < coupletIndices.length; i++) {
var option = document.createElement("option");
option.text = coupletTexts[i];
option.value = coupletIndices[i];
x.add(option);
}
x.value = coupletIndices[0];
});
}
async function deleteThisOne(id) {
var ok = await upConfirm('آیا از حذف این مورد اطمینان دارید؟');
if (!ok) return;
$.ajax({
type: "DELETE",
url: '',
data: {
id: id
},
error: function (e) {
upToast(e.responseText || String(e), 'error');
},
success: function () {
upToast('انجام شد.');
location.reload(true);
},
});
}
async function reverseQuote(id) {
var ok = await upConfirm('آیا از درج معکوس این مورد اطمینان دارید؟');
if (!ok) return;
$.ajax({
type: "POST",
url: '?handler=GenerateReverse',
data: {
id: id
},
error: function (e) {
upToast(e.responseText || String(e), 'error');
},
success: function (e) {
upToast('انجام شد.');
location.href = e;
},
});
}
</script>
<div class="up-card">
<form method="post" class="up-form">
@Html.AntiForgeryToken()
<p>
بیت مرجع از <a href="/?p=@Model.GanjoorQuotedPoem.PoemId">شعر</a>:
<input type="hidden" asp-for="GanjoorQuotedPoem.Id" />
<input type="hidden" asp-for="GanjoorQuotedPoem.PoemId" />
<input type="hidden" asp-for="GanjoorQuotedPoem.PoetId" />
</p>
<div class="up-field">
<label for="GanjoorQuotedPoem_CoupletIndex">بیت</label>
<select asp-for="GanjoorQuotedPoem.CoupletIndex">
@foreach (var item in Model.Couplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.CoupletVerse1ShouldBeEmphasized" />
<label for="GanjoorQuotedPoem_CoupletVerse1ShouldBeEmphasized">مصرع اول مهم است</label>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.CoupletVerse2ShouldBeEmphasized" />
<label for="GanjoorQuotedPoem_CoupletVerse2ShouldBeEmphasized">مصرع دوم مهم است</label>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_PoetId">شاعر مرجع</label>
<input asp-for="GanjoorQuotedPoem.PoetId" />
</div>
<div class="up-btn-group">
<a onclick="finalizeSelectPage()" class="up-btn up-btn--ghost" role="button" id="finalize-select" style="display:none">انتخاب کردم</a>
<a onclick="selectGanjoorPage()" class="up-btn up-btn--ghost" role="button" id="display-frame">🔎 گزینش شعر مرتبط</a>
</div>
<iframe id="select-poem" src="/" height="600" style="display:none;width:100%;margin:auto"></iframe>
<div class="up-field">
<label for="GanjoorQuotedPoem_RelatedPoemId">شناسهٔ شعر مرتبط</label>
<input asp-for="GanjoorQuotedPoem.RelatedPoemId" />
</div>
@if (Model.GanjoorQuotedPoem.RelatedPoemId != null)
{
<p><a href="/?p=@Model.GanjoorQuotedPoem.RelatedPoemId">🔗 مشاهدهٔ شعر مرتبط</a></p>
}
<div class="up-field">
<label for="GanjoorQuotedPoem_RelatedCoupletIndex">بیت مرتبط</label>
<select asp-for="GanjoorQuotedPoem.RelatedCoupletIndex">
@foreach (var item in Model.RelatedCouplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_RelatedCoupletVerse1">مصرع اول مرتبط (خارج از گنجور)</label>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1" size="65" />
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1ShouldBeEmphasized" />
<label for="GanjoorQuotedPoem_RelatedCoupletVerse1ShouldBeEmphasized">مصرع اول مهم است</label>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_RelatedCoupletVerse2">مصرع دوم مرتبط (خارج از گنجور)</label>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2" size="65" />
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2ShouldBeEmphasized" />
<label for="GanjoorQuotedPoem_RelatedCoupletVerse2ShouldBeEmphasized">مصرع دوم مهم است</label>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_SortOrder">ترتیب</label>
<input asp-for="GanjoorQuotedPoem.SortOrder" />
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.IsPriorToRelated" />
<label for="GanjoorQuotedPoem_IsPriorToRelated">این شعر قدیمی‌تر از شعر مرتبط است</label>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.ChosenForMainList" />
<label for="GanjoorQuotedPoem_ChosenForMainList">نمایش در فهرست اصلی</label>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.IndirectQuotation" />
<label for="GanjoorQuotedPoem_IndirectQuotation">مستقیماً ارتباط ندارد</label>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.ClaimedByBothPoets" />
<label for="GanjoorQuotedPoem_ClaimedByBothPoets">منتسب به هر دو شاعر</label>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_RelatedPoetId">شاعر</label>
<input asp-for="GanjoorQuotedPoem.RelatedPoetId" />
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_CachedRelatedPoemPoetName">نام شاعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetName" />
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_CachedRelatedPoemPoetDeathYearInLHijri">سالمرگ شاعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetDeathYearInLHijri" />
</div>
<div class="up-field up-field--ltr">
<label for="GanjoorQuotedPoem_CachedRelatedPoemPoetUrl">نشانی صفحهٔ شاعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetUrl" size="65" />
</div>
<div class="up-field up-field--ltr">
<label for="GanjoorQuotedPoem_CachedRelatedPoemPoetImage">تصویر شاعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetImage" size="65" />
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_CachedRelatedPoemFullTitle">عنوان شعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullTitle" size="65" />
</div>
<div class="up-field up-field--ltr">
<label for="GanjoorQuotedPoem_CachedRelatedPoemFullUrl">نشانی شعر</label>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullUrl" size="65" />
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_Note"><span class="up-field-icon" aria-hidden="true">🗒️</span> یادداشت</label>
<textarea asp-for="GanjoorQuotedPoem.Note" rows="4" cols="80" class="editor"></textarea>
</div>
<div class="up-check-row">
<input asp-for="GanjoorQuotedPoem.Published" />
<label for="GanjoorQuotedPoem_Published">منتشر شده</label>
</div>
<div class="up-field">
<label for="GanjoorQuotedPoem_SamePoemsQuotedCount">تعداد همسان‌ها</label>
<input asp-for="GanjoorQuotedPoem.SamePoemsQuotedCount" />
</div>
<div class="up-form-actions">
<input type="submit" value="ذخیره" class="up-btn up-btn--success" />
</div>
<hr />
<div class="up-btn-group">
@if (Model.ReverseId != null)
{
<a href="/Admin/EditQuoted/?p=@Model.GanjoorQuotedPoem.RelatedPoemId&id=@Model.ReverseId" class="up-btn up-btn--ghost">🔁 نمایش معکوس</a>
}
else
{
<a role="button" onclick="reverseQuote('@Model.GanjoorQuotedPoem.Id')" class="up-btn up-btn--ghost" title="درج معکوس">🔁 درج معکوس</a>
}
<a role="button" onclick="deleteThisOne('@Model.GanjoorQuotedPoem.Id')" class="up-btn up-btn--danger" title="حذف">🗑 حذف</a>
</div>
</form>
</div>
<div class="up-page-header">
<h2>همهٔ مشق‌های شعر</h2>
</div>
@if (Model.AllPoemQuoteds != null && Model.AllPoemQuoteds.Length > 0)
{
<table>
<tr>
<td>#</td>
<td>شاعر</td>
<td>۱</td>
<td>۲</td>
<td>۱</td>
<td>۲</td>
<td>منتشر شده</td>
</tr>
@foreach (var q in Model.AllPoemQuoteds)
{
<tr>
<td><a href="/Admin/EditQuoted/?p=@q.PoemId&id=@q.Id">#</a> </td>
<td>@q.CachedRelatedPoemPoetName</td>
<td>@q.CoupletVerse1</td>
<td>@q.CoupletVerse2</td>
<td>@q.RelatedCoupletVerse1</td>
<td>@q.RelatedCoupletVerse2</td>
<td>@q.Published</td>
</tr>
}
</table>
}
else
{
<partial name="_EmptyState" model="@("مشقی برای این شعر ثبت نشده است.")" />
}
}