bulletboards/ImageBoardServerApp/Shared/Components/Comment.razor

148 lines
No EOL
4.5 KiB
Text

@using System.ComponentModel.DataAnnotations
@using System.Text.RegularExpressions
@using ImageBoardServerApp.Auth
@using ImageBoardServerApp.Data
@using ImageBoardServerApp.Data.Repository
@inject AuthenticationStateProvider authStateProvider
<div class="threadHeader">
<span>[</span>
<a class="toggleOpened" onclick="@ToggleOpened">@toggleText</a>
<span>]</span>
<span class="name">@comment.Username</span>
@if (@role != "User")
{
<span class="@role" >##@role</span>
}
<span class="date">@getTimeFromUnix(comment.CreatedAt)</span>
<span class="post-id">No.@comment.GET</span>
</div>
@if (opened)
{
<div class="threadContent">
<div class="threadImage">
@if (image != null)
{
<img src="@($"{image.ImageLocation}?size=258x258")" alt="No Image found" />
}
</div>
<div class="threadTextContainer">
@foreach (string s in @comment.Content.Split("\n"))
{
var className = "";
@if (s.StartsWith(">") && !Regex.IsMatch(s, "^>{2,}"))
{
className = "greenText";
}
<span class='threadText @className'>
@foreach (string line in s.Split(" "))
{
var className2 = "";
@if (@Regex.IsMatch(line, ">>\\d+"))
{
className2 = "redText";
<a href="/@comment.Board/@comment.PostID/@Regex.Match(s, ">>(\\d+)").Value.Substring(2)" class="threadMsg @className2">
@line
</a>
}
else
{
<span class="threadMsg">
@line
</span>
}
<span>&nbsp;</span>
}
</span>
}
</div>
</div>
<div class="threadFooter">
<span>[</span>
<a @onclick="@deletePost" href="javascript:void(0)">Delete</a>
<span>]</span>
<span>[</span>
<a class="report" href="/sys/report/comment/@comment.Board/@comment.CommentID" target="_blank">Report</a>
<span>]</span>
</div>
}
@code {
public bool canDel { get; set; }
private async Task deletePost()
{
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
var user = await cauthStateProvder.GetAuthenticationStateAsync();
var usr = user.User;
UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name);
if (foundusr.Role != "User" || comment.UserID == foundusr.UserID)
{
await TheManager.deleteComment(comment);
}
}
private static DateTime getTimeFromUnix(double javaTimeStamp)
{
var dateTime = new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc);
dateTime = dateTime.AddMilliseconds( javaTimeStamp ).ToLocalTime();
return dateTime;
}
private ImageData image;
private string role;
protected override async Task OnParametersSetAsync()
{
await base.OnParametersSetAsync();
var cauthStateProvder = (CustomAuthenticationStateProvider)authStateProvider;
var user = await cauthStateProvder.GetAuthenticationStateAsync();
var usr = user.User;
UserData foundusr = await UsersRepository.getUserByEmailAsync(usr.Identity.Name);
if (foundusr != null && (foundusr.Role != "User" || comment.UserID == foundusr.UserID))
{
canDel = true;
}
canDel = false;
}
protected override async Task OnInitializedAsync()
{
int i;
try
{
i = (int)comment.ImageID;
}
catch (InvalidOperationException ioe)
{
i = -1;
}
if (i != null)
{
image = await ImagesRepository.getImageByIdAsync(i);
}
var cmt = await CommentsRepository.getCommentByIdAsync(comment.CommentID);
role = cmt.User.Role;
}
private bool opened = true;
private string toggleText = "-";
private void ToggleOpened()
{
opened = !opened;
toggleText = opened ? "-" : "+";
}
[Parameter]
[Required]
public CommentData comment { get; set; }
}