All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 9m32s
121 lines
4.9 KiB
C#
121 lines
4.9 KiB
C#
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Localization;
|
|
using System.ComponentModel.DataAnnotations;
|
|
using System.Text.RegularExpressions;
|
|
|
|
namespace Convert_It_Online.Areas.TextTools.Controllers
|
|
{
|
|
/// <summary>
|
|
/// ViewModel para a ferramenta de conversão de texto.
|
|
/// </summary>
|
|
public class CaseConverterViewModel
|
|
{
|
|
[Display(Name = "Seu texto")]
|
|
public string? InputText { get; set; }
|
|
|
|
public string? ResultText { get; set; }
|
|
|
|
// Usado para saber qual botão foi pressionado no formulário
|
|
public string? ConversionType { get; set; }
|
|
}
|
|
|
|
[Area("TextTools")]
|
|
public class CaseConverterController : Controller
|
|
{
|
|
private readonly IStringLocalizer<SharedResource> _localizer;
|
|
|
|
public CaseConverterController(IStringLocalizer<SharedResource> localizer)
|
|
{
|
|
_localizer = localizer;
|
|
}
|
|
|
|
private void SetCommonViewBagProperties()
|
|
{
|
|
ViewBag.HomeLink = _localizer["HomeLink"];
|
|
ViewBag.TextMenuTitle = _localizer["TextMenuTitle"];
|
|
ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"];
|
|
ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"];
|
|
ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"];
|
|
ViewBag.FooterText = _localizer["FooterText"];
|
|
ViewBag.About = _localizer["About"];
|
|
ViewBag.Contact = _localizer["Contact"];
|
|
ViewBag.Terms = _localizer["Terms"];
|
|
}
|
|
|
|
// Método GET: Apenas exibe a página com um formulário vazio.
|
|
[HttpGet]
|
|
public IActionResult Index()
|
|
{
|
|
SetCommonViewBagProperties();
|
|
ViewBag.PageTitle = _localizer["TextToolsPageTitle"];
|
|
ViewBag.TextAreaLabel = _localizer["TextAreaLabel"];
|
|
ViewBag.ToUpperButton = _localizer["ToUpperButton"];
|
|
ViewBag.ToLowerButton = _localizer["ToLowerButton"];
|
|
ViewBag.ToSentenceCaseButton = _localizer["ToSentenceCaseButton"];
|
|
ViewBag.ResultTitle = _localizer["ResultTitle"];
|
|
|
|
// FAQ properties
|
|
ViewBag.FaqWhatTitle = _localizer["CaseFaqWhatTitle"];
|
|
ViewBag.FaqWhatContent = _localizer["CaseFaqWhatContent"];
|
|
ViewBag.FaqHowTitle = _localizer["CaseFaqHowTitle"];
|
|
ViewBag.FaqHowContent = _localizer["CaseFaqHowContent"];
|
|
ViewBag.FaqWhyTitle = _localizer["CaseFaqWhyTitle"];
|
|
ViewBag.FaqWhyContent = _localizer["CaseFaqWhyContent"];
|
|
ViewBag.FaqSecurityTitle = _localizer["CaseFaqSecurityTitle"];
|
|
ViewBag.FaqSecurityContent = _localizer["CaseFaqSecurityContent"];
|
|
ViewBag.FaqLimitsTitle = _localizer["CaseFaqLimitsTitle"];
|
|
ViewBag.FaqLimitsContent = _localizer["CaseFaqLimitsContent"];
|
|
|
|
var model = new CaseConverterViewModel();
|
|
return View(model);
|
|
}
|
|
|
|
// Método POST: Recebe o formulário, processa e retorna o resultado.
|
|
[HttpPost]
|
|
[ValidateAntiForgeryToken]
|
|
public IActionResult Index([FromForm] CaseConverterViewModel model)
|
|
{
|
|
SetCommonViewBagProperties();
|
|
ViewBag.PageTitle = _localizer["TextToolsPageTitle"];
|
|
ViewBag.TextAreaLabel = _localizer["TextAreaLabel"];
|
|
ViewBag.ToUpperButton = _localizer["ToUpperButton"];
|
|
ViewBag.ToLowerButton = _localizer["ToLowerButton"];
|
|
ViewBag.ToSentenceCaseButton = _localizer["ToSentenceCaseButton"];
|
|
ViewBag.ResultTitle = _localizer["ResultTitle"];
|
|
|
|
if (!ModelState.IsValid || string.IsNullOrEmpty(model.InputText))
|
|
{
|
|
// Se o modelo for inválido ou o texto estiver vazio, retorna a view sem fazer nada.
|
|
return View(model);
|
|
}
|
|
|
|
// Executa a conversão baseada no valor do botão pressionado
|
|
model.ResultText = model.ConversionType switch
|
|
{
|
|
"upper" => model.InputText.ToUpper(),
|
|
"lower" => model.InputText.ToLower(),
|
|
"sentence" => ToSentenceCase(model.InputText),
|
|
_ => model.InputText // Caso padrão, não faz nada
|
|
};
|
|
|
|
// Retorna a mesma view, agora com o modelo preenchido (InputText e ResultText)
|
|
return View(model);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Converte uma string para "Sentence case", onde a primeira letra de cada sentença é maiúscula.
|
|
/// </summary>
|
|
private string ToSentenceCase(string input)
|
|
{
|
|
if (string.IsNullOrEmpty(input)) return input;
|
|
|
|
var lowerCase = input.ToLower();
|
|
// Regex para encontrar o primeiro caractere da string ou o primeiro caractere após um ponto e espaço.
|
|
var r = new Regex(@"(^[a-z])|\.\s+(.)", RegexOptions.ExplicitCapture);
|
|
|
|
return r.Replace(lowerCase, s => s.Value.ToUpper());
|
|
}
|
|
}
|
|
}
|