1905 lines
79 KiB
Plaintext
1905 lines
79 KiB
Plaintext
@page
|
|
@model GanjooRazor.Areas.User.Pages.EditorModel
|
|
@using DNTPersianUtils.Core
|
|
@{
|
|
Layout = "_UserPanelLayout";
|
|
ViewData["Title"] = "ویرایشگر";
|
|
await GanjooRazor.Utils.GanjoorSessionChecker.ApplyPermissionsToViewData(Request, Response, ViewData);
|
|
string color = "#eee";
|
|
}
|
|
<h1>@ViewData["Title"]</h1>
|
|
<script>
|
|
$(document).ready(function () {
|
|
$('[contenteditable]').keypress(function (e) { return e.which != 13; });
|
|
});
|
|
</script>
|
|
<script>
|
|
|
|
function resetVersePositions(verseCount) {
|
|
for (var i = 1; i <= verseCount; i++) {
|
|
var newVersePosition = 'versepostion-' + i.toString();
|
|
document.getElementById(newVersePosition).value = i % 2 == 1 ? 'Right' : 'Left';
|
|
}
|
|
alert('انجام شد.');
|
|
}
|
|
|
|
function tarkib4VersePositions(verseCount) {
|
|
var index = 1;
|
|
for (var i = 1; i <= verseCount; i++) {
|
|
var newVersePosition = 'versepostion-' + i.toString();
|
|
document.getElementById(newVersePosition).value = index == 1 ? 'Right' : index == 2 ? 'Left' : index == 3 ? 'CenteredVerse1' : 'CenteredVerse2';
|
|
index++;
|
|
if(index == 5){
|
|
index = 1;
|
|
}
|
|
}
|
|
alert('انجام شد.');
|
|
}
|
|
|
|
|
|
|
|
function savePoemCorrections(id, verseCount) {
|
|
var verseOrderText = [];
|
|
var verseOrderMarkedForDelete = [];
|
|
var versePositions = [];
|
|
var verseOrderSummaries = [];
|
|
var verseLanguages = [];
|
|
for (var i = 0; i <= verseCount; i++) {
|
|
var oldElementName = '#original-' + i.toString();
|
|
var newElementName = '#id-' + i.toString();
|
|
var checkVIndex = '#marked-for-delete-' + i.toString();
|
|
var oldVersePosition = '#versepostion-original-' + i.toString();
|
|
var newVersePosition = '#versepostion-' + i.toString();
|
|
versePositions.push($(newVersePosition).val());
|
|
var oldVerseLanguage = '#language-old-' + i.toString();
|
|
var newVerseLanguage = '#language-' + i.toString();
|
|
verseLanguages.push($(newVerseLanguage).val());
|
|
var textChanged = $(newElementName).text() != $(oldElementName).text();
|
|
var checkedForDelete = i == 0 ? false : $(checkVIndex).is(":checked");
|
|
var positionChanged = i == 0 ? false : $(newVersePosition).val() != $(oldVersePosition).val();
|
|
var newLang = i == 0 ? '1' : $(newVerseLanguage).val();
|
|
var oldLang = i == 0 ? '1' : $(oldVerseLanguage).text();
|
|
var langChanged = newLang != oldLang;
|
|
if (textChanged || checkedForDelete || positionChanged || langChanged) {
|
|
verseOrderText.push(i.toString() + 'TextSeparator' + $(newElementName).text());
|
|
if ($(checkVIndex).is(":checked")) {
|
|
verseOrderMarkedForDelete.push(i);
|
|
}
|
|
}
|
|
|
|
var oldSummaryName = '#originalsummary-' + i.toString();
|
|
var newSummaryName = '#summary-' + i.toString();
|
|
if ($(oldSummaryName) != null && $(newSummaryName) != null && $(oldSummaryName).text() != $(newSummaryName).text()) {
|
|
verseOrderSummaries.push(i.toString() + 'TextSeparator' + $(newSummaryName).text());
|
|
}
|
|
}
|
|
|
|
|
|
var rhyme_letters = $('#rhyme-letters').val();
|
|
if (rhyme_letters == $('#rhyme-letters-old').text()) {
|
|
rhyme_letters = null;
|
|
}
|
|
|
|
var rhythm_new = $('#rhythm-new').val();
|
|
if (rhythm_new == $('#rhythm-old').text()) {
|
|
rhythm_new = null;
|
|
}
|
|
|
|
var rhythm_new2 = $('#rhythm-new2').val();
|
|
if (rhythm_new2 == $('#rhythm-old2').text()) {
|
|
rhythm_new2 = null;
|
|
}
|
|
|
|
var section_format = $('#poemformat').val();
|
|
if (section_format == $('#poemformat-old').text()) {
|
|
section_format = null;
|
|
}
|
|
|
|
if (verseOrderText.length == 0 && verseOrderSummaries.length == 0) {
|
|
if (rhythm_new == null && rhythm_new2 == null && rhyme_letters == null && section_format == null) {
|
|
alert('شما هیچ تغییری در اطلاعات ندادهاید!');
|
|
return;
|
|
}
|
|
}
|
|
|
|
$('#savecorrections').hide();
|
|
$('#saving').text('در حال ذخیره ...');
|
|
|
|
var pcs = {};
|
|
pcs.poemid = id;
|
|
pcs.verseOrderText = verseOrderText;
|
|
pcs.verseOrderMarkedForDelete = verseOrderMarkedForDelete;
|
|
pcs.versePositions = versePositions;
|
|
pcs.rhythm = rhythm_new;
|
|
pcs.rhythm2 = rhythm_new2;
|
|
pcs.rhyme = rhyme_letters;
|
|
pcs.format = section_format;
|
|
pcs.verseOrderSummaries = verseOrderSummaries;
|
|
pcs.verseLanguages = verseLanguages;
|
|
pcs.note = $('#note').val();
|
|
pcs.hideMyName = $('#hide-my-name').is(":checked");
|
|
|
|
var url = '?handler=SendPoemCorrections';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: JSON.stringify(pcs),
|
|
contentType: "application/json; charset=utf-8",
|
|
dataType: "json",
|
|
success: function () {
|
|
location.reload(true);
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
$('#savecorrections').show();
|
|
$('#saving').text('');
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
|
|
function computePoemRhyme(poemId, elementId) {
|
|
$.ajax({
|
|
type: "GET",
|
|
url: '?Handler=ComputeRhyme',
|
|
data: {
|
|
id: poemId
|
|
},
|
|
error: function () {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
},
|
|
success: function (rhyme) {
|
|
$(elementId).val(rhyme);
|
|
return false;
|
|
},
|
|
});
|
|
}
|
|
|
|
function deletePoemCorrections(id) {
|
|
if (!confirm('آیا از حذف تغییرات پیشنهادی اطمینان دارید؟'))
|
|
return;
|
|
|
|
$('#deletecorrections').hide();
|
|
$('#saving').text('در حال ذخیره ...');
|
|
|
|
var url = '?handler=DeletePoemCorrections';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
poemid: id,
|
|
},
|
|
error: function () {
|
|
alert('خطا رخ داد.')
|
|
},
|
|
success: function () {
|
|
location.reload(true);
|
|
},
|
|
|
|
});
|
|
}
|
|
|
|
function savemeta(id) {
|
|
$('#saving').text('در حال ذخیره ...');
|
|
|
|
var url = '?handler=SaveMeta';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
poemid: id,
|
|
noindex: $('#chk_noindex').is(":checked"),
|
|
redirectfromurl: $('#redirect_from_url').val(),
|
|
mixedmodeorder: $('#mixed_mode_order').val()
|
|
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
},
|
|
success: function () {
|
|
location.reload(true);
|
|
},
|
|
|
|
});
|
|
}
|
|
|
|
|
|
|
|
function internalEditorcompare(id, originalPrefix, editedPrefix, comparePrefix) {
|
|
var a = document.getElementById(originalPrefix + id.toString());
|
|
var b = document.getElementById(editedPrefix + id.toString());
|
|
var result = document.getElementById(comparePrefix + id.toString());
|
|
var diff = JsDiff.diffChars(a.textContent, b.textContent);
|
|
var fragment = document.createDocumentFragment();
|
|
for (var i = 0; i < diff.length; i++) {
|
|
|
|
if (diff[i].added && diff[i + 1] && diff[i + 1].removed) {
|
|
var swap = diff[i];
|
|
diff[i] = diff[i + 1];
|
|
diff[i + 1] = swap;
|
|
}
|
|
|
|
var node;
|
|
if (diff[i].removed) {
|
|
node = document.createElement('del');
|
|
node.style.color = 'red';
|
|
node.appendChild(document.createTextNode(diff[i].value));
|
|
} else if (diff[i].added) {
|
|
node = document.createElement('span');
|
|
node.style.color = 'white';
|
|
node.style.backgroundColor = 'green';
|
|
node.appendChild(document.createTextNode(diff[i].value));
|
|
} else {
|
|
node = document.createTextNode(diff[i].value);
|
|
}
|
|
fragment.appendChild(node);
|
|
}
|
|
|
|
result.textContent = '';
|
|
result.appendChild(fragment);
|
|
}
|
|
|
|
function editorcompare(id) {
|
|
internalEditorcompare(id, 'original-', 'id-', 'compare-');
|
|
}
|
|
|
|
function summarycompare(id) {
|
|
internalEditorcompare(id, 'originalsummary-', 'summary-', 'comparesummary-');
|
|
}
|
|
|
|
function breakPoem(poemId, vOrder, vText) {
|
|
if (!confirm(vText))
|
|
return;
|
|
$('#breakpoem-' + String(vOrder)).hide();
|
|
|
|
var url = '?handler=BreakPoem';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
poemId: poemId,
|
|
vOrder: vOrder
|
|
},
|
|
success: function (id) {
|
|
if (String(id) == '-1') {
|
|
alert('کار شکستن شعر شروع شد.');
|
|
return;
|
|
}
|
|
location.href = '/?p=' + String(id);
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
$('#breakpoem-' + String(vOrder)).show();
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
function updateRelatedSections(meterId, rhymeletters) {
|
|
var url = '?handler=UpdateRelatedSections';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
meterId: meterId,
|
|
rhyme: rhymeletters,
|
|
},
|
|
success: function () {
|
|
alert('انجام شد.');
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
function secondR() {
|
|
const secondtrs = document.querySelectorAll('#secondr1, #secondr2, #secondr3, #secondr4, #secondr5, #secondr6');
|
|
secondtrs.forEach(function (secondtr) {
|
|
secondtr.removeAttribute("style");
|
|
});
|
|
|
|
document.getElementById('secondr-btn').style.display = 'none';
|
|
}
|
|
|
|
function regenerateSections(id) {
|
|
if (!confirm('آیا از قطعهبندی مجدد اطمینان دارید؟'))
|
|
return;
|
|
|
|
if (!confirm('قطعهبندی مجدد باعث حذف اطلاعات وزنها میشود. آیا اطمینان دارید؟'))
|
|
return;
|
|
|
|
|
|
|
|
var url = '?handler=RegeneratePoemSections';
|
|
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
id: id,
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
},
|
|
success: function () {
|
|
alert('انجام شد.');
|
|
},
|
|
|
|
});
|
|
}
|
|
|
|
|
|
function newGeoDateTag(poemId) {
|
|
var url = '?handler=NewGeoDateTag';
|
|
var locationId = $('#location').val();
|
|
var year = $('#year').val();
|
|
var month = $('#month').val()
|
|
var day = $('#day').val()
|
|
$.ajax({
|
|
type: "POST",
|
|
url: url,
|
|
data: {
|
|
poemId: poemId,
|
|
locationId: locationId,
|
|
year: year,
|
|
month: month,
|
|
day: day,
|
|
verifiedDate: $("#verifiedDate").is(':checked'),
|
|
ignoreInCategory: $("#ignoreInCategory").is(':checked'),
|
|
|
|
},
|
|
success: function () {
|
|
location.reload();
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
function deletTag(tagId) {
|
|
if (!confirm('آیا از حذف این برچسب اطمینان دارید؟')) {
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
type: "DELETE",
|
|
url: '?handler=GeoDateTag',
|
|
data: {
|
|
id: tagId,
|
|
},
|
|
success: function () {
|
|
alert('انجام شد.');
|
|
location.reload();
|
|
},
|
|
error: function (e) {
|
|
if (e.responseText == null)
|
|
alert(e);
|
|
else
|
|
alert(e.responseText);
|
|
}
|
|
|
|
});
|
|
}
|
|
|
|
</script>
|
|
@if (!string.IsNullOrEmpty(Model.FatalError))
|
|
{
|
|
<p>@Model.FatalError</p>
|
|
}
|
|
else
|
|
{
|
|
|
|
<p>لطفاً در ویرایش متن به <a href="https://blog.ganjoor.net/1400/05/23/notes-for-suggesting-corrections/" target="_blank">این نکات</a> توجه فرمایید.</p>
|
|
<p><span class="red-color">جدید:</span> در مورد رسمالخط پیشنهادی گنجور <a href="https://blog.ganjoor.net/1402/12/11/dastoor-e-khat/" target="_blank">اینجا</a> را ببینید.</p>
|
|
<p><a role="button" target="_blank" href="@Model.PageInformation.FullUrl" class="actionlink">@Model.PageInformation.FullTitle</a></p>
|
|
|
|
|
|
|
|
if (Model.MyLastEdit != null)
|
|
{
|
|
<table>
|
|
<tr>
|
|
<td colspan="2">ویرایشهای بررسی نشدهٔ من</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>متن اولیه</td>
|
|
<td>تغییرات من</td>
|
|
</tr>
|
|
|
|
@if (Model.MyLastEdit.Title != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات عنوان
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color" id="title-lastedit-original">@Model.MyLastEdit.OriginalTitle</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color" id="title-lastedit-edited">@Model.MyLastEdit.Title</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<p id="title-lastedit-compare">@Model.MyLastEdit.OriginalTitle</p>
|
|
<script>
|
|
$(document).ready(function () {
|
|
compareCorrectionBlocks('title-lastedit-original', 'title-lastedit-edited', 'title-lastedit-compare');
|
|
});
|
|
</script>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.Rhythm != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات وزن
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color">@Model.MyLastEdit.OriginalRhythm</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color">@Model.MyLastEdit.Rhythm</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.Rhythm2 != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات وزن دوم
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color">@Model.MyLastEdit.OriginalRhythm2</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color">@Model.MyLastEdit.Rhythm2</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.RhymeLetters != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات قافیه
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color">@Model.RhymeLetters</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color">@Model.MyLastEdit.RhymeLetters</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.PoemFormat != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات قالب شعری
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color"> @RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString(Model.MyLastEdit.OriginalPoemFormat)</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color"> @RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString(Model.MyLastEdit.PoemFormat)</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.PoemSummary != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">خلاصهٔ پیشنهادی من</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color" id="summary-lastedit-original">@Model.MyLastEdit.OriginalPoemSummary</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color" id="summary-lastedit-edited">@Model.MyLastEdit.PoemSummary</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<p id="summary-lastedit-compare">@Model.MyLastEdit.OriginalPoemSummary</p>
|
|
<script>
|
|
$(document).ready(function () {
|
|
compareCorrectionBlocks('summary-lastedit-original', 'summary-lastedit-edited', 'summary-lastedit-compare');
|
|
});
|
|
</script>
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Length > 0)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
تغییرات متن
|
|
</td>
|
|
</tr>
|
|
@foreach (var verse in Model.MyLastEdit.VerseOrderText)
|
|
{
|
|
@if (verse.MarkForDelete)
|
|
{
|
|
<tr>
|
|
<td colspan="2">@verse.OriginalText</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p>@verse.OriginalText</p>
|
|
</td>
|
|
<td>
|
|
<p class="red-color">باید حذف شود</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
else
|
|
{
|
|
@if (verse.VersePosition != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">@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>
|
|
}
|
|
@if (verse.Text != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">@verse.OriginalText</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color" id="verse@verse.Id-lastedit-original">@verse.OriginalText</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color" id="verse@verse.Id-lastedit-edited">@verse.Text</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="2">
|
|
<p id="verse@verse.Id-lastedit-compare">@verse.OriginalText</p>
|
|
<script>
|
|
$(document).ready(function () {
|
|
compareCorrectionBlocks('verse@verse.Id-lastedit-original', 'verse@verse.Id-lastedit-edited', 'verse@verse.Id-lastedit-compare');
|
|
});
|
|
</script>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
@if (verse.LanguageId != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">@verse.OriginalText</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
@if (verse.OriginalLanguageId == null)
|
|
{
|
|
<p class="red-color">زبان: فارسی</p>
|
|
}
|
|
else
|
|
{
|
|
<p class="red-color">زبان: @Model.Languages.Where(l => l.Id == verse.OriginalLanguageId).Single().Name</p>
|
|
}
|
|
|
|
</td>
|
|
<td>
|
|
<p class="green-color">@Model.Languages.Where(l => l.Id == verse.LanguageId).Single().Name</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
@if (verse.CoupletSummary != null)
|
|
{
|
|
<tr>
|
|
<td colspan="2">
|
|
<p>معنی @(verse.OriginalText + " ...")</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color" id="verse-summary@verse.Id-lastedit-original">@verse.OriginalCoupletSummary</p>
|
|
</td>
|
|
<td>
|
|
<p class="green-color" id="verse-summary@verse.Id-lastedit-edited">@verse.CoupletSummary</p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="2">
|
|
<p id="verse-summary@verse.Id-lastedit-compare">@verse.OriginalText</p>
|
|
<script>
|
|
$(document).ready(function () {
|
|
compareCorrectionBlocks('verse-summary@verse.Id-lastedit-original', 'verse-summary@verse.Id-lastedit-edited', 'verse-summary@verse.Id-lastedit-compare');
|
|
});
|
|
</script>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
}
|
|
@if (!string.IsNullOrEmpty(Model.MyLastEdit.Note))
|
|
{
|
|
<tr>
|
|
<td>یادداشت:</td>
|
|
<td>
|
|
@Model.MyLastEdit.Note
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
<tr>
|
|
<td colspan="2" class="td-button-container">
|
|
<a role="button" id="deletecorrections" class="editor-button background-red" onclick="deletePoemCorrections(@Model.PageInformation.Poem.Id)">انصراف و حذف این ویرایش</a>
|
|
</td>
|
|
</tr>
|
|
|
|
</table>
|
|
}
|
|
|
|
<table>
|
|
<tr>
|
|
<td><a href="/User/PoemCorrectionsHistory?id=@Model.PageInformation.Id" role="button" class="pagebutton" target="_blank">سوابق ویرایش</a></td>
|
|
</tr>
|
|
@if (Model.PageInformation.Poem.Previous != null)
|
|
{
|
|
<tr>
|
|
<td>
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<a href="/User/Editor?admin=1&id=@Model.PageInformation.Poem.Previous.Id" role="button" class="pagebutton">ویرایش شعر قبل</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/User/Editor?id=@Model.PageInformation.Poem.Previous.Id" role="button" class="pagebutton">ویرایش شعر قبل</a>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.PageInformation.Poem.Next != null)
|
|
{
|
|
<tr>
|
|
<td>
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<a href="/User/Editor?admin=1&id=@Model.PageInformation.Poem.Next.Id" role="button" class="pagebutton">ویرایش شعر بعد</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/User/Editor?id=@Model.PageInformation.Poem.Next.Id" role="button" class="pagebutton">ویرایش شعر بعد</a>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.CanAssignRhythms)
|
|
{
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#rhythms-section" class="editor-button background-gray">لغزش به بخش وزن</a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
else
|
|
{
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#poem-sections" class="editor-button background-gray">لغزش به بخش قطعات</a>
|
|
</td>
|
|
</tr>
|
|
|
|
}
|
|
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#summaries" class="editor-button background-gray">لغزش به بخش معنی </a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#footer" class="editor-button background-gray">لغزش به پایین صفحه </a>
|
|
</td>
|
|
</tr>
|
|
|
|
@if (Model.CanEdit && !Model.ShowAdminOps)
|
|
{
|
|
<tr>
|
|
<td><a role="button" href="/User/Editor?id=@Model.PageInformation.Id&admin=1" class="pagebutton">امکانات مدیریتی</a></td>
|
|
</tr>
|
|
}
|
|
@if (Model.TextSourceImage != null)
|
|
{
|
|
<tr>
|
|
<td>
|
|
<p><strong>منبع کاغذی:</strong></p>
|
|
<p>(متن پیشنهادی نمیبایست از نسخهٔ متفاوتی باشد)</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<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>
|
|
}
|
|
<tr>
|
|
<td>
|
|
<p><strong>ویرایش متن:</strong></p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
عنوان فعلی:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p id="original-0">@Model.PageInformation.Poem.Title</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
عنوان ویراستهٔ من:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.Title != null)
|
|
{
|
|
<div id="id-0" name="id-0" contenteditable="true" class="background-white">@Model.MyLastEdit.Title</div>
|
|
<script>
|
|
$(document).ready(function () {
|
|
editorcompare(0);
|
|
});
|
|
document.getElementById("id-0").addEventListener("input", function () {
|
|
editorcompare(0)
|
|
}, false);
|
|
</script>
|
|
}
|
|
else
|
|
{
|
|
<div type="text" id="id-0" name="id-0" contenteditable="true" class="background-white">@Model.PageInformation.Poem.Title</div>
|
|
<script>
|
|
document.getElementById("id-0").addEventListener("input", function () {
|
|
editorcompare(0)
|
|
}, false);
|
|
</script>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
تغییرات:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p id="compare-0">@Model.PageInformation.Poem.Title</p>
|
|
</td>
|
|
</tr>
|
|
@foreach (var verse in Model.PageInformation.Poem.Verses)
|
|
{
|
|
if (color == "#eee")
|
|
{
|
|
color = "#ddd";
|
|
}
|
|
else
|
|
{
|
|
color = "#eee";
|
|
}
|
|
<tr id="tr-@verse.VOrder" style="background-color:@color">
|
|
<td>
|
|
بیت @Model.GetVerseCoupletNumber(verse).ToPersianNumbers()
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
ترتیب مصرع یا خط از ابتدا: @verse.VOrder.ToPersianNumbers()
|
|
</td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
متن فعلی:
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
<p id="original-@($"{verse.VOrder}")">@verse.Text</p>
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
ویراستهٔ من:
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder && !string.IsNullOrEmpty(v.Text)).Any())
|
|
{
|
|
<div id="id-@($"{verse.VOrder}")" name="name-@($"{verse.VOrder}")" contenteditable="true" class="background-white">@Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder).First().Text</div>
|
|
|
|
|
|
<script>
|
|
document.getElementById("id-@($"{verse.VOrder}")").addEventListener("input", function () {
|
|
editorcompare(@verse.VOrder)
|
|
}, false);
|
|
$(document).ready(function () {
|
|
editorcompare(@verse.VOrder);
|
|
});
|
|
</script>
|
|
}
|
|
else
|
|
{
|
|
<div id="id-@($"{verse.VOrder}")" name="name-@($"{verse.VOrder}")" contenteditable="true" class="background-white">@verse.Text</div>
|
|
<script>
|
|
document.getElementById("id-@($"{verse.VOrder}")").addEventListener("input", function () {
|
|
editorcompare(@verse.VOrder)
|
|
}, false);
|
|
</script>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
تغییرات:
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
<p id="compare-@($"{verse.VOrder}")">@verse.Text</p>
|
|
</td>
|
|
</tr>
|
|
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
نوع
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
|
|
<select id="versepostion-@($"{verse.VOrder}")" name="versepostion-@($"{verse.VOrder}")">
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder && v.VersePosition != null).Any())
|
|
{
|
|
@foreach (var verseposition in RMuseum.Models.Ganjoor.VersePositionHelper.VersePositions)
|
|
if (verseposition.VersePosition == Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder).First().VersePosition)
|
|
{
|
|
<option value="@verseposition.VersePosition" selected>@verseposition.Text</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@verseposition.VersePosition">@verseposition.Text</option>
|
|
}
|
|
}
|
|
else
|
|
{
|
|
@foreach (var verseposition in RMuseum.Models.Ganjoor.VersePositionHelper.VersePositions)
|
|
if (verseposition.VersePosition == verse.VersePosition)
|
|
{
|
|
<option value="@verseposition.VersePosition" selected>@verseposition.Text</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@verseposition.VersePosition">@verseposition.Text</option>
|
|
}
|
|
}
|
|
</select>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder).Any())
|
|
{
|
|
<input type="hidden" id="versepostion-original-@($"{verse.VOrder}")" name="versepostion-original-@($"{verse.VOrder}")" value="@Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder).First().VersePosition" />
|
|
}
|
|
else
|
|
{
|
|
<input type="hidden" id="versepostion-original-@($"{verse.VOrder}")" name="versepostion-original-@($"{verse.VOrder}")" value="@verse.VersePosition" />
|
|
}
|
|
|
|
</td>
|
|
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
زبان فعلی:
|
|
</td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
@if (verse.LanguageId == null)
|
|
{
|
|
@("فارسی")
|
|
<div id="language-old-@verse.VOrder" class="hidden-recitation">1</div>
|
|
}
|
|
else
|
|
{
|
|
@Model.Languages.Where(l => l.Id == verse.LanguageId).Single().Name
|
|
<div id="language-old-@verse.VOrder" class="hidden-recitation">@Model.Languages.Where(l => l.Id == verse.LanguageId).Single().Id</div>
|
|
}
|
|
</td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
<label for="language-@verse.VOrder">زبان:</label>
|
|
<br />
|
|
<select id="language-@verse.VOrder">
|
|
@foreach (var lang in Model.Languages)
|
|
{
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder && v.LanguageId == lang.Id).Any())
|
|
{
|
|
<option value="@lang.Id" selected>@lang.Name</option>
|
|
}
|
|
else if (verse.LanguageId == null && lang.Id == 1)
|
|
{
|
|
<option value="1" selected>فارسی</option>
|
|
}
|
|
else if (verse.LanguageId == lang.Id)
|
|
{
|
|
<option value="@lang.Id" selected>@lang.Name</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@lang.Id">@lang.Name</option>
|
|
}
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
|
|
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == verse.VOrder && v.MarkForDelete).Any())
|
|
{
|
|
<input type="checkbox" name="marked-for-delete-@verse.VOrder" id="marked-for-delete-@verse.VOrder" checked />
|
|
<label for="marked-for-delete-@verse.VOrder">باید حذف شود</label>
|
|
}
|
|
else
|
|
{
|
|
<input type="checkbox" name="marked-for-delete-@verse.VOrder" id="marked-for-delete-@verse.VOrder" />
|
|
<label for="marked-for-delete-@verse.VOrder">باید حذف شود</label>
|
|
}
|
|
</td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td class="td-button-container">
|
|
<a role="button" href="#savecorrections" class="editor-button background-gray">لغزش به دکمهٔ ذخیره</a>
|
|
</td>
|
|
</tr>
|
|
|
|
@if (Model.ShowAdminOps && verse.VOrder > 1 && verse.VersePosition != RMuseum.Models.Ganjoor.VersePosition.Left)
|
|
{
|
|
<tr style="background-color:@color">
|
|
<td class="td-button-container">
|
|
<a role="button" id="breakpoem-@verse.VOrder" class="editor-button background-red" onclick="breakPoem(@Model.PageInformation.Poem.Id, @verse.VOrder, '@verse.Text')">شکستن از اینجا</a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
}
|
|
|
|
@if (!Model.CanAssignRhythms)
|
|
{
|
|
<tr>
|
|
<td>
|
|
<p class="red-color">این مورد شامل بیش از یک قطعه شعر یا دارای پاراگراف نثر است و امکان انتساب وزن و قالب شعری به آن و یا تعیین حروف قافیهٔ آن وجود ندارد.</p>
|
|
</td>
|
|
</tr>
|
|
}
|
|
else
|
|
{
|
|
|
|
<tr id="rhythms-section">
|
|
<td>
|
|
وزن فعلی:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p id="rhythm-old">@(Model.GanjoorMetre1 == null ? "" : Model.GanjoorMetre1.Rhythm)</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p class="red-color">توجه داشته باشید که کارکرد برچسبگذاری اشعار در گنجور یافتن اشعار هموزن است. از این جهت از پیشنهاد صورتهای سلیقهای و متفاوت یک وزن خودداری کنید تا این قابلیت مختل نشود. <a href="https://ganjoor.net/faq?id=14">این نکته</a> را هم مد نظر داشته باشید.</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
وزن ویراستهٔ من:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="select-search">جستجوی وزن:</label><br />
|
|
<input type="text" id="select-search" value="" oninput="doSearchInRhythmsCombo('select-search', 'rhythm-new')" list="inputRhythms" autocomplete="off" size="50" />
|
|
<datalist id="inputRhythms">
|
|
@if (Model.RhythmsByVerseCount != null)
|
|
@foreach (var rhythm in Model.RhythmsByVerseCount)
|
|
{
|
|
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
|
}
|
|
</datalist>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<label for="rhythm-new">وزن انتخاب شده:</label>
|
|
<br />
|
|
<select id="rhythm-new" name="rhythm-new">
|
|
@foreach (var rhythm in Model.RhythmsAlphabetically)
|
|
{
|
|
if (Model.MyLastEdit != null && Model.MyLastEdit.Rhythm == rhythm.Rhythm)
|
|
{
|
|
<option value="@rhythm.Rhythm" selected>@rhythm.Rhythm</option>
|
|
}
|
|
else
|
|
{
|
|
if (Model.GanjoorMetre1 != null && Model.GanjoorMetre1.Rhythm == rhythm.Rhythm)
|
|
{
|
|
<option value="@rhythm.Rhythm" selected>@rhythm.Rhythm</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
</select>
|
|
<a role="button" onclick="resetRhythm('rhythm-new')" class="pagebutton">پاک کردن وزن</a>
|
|
<br />
|
|
<script>
|
|
function newRhythm() {
|
|
var rhythm = prompt("پیشنهاد وزن جدید", "");
|
|
if (rhythm != null) {
|
|
var select = document.getElementById('rhythm-new');
|
|
var options = select.options;
|
|
for (let i = 0; i < options.length; i++) {
|
|
if (options[i].value == rhythm) {
|
|
alert('وزن پیشنهادی تکراری است.');
|
|
return;
|
|
}
|
|
}
|
|
var opt = document.createElement('option');
|
|
opt.value = rhythm;
|
|
opt.innerHTML = rhythm;
|
|
select.appendChild(opt);
|
|
|
|
var opt2 = document.createElement('option');
|
|
opt2.value = rhythm;
|
|
opt2.innerHTML = rhythm;
|
|
document.getElementById('rhythm-new2').appendChild(opt2);
|
|
|
|
alert('وزن پیشنهادی به انتهای لیست وزنها اضافه شده. لطفاً از لیست آن را انتخاب کنید.');
|
|
}
|
|
}
|
|
</script>
|
|
<a role="button" onclick="newRhythm()" class="pagebutton">پیشنهاد وزن جدید</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
حروف قافیهٔ فعلی:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p id="rhyme-letters-old">@Model.RhymeLetters</p>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
حروف قافیهٔ ویراستهٔ من (بدون فاصله و حرکات):
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
|
|
@if (Model.MyLastEdit != null && !string.IsNullOrEmpty(Model.MyLastEdit.RhymeLetters))
|
|
{
|
|
<input type="text" id="rhyme-letters" name="rhyme-letters" value="@Model.MyLastEdit.RhymeLetters" size="50" />
|
|
}
|
|
else
|
|
{
|
|
<input type="text" id="rhyme-letters" name="rhyme-letters" value="@Model.RhymeLetters" size="50" />
|
|
}
|
|
<a role="button" onclick="computePoemRhyme(@Model.PageInformation.Id, '#rhyme-letters')" class="pagebutton">محاسبه</a>
|
|
|
|
</td>
|
|
</tr>
|
|
|
|
|
|
|
|
<tr id="secondr-btn">
|
|
<td>
|
|
<a role="button" onclick="secondR()" class="pagebutton">این شعر دو وزنی است</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr id="secondr1" style="display:none">
|
|
<td>
|
|
وزن دوم (شعرهای چندوزنی):
|
|
</td>
|
|
|
|
</tr>
|
|
<tr id="secondr2" style="display:none">
|
|
<td>
|
|
<p class="red-color">تعدادی کمی از شعرها دو وزنی هستند.</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="secondr3" style="display:none">
|
|
<td>
|
|
<p id="rhythm-old2">@(Model.GanjoorMetre2 == null ? "" : Model.GanjoorMetre2.Rhythm)</p>
|
|
</td>
|
|
</tr>
|
|
<tr id="secondr4" style="display:none">
|
|
<td>
|
|
وزن ویراستهٔ من (دوم):
|
|
</td>
|
|
</tr>
|
|
<tr id="secondr5" style="display:none">
|
|
<td>
|
|
<label for="select-search2">جستجوی وزن (دوم):</label><br />
|
|
<input type="text" id="select-search2" value="" oninput="doSearchInRhythmsCombo('select-search2', 'rhythm-new2')" list="inputRhythms" autocomplete="off" size="50" />
|
|
<datalist id="inputRhythms2">
|
|
@if (Model.RhythmsByVerseCount != null)
|
|
@foreach (var rhythm in Model.RhythmsByVerseCount)
|
|
{
|
|
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
|
}
|
|
</datalist>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr id="secondr6" style="display:none">
|
|
<td>
|
|
<label for="rhythm-new2">وزن (دوم) انتخاب شده:</label><br /><select id="rhythm-new2" name="rhythm-new2">
|
|
@foreach (var rhythm in Model.RhythmsAlphabetically)
|
|
{
|
|
if (Model.MyLastEdit != null && Model.MyLastEdit.Rhythm2 == rhythm.Rhythm)
|
|
{
|
|
<option value="@rhythm.Rhythm" selected>@rhythm.Rhythm</option>
|
|
}
|
|
else
|
|
{
|
|
if (Model.GanjoorMetre2 != null && Model.GanjoorMetre2.Rhythm == rhythm.Rhythm)
|
|
{
|
|
<option value="@rhythm.Rhythm" selected>@rhythm.Rhythm</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
</select>
|
|
<a role="button" onclick="resetRhythm('rhythm-new2')" class="pagebutton">پاک کردن وزن</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
قالب شعری فعلی:
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString(Model.PoemFormat)
|
|
<div id="poemformat-old" class="hidden-recitation">@Model.PoemFormat</div>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
<label for="">قالب شعری:</label>
|
|
<br />
|
|
<select id="poemformat">
|
|
@foreach (var poemFormat in System.Enum.GetValues(typeof(RMuseum.Models.Ganjoor.GanjoorPoemFormat)))
|
|
{
|
|
@if (Model.MyLastEdit != null && (Model.MyLastEdit.PoemFormat == (RMuseum.Models.Ganjoor.GanjoorPoemFormat)poemFormat))
|
|
{
|
|
<option value="@poemFormat" selected>@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString((RMuseum.Models.Ganjoor.GanjoorPoemFormat)poemFormat)</option>
|
|
}
|
|
else if (Model.PoemFormat == (RMuseum.Models.Ganjoor.GanjoorPoemFormat)poemFormat)
|
|
{
|
|
<option value="@poemFormat" selected>@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString((RMuseum.Models.Ganjoor.GanjoorPoemFormat)poemFormat)</option>
|
|
}
|
|
else
|
|
{
|
|
<option value="@poemFormat">@RMuseum.Services.Implementation.GanjoorPoemFormatConvertor.GetString((RMuseum.Models.Ganjoor.GanjoorPoemFormat)poemFormat)</option>
|
|
}
|
|
|
|
}
|
|
</select>
|
|
</td>
|
|
</tr>
|
|
|
|
}
|
|
|
|
|
|
<tr>
|
|
<td>
|
|
توضیح این ویرایش:
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
@if (Model.MyLastEdit != null && !string.IsNullOrEmpty(Model.MyLastEdit.Note))
|
|
{
|
|
<input type="text" id="note" name="note" value="@Model.MyLastEdit.Note" size="50" />
|
|
}
|
|
else
|
|
{
|
|
<input type="text" id="note" name="note" value="" size="50" />
|
|
}
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td id="summaries" style="background-color:black; color: white">خلاصه و معنی</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="background-color:#ffffe1">
|
|
<p>توجه فرمایید که هدف از این بخش، تفسیر متن اشعار <span style="color:red">نیست</span>. انتظار میرود در این بخش برای متون و اشعاری مثل داستانها خلاصه یا لب مطلب را بنویسید (برای بعضی از انواع اشعار مثل غزلها ممکن است خلاصهٔ کلی معنی نداشته باشد). برای خطوط یا ابیات نیز برگردان متن به نثر قابل فهم امروزی نوشته شود (لازم نیست برای همهٔ خطوط برگردان نثر نوشته شود). برای تفسیر یا درج عقاید شخصی خود راجع به اشعار از حاشیهها استفاده کنید.</p>
|
|
<p>متن باید خلاصه، به فارسی نوشتاری رسمی (غیرمحاورهای)، خالی از لغات نامأنوس (زبان همهکس فهم) و بدون غلط املایی و تایپی باشد.</p>
|
|
<p>
|
|
اگر متن موجود به اندازهٔ کافی خوب باشد ممکن است متن خیلی متفاوت جایگزین تأیید نشود.
|
|
</p>
|
|
<p>
|
|
نام و مشخصات نویسندهٔ متن در صفحهٔ شعر نمایش داده نمیشود اما در تاریخچهٔ تغییرات نگهداری میشود.
|
|
</p>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="background-color:black; color: white">خلاصه یا مفهوم کلی شعر یا متن:</td>
|
|
</tr>
|
|
<tr>
|
|
<td style="background-color:#ffffe1">
|
|
اگر متن یا شعر یک مفهوم و خلاصهٔ کلی ندارد (مثل خیلی از غزلیات حافظ) برای آن متن کلی وارد نکنید.
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
<p id="originalsummary-0">@Model.PageInformation.Poem.PoemSummary</p>
|
|
@if (string.IsNullOrEmpty(Model.PageInformation.Poem.PoemSummary))
|
|
{
|
|
<p>هنوز متنی برای خلاصهٔ کلی نوشته نشده است.</p>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
خلاصهٔ ویراستهٔ من (به زبان غیرمحاورهای و همهکس فهم):
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.PoemSummary != null)
|
|
{
|
|
<div id="summary-0" name="summary-0" contenteditable="true" class="background-white">@Model.MyLastEdit.PoemSummary</div>
|
|
|
|
|
|
<script>
|
|
document.getElementById("summary-0").addEventListener("input", function () {
|
|
summarycompare(0)
|
|
}, false);
|
|
$(document).ready(function () {
|
|
summarycompare(0);
|
|
});
|
|
</script>
|
|
}
|
|
else
|
|
{
|
|
<div id="summary-0" name="summary-0" contenteditable="true" class="background-white">@Model.PageInformation.Poem.PoemSummary</div>
|
|
<script>
|
|
document.getElementById("summary-0").addEventListener("input", function () {
|
|
summarycompare(0)
|
|
}, false);
|
|
</script>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
تغییرات:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<p id="comparesummary-0">@Model.PageInformation.Poem.PoemSummary</p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#savecorrections" class="editor-button background-gray">لغزش به دکمهٔ ذخیره</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="background-color:black; color: white">برگردان خطوط به زبان ساده:</td>
|
|
</tr>
|
|
@for (int verseIndex = 0; verseIndex < Model.PageInformation.Poem.Verses.Length; verseIndex++)
|
|
{
|
|
@if (
|
|
Model.PageInformation.Poem.Verses[verseIndex].VersePosition == RMuseum.Models.Ganjoor.VersePosition.Right
|
|
|| Model.PageInformation.Poem.Verses[verseIndex].VersePosition == RMuseum.Models.Ganjoor.VersePosition.CenteredVerse1
|
|
|| Model.PageInformation.Poem.Verses[verseIndex].VersePosition == RMuseum.Models.Ganjoor.VersePosition.Paragraph
|
|
)
|
|
{
|
|
if (color == "#eee")
|
|
{
|
|
color = "#ddd";
|
|
}
|
|
else
|
|
{
|
|
color = "#eee";
|
|
}
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
@if (Model.PageInformation.Poem.Verses[verseIndex].VersePosition == RMuseum.Models.Ganjoor.VersePosition.Paragraph)
|
|
{
|
|
@Model.PageInformation.Poem.Verses[verseIndex].Text
|
|
}
|
|
else
|
|
{
|
|
<table>
|
|
@for (int nIndex = verseIndex; nIndex < Model.PageInformation.Poem.Verses.Length &&
|
|
|
|
(nIndex == verseIndex
|
|
||
|
|
(
|
|
Model.PageInformation.Poem.Verses[nIndex].VersePosition != RMuseum.Models.Ganjoor.VersePosition.Right
|
|
&& Model.PageInformation.Poem.Verses[nIndex].VersePosition != RMuseum.Models.Ganjoor.VersePosition.CenteredVerse1
|
|
&& Model.PageInformation.Poem.Verses[nIndex].VersePosition != RMuseum.Models.Ganjoor.VersePosition.Paragraph
|
|
))
|
|
; nIndex++)
|
|
{
|
|
<tr>
|
|
<td>@Model.PageInformation.Poem.Verses[nIndex].Text</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
معنای خط یا بیت:
|
|
</td>
|
|
|
|
</tr>
|
|
<tr>
|
|
<td><p><span style="color:red">تذکّر مهم:</span> از این کادر برای نوشتن چیزی جز معنی استفاده <span style="color:red">نکنید</span>.</p></td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
<p id="originalsummary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")">@Model.PageInformation.Poem.Verses[verseIndex].CoupletSummary</p>
|
|
@if (string.IsNullOrEmpty(Model.PageInformation.Poem.Verses[verseIndex].CoupletSummary))
|
|
{
|
|
<p>هنوز متنی برای معنی نوشته نشده است.</p>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
معنای ویراستهٔ من (به زبان غیرمحاورهای و همهکس فهم):
|
|
</td>
|
|
</tr>
|
|
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.VerseOrderText != null && Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == Model.PageInformation.Poem.Verses[verseIndex].VOrder && !string.IsNullOrEmpty(v.CoupletSummary)).Any())
|
|
{
|
|
<div id="summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")" name="summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")" contenteditable="true" class="background-white">@Model.MyLastEdit.VerseOrderText.Where(v => v.VORder == Model.PageInformation.Poem.Verses[verseIndex].VOrder).First().CoupletSummary</div>
|
|
|
|
|
|
<script>
|
|
document.getElementById("summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")").addEventListener("input", function () {
|
|
summarycompare(@Model.PageInformation.Poem.Verses[verseIndex].VOrder)
|
|
}, false);
|
|
$(document).ready(function () {
|
|
summarycompare(@Model.PageInformation.Poem.Verses[verseIndex].VOrder);
|
|
});
|
|
</script>
|
|
}
|
|
else
|
|
{
|
|
<div id="summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")" name="summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")" contenteditable="true" class="background-white">@Model.PageInformation.Poem.Verses[verseIndex].CoupletSummary</div>
|
|
<script>
|
|
document.getElementById("summary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")").addEventListener("input", function () {
|
|
summarycompare(@Model.PageInformation.Poem.Verses[verseIndex].VOrder)
|
|
}, false);
|
|
</script>
|
|
}
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
تغییرات:
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td>
|
|
<p id="comparesummary-@($"{Model.PageInformation.Poem.Verses[verseIndex].VOrder}")">@Model.PageInformation.Poem.Verses[verseIndex].CoupletSummary</p>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#savecorrections" class="editor-button background-gray">لغزش به دکمهٔ ذخیره</a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
}
|
|
|
|
|
|
|
|
@if (Model.PageInformation.Poem.Sections.Count(s => s.SectionType == RMuseum.Models.Ganjoor.PoemSectionType.WholePoem && s.VerseType == RMuseum.Models.Ganjoor.VersePoemSectionType.First) > 1)
|
|
{
|
|
<tr>
|
|
<td id="poem-sections">
|
|
قطعات:
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<table>
|
|
@foreach (var poemSetion in Model.PageInformation.Poem.Sections.Where(s => s.SectionType == RMuseum.Models.Ganjoor.PoemSectionType.WholePoem && s.VerseType == RMuseum.Models.Ganjoor.VersePoemSectionType.First).ToList())
|
|
{
|
|
<tr>
|
|
<td>
|
|
<a href="/User/Section?poemId=@poemSetion.PoemId&index=@poemSetion.Index" role="button" class="pagebutton">
|
|
قطعهٔ @(poemSetion.Number.ToPersianNumbers()):
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
@Html.Raw(poemSetion.HtmlText)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
وزن: @(poemSetion.GanjoorMetre == null ? "تعیین نشده" : poemSetion.GanjoorMetre.Rhythm)
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<hr />
|
|
</td>
|
|
</tr>
|
|
}
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
}
|
|
else
|
|
if (Model.PageInformation.Poem.Sections.Count(s => s.SectionType == RMuseum.Models.Ganjoor.PoemSectionType.WholePoem && s.VerseType == RMuseum.Models.Ganjoor.VersePoemSectionType.First) == 1)
|
|
{
|
|
foreach (var poemSetion in Model.PageInformation.Poem.Sections.Where(s => s.SectionType == RMuseum.Models.Ganjoor.PoemSectionType.WholePoem && s.VerseType == RMuseum.Models.Ganjoor.VersePoemSectionType.First).ToList())
|
|
{
|
|
<tr>
|
|
<td id="poem-sections">
|
|
<a href="/User/Section?poemId=@poemSetion.PoemId&index=@poemSetion.Index" role="button" class="pagebutton">
|
|
شکستن شعر به قطعات مجزا
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
}
|
|
|
|
<tr>
|
|
<td>
|
|
<a href="/User/AllPoemSections?id=@Model.PageInformation.Id" role="button" class="pagebutton">
|
|
همهٔ قطعات شعر
|
|
</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><a role="button" onclick="resetVersePositions(@Model.PageInformation.Poem.Verses.Length)" class="pagebutton">چینش پیشفرض نوع مصرعها</a></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><a role="button" onclick="tarkib4VersePositions(@Model.PageInformation.Poem.Verses.Length)" class="pagebutton">چینش مربعی</a></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><a role="button" href="/User/VerseAdd/?id=@Model.PageInformation.Id" class="pagebutton">اضافه کردن مصرعهای جاافتاده</a></td>
|
|
</tr>
|
|
|
|
|
|
@if (Model.PageInformation.Poem.Previous != null)
|
|
{
|
|
<tr>
|
|
<td>
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<a href="/User/Editor?admin=1&id=@Model.PageInformation.Poem.Previous.Id" role="button" class="pagebutton">ویرایش شعر قبل</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/User/Editor?id=@Model.PageInformation.Poem.Previous.Id" role="button" class="pagebutton">ویرایش شعر قبل</a>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
@if (Model.PageInformation.Poem.Next != null)
|
|
{
|
|
<tr>
|
|
<td>
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<a href="/User/Editor?admin=1&id=@Model.PageInformation.Poem.Next.Id" role="button" class="pagebutton">ویرایش شعر بعد</a>
|
|
}
|
|
else
|
|
{
|
|
<a href="/User/Editor?id=@Model.PageInformation.Poem.Next.Id" role="button" class="pagebutton">ویرایش شعر بعد</a>
|
|
}
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
@if (Model.ShowAdminOps && Model.GanjoorMetre1 != null && !string.IsNullOrEmpty(Model.RhymeLetters))
|
|
{
|
|
<tr>
|
|
<td><a role="button" onclick="updateRelatedSections(@Model.GanjoorMetre1.Id, '@Model.RhymeLetters')" class="pagebutton">بازسازی فهرست اشعار همآهنگ با وزن اول</a></td>
|
|
</tr>
|
|
}
|
|
|
|
@if (Model.ShowAdminOps && Model.GanjoorMetre2 != null && !string.IsNullOrEmpty(Model.RhymeLetters))
|
|
{
|
|
<tr>
|
|
<td><a role="button" onclick="updateRelatedSections(@Model.GanjoorMetre2.Id, '@Model.RhymeLetters')" class="pagebutton">بازسازی فهرست اشعار همآهنگ با وزن دوم</a></td>
|
|
</tr>
|
|
}
|
|
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<tr>
|
|
<td><a role="button" onclick="regenerateSections(@Model.PageInformation.Poem.Id)" class="pagebutton">قطعهبندی مجدد</a></td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td>برای حذف شعر از قسمت مدیریت بخش اقدام کنید.</td>
|
|
</tr>
|
|
}
|
|
|
|
@if (Model.CanEdit && !Model.ShowAdminOps)
|
|
{
|
|
<tr>
|
|
<td><a role="button" href="/User/Editor?id=@Model.PageInformation.Id&admin=1" class="pagebutton">امکانات مدیریتی</a></td>
|
|
</tr>
|
|
}
|
|
|
|
<tr>
|
|
<td>
|
|
@if (Model.MyLastEdit != null && Model.MyLastEdit.HideMyName)
|
|
{
|
|
<input type="checkbox" name="hide-my-name" id="hide-my-name" checked />
|
|
}
|
|
else
|
|
{
|
|
<input type="checkbox" name="hide-my-name" id="hide-my-name" />
|
|
}
|
|
<label for="hide-my-name">مشخصات من در تاریخچهٔ ویرایشهای این شعر نمایش داده نشود</label>
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" id="savecorrections" class="editor-button background-green" onclick="savePoemCorrections(@Model.PageInformation.Poem.Id, @Model.PageInformation.Poem.Verses.Length)">ذخیره</a>
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td><p id="saving"> </p></td>
|
|
</tr>
|
|
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<tr>
|
|
<td>برچسبهای زمان و مکان</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<table>
|
|
<tr>
|
|
<th>مکان</th>
|
|
<th>سال</th>
|
|
<th>ماه</th>
|
|
<th>روز</th>
|
|
<th>تاریخ مستند</th>
|
|
<th>مختص شعر</th>
|
|
<th>#</th>
|
|
</tr>
|
|
@foreach (var tag in Model.PoemGeoDateTags)
|
|
{
|
|
<tr id="tag-@tag.Id">
|
|
<td>@($"{(tag.Location == null ? "" : tag.Location.Name)}")</td>
|
|
<td>@tag.LunarYear</td>
|
|
<td>
|
|
@{
|
|
switch (tag.LunarMonth)
|
|
{
|
|
case 1:
|
|
@("محرم")
|
|
;
|
|
break;
|
|
case 2:
|
|
@("صفر")
|
|
;
|
|
break;
|
|
case 3:
|
|
@("ربیعالاول")
|
|
;
|
|
break;
|
|
case 4:
|
|
@("ربیعالثانی")
|
|
;
|
|
break;
|
|
case 5:
|
|
@("جمادیالاول")
|
|
;
|
|
break;
|
|
case 6:
|
|
@("جمادیالثانی")
|
|
;
|
|
break;
|
|
case 7:
|
|
@("رجب")
|
|
;
|
|
break;
|
|
case 8:
|
|
@("شعبان")
|
|
;
|
|
break;
|
|
case 9:
|
|
@("رمضان")
|
|
;
|
|
break;
|
|
case 10:
|
|
@("شوال")
|
|
;
|
|
break;
|
|
case 11:
|
|
@("ذیقعده")
|
|
;
|
|
break;
|
|
case 12:
|
|
@("ذیحجه")
|
|
;
|
|
break;
|
|
}
|
|
}
|
|
</td>
|
|
<td>@tag.LunarDay</td>
|
|
<td>
|
|
@if (tag.VerifiedDate)
|
|
{
|
|
<input type="checkbox" disabled checked />
|
|
}
|
|
else
|
|
{
|
|
<input type="checkbox" disabled />
|
|
}
|
|
|
|
</td>
|
|
<td>
|
|
@if (tag.IgnoreInCategory)
|
|
{
|
|
<input type="checkbox" disabled checked />
|
|
}
|
|
else
|
|
{
|
|
<input type="checkbox" disabled />
|
|
}
|
|
</td>
|
|
<td>
|
|
<a role="button" onclick="deletTag(@tag.Id)" class="actionlink" title="حذف"><i class="noindent-info-button delete-icon"></i></a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
<tr>
|
|
<td>
|
|
<select id="location">
|
|
@{
|
|
foreach (var location in Model.Locations)
|
|
{
|
|
<option value="@location.Id">@location.Name</option>
|
|
}
|
|
}
|
|
</select>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="year" />
|
|
</td>
|
|
<td>
|
|
<select id="month">
|
|
<option value="0">هیچکدام</option>
|
|
<option value="1">محرم</option>
|
|
<option value="2">صفر</option>
|
|
<option value="3">ربیعالاول</option>
|
|
<option value="4">ربیعالثانی</option>
|
|
<option value="5">جمادیالاول</option>
|
|
<option value="6">جمادیالثانی</option>
|
|
<option value="7">رجب</option>
|
|
<option value="8">شعبان</option>
|
|
<option value="9">رمضان</option>
|
|
<option value="10">شوال</option>
|
|
<option value="11">ذیقعده</option>
|
|
<option value="12">ذیحجه</option>
|
|
</select>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="day" />
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="verifiedDate" />
|
|
|
|
</td>
|
|
<td>
|
|
<input type="checkbox" id="ignoreInCategory" />
|
|
</td>
|
|
<td>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td colspan="7">
|
|
<a role="button" class="pagebutton" onclick="newGeoDateTag(@Model.PageInformation.Id)">برچسب جدید</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<a href="/Admin/Locations" role="button" class="pagebutton">مکانها</a>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
@if (Model.ShowAdminOps)
|
|
{
|
|
<tr>
|
|
<td>
|
|
<table>
|
|
<tr>
|
|
<td colspan="2">ابردادههای اضافه</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<span class="inputlabel">ایندکس نشود</span>
|
|
</td>
|
|
<td>
|
|
@if (Model.PageInformation.NoIndex)
|
|
{
|
|
<input type="checkbox" id="chk_noindex" name="chk_noindex" checked />
|
|
}
|
|
else
|
|
{
|
|
<input type="checkbox" id="chk_noindex" name="chk_noindex" />
|
|
}
|
|
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<span class="inputlabel">از این نشانی (کامل) هم به این صفحه ریدایرکت شود</span>
|
|
</td>
|
|
<td>
|
|
<input style="text-align:left;direction:ltr;" value="@Model.PageInformation.RedirectFromFullUrl" id="redirect_from_url" name="redirect_from_url" />
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td>
|
|
<span class="inputlabel">ترتیب در فهرستها:</span>
|
|
</td>
|
|
<td>
|
|
<input value="@Model.PageInformation.Poem.MixedModeOrder" id="mixed_mode_order" name="mixed_mode_order" />
|
|
</td>
|
|
</tr>
|
|
<tr style="background-color:@color">
|
|
<td class="td-button-container" colspan="2">
|
|
<a role="button" class="editor-button background-green" onclick="savemeta(@Model.PageInformation.Id)">ذخیرهٔ ابردادهها</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
</td>
|
|
</tr>
|
|
}
|
|
|
|
<tr>
|
|
<td class="td-button-container">
|
|
<a role="button" href="#" class="editor-button background-gray">لغزش به بالای صفحه</a>
|
|
</td>
|
|
</tr>
|
|
</table>
|
|
|
|
|
|
|
|
} |