feat: ajuste ads
All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 17m22s
All checks were successful
Deploy ASP.NET MVC to OCI / build-and-deploy (push) Successful in 17m22s
This commit is contained in:
parent
724e03176e
commit
665d36d81c
@ -1,32 +1,57 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Convert_It_Online.Services;
|
using Convert_It_Online.Services;
|
||||||
using Microsoft.AspNetCore.Localization;
|
using Microsoft.AspNetCore.Localization;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
using System.IO;
|
||||||
|
|
||||||
namespace Convert_It_Online.Areas.AudioTools.Controllers
|
namespace Convert_It_Online.Areas.AudioTools.Controllers
|
||||||
{
|
{
|
||||||
[Area("AudioTools")]
|
[Area("AudioTools")]
|
||||||
[Route("{culture}/[area]/[controller]")]
|
[Route("{culture}/[area]/[controller]")]
|
||||||
[Route("[area]/[controller]")] // Adicionado para Share Target sem cultura fixa
|
[Route("[area]/[controller]")]
|
||||||
public class SpeechToTextController : Controller
|
public class SpeechToTextController : Controller
|
||||||
{
|
{
|
||||||
private readonly IAudioTranscriptionService _transcriptionService;
|
private readonly IAudioTranscriptionService _transcriptionService;
|
||||||
private readonly ILogger<SpeechToTextController> _logger;
|
private readonly ILogger<SpeechToTextController> _logger;
|
||||||
|
private readonly IStringLocalizer<SharedResource> _localizer;
|
||||||
|
|
||||||
public SpeechToTextController(IAudioTranscriptionService transcriptionService, ILogger<SpeechToTextController> logger)
|
public SpeechToTextController(IAudioTranscriptionService transcriptionService,
|
||||||
|
ILogger<SpeechToTextController> logger,
|
||||||
|
IStringLocalizer<SharedResource> localizer)
|
||||||
{
|
{
|
||||||
_transcriptionService = transcriptionService;
|
_transcriptionService = transcriptionService;
|
||||||
_logger = logger;
|
_logger = logger;
|
||||||
|
_localizer = localizer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetViewBag()
|
||||||
|
{
|
||||||
|
ViewBag.HomeLink = _localizer["HomeLink"];
|
||||||
|
ViewBag.TextMenuTitle = _localizer["TextMenuTitle"];
|
||||||
|
ViewBag.DocumentMenuTitle = _localizer["DocumentMenuTitle"];
|
||||||
|
ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"];
|
||||||
|
ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"];
|
||||||
|
ViewBag.PdfToTextTitle = _localizer["PdfToTextTitle"];
|
||||||
|
ViewBag.PdfBarcodeTitle = _localizer["PdfBarcodeTitle"];
|
||||||
|
ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"];
|
||||||
|
ViewBag.HeicToJpgTitle = _localizer["HeicToJpgTitle"];
|
||||||
|
ViewBag.FooterText = _localizer["FooterText"];
|
||||||
|
ViewBag.About = _localizer["About"];
|
||||||
|
ViewBag.Contact = _localizer["Contact"];
|
||||||
|
ViewBag.Terms = _localizer["Terms"];
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
|
SetViewBag();
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost]
|
[HttpPost]
|
||||||
public async Task<IActionResult> Transcribe(IFormFile audioFile)
|
public async Task<IActionResult> Transcribe(IFormFile audioFile)
|
||||||
{
|
{
|
||||||
|
SetViewBag();
|
||||||
if (audioFile == null || audioFile.Length == 0)
|
if (audioFile == null || audioFile.Length == 0)
|
||||||
{
|
{
|
||||||
ViewBag.Error = "Por favor, selecione um arquivo de áudio.";
|
ViewBag.Error = "Por favor, selecione um arquivo de áudio.";
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
|
using Microsoft.Extensions.Localization;
|
||||||
|
|
||||||
namespace Convert_It_Online.Areas.AudioTools.Controllers
|
namespace Convert_It_Online.Areas.AudioTools.Controllers
|
||||||
{
|
{
|
||||||
@ -6,9 +7,34 @@ namespace Convert_It_Online.Areas.AudioTools.Controllers
|
|||||||
[Route("{culture}/[area]/[controller]")]
|
[Route("{culture}/[area]/[controller]")]
|
||||||
public class TextToSpeechController : Controller
|
public class TextToSpeechController : Controller
|
||||||
{
|
{
|
||||||
|
private readonly IStringLocalizer<SharedResource> _localizer;
|
||||||
|
|
||||||
|
public TextToSpeechController(IStringLocalizer<SharedResource> localizer)
|
||||||
|
{
|
||||||
|
_localizer = localizer;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void SetViewBag()
|
||||||
|
{
|
||||||
|
ViewBag.HomeLink = _localizer["HomeLink"];
|
||||||
|
ViewBag.TextMenuTitle = _localizer["TextMenuTitle"];
|
||||||
|
ViewBag.DocumentMenuTitle = _localizer["DocumentMenuTitle"];
|
||||||
|
ViewBag.ImageMenuTitle = _localizer["ImageMenuTitle"];
|
||||||
|
ViewBag.CaseConverterTitle = _localizer["CaseConverterTitle"];
|
||||||
|
ViewBag.PdfToTextTitle = _localizer["PdfToTextTitle"];
|
||||||
|
ViewBag.PdfBarcodeTitle = _localizer["PdfBarcodeTitle"];
|
||||||
|
ViewBag.JpgToWebpTitle = _localizer["JpgToWebpTitle"];
|
||||||
|
ViewBag.HeicToJpgTitle = _localizer["HeicToJpgTitle"];
|
||||||
|
ViewBag.FooterText = _localizer["FooterText"];
|
||||||
|
ViewBag.About = _localizer["About"];
|
||||||
|
ViewBag.Contact = _localizer["Contact"];
|
||||||
|
ViewBag.Terms = _localizer["Terms"];
|
||||||
|
}
|
||||||
|
|
||||||
[HttpGet]
|
[HttpGet]
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
|
SetViewBag();
|
||||||
return View();
|
return View();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
ProducaoBanners.png
Normal file
BIN
ProducaoBanners.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 212 KiB |
@ -133,13 +133,13 @@
|
|||||||
{
|
{
|
||||||
@if (adProvider == "House")
|
@if (adProvider == "House")
|
||||||
{
|
{
|
||||||
<a href="https://qrrapido.site" target="_blank" class="house-ad-top text-decoration-none d-none d-lg-block">
|
<a href="https://qrrapido.site" target="_blank" class="featured-top text-decoration-none d-none d-lg-block">
|
||||||
<div class="ad-content">
|
<div class="banner-content">
|
||||||
<div class="qr-animation">
|
<div class="qr-animation">
|
||||||
<div class="qr-box"></div>
|
<div class="qr-box"></div>
|
||||||
<div class="scan-line"></div>
|
<div class="scan-line"></div>
|
||||||
</div>
|
</div>
|
||||||
<div class="ad-text">
|
<div class="banner-text">
|
||||||
<span class="badge bg-warning text-dark mb-1">NOVO</span>
|
<span class="badge bg-warning text-dark mb-1">NOVO</span>
|
||||||
<h5>Gerador de QR Code Ultrarrápido</h5>
|
<h5>Gerador de QR Code Ultrarrápido</h5>
|
||||||
<p>Crie QR Codes para WiFi, Links e Pix em 1 segundo. Grátis!</p>
|
<p>Crie QR Codes para WiFi, Links e Pix em 1 segundo. Grátis!</p>
|
||||||
@ -180,11 +180,11 @@
|
|||||||
{
|
{
|
||||||
@if (adProvider == "House")
|
@if (adProvider == "House")
|
||||||
{
|
{
|
||||||
<a href="https://jobmaker.com.br" target="_blank" class="house-ad-side text-decoration-none">
|
<a href="https://jobmaker.com.br" target="_blank" class="featured-side text-decoration-none">
|
||||||
<div class="terminal-header">
|
<div class="terminal-header">
|
||||||
<span class="dot red"></span><span class="dot yellow"></span><span class="dot green"></span>
|
<span class="dot red"></span><span class="dot yellow"></span><span class="dot green"></span>
|
||||||
</div>
|
</div>
|
||||||
<div class="ad-body">
|
<div class="banner-body">
|
||||||
<div class="code-typing">
|
<div class="code-typing">
|
||||||
<span class="comment">// Precisa integrar sistemas?</span><br>
|
<span class="comment">// Precisa integrar sistemas?</span><br>
|
||||||
<span class="keyword">await</span> JobMaker.<span class="method">Automate</span>(legacy_sys);<br>
|
<span class="keyword">await</span> JobMaker.<span class="method">Automate</span>(legacy_sys);<br>
|
||||||
|
|||||||
@ -314,8 +314,8 @@ h3.h4.mb-3.text-center {
|
|||||||
text-decoration: underline !important;
|
text-decoration: underline !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========== PLACEHOLDERS DE ANÚNCIO ========== */
|
/* ========== PLACEHOLDERS DE PROMOÇÃO ========== */
|
||||||
.ad-placeholder {
|
.promo-placeholder {
|
||||||
background-color: var(--light-color) !important;
|
background-color: var(--light-color) !important;
|
||||||
border: 2px dashed var(--border-color);
|
border: 2px dashed var(--border-color);
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
@ -329,17 +329,17 @@ h3.h4.mb-3.text-center {
|
|||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ad-placeholder:hover {
|
.promo-placeholder:hover {
|
||||||
border-color: rgba(13, 110, 253, 0.3);
|
border-color: rgba(13, 110, 253, 0.3);
|
||||||
background-color: #e9ecef !important;
|
background-color: #e9ecef !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ad-top {
|
.promo-top {
|
||||||
min-height: 90px;
|
min-height: 90px;
|
||||||
margin-bottom: 2rem;
|
margin-bottom: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.ad-side {
|
.promo-side {
|
||||||
min-height: 600px;
|
min-height: 600px;
|
||||||
position: sticky;
|
position: sticky;
|
||||||
top: 2rem;
|
top: 2rem;
|
||||||
@ -432,10 +432,10 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
background: var(--text-muted);
|
background: var(--text-muted);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ========== HOUSE ADS (BANNERS PRÓPRIOS) ========== */
|
/* ========== BANNERS PROMOCIONAIS ========== */
|
||||||
|
|
||||||
/* Banner Topo - QR Rápido */
|
/* Banner Topo - QR Rápido */
|
||||||
.house-ad-top {
|
.featured-top {
|
||||||
display: block;
|
display: block;
|
||||||
background: linear-gradient(135deg, #6610f2 0%, #d63384 100%);
|
background: linear-gradient(135deg, #6610f2 0%, #d63384 100%);
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
@ -449,13 +449,13 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top:hover {
|
.featured-top:hover {
|
||||||
transform: translateY(-2px);
|
transform: translateY(-2px);
|
||||||
box-shadow: 0 8px 20px rgba(102, 16, 242, 0.3);
|
box-shadow: 0 8px 20px rgba(102, 16, 242, 0.3);
|
||||||
color: white !important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .ad-content {
|
.featured-top .banner-content {
|
||||||
display: flex;
|
display: flex;
|
||||||
align-items: center;
|
align-items: center;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
@ -463,7 +463,7 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .qr-animation {
|
.featured-top .qr-animation {
|
||||||
width: 60px;
|
width: 60px;
|
||||||
height: 60px;
|
height: 60px;
|
||||||
background: rgba(255, 255, 255, 0.2);
|
background: rgba(255, 255, 255, 0.2);
|
||||||
@ -475,7 +475,7 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
margin-right: 1.5rem;
|
margin-right: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .qr-box {
|
.featured-top .qr-box {
|
||||||
width: 40px;
|
width: 40px;
|
||||||
height: 40px;
|
height: 40px;
|
||||||
border: 3px solid white;
|
border: 3px solid white;
|
||||||
@ -483,7 +483,7 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
position: relative;
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .qr-box::after {
|
.featured-top .qr-box::after {
|
||||||
content: '';
|
content: '';
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 50%;
|
top: 50%;
|
||||||
@ -494,7 +494,7 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
background: white;
|
background: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .scan-line {
|
.featured-top .scan-line {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 2px;
|
height: 2px;
|
||||||
@ -510,21 +510,21 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
100% { top: 90%; }
|
100% { top: 90%; }
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .ad-text h5 {
|
.featured-top .banner-text h5 {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
font-size: 1.25rem;
|
font-size: 1.25rem;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .ad-text p {
|
.featured-top .banner-text p {
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: 0.9rem;
|
font-size: 0.9rem;
|
||||||
opacity: 0.9;
|
opacity: 0.9;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-top .cta-button {
|
.featured-top .cta-button {
|
||||||
background: white;
|
background: white;
|
||||||
color: #6610f2;
|
color: #6610f2;
|
||||||
padding: 0.5rem 1rem;
|
padding: 0.5rem 1rem;
|
||||||
@ -537,7 +537,7 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Banner Lateral - JobMaker */
|
/* Banner Lateral - JobMaker */
|
||||||
.house-ad-side {
|
.featured-side {
|
||||||
display: block;
|
display: block;
|
||||||
background-color: #0f172a; /* Slate 900 */
|
background-color: #0f172a; /* Slate 900 */
|
||||||
border-radius: 1rem;
|
border-radius: 1rem;
|
||||||
@ -548,15 +548,15 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
top: 2rem;
|
top: 2rem;
|
||||||
text-decoration: none !important;
|
text-decoration: none !important;
|
||||||
transition: border-color 0.3s ease;
|
transition: border-color 0.3s ease;
|
||||||
min-height: auto; /* Remove min-height fixo se necessário */
|
min-height: auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side:hover {
|
.featured-side:hover {
|
||||||
border-color: #3b82f6;
|
border-color: #3b82f6;
|
||||||
color: #e2e8f0 !important;
|
color: #e2e8f0 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .terminal-header {
|
.featured-side .terminal-header {
|
||||||
background: #1e293b;
|
background: #1e293b;
|
||||||
padding: 0.75rem 1rem;
|
padding: 0.75rem 1rem;
|
||||||
display: flex;
|
display: flex;
|
||||||
@ -564,33 +564,33 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
border-bottom: 1px solid #334155;
|
border-bottom: 1px solid #334155;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .dot {
|
.featured-side .dot {
|
||||||
width: 10px;
|
width: 10px;
|
||||||
height: 10px;
|
height: 10px;
|
||||||
border-radius: 50%;
|
border-radius: 50%;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .dot.red { background: #ef4444; }
|
.featured-side .dot.red { background: #ef4444; }
|
||||||
.house-ad-side .dot.yellow { background: #f59e0b; }
|
.featured-side .dot.yellow { background: #f59e0b; }
|
||||||
.house-ad-side .dot.green { background: #22c55e; }
|
.featured-side .dot.green { background: #22c55e; }
|
||||||
|
|
||||||
.house-ad-side .ad-body {
|
.featured-side .banner-body {
|
||||||
padding: 1.5rem;
|
padding: 1.5rem;
|
||||||
font-family: 'Consolas', 'Monaco', monospace;
|
font-family: 'Consolas', 'Monaco', monospace;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .code-typing {
|
.featured-side .code-typing {
|
||||||
font-size: 0.85rem;
|
font-size: 0.85rem;
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
margin-bottom: 1.5rem;
|
margin-bottom: 1.5rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .comment { color: #64748b; }
|
.featured-side .comment { color: #64748b; }
|
||||||
.house-ad-side .keyword { color: #c084fc; }
|
.featured-side .keyword { color: #c084fc; }
|
||||||
.house-ad-side .method { color: #60a5fa; }
|
.featured-side .method { color: #60a5fa; }
|
||||||
.house-ad-side .success { color: #4ade80; display: block; margin-top: 0.5rem; font-weight: bold;}
|
.featured-side .success { color: #4ade80; display: block; margin-top: 0.5rem; font-weight: bold;}
|
||||||
|
|
||||||
.house-ad-side h5 {
|
.featured-side h5 {
|
||||||
font-family: system-ui, -apple-system, sans-serif;
|
font-family: system-ui, -apple-system, sans-serif;
|
||||||
color: white !important;
|
color: white !important;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
@ -598,23 +598,23 @@ h1, h2, h3, h4, h5, h6, p, div, span, a {
|
|||||||
margin-bottom: 1rem;
|
margin-bottom: 1rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .text-muted {
|
.featured-side .text-muted {
|
||||||
color: #94a3b8 !important; /* Slate 400 */
|
color: #94a3b8 !important; /* Slate 400 */
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .btn-outline-primary {
|
.featured-side .btn-outline-primary {
|
||||||
border-color: #3b82f6;
|
border-color: #3b82f6;
|
||||||
color: #3b82f6;
|
color: #3b82f6;
|
||||||
}
|
}
|
||||||
|
|
||||||
.house-ad-side .btn-outline-primary:hover {
|
.featured-side .btn-outline-primary:hover {
|
||||||
background-color: #3b82f6;
|
background-color: #3b82f6;
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Responsividade para o House Ad Top */
|
/* Responsividade para o Banner Top */
|
||||||
@media (max-width: 992px) {
|
@media (max-width: 992px) {
|
||||||
.house-ad-top {
|
.featured-top {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user