docs: #365 language tagged page is working

This commit is contained in:
Hamid Reza Mohammadi 2023-02-17 10:17:55 +03:30
parent 533de962ec
commit 29cd321e5c
4 changed files with 96 additions and 78 deletions

View File

@ -135,33 +135,28 @@
}
</select>
<label for="v" class="width-100per">وزن:</label>
<input class="width-100per" type="text" id="select-search" placeholder="جستجوی وزن" oninput="doSearchInRhythmsCombo('select-search', 'v')" list="inputRhythms" autocomplete="off" size="50" />
<label for="v" class="width-100per">زبان غالب:</label>
<datalist id="inputRhythms">
@if (Model.RhythmsByVerseCount != null)
@foreach (var rhythm in Model.RhythmsByVerseCount)
@foreach (var language in RMuseum.Models.Ganjoor.ViewModels.GTaggedLanguage.Languages)
{
<option value="@rhythm.Rhythm">@rhythm.Rhythm</option>
<option value="@language.Code">@language.Name</option>
}
</datalist>
<select id="v" name="v" class="width-100per">
@foreach (var rhythm in Model.RhythmsAlphabetically)
<select id="l" name="l" class="width-100per">
@foreach (var language in RMuseum.Models.Ganjoor.ViewModels.GTaggedLanguage.Languages)
{
if (Model.Metre == rhythm.Rhythm)
if (Model.Language == language.Code)
{
<option value="@rhythm.Rhythm" selected>@(rhythm.Rhythm == "" ? "هیچکدام" : rhythm.Rhythm == "null" ? "وزن‌یابی نشده" : rhythm.Rhythm)</option>
<option value="@language.Code" selected>@language.Name</option>
}
else
{
<option value="@rhythm.Rhythm">@(rhythm.Rhythm == "" ? "هیچکدام" : rhythm.Rhythm == "null" ? "وزن‌یابی نشده" : rhythm.Rhythm)</option>
<option value="@language.Code">@language.Name</option>
}
}
</select>
<label for="g" class="width-100per">قافیه:</label>
<input type="text" name="g" id="g" class="width-100per" value="@Model.Rhyme" placeholder="حروف قافیه" />
<input type="submit" class="width-100per margin-top-5px" value="اعمال ورودی‌ها" />
@ -171,7 +166,7 @@
@if (Model.Poems == null)
{
<div class="sitem">
<p>لطفاً وزن یا قافیهٔ ابیات مد نظر را وارد کنید.</p>
<p>لطفاً زبان ابیات مد نظر را وارد کنید.</p>
</div>
}
else

View File

