divan/GanjooRazor/Areas/User/Pages/SuggestQuoted.cshtml
Hamid Reza Mohammadi 278efe5a03 #468 bug fix
Related Work Items: #428
2025-02-27 17:20:07 +03:30

432 lines
17 KiB
Plaintext

@page
@model GanjooRazor.Areas.User.Pages.SuggestQuotedModel
@using DNTPersianUtils.Core
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_UserPanelLayout";
ViewData["Title"] = "پیشنهاد مشق شعر";
await GanjooRazor.Utils.GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);
}
<h1>@ViewData["Title"]</h1>
<p class="red-color">@Html.Raw(Model.LastMessage)</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';
document.getElementById('finalize-select2').style.display = 'block';
}
function getCouplets(verses) {
let coupetIndex = -1;
let coupletText = "";
let coupletIndices = [];
let coupletTexts = [];
let verseIndex = 0;
let incompleteCouplet = false;
while (verseIndex < verses.length) {
switch (verses[verseIndex].versePosition) {
case 5: // Comment
incompleteCouplet = false;
break;
case -1: // Paragraph
case 4: // Single
incompleteCouplet = false;
if (coupletText) {
coupletIndices.push(coupetIndex);
coupletTexts.push(coupletText);
coupletText = "";
}
coupetIndex++;
coupletIndices.push(coupetIndex);
coupletTexts.push(verses[verseIndex].text);
break;
case 0: // Right
case 2: // CenteredVerse1
incompleteCouplet = false;
if (coupletText) {
coupletIndices.push(coupetIndex);
coupletTexts.push(coupletText);
}
coupetIndex++;
coupletText = verses[verseIndex].text;
break;
case 1: // Left
case 3: // CenteredVerse2
incompleteCouplet = true;
coupletText += ` - ${verses[verseIndex].text}`;
break;
}
verseIndex++;
}
if (incompleteCouplet && coupletText) {
coupletIndices.push(coupetIndex);
coupletTexts.push(coupletText);
}
return { coupletIndices, coupletTexts };
}
function finalizeSelectPage() {
document.getElementById('loading-selection').style.display = 'block';
document.getElementById('finalize-select2').style.display = 'none';
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) => {
if (json.poem == null) {
document.getElementById('loading-selection').style.display = 'none';
alert('صفحه‌ای که انتخاب کرده‌اید حاوی یک شعر نیست.');
selectGanjoorPage();
return;
}
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;
const result = getCouplets(json.poem.verses);
var coupletIndices = result.coupletIndices;
var coupletTexts = result.coupletTexts;
var x = document.getElementById("GanjoorQuotedPoem_RelatedCoupletIndex");
x.length = 0;
for (var i = 0; i < coupletIndices.length; i++) {
var option = document.createElement("option");
option.text = bshfarsinum((i + 1).toString()) + ' - ' + coupletTexts[i];
option.value = coupletIndices[i];
x.add(option);
}
x.value = coupletIndices[0];
document.getElementById('loading-selection').style.display = 'none';
}).catch((error) => {
document.getElementById('loading-selection').style.display = 'none';
alert('در انتخاب صفحه خطایی رخ داد. جزئیات بیشتر: ' + error);
selectGanjoorPage();
});
}
</script>
<div class="notice">
<p>
از این طریق می‌توانید نقل قول یک شاعر از یک شاعر دیگر را در گنجور ثبت کنید. توجه داشته باشید که اقتفا (یکسانی قافیه) دلیل کافی بر نقل قول نیست. باید در شعرها حداقل یک مصرع بعینه (با تخفیف تفاوت جزئی واژگان) نقل قول شده باشد.
</p>
</div>
<form method="post">
<table>
<tr>
<td>
<div class="notice">
<p>
از فهرست زیر بیتی را که نقل قول در آن رخ داده مشخص کنید.
</p>
</div>
</td>
</tr>
<tr>
<td>
بیت مرجع از <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" />
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.CoupletIndex" style="width:100%">
@foreach (var item in Model.Couplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
نقل قول در مصرع اول:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
نقل قول در مصرع دوم:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CoupletVerse2ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
<div class="notice">
<p>اگر شعر مرتبط در گنجور وجود دارد آن را با «گزینش شعر مرتبط» و پیدا کردن آن در صفحه‌ای که باز می‌شود مشخص کنید.</p>
</div>
</td>
</tr>
<tr>
<td>
<a onclick="finalizeSelectPage()" class="pagebutton" role="button" id="finalize-select2" style="display:none">انتخاب کردم</a>
</td>
</tr>
<tr>
<td>
<iframe id="select-poem" src="/" height="600" style="display:none;width:100%;margin:auto"></iframe>
</td>
</tr>
<tr>
<td>
<a onclick="selectGanjoorPage()" class="pagebutton" role="button" id="display-frame">گزینش شعر مرتبط</a>
<input asp-for="GanjoorQuotedPoem.RelatedPoemId" type="hidden" />
</td>
</tr>
<tr>
<td>
<a onclick="finalizeSelectPage()" class="pagebutton" role="button" id="finalize-select" style="display:none">انتخاب کردم</a>
<div id="loading-selection" style="display:none"><img src="/image/loading.gif" /></div>
</td>
</tr>
@if (Model.GanjoorQuotedPoem.RelatedPoemId != null)
{
<tr>
<td>
<a href="/?p=@Model.GanjoorQuotedPoem.RelatedPoemId">مشاهدهٔ شعر مرتبط</a>
</td>
</tr>
}
<tr>
<td>
بیت مرتبط:
</td>
</tr>
<tr>
<td>
<select asp-for="GanjoorQuotedPoem.RelatedCoupletIndex" style="width:100%;">
@foreach (var item in Model.RelatedCouplets)
{
<option value="@item.Item1">@($"{(item.Item1 + 1).ToPersianNumbers()} - {item.Item2}")</option>
}
</select>
</td>
</tr>
<tr>
<td>
<div class="notice">
اگر شعر مرتبط در گنجور وجود ندارد مصرع اول و دوم مرتبط آن را در کادرهای بعد تایپ کنید.
</div>
</td>
</tr>
<tr>
<td>
مصرع اول مرتبط (خارج از گنجور):
</td>
</tr>
<tr>
<td>
<div class="notice">
<p>
اگر شعر را از طریق دکمهٔ «گزینش شعر مرتبط» انتخاب کرده‌اید کادر زیر را خالی بگذارید.
</p>
</div>
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1" size="65" />
</td>
</tr>
<tr>
<td>
نقل قول در مصرع اول شعر مرتبط:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse1ShouldBeEmphasized" />
</td>
</tr>
<tr>
<td>
مصرع دوم مرتبط (خارج از گنجور):
</td>
</tr>
<tr>
<td>
<div class="notice">
<p>
اگر شعر را از طریق دکمهٔ «گزینش شعر مرتبط» انتخاب کرده‌اید کادر زیر را خالی بگذارید.
</p>
</div>
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2" size="65" />
</td>
</tr>
<tr>
<td>
نقل قول در مصرع دوم شعر مرتبط:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedCoupletVerse2ShouldBeEmphasized" />
<input asp-for="GanjoorQuotedPoem.SortOrder" hidden />
</td>
</tr>
<tr>
<td>
این شعر قدیمی‌تر از شعر مرتبط است:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.IsPriorToRelated" />
<input asp-for="GanjoorQuotedPoem.ChosenForMainList" type="hidden" />
<input asp-for="GanjoorQuotedPoem.IndirectQuotation" type="hidden" />
</td>
</tr>
<tr>
<td>
منتسب به هر دو شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.ClaimedByBothPoets" />
</td>
</tr>
<tr>
<td>
شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.RelatedPoetId" hidden />
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetName" />
</td>
</tr>
<tr>
<td>
سالمرگ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetDeathYearInLHijri" />
</td>
</tr>
<tr>
<td>
نشانی صفحهٔ شاعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetUrl" style="direction:ltr;text-align:left" size="65" />
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemPoetImage" type="hidden" />
</td>
</tr>
<tr>
<td>
</td>
</tr>
<tr>
<td>
عنوان شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullTitle" size="65" />
</td>
</tr>
<tr>
<td>
نشانی شعر:
</td>
</tr>
<tr>
<td>
<input asp-for="GanjoorQuotedPoem.CachedRelatedPoemFullUrl" style="direction:ltr;text-align:left" size="65" />
<input asp-for="GanjoorQuotedPoem.Published" hidden />
<input asp-for="GanjoorQuotedPoem.SamePoemsQuotedCount" hidden />
</td>
</tr>
<tr>
<td>
یادداشت:
</td>
</tr>
<tr>
<td>
<textarea asp-for="GanjoorQuotedPoem.Note" rows="4" cols="80" class="editor"></textarea>
</td>
</tr>
<tr>
<td>
<div class="notice">
<p>
نیازی به پیشنهاد معکوس این نقل قول نیست. در صورت تأیید، معکوس آن هم به طور خودکار ایجاد می‌شود.
</p>
</div>
</td>
</tr>
<tr>
<td>
<input type="submit" class="width-100per" value="پیشنهاد" />
</td>
</tr>
<tr><td><hr /></td></tr>
</table>
</form>
}