72 lines
4.9 KiB
HTML
72 lines
4.9 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="fr"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width,initial-scale=1.0">
|
|
<title>📝 Content Analyzer · WEVAL Tool</title>
|
|
<style>
|
|
*{margin:0;padding:0;box-sizing:border-box}
|
|
body{background:#060a14;color:#e2e8f0;font-family:-apple-system,'Segoe UI',sans-serif;font-size:13px;padding:24px;line-height:1.5}
|
|
h1{font-size:24px;background:linear-gradient(135deg,#22d3ee,#a78bfa);-webkit-background-clip:text;-webkit-text-fill-color:transparent;margin-bottom:8px}
|
|
.meta{color:#64748b;font-size:11px;margin-bottom:18px;font-family:monospace}
|
|
.box{background:#0c1220;border:1px solid #1e293b;border-radius:14px;padding:24px;margin-bottom:18px;max-width:900px}
|
|
.banner{background:rgba(52,211,153,.12);border:1px solid rgba(52,211,153,.3);padding:14px 18px;border-radius:10px;margin-bottom:18px;color:#34d399;font-size:12px}
|
|
label{display:block;font-size:11px;color:#64748b;text-transform:uppercase;letter-spacing:1px;margin-bottom:8px;font-weight:600}
|
|
input,textarea{width:100%;padding:14px 16px;background:#111827;border:1px solid #1e293b;border-radius:8px;color:#e2e8f0;font-size:13px;font-family:inherit}
|
|
textarea{min-height:120px;resize:vertical}
|
|
input:focus,textarea:focus{outline:none;border-color:#22d3ee}
|
|
button{margin-top:14px;padding:12px 28px;background:linear-gradient(135deg,#22d3ee,#a78bfa);border:0;border-radius:8px;color:#060a14;font-weight:700;cursor:pointer;font-size:13px;transition:all .15s}
|
|
button:hover{transform:translateY(-1px);box-shadow:0 6px 20px rgba(34,211,238,.3)}
|
|
.results-grid{margin-top:24px;display:flex;flex-direction:column;gap:8px}
|
|
.dns-row,.rbl-row{display:grid;grid-template-columns:200px 1fr;gap:12px;padding:12px 16px;background:#111827;border:1px solid #1e293b;border-radius:8px;font-size:12px;align-items:center}
|
|
.dns-row.clean,.rbl-row.clean{border-left:3px solid #34d399}
|
|
.dns-row.listed,.rbl-row.listed{border-left:3px solid #f87171}
|
|
.dns-row.error,.rbl-row.error{border-left:3px solid #fbbf24}
|
|
.rbl,.dns-row .rbl{font-weight:600;color:#22d3ee;font-family:'JetBrains Mono',monospace;font-size:11px}
|
|
.status{color:#cbd5e1;word-break:break-word}
|
|
.loading{text-align:center;padding:30px;color:#64748b}
|
|
.btn-back{display:inline-block;padding:8px 14px;background:#0c1220;border:1px solid #1e293b;border-radius:8px;color:#22d3ee;text-decoration:none;font-size:11px;margin-top:14px}
|
|
.btn-back:hover{border-color:#22d3ee}
|
|
</style></head><body>
|
|
|
|
<h1>📝 Content Analyzer</h1>
|
|
<div class="meta">Analyse la qualite d'un texte email (lisibilite, longueur, structure) · API: Local NLP heuristics · Doctrine #4 honnete</div>
|
|
|
|
<div class="box">
|
|
<div class="banner">✅ Outil fonctionnel · Zero fake · Vraie API live · Souverain (free public APIs)</div>
|
|
<label>Texte</label>
|
|
<textarea id="inp" placeholder="Coller le contenu ici..."></textarea>
|
|
<button onclick="check()">▶ Lancer test</button>
|
|
<div id="result"></div>
|
|
</div>
|
|
|
|
<a href="/arsenal-master.html" class="btn-back">← Arsenal Master</a>
|
|
<a href="/weval-technology-platform.html" class="btn-back">⚙️ WTP</a>
|
|
|
|
<script>
|
|
async function check(){
|
|
const txt = document.getElementById('inp').value;
|
|
if(!txt){ alert('Entrer du texte'); return; }
|
|
const words = txt.split(/\s+/).filter(w => w.length > 0);
|
|
const sentences = txt.split(/[.!?]+/).filter(s => s.trim().length > 0);
|
|
const chars = txt.length;
|
|
const avgWordLen = (words.reduce((s,w) => s+w.length, 0) / words.length).toFixed(1);
|
|
const avgSentLen = (words.length / sentences.length).toFixed(1);
|
|
// Flesch ease (English approx)
|
|
const syllables = words.reduce((s,w) => s + Math.max(1, (w.match(/[aeiouyAEIOUY]/g)||[]).length), 0);
|
|
const flesch = Math.round(206.835 - 1.015 * (words.length/sentences.length) - 84.6 * (syllables/words.length));
|
|
let level;
|
|
if(flesch >= 90) level = '✅ Tres facile';
|
|
else if(flesch >= 60) level = '✅ Facile';
|
|
else if(flesch >= 30) level = '⚠️ Difficile';
|
|
else level = '❌ Tres difficile';
|
|
let html = `<div class="results-grid">
|
|
<div class="dns-row clean"><span class="rbl">Mots</span><span class="status">${words.length}</span></div>
|
|
<div class="dns-row clean"><span class="rbl">Phrases</span><span class="status">${sentences.length}</span></div>
|
|
<div class="dns-row clean"><span class="rbl">Caracteres</span><span class="status">${chars}</span></div>
|
|
<div class="dns-row clean"><span class="rbl">Mot moyen</span><span class="status">${avgWordLen} chars</span></div>
|
|
<div class="dns-row clean"><span class="rbl">Phrase moyenne</span><span class="status">${avgSentLen} mots</span></div>
|
|
<div class="dns-row"><span class="rbl">Flesch score</span><span class="status">${flesch} - ${level}</span></div>
|
|
<div class="dns-row ${chars > 50 && chars < 5000?'clean':'listed'}"><span class="rbl">Longueur OK email</span><span class="status">${chars > 50 && chars < 5000 ? '✅ Optimal (50-5000)' : '⚠️ ' + (chars < 50 ? 'Trop court' : 'Trop long')}</span></div>
|
|
</div>`;
|
|
document.getElementById('result').innerHTML = html;
|
|
}
|
|
</script>
|
|
</body></html> |