docs: #347 UI for transfering meters
This commit is contained in:
parent
74ffcb4633
commit
726578ff17
120
GanjooRazor/Areas/Admin/Pages/TransferMeter.cshtml
Normal file
120
GanjooRazor/Areas/Admin/Pages/TransferMeter.cshtml
Normal file
@ -0,0 +1,120 @@
|
||||
@page
|
||||
@model GanjooRazor.Areas.Admin.Pages.TransferMeterModel
|
||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
|
||||
@using DNTPersianUtils.Core
|
||||
@{
|
||||
Layout = "_AdminLayout";
|
||||
ViewData["Title"] = "انتقال وزن";
|
||||
}
|
||||
|
||||
<h1>@ViewData["Title"]</h1>
|
||||
|
||||
@if (!string.IsNullOrEmpty(Model.FatalError))
|
||||
{
|
||||
<p>@Model.FatalError</p>
|
||||
}
|
||||
else
|
||||
{
|
||||
<table>
|
||||
|
||||
<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>
|
||||
|
||||
<select id="rhythm-new" name="rhythm-new">
|
||||
@foreach (var rhythm in Model.RhythmsAlphabetically)
|
||||
{
|
||||
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
||||
}
|
||||
</select>
|
||||
<a role="button" onclick="resetRhythm('rhythm-new')" class="pagebutton">پاک کردن وزن</a>
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<tr>
|
||||
<td>
|
||||
وزن مقصد:
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
|
||||
<tr>
|
||||
<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>
|
||||
<td>
|
||||
<label for="rhythm-new2">وزن (دوم) انتخاب شده:</label><br /><select id="rhythm-new2" name="rhythm-new2">
|
||||
@foreach (var rhythm in Model.RhythmsAlphabetically)
|
||||
{
|
||||
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
|
||||
|
||||
}
|
||||
</select>
|
||||
<a role="button" onclick="resetRhythm('rhythm-new2')" 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>
|
||||
</table>
|
||||
}
|
||||
|
||||
99
GanjooRazor/Areas/Admin/Pages/TransferMeter.cshtml.cs
Normal file
99
GanjooRazor/Areas/Admin/Pages/TransferMeter.cshtml.cs
Normal file
@ -0,0 +1,99 @@
|
||||
using GanjooRazor.Utils;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.RazorPages;
|
||||
using Newtonsoft.Json;
|
||||
using RMuseum.Models.Ganjoor;
|
||||
using System.Collections.Generic;
|
||||
using System.Net.Http;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace GanjooRazor.Areas.Admin.Pages
|
||||
{
|
||||
[IgnoreAntiforgeryToken(Order = 1001)]
|
||||
public class TransferMeterModel : PageModel
|
||||
{
|
||||
/// <summary>
|
||||
/// rhythms alphabetically
|
||||
/// </summary>
|
||||
public GanjoorMetre[] RhythmsAlphabetically { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// rhythms by frequency
|
||||
/// </summary>
|
||||
public GanjoorMetre[] RhythmsByVerseCount { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// fatal error
|
||||
/// </summary>
|
||||
public string FatalError { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// can edit
|
||||
/// </summary>
|
||||
public bool CanEdit { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// get
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public async Task<IActionResult> OnGetAsync()
|
||||
{
|
||||
if (string.IsNullOrEmpty(Request.Cookies["Token"]))
|
||||
return Redirect("/");
|
||||
|
||||
FatalError = "";
|
||||
CanEdit = Request.Cookies["CanEdit"] == "True";
|
||||
|
||||
using (HttpClient secureClient = new HttpClient())
|
||||
{
|
||||
if (await GanjoorSessionChecker.PrepareClient(secureClient, Request, Response))
|
||||
{
|
||||
|
||||
var rhythmResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/rhythms?sortOnVerseCount=true");
|
||||
if (!rhythmResponse.IsSuccessStatusCode)
|
||||
{
|
||||
FatalError = JsonConvert.DeserializeObject<string>(await rhythmResponse.Content.ReadAsStringAsync());
|
||||
return Page();
|
||||
}
|
||||
|
||||
RhythmsByVerseCount = JsonConvert.DeserializeObject<GanjoorMetre[]>(await rhythmResponse.Content.ReadAsStringAsync());
|
||||
|
||||
List<GanjoorMetre> rhythmsByVerseCount = new List<GanjoorMetre>(RhythmsByVerseCount);
|
||||
rhythmsByVerseCount.Sort((a, b) => a.Rhythm.CompareTo(b.Rhythm));
|
||||
rhythmsByVerseCount.Insert(0, new GanjoorMetre()
|
||||
{
|
||||
Rhythm = "null"
|
||||
}
|
||||
);
|
||||
rhythmsByVerseCount.Insert(0, new GanjoorMetre()
|
||||
{
|
||||
Rhythm = ""
|
||||
}
|
||||
);
|
||||
|
||||
RhythmsAlphabetically = rhythmsByVerseCount.ToArray();
|
||||
|
||||
var pageUrlResponse = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/pageurl?id={Request.Query["id"]}");
|
||||
if (!pageUrlResponse.IsSuccessStatusCode)
|
||||
{
|
||||
FatalError = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
|
||||
return Page();
|
||||
}
|
||||
var pageUrl = JsonConvert.DeserializeObject<string>(await pageUrlResponse.Content.ReadAsStringAsync());
|
||||
|
||||
var pageQuery = await secureClient.GetAsync($"{APIRoot.Url}/api/ganjoor/page?url={pageUrl}");
|
||||
if (!pageQuery.IsSuccessStatusCode)
|
||||
{
|
||||
FatalError = JsonConvert.DeserializeObject<string>(await pageQuery.Content.ReadAsStringAsync());
|
||||
return Page();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
FatalError = "لطفا از گنجور خارج و مجددا به آن وارد شوید.";
|
||||
}
|
||||
}
|
||||
return Page();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -2,7 +2,7 @@
|
||||
<html lang="fa-IR" dir="rtl">
|
||||
<head>
|
||||
<meta charset="utf-8" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="robots" content="noindex, nofollow" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>
|
||||
@Html.Raw(ViewData["Title"])
|
||||
@ -16,21 +16,23 @@
|
||||
<script src="~/lib/jquery/dist/jquery.min.js"></script>
|
||||
<script src="/lib/diff.js"></script>
|
||||
<script src="/lib/tinymce/tinymce.min.js"></script>
|
||||
<script>
|
||||
<script>
|
||||
tinymce.init({
|
||||
selector: 'textarea.editor',
|
||||
language: 'fa_IR',
|
||||
menubar: false,
|
||||
plugins: 'link paste image',
|
||||
toolbar: 'undo redo | alignleft aligncenter alignright alignjustify | link',
|
||||
paste_auto_cleanup_on_paste: true,
|
||||
paste_remove_styles: true,
|
||||
paste_remove_styles_if_webkit: true,
|
||||
paste_strip_class_attributes: true,
|
||||
smart_paste: false,
|
||||
a11y_advanced_options: true
|
||||
});
|
||||
selector: 'textarea.editor',
|
||||
language: 'fa_IR',
|
||||
menubar: false,
|
||||
plugins: 'link paste image',
|
||||
toolbar: 'undo redo | alignleft aligncenter alignright alignjustify | link',
|
||||
paste_auto_cleanup_on_paste: true,
|
||||
paste_remove_styles: true,
|
||||
paste_remove_styles_if_webkit: true,
|
||||
paste_strip_class_attributes: true,
|
||||
smart_paste: false,
|
||||
a11y_advanced_options: true
|
||||
});
|
||||
</script>
|
||||
|
||||
<script src="/js/bk.js?version=33"></script>
|
||||
<script>
|
||||
function editBanner(bannerId) {
|
||||
var url = '?handler=Edit';
|
||||
@ -47,7 +49,7 @@
|
||||
url: $(urlInput).val(),
|
||||
active: $(activeInput).is(":checked")
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('آگاهی به درستی ویرایش شد.')
|
||||
},
|
||||
|
||||
@ -66,7 +68,7 @@
|
||||
data: {
|
||||
id: bannerId
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
var bannerIdBlockId = '#tr-' + bannerId;
|
||||
$(bannerIdBlockId).remove();
|
||||
},
|
||||
@ -82,10 +84,10 @@
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('صفحه به درستی بازسازی شد.')
|
||||
},
|
||||
|
||||
@ -105,10 +107,10 @@
|
||||
data: {
|
||||
id: itemId
|
||||
},
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.');
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
location.reload();
|
||||
return false;
|
||||
},
|
||||
@ -122,10 +124,10 @@
|
||||
data: {
|
||||
id: poemId
|
||||
},
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.');
|
||||
},
|
||||
success: function (rhyme) {
|
||||
success: function(rhyme) {
|
||||
$(elementId).val(rhyme);
|
||||
return false;
|
||||
},
|
||||
@ -141,10 +143,10 @@
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('فرایند بازسازی نقشهٔ سایت شروع شد.')
|
||||
},
|
||||
|
||||
@ -161,10 +163,10 @@
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('فرایند بازسازی صفحات آمار شروع شد.')
|
||||
},
|
||||
|
||||
@ -184,17 +186,17 @@
|
||||
$.ajax({
|
||||
type: "POST",
|
||||
url: url,
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('فرایند تولید مجدد همهٔ فایلهای گنجور رومیزی شروع شد.')
|
||||
},
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
function cleanCache(id) {
|
||||
@ -209,10 +211,10 @@
|
||||
data: {
|
||||
id: id
|
||||
},
|
||||
error: function () {
|
||||
error: function() {
|
||||
alert('خطا رخ داد.')
|
||||
},
|
||||
success: function () {
|
||||
success: function() {
|
||||
alert('کش صفحه پاک شد.')
|
||||
},
|
||||
|
||||
@ -255,7 +257,7 @@
|
||||
result.appendChild(fragment);
|
||||
}
|
||||
|
||||
|
||||
|
||||
</script>
|
||||
</head>
|
||||
|
||||
@ -275,7 +277,7 @@
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
|
||||
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
|
||||
<ul class="navbar-nav flex-grow-1">
|
||||
<li class="nav-item">
|
||||
<a class="nav-link text-dark" asp-area="Admin" asp-page="ReviewPartEdits">ویرایشهای قطعات</a>
|
||||
@ -339,7 +341,7 @@
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
|
||||
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
|
||||
<script src="~/js/site.js" asp-append-version="true"></script>
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user