72 lines
2.5 KiB
C#
72 lines
2.5 KiB
C#
|
|
using Microsoft.AspNetCore.Mvc;
|
|
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
|
|
{
|
|
// Método GET: Apenas exibe a página com um formulário vazio.
|
|
[HttpGet]
|
|
public IActionResult Index()
|
|
{
|
|
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)
|
|
{
|
|
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());
|
|
}
|
|
}
|
|
}
|