@ -64,14 +64,11 @@ namespace GanjooRazor.Pages
public List<GanjoorPoetViewModel> Poets { get; set; }
public int PoetId { get; set; }
public string Metre { get; set; }
public string Rhyme { get; set; }
public GanjoorPoetCompleteViewModel Poet { get; set; }
public List<GanjoorPoemCompleteViewModel> Poems { get; set; }
public string PagingToolsHtml { get; set; }
public string LastError { get; set; }
public string Language { get; set; }
private async Task<bool> preparePoets()
{
@ -117,16 +114,6 @@ namespace GanjooRazor.Pages
return true;
}
/// <summary>
/// rhythms alphabetically
/// </summary>
public GanjoorMetre[] RhythmsAlphabetically { get; set; }
/// <summary>
/// rhythms by frequency
/// </summary>
public GanjoorMetre[] RhythmsByVerseCount { get; set; }
public async Task<IActionResult> OnGetPoetInformationAsync(int id)
{
if (id == 0)
@ -184,22 +171,6 @@ namespace GanjooRazor.Pages
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();
int pageNumber = 1;
if (!string.IsNullOrEmpty(Request.Query["page"]))
@ -207,25 +178,11 @@ namespace GanjooRazor.Pages
pageNumber = int.Parse(Request.Query["page"]);
}
Metre = Request.Query["v"];
Rhyme = Request.Query["g"];
Language = Request.Query["l"];
Metre ??= "";
Rhyme ??= "";
Language ??= "fa-IR";
if (string.IsNullOrEmpty(Metre) && string.IsNullOrEmpty(Rhyme))
{
ViewData["Title"] = $"گنجور » شعر‌ها یا ابیات مشابه";
return Page();
}
if (!string.IsNullOrEmpty(Rhyme))
{
Rhyme = Rhyme.Replace(" ", "");
}
string title = "شعرها یا ابیات ";
@ -237,25 +194,15 @@ namespace GanjooRazor.Pages
title += $"{poetInfo.Nickname} ";
}
}
if (!string.IsNullOrEmpty(Metre))
var langModel = GTaggedLanguage.Languages.Where(l => l.Code == Language).FirstOrDefault();
if(langModel != null)
{
title += $"با وزن «{Metre}»";
title += $"با زبان غالب «{langModel.Name}»";
}
if (!string.IsNullOrEmpty(Rhyme))
{
if (!string.IsNullOrEmpty(Metre))
{
title += $" و";
}
else
{
title += $"با";
}
title += $" حروف قافیهٔ «{Rhyme}»";
}
string url = $"{APIRoot.Url}/api/ganjoor/poems/similar?PageNumber={pageNumber}&PageSize=20&metre={Metre}&rhyme={Rhyme}&poetId={PoetId}";
string url = $"{APIRoot.Url}/api/ganjoor/sections/tagged/language?PageNumber={pageNumber}&PageSize=20&language={Language}&poetId={PoetId}";
var response = await _httpClient.GetAsync(url);
if (!response.IsSuccessStatusCode)
@ -282,7 +229,7 @@ namespace GanjooRazor.Pages
title += $" - صفحهٔ {pageNumber.ToPersianNumbers()}";
if (paginationMetadata.currentPage > 3)
{
htmlText += $"<a href=\"/simi/?v={Uri.EscapeDataString(Metre)}&amp;g={Uri.EscapeDataString(Rhyme)}&amp;page=1{authorParam}\"><div class=\"circled-number\">۱</div></a> …";
htmlText += $"<a href=\"/tagged/?l={Uri.EscapeDataString(Language)}&amp;page=1{authorParam}\"><div class=\"circled-number\">۱</div></a> …";
}
for (int i = paginationMetadata.currentPage - 2; i <= (paginationMetadata.currentPage + 2); i++)
{
@ -294,13 +241,13 @@ namespace GanjooRazor.Pages
}
else
{
htmlText += $"<a href=\"/simi/?v={Uri.EscapeDataString(Metre)}&amp;g={Uri.EscapeDataString(Rhyme)}&amp;page={i}{authorParam}\"><div class=\"circled-number\">{i.ToPersianNumbers()}</div></a>{Environment.NewLine}";
htmlText += $"<a href=\"/tagged/?l={Uri.EscapeDataString(Language)}&amp;page={i}{authorParam}\"><div class=\"circled-number\">{i.ToPersianNumbers()}</div></a>{Environment.NewLine}";
}
}
}
if (paginationMetadata.totalPages > (paginationMetadata.currentPage + 2))
{
htmlText += $"… <a href=\"/simi/?v={Uri.EscapeDataString(Metre)}&amp;g={Uri.EscapeDataString(Rhyme)}&amp;page={paginationMetadata.totalPages}{authorParam}\"><div class=\"circled-number\">{paginationMetadata.totalPages.ToPersianNumbers()}</div></a>{Environment.NewLine}";
htmlText += $"… <a href=\"/tagged/?l={Uri.EscapeDataString(Language)}&amp;page={paginationMetadata.totalPages}{authorParam}\"><div class=\"circled-number\">{paginationMetadata.totalPages.ToPersianNumbers()}</div></a>{Environment.NewLine}";
}
htmlText += $"</div>{Environment.NewLine}";
}

View File

@ -0,0 +1,61 @@
namespace RMuseum.Models.Ganjoor.ViewModels
{
public class GTaggedLanguage
{
/// <summary>
/// code
/// </summary>
public string Code { get; set; }
/// <summary>
/// name
/// </summary>
public string Name { get; set; }
/// <summary>
/// description
/// </summary>
public string Description { get; set; }
public static GTaggedLanguage[] Languages
{
get
{
return new GTaggedLanguage[]
{
new GTaggedLanguage()
{
Code = "fa-IR",
Name = "فارسی",
Description = ""
},
new GTaggedLanguage()
{
Code = "ar",
Name = "عربی",
Description = "عربی (اشعار عربی سعدی، خاقانی و ...)"
},
new GTaggedLanguage()
{
Code = "azb",
Name = "ترکی",
Description = "ترکی (گزیده‌ای از اشعار استاد شهریار و ...)"
},
new GTaggedLanguage()
{
Code = "ckb",
Name = "کردی",
Description = "کردی (مولانا خالد نقشبندی)"
},
new GTaggedLanguage()
{
Code = "glk",
Name = "گیلکی",
Description = "گیلکی (قاسم انوار)"
}
};
}
}
}
}

View File

@ -10327,6 +10327,21 @@
text
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GTaggedLanguage.Code">
<summary>
code
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GTaggedLanguage.Name">
<summary>
name
</summary>
</member>
<member name="P:RMuseum.Models.Ganjoor.ViewModels.GTaggedLanguage.Description">
<summary>
description
</summary>
</member>
<member name="T:RMuseum.Models.Ganjoor.ViewModels.PoemMusicTrackViewModel">
<summary>
Ganjoor Poem related music track model