divan/GanjooRazor/Areas/Admin/Pages/ReviewEdits.cshtml
2026-10-03 20:10:11 +03:30

1610 lines
104 KiB
Plaintext

@page
@model GanjooRazor.Areas.Admin.Pages.ReviewEditsModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@using DNTPersianUtils.Core
@using RMuseum.Models.Ganjoor
@{
Layout = "_AdminLayout";
ViewData["Title"] = "بازبینی ویرایش‌ها";
}
<div class="up-page-header">
<h1>@ViewData["Title"]</h1>
</div>
<script>
// full existing-location catalog ({id, name, latitude, longitude}[]), used by the
// search-as-you-type location picker on each geo tag - see setupLocationAutocomplete in bk.js
var allGeoLocations = @Html.Raw(Model.AllLocationsJson);
// full existing-people catalog, used by the search-as-you-type person picker on each geo tag -
// see setupPersonAutocomplete in bk.js
var allGeoPeople = @Html.Raw(Model.AllPeopleJson);
async function checkAllNotCorrect() {
var ok = await upConfirm('همه نادرست؟');
if (!ok) return;
var allNotCorrect = document.getElementsByClassName("radio-notcorrect");
for (var i = 0; i < allNotCorrect.length; i++) {
allNotCorrect[i].checked = true;
}
}
async function checkAllCorrect() {
var ok = await upConfirm('همه درست؟');
if (!ok) return;
var allCorrect = document.getElementsByClassName("radio-approved");
for (var i = 0; i < allCorrect.length; i++) {
allCorrect[i].checked = true;
}
}
async function rejectVersePositionChanges() {
var ok = await upConfirm('تغییر نوع مصرع‌ها اشکال نرم‌افزاری است؟');
if (!ok) return;
var allNotCorrect = document.getElementsByClassName("radio-bug");
for (var i = 0; i < allNotCorrect.length; i++) {
allNotCorrect[i].checked = true;
}
}
function toggleGeoTagNewLocationFields(geoIndex) {
var hidden = document.getElementById('geotag' + geoIndex + '_location_select');
var fields = document.getElementById('geotag' + geoIndex + '_new_location_fields');
if (!hidden || !fields) return;
// '' (nothing picked yet / cleared while typing) and '0' (the old select's "no change /
// suggest as new location" option) both mean "not linked to an existing location"
var linkedToExisting = hidden.value && hidden.value !== '0';
fields.style.display = linkedToExisting ? 'none' : '';
}
// same purpose as toggleGeoTagNewLocationFields above, but for a suggested person instead of a
// suggested location
function toggleGeoTagNewPersonFields(geoIndex) {
var hidden = document.getElementById('geotag' + geoIndex + '_person_select');
var fields = document.getElementById('geotag' + geoIndex + '_new_person_fields');
if (!hidden || !fields) return;
var linkedToExisting = hidden.value && hidden.value !== '0';
fields.style.display = linkedToExisting ? 'none' : '';
}
function moderatePoemCorrections(verseCount, correctionId, geoTagCount) {
$('#moderatecorrections').hide();
$('#saving').text('در حال بررسی ...');
var titleReviewResult = 'DontCare';
if ($('#title_review_result_Approved').length > 0) { //has title
titleReviewResult = $('input[name=title_review_result]:checked').val()
}
var summaryReviewResult = 'DontCare';
if ($('#poem-summary_review_result_Approved').length > 0) { //has summary
summaryReviewResult = $('input[name=poem-summary_review_result]:checked').val()
}
var rhythmReviewResult = 'DontCare';
if ($('#rhythm_review_result_Approved').length > 0) {
rhythmReviewResult = $('input[name=rhythm_review_result]:checked').val()
}
var rhythm2ReviewResult = 'DontCare';
if ($('#rhythm2_review_result_Approved').length > 0) {
rhythm2ReviewResult = $('input[name=rhythm2_review_result]:checked').val()
}
var rhymeReviewResult = 'DontCare';
if ($('#rhyme_review_result_Approved').length > 0) {
rhymeReviewResult = $('input[name=rhyme_review_result]:checked').val()
}
var poemformatReviewResult = 'DontCare';
if ($('#poemformat_review_result_Approved').length > 0) {
poemformatReviewResult = $('input[name=poemformat_review_result]:checked').val()
}
var verseReviewResult = [];
var versePosReviewResult = [];
var verseReviewNotes = [];
var verseSummaryResults = [];
var verseLanguageReviewResult = [];
for (var i = 0; i <= (verseCount + 999); i++) {
var elementId = '#verse' + (i + 1).toString() + '_review_result_Approved';
if ($(elementId).length > 0) {
var elementName = 'verse' + (i + 1).toString() + '_review_result';
verseReviewResult.push($('input[name=' + elementName + ']:checked').val())
verseReviewNotes.push($('#verse' + (i + 1).toString() + '_review_note').val())
var versePosElementId = '#verse-position' + (i + 1).toString() + '_review_result_Approved';
if ($(versePosElementId).length > 0) {
var versePosElementName = 'verse-position' + (i + 1).toString() + '_review_result';
versePosReviewResult.push($('input[name=' + versePosElementName + ']:checked').val())
}
else {
versePosReviewResult.push('NotChanged');
}
var verseLanguageElementId = '#verse-language' + (i + 1).toString() + '_review_result_Approved';
if ($(verseLanguageElementId).length > 0) {
var verseLanguageElementName = 'verse-language' + (i + 1).toString() + '_review_result';
verseLanguageReviewResult.push($('input[name=' + verseLanguageElementName + ']:checked').val())
}
else {
verseLanguageReviewResult.push('NotChanged');
}
var summaryElementId = '#verse-summary' + (i + 1).toString() + '_review_result_Approved';
if ($(summaryElementId).length > 0) {
var summaryElementName = 'verse-summary' + (i + 1).toString() + '_review_result';
verseSummaryResults.push($('input[name=' + summaryElementName + ']:checked').val())
}
else {
verseSummaryResults.push('NotChanged');
}
}
else {
var deleteElementId = '#marked-for-delete-' + (i + 1).toString();
if ($(deleteElementId).length > 0) {
if ($(deleteElementId).is(":checked")) {
verseReviewResult.push('Approved');
}
else {
verseReviewResult.push('Rejected');
}
verseReviewNotes.push($('#verse' + (i + 1).toString() + '_review_note').val())
}
}
}
var geoTagReviewResult = [];
var geoTagReviewNotes = [];
var geoTagLocationId = [];
var geoTagLocationName = [];
var geoTagLatitude = [];
var geoTagLongitude = [];
var geoTagPersonId = [];
var geoTagPersonName = [];
for (var g = 0; g < (geoTagCount || 0); g++) {
var geoElementId = '#geotag' + (g + 1).toString() + '_review_result_Approved';
if ($(geoElementId).length > 0) {
var geoElementName = 'geotag' + (g + 1).toString() + '_review_result';
geoTagReviewResult.push($('input[name=' + geoElementName + ']:checked').val())
geoTagReviewNotes.push($('#geotag' + (g + 1).toString() + '_review_note').val())
var geoLocationSelect = $('#geotag' + (g + 1).toString() + '_location_select');
geoTagLocationId.push(geoLocationSelect.length > 0 ? geoLocationSelect.val() : '0');
geoTagLocationName.push($('#geotag' + (g + 1).toString() + '_location_name').val() || null);
geoTagLatitude.push($('#geotag' + (g + 1).toString() + '_latitude').val() || null);
geoTagLongitude.push($('#geotag' + (g + 1).toString() + '_longitude').val() || null);
var geoPersonSelect = $('#geotag' + (g + 1).toString() + '_person_select');
geoTagPersonId.push(geoPersonSelect.length > 0 ? geoPersonSelect.val() : '0');
geoTagPersonName.push($('#geotag' + (g + 1).toString() + '_person_name').val() || null);
}
}
var url = '?handler=SendCorrectionsModeration';
var pms = {};
pms.correctionId= correctionId;
pms.titleReviewResult= titleReviewResult;
pms.summaryReviewResult= summaryReviewResult;
pms.rhythmReviewResult= rhythmReviewResult;
pms.rhythm2ReviewResult= rhythm2ReviewResult;
pms.rhymeReviewResult= rhymeReviewResult;
pms.titleReviewNote= $('#title_review_note') == null ? null : $('#title_review_note').val();
pms.verseReviewResult= verseReviewResult;
pms.versePosReviewResult= versePosReviewResult;
pms.verseSummaryResults= verseSummaryResults;
pms.verseLanguageReviewResult= verseLanguageReviewResult;
pms.verseReviewNotes= verseReviewNotes;
pms.poemformatReviewResult= poemformatReviewResult;
pms.poemformatReviewNote= $('#poemformat_review_note') == null ? null : $('#poemformat_review_note').val();
pms.geoTagReviewResult= geoTagReviewResult;
pms.geoTagReviewNotes= geoTagReviewNotes;
pms.geoTagLocationId= geoTagLocationId;
pms.geoTagLocationName= geoTagLocationName;
pms.geoTagLatitude= geoTagLatitude;
pms.geoTagLongitude= geoTagLongitude;
pms.geoTagPersonId= geoTagPersonId;
pms.geoTagPersonName= geoTagPersonName;
$.ajax({
type: "POST",
url: url,
data: JSON.stringify(pms),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function() {
location.reload(true);
},
error: function(e) {
upToast(e.responseText || 'خطا رخ داد.', 'error');
$('#moderatecorrections').show();
$('#saving').text('');
}
});
}
</script>
@if (!string.IsNullOrEmpty(Model.FatalError))
{
<div class="up-alert up-alert--danger">@Model.FatalError</div>
}
else if (Model.Correction == null)
{
<partial name="_EmptyState" model="@("ویرایشی وجود ندارد.")" />
}
else
{
<p><a role="button" target="_blank" href="@Model.PageInformation.FullUrl" class="up-btn up-btn--ghost up-btn--sm">@Model.PageInformation.FullTitle</a></p>
<table>
<tr>
<td>
پیشنهاد دهنده:
</td>
<td>
<a href="/user/edits/?allusers=1&userid=@Model.Correction.UserId" target="_blank">@Model.Correction.UserNickname</a>
</td>
</tr>
<tr>
<td>
<a role="button" id="moderatecorrections" class="up-btn up-btn--success up-btn--block" onclick="moderatePoemCorrections(@Model.PageInformation.Poem.Verses.Length, @Model.Correction.Id, @(Model.Correction.GeoDateTags == null ? 0 : Model.Correction.GeoDateTags.Length))">بررسی</a>
</td>
<td>
<form method="post">
@Html.AntiForgeryToken()
<button type="submit" name="next" id="next" class="up-btn up-btn--ghost up-btn--block">بعدی</button>
</form>
</td>
</tr>
<tr>
<td>
@if (Model.Correction.VerseOrderText.Any(v => v.MarkForDelete))
{
<span class="up-badge up-badge--danger">حذف دارد</span>
}
else
{
<text>حذف ندارد</text>
}
</td>
<td>
@if (Model.Correction.VerseOrderText.Any(v => v.NewVerse))
{
<span class="up-badge up-badge--danger">اضافه دارد</span>
}
else
{
<text>اضافه ندارد</text>
}
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.VerseOrderText.Any(v => v.OriginalText != v.Text))
{
<span class="up-badge up-badge--success">ویرایش متن دارد</span>
}
else
{
<text>ویرایش متن ندارد</text>
}
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.Title != null)
{
<span class="up-badge up-badge--primary">تغییر عنوان دارد</span>
}
@if (Model.Correction.PoemSummary != null)
{
<span class="up-badge up-badge--primary">تغییر خلاصه دارد</span>
}
@if (Model.Correction.Rhythm != null)
{
<span class="up-badge up-badge--primary">تغییر وزن دارد</span>
}
@if (Model.Correction.Rhythm2 != null)
{
<span class="up-badge up-badge--primary">تغییر وزن دوم دارد</span>
}
@if (Model.Correction.RhymeLetters != null)
{
<span class="up-badge up-badge--primary">تغییر قافیه و ردیف دارد</span>
}
@if (Model.Correction.PoemFormat != null)
{
<span class="up-badge up-badge--primary">تغییر قالب شعری دارد</span>
}
@{
// a GeoDateTags row can be a geo/date tag OR a person tag (see the per-tag isPersonTag
// check further below) - split this summary badge the same way instead of always
// labeling every row as "geo/date", regardless of what it actually contains
var summaryGeoDateCount = 0;
var summaryPersonCount = 0;
if (Model.Correction.GeoDateTags != null)
{
foreach (var summaryTag in Model.Correction.GeoDateTags)
{
var summaryExistingTag = summaryTag.MarkForDelete && summaryTag.ExistingTagId != null && Model.PageInformation.Poem.GeoDateTags != null
? Model.PageInformation.Poem.GeoDateTags.Where(t => t.Id == summaryTag.ExistingTagId).FirstOrDefault()
: null;
var summaryIsPersonTag = summaryTag.PersonId != null || !string.IsNullOrEmpty(summaryTag.SuggestedPersonGraphJson) || (summaryExistingTag != null && summaryExistingTag.PersonId != null);
if (summaryIsPersonTag) { summaryPersonCount++; } else { summaryGeoDateCount++; }
}
}
}
@if (summaryGeoDateCount > 0)
{
<span class="up-badge up-badge--primary">برچسب جغرافیایی/تاریخی دارد (@summaryGeoDateCount.ToPersianNumbers())</span>
}
@if (summaryPersonCount > 0)
{
<span class="up-badge up-badge--primary">برچسب نامبرده دارد (@summaryPersonCount.ToPersianNumbers())</span>
}
</td>
</tr>
<tr>
<td>
زمان:
</td>
<td>
@Model.Correction.Date.ToFriendlyPersianDateTextify()
</td>
</tr>
<tr>
<td>
تعداد کل:
</td>
<td>
@Model.TotalCount
</td>
</tr>
<tr>
<td colspan=2>
<a role="button" onclick="checkAllNotCorrect()" class="up-btn up-btn--ghost up-btn--sm">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</a>
</td>
</tr>
<tr>
<td colspan=2>
<a role="button" onclick="rejectVersePositionChanges()" class="up-btn up-btn--ghost up-btn--sm">تغییر مصرع‌ها اشکال نرم‌افزاری است</a>
</td>
</tr>
<tr>
<td colspan=2>
<a role="button" href="/Admin/ReviewEdits/?posok=true&skip=@Model.Skip&onlyUserCorrections=@Model.OnlyUserCorrections" class="up-btn up-btn--ghost up-btn--sm">تغییر مصرع‌ها درست است</a>
</td>
</tr>
<tr>
<td colspan=2>
<a role="button" href="/Admin/ReviewEdits/?onlyUserCorrections=false" class="up-btn up-btn--ghost up-btn--sm">پیشنهادهای سیستمی</a>
</td>
</tr>
<tr>
<td colspan="2"><p id="saving">&nbsp;</p></td>
</tr>
@if (Model.TextSourceImage != null)
{
<tr>
<td colspan="2">
<div class="related-images">
<div class="related-image-container">
<a target="_blank" href="@Html.Raw(Model.TextSourceImage.TargetPageUrl)">
<img src="@Html.Raw(Model.TextSourceImage.ThumbnailImageUrl)" alt="@Model.TextSourceImage.AltText" loading="lazy" class="related-image-main">
</a>
</div>
</div>
</td>
</tr>
}
@if (Model.Correction.Title != null)
{
<tr>
<td colspan="2">
عنوان
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p id="original-title" class="red-color">@Model.Correction.OriginalTitle</p>
</td>
<td>
<p id="edited-title" class="green-color">@Model.Correction.Title</p>
</td>
</tr>
<tr>
<td colspan="2">
<p id="title-compare">@Model.Correction.OriginalTitle</p>
<script>
$(document).ready(function() {
compareCorrectionBlocks('original-title', 'edited-title', 'title-compare');
});
</script>
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.Result == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="title_review_result_Approved" name="title_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="title_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="title_review_result_NotChanged" name="title_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="title_review_result_Approved" name="title_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="title_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="title_review_result_NotChanged" name="title_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="title_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="title_review_result_RejectedBecauseWrong" name="title_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="title_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="title_review_result_RejectedBecauseVariant" name="title_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="title_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="title_review_result_Rejected" name="title_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="title_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="title_review_note" name="title_review_note" value="" size="50" />
</td>
</tr>
}
@if (Model.Correction.Rhythm != null)
{
<tr>
<td colspan="2">
وزن
</td>
</tr>
<tr>
<td>
@if (Model.PageInformation.Poem.Verses.Length > 0)
{
@Model.PageInformation.Poem.Verses[0].Text
}
</td>
<td>
@if (Model.PageInformation.Poem.Verses.Length > 1)
{
@Model.PageInformation.Poem.Verses[1].Text
}
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p class="red-color">@Model.Correction.OriginalRhythm</p>
</td>
<td>
<p class="green-color">@Model.Correction.Rhythm</p>
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.RhythmResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="rhythm_review_result_Approved" name="rhythm_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="rhythm_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="rhythm_review_result_NotChanged" name="rhythm_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="rhythm_review_result_Approved" name="rhythm_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="rhythm_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="rhythm_review_result_NotChanged" name="rhythm_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="rhythm_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="rhythm_review_result_RejectedBecauseWrong" name="rhythm_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="rhythm_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhythm_review_result_RejectedBecauseVariant" name="rhythm_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="rhythm_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhythm_review_result_Rejected" name="rhythm_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="rhythm_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
@if (Model.Correction.Title != null)
{
<p>در صورت نیاز به درج یادداشت برای تغییر وزن آن را در قسمت عنوان وارد فرمایید.</p>
}
else
{
<input type="text" id="title_review_note" name="title_review_note" value="" size="50" />
}
</td>
</tr>
}
@if (Model.Correction.RhymeLetters != null)
{
<tr>
<td colspan="2">
قافیه
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p style="color:red">@Model.RhymeLetters</p>
</td>
<td>
<p style="color:green">@Model.Correction.RhymeLetters</p>
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.RhymeLettersReviewResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="rhyme_review_result_Approved" name="rhyme_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="rhyme_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="rhyme_review_result_NotChanged" name="rhyme_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="rhyme_review_result_Approved" name="rhyme_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="rhyme_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="rhyme_review_result_NotChanged" name="rhyme_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="rhyme_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="rhyme_review_result_RejectedBecauseWrong" name="rhyme_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="rhyme_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhyme_review_result_RejectedBecauseVariant" name="rhyme_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="rhyme_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="title_review_note" name="title_review_note" value="" size="50" />
</td>
</tr>
}
@if (Model.Correction.Rhythm2 != null)
{
<tr>
<td colspan="2">
وزن دوم
</td>
</tr>
<tr>
<td>
@if (Model.PageInformation.Poem.Verses.Length > 0)
{
@Model.PageInformation.Poem.Verses[0].Text
}
</td>
<td>
@if (Model.PageInformation.Poem.Verses.Length > 1)
{
@Model.PageInformation.Poem.Verses[1].Text
}
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p class="red-color">@Model.Correction.OriginalRhythm2</p>
</td>
<td>
<p class="green-color">@Model.Correction.Rhythm2</p>
</td>
</tr>
<tr>
<td colspan="2">
<div class="up-radio-option">
<input type="radio" id="rhythm2_review_result_Approved" name="rhythm2_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="rhythm2_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
@if (Model.Correction.Rhythm2Result == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<input type="radio" id="rhythm2_review_result_NotChanged" name="rhythm2_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<input type="radio" id="rhythm2_review_result_NotChanged" name="rhythm2_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="rhythm2_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="rhythm2_review_result_RejectedBecauseWrong" name="rhythm2_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="rhythm2_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhythm2_review_result_RejectedBecauseVariant" name="rhythm2_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="rhythm2_review_result_RejectedBecauseVariant">مربوط به نسخهٔ دیگری است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhythm_2review_result_RejectedBecauseUnnecessaryChange" name="rhythm2_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseUnnecessaryChange">
<label for="rhythm2_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="rhythm2_review_result_Rejected" name="rhythm2_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="rhythm2_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
@if (Model.Correction.Title != null)
{
<p>در صورت نیاز به درج یادداشت برای تغییر وزن آن را در قسمت عنوان وارد فرمایید.</p>
}
else
{
<input type="text" id="title_review_note" name="title_review_note" value="" size="50" />
}
</td>
</tr>
}
@if (Model.Correction.PoemFormat != null)
{
<tr>
<td colspan="2">
قالب شعری
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p id="original-poemformat" class="red-color">@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString(Model.Correction.OriginalPoemFormat)</p>
</td>
<td>
<p id="edited-poemformat" class="green-color">@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString(Model.Correction.PoemFormat)</p>
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.PoemFormatReviewResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="poemformat_review_result_Approved" name="poemformat_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="poemformat_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="poemformat_review_result_NotChanged" name="poemformat_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="poemformat_review_result_Approved" name="poemformat_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="poemformat_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="poemformat_review_result_NotChanged" name="poemformat_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="poemformat_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="poemformat_review_result_RejectedBecauseWrong" name="poemformat_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="poemformat_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poemformat_review_result_RejectedBecauseVariant" name="poemformat_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="poemformat_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poemformat_review_result_Rejected" name="poemformat_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="poemformat_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="poemformat_review_note" name="poemformat_review_note" value="" size="50" />
</td>
</tr>
}
@if (Model.Correction.PoemSummary != null)
{
<tr>
<td colspan="2">
خلاصه
</td>
</tr>
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p style="color:red" id="poem-summary-original">@Model.PageInformation.Poem.PoemSummary</p>
</td>
<td>
<p style="color:green" id="poem-summary-edited">@Model.Correction.PoemSummary</p>
</td>
</tr>
<tr>
<td colspan="2">
<p id="poem-summary-compare">@Model.PageInformation.Poem.PoemSummary</p>
<script>
$(document).ready(function () {
compareCorrectionBlocks('poem-summary-original', 'poem-summary-edited', 'poem-summary-compare');
});
</script>
</td>
</tr>
<tr>
<td colspan="2">
@if (Model.Correction.SummaryReviewResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_Approved" name="poem-summary_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="poem-summary_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="poem-summary_review_result_NotChanged" name="poem-summary_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_Approved" name="poem-summary_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="poem-summary_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="poem-summary_review_result_NotChanged" name="poem-summary_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="poem-summary_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedBecauseWrong" name="poem-summary_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="poem-summary_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseInformal" name="poem-summary_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseInformal">
<label for="poem-summary_review_result_RejectedParaphraseBecauseInformal">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseInformal)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseArtificial" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseArtificial">
<label for="poem-summary_review_result_RejectedParaphraseBecauseArtificial">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseArtificial)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseUnfathomable" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseUnfathomable">
<label for="poem-summary_review_result_RejectedParaphraseBecauseUnfathomable">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseUnfathomable)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseContainsOwnIdeas" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseContainsOwnIdeas">
<label for="poem-summary_review_result_RejectedParaphraseBecauseContainsOwnIdeas">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseContainsOwnIdeas)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseHasServeralTypoErrors" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseHasServeralTypoErrors">
<label for="poem-summary_review_result_RejectedParaphraseBecauseHasServeralTypoErrors">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseHasServeralTypoErrors)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseNotBetter" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseNotBetter">
<label for="poem-summary_review_result_RejectedParaphraseBecauseNotBetter">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseNotBetter)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseItIsNotAParaphrase" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsNotAParaphrase">
<label for="poem-summary_review_result_RejectedParaphraseBecauseItIsNotAParaphrase">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsNotAParaphrase)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseItIsWordMeaningOrIncomplete" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsWordMeaningOrIncomplete">
<label for="poem-summary_review_result_RejectedParaphraseBecauseItIsWordMeaningOrIncomplete">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsWordMeaningOrIncomplete)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_RejectedParaphraseBecauseFakeAttribution" name="poem-summary_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseFakeAttribution">
<label for="poem-summary_review_result_RejectedParaphraseBecauseFakeAttribution">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseFakeAttribution)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="poem-summary_review_result_Rejected" name="poem-summary_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="poem-summary_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="poem-summary_review_note" name="poem-summary_review_note" value="" size="50" />
</td>
</tr>
}
@if (Model.Correction.GeoDateTags != null)
@for (var gi = 0; gi < Model.Correction.GeoDateTags.Length; gi++)
{
var geoTag = Model.Correction.GeoDateTags[gi];
var geoIndex = gi + 1;
// for a delete-request row, PersonId/SuggestedPersonGraphJson are always null (the row
// only carries ExistingTagId) - so the tag's kind has to be resolved from the existing
// tag being deleted instead, or a person-tag deletion would be mislabeled as geo/date
var existingTagForKindCheck = geoTag.MarkForDelete && geoTag.ExistingTagId != null && Model.PageInformation.Poem.GeoDateTags != null
? Model.PageInformation.Poem.GeoDateTags.Where(t => t.Id == geoTag.ExistingTagId).FirstOrDefault()
: null;
var isPersonTag = geoTag.PersonId != null || !string.IsNullOrEmpty(geoTag.SuggestedPersonGraphJson) || (existingTagForKindCheck != null && existingTagForKindCheck.PersonId != null);
<tr>
<td colspan="2">
@(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();
}
@if (geoTag.CoupletIndex != null)
{
<text>
- بیت <a href="@($"{Model.PageInformation.FullUrl}#bn{geoTag.CoupletIndex+1}")" target="_blank">@((geoTag.CoupletIndex + 1).ToPersianNumbers())</a>
</text>
}
</td>
</tr>
@if (geoCouplet != null)
{
<tr>
<td colspan="2">
<p>@geoCouplet</p>
</td>
</tr>
}
@if (geoTag.MarkForDelete)
{
var existingTag = existingTagForKindCheck;
<tr>
<td colspan="2">
<p class="red-color">
درخواست حذف برچسب:
@if (existingTag != null)
{
@if (isPersonTag)
{
@(existingTag.Person != null ? existingTag.Person.Name : "")
}
else
{
@(existingTag.Location != null ? existingTag.Location.Name : "")
@(existingTag.LunarYear != null ? $" - سال {existingTag.LunarYear}" : "")
}
}
</p>
</td>
</tr>
}
else if (isPersonTag)
{
RMuseum.Models.Ganjoor.ViewModels.PersonGraphSuggestion personGraph = null;
string personGraphError = null;
if (geoTag.PersonId == null && !string.IsNullOrEmpty(geoTag.SuggestedPersonGraphJson))
{
try
{
personGraph = Newtonsoft.Json.JsonConvert.DeserializeObject<RMuseum.Models.Ganjoor.ViewModels.PersonGraphSuggestion>(geoTag.SuggestedPersonGraphJson);
}
catch (Exception ex)
{
personGraphError = ex.Message;
}
}
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p class="red-color">-</p>
</td>
<td>
<p class="green-color">
@if (geoTag.PersonId != null)
{
<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>
}
else if (personGraph?.Person != null)
{
<text>نامبردۀ جدید: @personGraph.Person.Name</text>
if (personGraph.Relations != null && personGraph.Relations.Count > 0)
{
<text> (@personGraph.Relations.Count.ToPersianNumbers() رابطهٔ همراه)</text>
}
}
else if (personGraphError != null)
{
<span class="red-color">خطا در تفسیر اطلاعات نامبردۀ پیشنهادی: @personGraphError</span>
}
</p>
@if (!string.IsNullOrEmpty(geoTag.SuggestionNote))
{
<p><small>یادداشت پیشنهاد دهنده: @geoTag.SuggestionNote</small></p>
}
@if (personGraph?.Person != null)
{
<div class="up-hint">
<p>
<small>
@if (!string.IsNullOrEmpty(personGraph.Person.Description)) { <text>توضیحات: @personGraph.Person.Description<br /></text> }
@if (personGraph.Person.BirthYearInLHijri != null) { <text>تولد: @personGraph.Person.BirthYearInLHijri @(personGraph.Person.ValidBirthDate ? "(قطعی)" : "(تخمینی)")<br /></text> }
@if (personGraph.Person.DeathYearInLHijri != null) { <text>وفات: @personGraph.Person.DeathYearInLHijri @(personGraph.Person.ValidDeathDate ? "(قطعی)" : "(تخمینی)")<br /></text> }
@if (!string.IsNullOrEmpty(personGraph.Person.FamilyTreeCaption)) { <text>عنوان تبارنامه: @personGraph.Person.FamilyTreeCaption<br /></text> }
</small>
</p>
@if (personGraph.RelatedPeople != null && personGraph.RelatedPeople.Count > 0)
{
<p><small>خویشاوندان/وابستگان همراه این پیشنهاد:</small></p>
<ul>
@foreach (var relation in personGraph.Relations ?? new List<RMuseum.Models.Ganjoor.ViewModels.PersonGraphRelationEntry>())
{
var otherNode = personGraph.RelatedPeople.Where(p => p.LocalKey == (relation.Person1 == personGraph.Person.LocalKey ? relation.Person2 : relation.Person1)).FirstOrDefault();
var otherName = otherNode != null
? (otherNode.ExistingPersonId != null ? (Model.People ?? new List<GanjoorRelatedPerson>()).Where(p => p.Id == otherNode.ExistingPersonId).Select(p => p.Name).FirstOrDefault() : otherNode.Name)
: null;
<li>
<small>
@(relation.Kind == "affiliation" ? relation.AffiliationType : relation.RelationType)
— @otherName
@if (!string.IsNullOrEmpty(relation.Note)) { <text>(@relation.Note)</text> }
</small>
</li>
}
</ul>
}
</div>
}
</td>
</tr>
<tr>
<td colspan="2">
<p class="up-hint">
اگر کاربر نامبرده را اشتباه تشخیص داده (مثلاً نامبرده‌ای که از قبل در فهرست است را به‌عنوان نامبردۀ جدید پیشنهاد کرده)، به‌جای رد کردن می‌توانید آن را به نامبردۀ موجود متصل کنید؛
برای نامبردۀ تازه فقط نام قابل اصلاح است - اصلاح روابط/تاریخ‌ها نیازمند رد کردن و ارسال دوبارهٔ پیشنهاد توسط کاربر است:
</p>
<label for="geotag@(geoIndex)_person_search">اتصال به نامبردۀ موجود در فهرست (در صورت وجود اشتباه در تشخیص نامبرده):</label>
<div class="up-autocomplete-wrap">
<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)" />
<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>
<p class="up-hint">برای اتصال به یک نامبردۀ موجود، نام او را تایپ کنید و از فهرست انتخاب کنید؛ برای رها کردن اتصال و پیشنهاد به‌عنوان نامبردۀ جدید، این فیلد را خالی کنید.</p>
<script>
setupPersonAutocomplete(
document.getElementById('geotag@(geoIndex)_person_search'),
document.getElementById('geotag@(geoIndex)_person_select'),
document.getElementById('geotag@(geoIndex)_person_results'),
allGeoPeople,
function (person) { toggleGeoTagNewPersonFields(@geoIndex); },
function (typedText) { toggleGeoTagNewPersonFields(@geoIndex); }
);
</script>
@if (geoTag.PersonId == null)
{
<div id="geotag@(geoIndex)_new_person_fields">
<br>
<label for="geotag@(geoIndex)_person_name">نام اصلاح‌شدهٔ نامبرده:</label>
<input type="text" id="geotag@(geoIndex)_person_name" name="geotag@(geoIndex)_person_name" size="30" />
</div>
}
</td>
</tr>
}
else
{
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
<tr>
<td>
<p class="red-color">-</p>
</td>
<td>
<p class="green-color">
@if (geoTag.LocationId != null)
{
@(geoTag.Location != null ? geoTag.Location.Name : $"مکان #{geoTag.LocationId}")
}
else if (!string.IsNullOrEmpty(geoTag.SuggestedLocationName))
{
@($"{geoTag.SuggestedLocationName} ({geoTag.SuggestedLatitude}, {geoTag.SuggestedLongitude}) [مکان جدید]")
}
@if (geoTag.LunarYear != null)
{
<text> - سال @geoTag.LunarYear</text>
if (geoTag.LunarMonth != null)
{
<text>/@geoTag.LunarMonth</text>
if (geoTag.LunarDay != null)
{
<text>/@geoTag.LunarDay</text>
}
}
}
</p>
@if (!string.IsNullOrEmpty(geoTag.SuggestionNote))
{
<p><small>یادداشت پیشنهاد دهنده: @geoTag.SuggestionNote</small></p>
}
</td>
</tr>
<tr>
<td colspan="2">
<p class="up-hint">
اگر کاربر در نام مکان یا مختصات آن اشتباه کرده اما پیشنهادش در اصل ارزش تأیید دارد، به‌جای رد کردن می‌توانید همین‌جا آن را اصلاح کنید:
</p>
<label for="geotag@(geoIndex)_location_search">اتصال به مکان موجود در فهرست (در صورت وجود اشتباه در تشخیص مکان):</label>
<div class="up-autocomplete-wrap">
<input type="text" id="geotag@(geoIndex)_location_search" autocomplete="off" placeholder="نام مکان را تایپ کنید..."
value="@(geoTag.LocationId != null ? (Model.Locations ?? new List<GanjoorGeoLocation>()).Where(l => l.Id == geoTag.LocationId).Select(l => l.Name).FirstOrDefault() : null)" />
<input type="hidden" id="geotag@(geoIndex)_location_select" name="geotag@(geoIndex)_location_select" value="@(geoTag.LocationId ?? 0)" />
<div id="geotag@(geoIndex)_location_results" class="up-autocomplete-results" style="display:none;"></div>
</div>
<p class="up-hint">برای اتصال به یک مکان موجود، نام آن را تایپ کنید و از فهرست انتخاب کنید؛ برای رها کردن اتصال و پیشنهاد به‌عنوان مکان جدید، این فیلد را خالی کنید.</p>
<script>
setupLocationAutocomplete(
document.getElementById('geotag@(geoIndex)_location_search'),
document.getElementById('geotag@(geoIndex)_location_select'),
document.getElementById('geotag@(geoIndex)_location_results'),
allGeoLocations,
function (loc) { toggleGeoTagNewLocationFields(@geoIndex); },
function (typedText) { toggleGeoTagNewLocationFields(@geoIndex); }
);
</script>
@if (geoTag.LocationId == null)
{
<div id="geotag@(geoIndex)_new_location_fields">
<br>
<label for="geotag@(geoIndex)_location_name">نام اصلاح‌شدهٔ مکان:</label>
<input type="text" id="geotag@(geoIndex)_location_name" name="geotag@(geoIndex)_location_name" value="@geoTag.SuggestedLocationName" size="30" />
<label for="geotag@(geoIndex)_latitude">عرض جغرافیایی اصلاح‌شده:</label>
<input type="text" id="geotag@(geoIndex)_latitude" name="geotag@(geoIndex)_latitude" value="@geoTag.SuggestedLatitude" size="12" />
<label for="geotag@(geoIndex)_longitude">طول جغرافیایی اصلاح‌شده:</label>
<input type="text" id="geotag@(geoIndex)_longitude" name="geotag@(geoIndex)_longitude" value="@geoTag.SuggestedLongitude" size="12" />
@if (geoTag.SuggestedLatitude != null && geoTag.SuggestedLongitude != null)
{
<!-- read-only-at-a-glance preview of the user's suggested coordinates, same Leaflet
setup Editor.cshtml's own geotag picker uses (see _AdminLayout.cshtml for the
leaflet.css/js includes added for this) - the marker is left draggable, and the
map click-to-move too, so a moderator who spots a small mistake can nudge the
coordinates visually instead of rejecting a suggestion that's otherwise fine -->
<div id="geotag@(geoIndex)_map" style="height:220px;margin-top:8px;border:1px solid #d8cdb8;border-radius:6px;"></div>
<p class="up-hint"><small>برای مشاهدهٔ دقیق‌تر یا اصلاح مختصات، نشانگر را بکشید یا روی نقشه کلیک کنید.</small></p>
<script>
(function () {
var lat = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(geoTag.SuggestedLatitude));
var lng = @Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(geoTag.SuggestedLongitude));
var map = L.map('geotag@(geoIndex)_map').setView([lat, lng], 10);
L.tileLayer.provider('OpenStreetMap').addTo(map);
var marker = L.marker([lat, lng], { draggable: true }).addTo(map);
function syncFieldsFromMarker(latlng) {
document.getElementById('geotag@(geoIndex)_latitude').value = latlng.lat;
document.getElementById('geotag@(geoIndex)_longitude').value = latlng.lng;
}
marker.on('dragend', function () { syncFieldsFromMarker(marker.getLatLng()); });
map.on('click', function (e) {
marker.setLatLng(e.latlng);
syncFieldsFromMarker(e.latlng);
});
})();
</script>
}
</div>
}
</td>
</tr>
}
<tr>
<td colspan="2">
<div class="up-radio-option">
<input type="radio" id="geotag@(geoIndex)_review_result_Approved" name="geotag@(geoIndex)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="geotag@(geoIndex)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="geotag@(geoIndex)_review_result_RejectedBecauseWrong" name="geotag@(geoIndex)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="geotag@(geoIndex)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="geotag@(geoIndex)_review_result_RejectedBecauseUnnecessaryChange" name="geotag@(geoIndex)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseUnnecessaryChange">
<label for="geotag@(geoIndex)_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="geotag@(geoIndex)_review_result_Rejected" name="geotag@(geoIndex)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="geotag@(geoIndex)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="geotag@(geoIndex)_review_note" name="geotag@(geoIndex)_review_note" value="" size="50" />
</td>
</tr>
}
@if (Model.Correction.VerseOrderText != null)
@foreach (var verse in Model.Correction.VerseOrderText)
{
<tr>
<td colspan="2">
@if (verse.CoupletIndex == null)
{
<text>
مصرع @verse.VORder.ToPersianNumbers()
</text>
}
else
{
<text>
بیت <a href="@($"{Model.PageInformation.FullUrl}#bn{verse.CoupletIndex+1}")" target="_blank">@((verse.CoupletIndex + 1).ToPersianNumbers())</a>
</text>
}
</td>
</tr>
if (@verse.MarkForDelete)
{
<tr>
<td colspan="2">
<p class="red-color" id="verse-original-@verse.VORder">@verse.OriginalText</p>
</td>
</tr>
<tr>
<td><p class="red-color">حذف شود</p></td>
<td>
<input type="checkbox" name="marked-for-delete-@verse.VORder" id="marked-for-delete-@verse.VORder" />
<label for="marked-for-delete-@verse.VORder">تأیید حذف</label>
<input type="text" id="verse@(verse.VORder)_review_note" name="verse@(verse.VORder)_review_note" value="" size="50" />
</td>
</tr>
}
else if(verse.NewVerse)
{
<tr>
<td colspan="2">
مصرع جدید
</td>
</tr>
<tr>
<td colspan="2">
<p class="green-color" id="verse-edited-@verse.VORder">@verse.Text</p>
</td>
</tr>
<tr>
<td colspan="2">
@if (verse.NewVerseResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Approved" name="verse@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="verse@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse@(verse.VORder)_review_result_NotChanged" name="verse@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Approved" name="verse@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="verse@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse@(verse.VORder)_review_result_NotChanged" name="verse@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="verse@(verse.VORder)_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseWrong" name="verse@(verse.VORder)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseVariant" name="verse@(verse.VORder)_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseVariant">مربوط به نسخهٔ دیگری است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseUnnecessaryChange" name="verse@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseUnnecessaryChange">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Rejected" name="verse@(verse.VORder)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="verse@(verse.VORder)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="verse@(verse.VORder)_review_note" name="verse@(verse.VORder)_review_note" value="" size="50" />
</td>
</tr>
}
else
{
<tr>
<td>متن اولیه</td>
<td>پیشنهاد</td>
</tr>
@if (verse.VersePosition != null)
{
<tr>
<td>متن مصرع جهت تغییر نوع:</td>
<td>@verse.OriginalText</td>
</tr>
<tr>
<td>
@if (verse.OriginalVersePosition != null)
{
<text>
نوع پیشین مصرع: <p class="red-color">@RMuseum.Models.Ganjoor.VersePositionHelper.GetVersePositionString((RMuseum.Models.Ganjoor.VersePosition)verse.OriginalVersePosition)</p>
</text>
}
</td>
<td>
نوع پیشنهادی مصرع: <p class="green-color">@RMuseum.Models.Ganjoor.VersePositionHelper.GetVersePositionString((RMuseum.Models.Ganjoor.VersePosition)verse.VersePosition)</p>
</td>
</tr>
<tr>
<td colspan="2">
@if(Model.ApproveVersePositionChanges)
{
<input type="radio" id="verse-position@(verse.VORder)_review_result_Approved" name="verse-position@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
}
else
{
<input type="radio" id="verse-position@(verse.VORder)_review_result_Approved" name="verse-position@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
}
<label for="verse-position@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
<br>
@if (verse.VersePositionResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<input type="radio" id="verse-position@(verse.VORder)_review_result_NotChanged" name="verse-position@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<input type="radio" id="verse-position@(verse.VORder)_review_result_NotChanged" name="verse-position@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="verse-position@(verse.VORder)_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="verse-position@(verse.VORder)_review_result_RejectedBecauseWrong" name="verse-position@(verse.VORder)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="verse-position@(verse.VORder)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-position@(verse.VORder)_review_result_Rejected" name="verse-position@(verse.VORder)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="verse-position@(verse.VORder)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-position@(verse.VORder)_review_result_NotSuggectedByUser" name="verse-position@(verse.VORder)_review_result" class="radio-bug" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotSuggestedByUser">
<label for="verse-position@(verse.VORder)_review_result_NotSuggectedByUser">اشکال نرم‌افزار گنجور</label>
</div>
</td>
</tr>
}
@if(verse.Text != null)
{
<tr>
<td>
<p class="red-color" id="verse-original-@verse.VORder">@verse.OriginalText</p>
</td>
<td>
<p class="green-color" id="verse-edited-@verse.VORder">@verse.Text</p>
</td>
</tr>
<tr>
<td colspan="2">
<p id="verse-compare-@verse.VORder">@verse.OriginalText</p>
<script>
$(document).ready(function () {
compareCorrectionBlocks('verse-original-@verse.VORder', 'verse-edited-@verse.VORder', 'verse-compare-@verse.VORder');
});
</script>
</td>
</tr>
<tr>
<td colspan="2">
@if (verse.Result == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Approved" name="verse@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="verse@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse@(verse.VORder)_review_result_NotChanged" name="verse@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Approved" name="verse@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="verse@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse@(verse.VORder)_review_result_NotChanged" name="verse@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="verse@(verse.VORder)_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseWrong" name="verse@(verse.VORder)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseVariant" name="verse@(verse.VORder)_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseVariant">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseVariant">مربوط به نسخهٔ دیگری است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseUnnecessaryChange" name="verse@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseUnnecessaryChange">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseUnnecessaryChange">تغییر سلیقه‌ای یا بی دلیل است</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseOfAbusingPunctuations" name="verse@(verse.VORder)_review_result" class="radio-punctuation" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseOfAbusingPunctuations">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseOfAbusingPunctuations">از علائم سجاوندی به طور نامناسب استفاده شده است.</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_RejectedBecauseOfNonStandardCharcaters" name="verse@(verse.VORder)_review_result" class="radio-nonstandard" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseOfNonStandardCharcaters">
<label for="verse@(verse.VORder)_review_result_RejectedBecauseOfNonStandardCharcaters">برای هٔ چسبان یا نویسه‌های دیگر از دستور خط فرهنگستان تبعیت نشده است.</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse@(verse.VORder)_review_result_Rejected" name="verse@(verse.VORder)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="verse@(verse.VORder)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="verse@(verse.VORder)_review_note" name="verse@(verse.VORder)_review_note" value="" size="50" />
</td>
</tr>
}
@if (verse.LanguageId != null)
{
<tr>
<td>متن مصرع جهت تغییر زبان:</td>
<td>@verse.OriginalText</td>
</tr>
<tr>
<td>
@if (verse.OriginalLanguageId == null)
{
<text>
زبان پیشین مصرع: <p class="red-color">فارسی</p>
</text>
}
else
{
<text>
زبان پیشین مصرع: <p class="red-color">@Model.Languages.Where(l => l.Id == verse.OriginalLanguageId).Single().Name</p>
</text>
}
</td>
<td>
زبان پیشنهادی مصرع: <p class="green-color">@Model.Languages.Where(l => l.Id == verse.LanguageId).Single().Name</p>
</td>
</tr>
<tr>
<td colspan="2">
@if (verse.LanguageReviewResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="verse-language@(verse.VORder)_review_result_Approved" name="verse-language@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="verse-language@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse-language@(verse.VORder)_review_result_NotChanged" name="verse-language@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="verse-language@(verse.VORder)_review_result_Approved" name="verse-language@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="verse-language@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse-language@(verse.VORder)_review_result_NotChanged" name="verse-language@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="verse-language@(verse.VORder)_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="verse-language@(verse.VORder)_review_result_RejectedBecauseWrong" name="verse-language@(verse.VORder)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="verse-language@(verse.VORder)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-language@(verse.VORder)_review_result_Rejected" name="verse-language@(verse.VORder)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="verse-language@(verse.VORder)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-language@(verse.VORder)_review_result_NotSuggectedByUser" name="verse-language@(verse.VORder)_review_result" class="radio-bug" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotSuggestedByUser">
<label for="verse-language@(verse.VORder)_review_result_NotSuggectedByUser">اشکال نرم‌افزار گنجور</label>
</div>
</td>
</tr>
}
@if(verse.CoupletSummary != null)
{
<tr>
<td colspan="2">
معنی
</td>
</tr>
<tr>
<td>
<p class="red-color" id="verse-summary-original-@verse.VORder">@verse.OriginalCoupletSummary</p>
</td>
<td>
<p class="green-color" id="verse-summary-edited-@verse.VORder">@verse.CoupletSummary</p>
</td>
</tr>
<tr>
<td colspan="2">
<p id="verse-summary-compare-@verse.VORder">@verse.CoupletSummary</p>
<script>
$(document).ready(function () {
compareCorrectionBlocks('verse-summary-original-@verse.VORder', 'verse-summary-edited-@verse.VORder', 'verse-summary-compare-@verse.VORder');
});
</script>
</td>
</tr>
<tr>
<td colspan="2">
@if (verse.SummaryReviewResult == RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)
{
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_Approved" name="verse-summary@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved">
<label for="verse-summary@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse-summary@(verse.VORder)_review_result_NotChanged" name="verse-summary@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged" checked="checked">
}
else
{
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_Approved" name="verse-summary@(verse.VORder)_review_result" class="radio-approved" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved" checked="checked">
<label for="verse-summary@(verse.VORder)_review_result_Approved">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Approved)</label>
</div>
<br>
<input type="radio" id="verse-summary@(verse.VORder)_review_result_NotChanged" name="verse-summary@(verse.VORder)_review_result" class="radio-notchanged" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged">
}
<label for="verse-summary@(verse.VORder)_review_result_NotChanged">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.NotChanged)</label><br>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedBecauseWrong" name="verse-summary@(verse.VORder)_review_result" class="radio-notcorrect" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong">
<label for="verse-summary@(verse.VORder)_review_result_RejectedBecauseWrong">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedBecauseWrong)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseInformal" name="verse-summary@(verse.VORder)_review_result" class="radio-variant" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseInformal">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseInformal">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseInformal)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseArtificial" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseArtificial">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseArtificial">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseArtificial)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseUnfathomable" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseUnfathomable">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseUnfathomable">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseUnfathomable)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseContainsOwnIdeas" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseContainsOwnIdeas">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseContainsOwnIdeas">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseContainsOwnIdeas)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseHasServeralTypoErrors" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseHasServeralTypoErrors">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseHasServeralTypoErrors">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseHasServeralTypoErrors)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseNotBetter" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseNotBetter">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseNotBetter">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseNotBetter)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseItIsNotAParaphrase" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsNotAParaphrase">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseItIsNotAParaphrase">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsNotAParaphrase)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseItIsWordMeaningOrIncomplete" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsWordMeaningOrIncomplete">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseItIsWordMeaningOrIncomplete">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseItIsWordMeaningOrIncomplete)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseFakeAttribution" name="verse-summary@(verse.VORder)_review_result" class="radio-unnecessary" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseFakeAttribution">
<label for="verse-summary@(verse.VORder)_review_result_RejectedParaphraseBecauseFakeAttribution">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.RejectedParaphraseBecauseFakeAttribution)</label>
</div>
<div class="up-radio-option">
<input type="radio" id="verse-summary@(verse.VORder)_review_result_Rejected" name="verse-summary@(verse.VORder)_review_result" class="radio-rejected" value="@RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected">
<label for="verse-summary@(verse.VORder)_review_result_Rejected">@RMuseum.Services.Implementation.CorrectionReviewResultConvertor.GetString(RMuseum.Models.Ganjoor.CorrectionReviewResult.Rejected)</label>
</div>
<input type="text" id="verse-summary@(verse.VORder)_review_note" name="verse-summary@(verse.VORder)_review_note" value="" size="50" />
</td>
</tr>
}
}
}
@if (!string.IsNullOrEmpty(Model.Correction.Note))
{
<tr>
<td>یادداشت:</td>
<td>
@Model.Correction.Note
</td>
</tr>
}
<tr>
<td colspan=2>
<a role="button" onclick="checkAllCorrect()" class="up-btn up-btn--ghost">همه درست</a>
</td>
</tr>
</table>
}