netgescon-day0/docker/www/public/amazon/index.html

351 lines
11 KiB
HTML
Executable File

<!doctype html>
<html lang="it">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Amazon con Tag NetGescon</title>
<script async src="https://www.googletagmanager.com/gtag/js?id=G-3HH17HY982"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'G-3HH17HY982');
</script>
<style>
:root {
--bg: #f3efe7;
--card: rgba(255, 255, 255, 0.92);
--ink: #1f2937;
--muted: #6b7280;
--line: rgba(31, 41, 55, 0.12);
--accent: #c66a1f;
--accent-dark: #8a4313;
--shadow: 0 20px 50px rgba(82, 52, 24, 0.14);
}
* {
box-sizing: border-box;
}
body {
margin: 0;
font-family: Georgia, "Times New Roman", serif;
color: var(--ink);
background:
radial-gradient(circle at top left, rgba(198, 106, 31, 0.16), transparent 28%),
radial-gradient(circle at bottom right, rgba(39, 99, 87, 0.14), transparent 24%),
var(--bg);
min-height: 100vh;
}
.shell {
width: min(1100px, calc(100% - 32px));
margin: 32px auto;
}
.hero {
display: grid;
gap: 20px;
grid-template-columns: 1.2fr 0.8fr;
align-items: stretch;
}
.panel {
background: var(--card);
border: 1px solid var(--line);
border-radius: 24px;
box-shadow: var(--shadow);
padding: 28px;
backdrop-filter: blur(10px);
}
h1 {
margin: 0 0 12px;
font-size: clamp(2rem, 3vw, 3.2rem);
line-height: 1;
}
p {
margin: 0;
color: var(--muted);
font-size: 1rem;
line-height: 1.55;
}
.tag {
display: inline-flex;
align-items: center;
gap: 8px;
margin-bottom: 14px;
padding: 8px 12px;
border-radius: 999px;
border: 1px solid rgba(198, 106, 31, 0.24);
background: rgba(198, 106, 31, 0.1);
color: var(--accent-dark);
font-size: 0.9rem;
}
.grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 18px;
margin-top: 24px;
}
.form-card h2,
.tips h2 {
margin: 0 0 14px;
font-size: 1.1rem;
}
.field {
margin-bottom: 14px;
}
label {
display: block;
margin-bottom: 6px;
font-size: 0.85rem;
color: var(--muted);
text-transform: uppercase;
letter-spacing: 0.08em;
}
input {
width: 100%;
padding: 14px 16px;
border-radius: 16px;
border: 1px solid var(--line);
background: rgba(255, 255, 255, 0.94);
font-size: 1rem;
color: var(--ink);
}
input:focus {
outline: 2px solid rgba(198, 106, 31, 0.22);
border-color: rgba(198, 106, 31, 0.45);
}
.actions {
display: flex;
gap: 12px;
flex-wrap: wrap;
margin-top: 18px;
}
.button,
.button-secondary {
display: inline-flex;
align-items: center;
justify-content: center;
min-height: 48px;
padding: 0 18px;
border-radius: 14px;
text-decoration: none;
font-weight: 700;
transition: transform 120ms ease, box-shadow 120ms ease;
cursor: pointer;
border: none;
}
.button {
background: linear-gradient(135deg, var(--accent), #df8d2b);
color: white;
box-shadow: 0 12px 24px rgba(198, 106, 31, 0.24);
}
.button-secondary {
background: white;
color: var(--ink);
border: 1px solid var(--line);
}
.button:hover,
.button-secondary:hover {
transform: translateY(-1px);
}
.tips ul {
margin: 0;
padding-left: 18px;
color: var(--muted);
line-height: 1.7;
}
.mini-link {
color: var(--accent-dark);
text-decoration: none;
font-weight: 700;
}
.status {
margin-top: 12px;
min-height: 24px;
font-size: 0.95rem;
color: var(--accent-dark);
}
@media (max-width: 900px) {
.hero,
.grid {
grid-template-columns: 1fr;
}
}
</style>
</head>
<body>
<div class="shell">
<section class="hero">
<div class="panel">
<div class="tag">Tag attivo: netgescon-21</div>
<h1>Apri Amazon con il link affiliato NetGescon</h1>
<p>Questa pagina pubblica serve ad aprire Amazon con il tag corretto. Puoi cercare un prodotto,
incollare un ASIN oppure ripulire un link Amazon gia' esistente aggiungendo automaticamente il tag.
</p>
<p style="margin-top:12px;font-size:0.95rem;color:#8a4313;"><strong>In qualita' di Affiliato Amazon io
ricevo un guadagno dagli acquisti idonei.</strong></p>
</div>
<div class="panel tips">
<h2>Come usarla</h2>
<ul>
<li>Se conosci il nome del prodotto usa la ricerca per testo.</li>
<li>Se hai gia' il codice ASIN, incollalo e apri direttamente la scheda prodotto.</li>
<li>Se ti mandano un link Amazon, incollalo qui e il sistema aggiunge il tag automaticamente.</li>
</ul>
<div class="status" id="status"></div>
</div>
</section>
<section class="grid">
<form class="panel form-card" data-mode="query">
<h2>Ricerca per testo</h2>
<div class="field">
<label for="q">Prodotto da cercare</label>
<input id="q" name="q" type="text" placeholder="Es. notebook lenovo thinkpad">
</div>
<div class="actions">
<button class="button" type="submit">Apri ricerca Amazon</button>
</div>
</form>
<form class="panel form-card" data-mode="asin">
<h2>Apertura diretta ASIN</h2>
<div class="field">
<label for="asin">ASIN Amazon</label>
<input id="asin" name="asin" type="text" placeholder="Es. B0DN6PD8QS">
</div>
<div class="actions">
<button class="button" type="submit">Apri scheda prodotto</button>
</div>
</form>
<form class="panel form-card" data-mode="url">
<h2>Normalizza link Amazon</h2>
<div class="field">
<label for="url">Link prodotto</label>
<input id="url" name="url" type="text" placeholder="https://www.amazon.it/dp/...">
</div>
<div class="actions">
<button class="button" type="submit">Apri link con tag</button>
</div>
</form>
</section>
<section class="panel" style="margin-top: 20px;">
<h2 style="margin:0 0 10px;">Esempio pronto</h2>
<p style="margin-bottom:14px;">Puoi gia' distribuire anche un link diretto, ad esempio per il prodotto che
stavamo testando.</p>
<a class="mini-link" id="example-link" href="https://www.amazon.it/dp/B0DN6PD8QS?tag=netgescon-21">Apri
B0DN6PD8QS con tag NetGescon</a>
<div style="margin-top:14px;font-size:0.9rem;color:#6b7280;">Link base da far girare:
https://www.netgescon.it/public/amazon/</div>
</section>
</div>
<script>
const tag = 'netgescon-21';
const statusNode = document.getElementById('status');
function updateStatus(message) {
statusNode.textContent = message;
}
function appendTag(target) {
const url = new URL(target);
url.searchParams.set('tag', tag);
return url.toString();
}
function normalizeAsin(value) {
return value.toUpperCase().replace(/[^A-Z0-9]/g, '').slice(0, 10);
}
function extractAsin(url) {
const match = url.match(/\/(?:dp|gp\/product)\/([A-Z0-9]{10})(?:[/?]|$)/i);
return match ? match[1].toUpperCase() : null;
}
function resolveTarget(mode, rawValue) {
const value = rawValue.trim();
if (mode === 'query') {
if (!value) {
throw new Error('Inserisci un prodotto da cercare.');
}
return appendTag(`https://www.amazon.it/s?k=${encodeURIComponent(value)}`);
}
if (mode === 'asin') {
const asin = normalizeAsin(value);
if (asin.length !== 10) {
throw new Error('Inserisci un ASIN Amazon valido di 10 caratteri.');
}
return appendTag(`https://www.amazon.it/dp/${asin}`);
}
if (!value) {
throw new Error('Inserisci un link Amazon valido.');
}
let parsed;
try {
parsed = new URL(value);
} catch (error) {
throw new Error('Il link inserito non e\' valido.');
}
const asin = extractAsin(parsed.toString());
if (asin) {
return appendTag(`https://www.amazon.it/dp/${asin}`);
}
return appendTag(parsed.toString());
}
document.querySelectorAll('form[data-mode]').forEach((form) => {
form.addEventListener('submit', (event) => {
event.preventDefault();
const mode = form.getAttribute('data-mode');
const input = form.querySelector('input');
try {
const target = resolveTarget(mode, input.value);
updateStatus(`Apertura in corso: ${target}`);
window.location.href = target;
} catch (error) {
updateStatus(error.message);
input.focus();
}
});
});
</script>
</body>
</html>