// UI Manager Module
// Responsible for creating and managing the user interface elements
class UIManager {
constructor(settings) {
this.settings = settings || {
debugMode: false,
};
this.buttonCreated = false;
this.analysisResults = null;
this.pageType = 'general';
}
log(message, data = null) {
if (this.settings.debugMode) {
console.log(`UIManager: ${message}`, data || "");
}
}
setPageType(pageType) {
this.pageType = pageType;
}
createButton(analysisResults = null) {
if (analysisResults) {
this.analysisResults = analysisResults;
}
if (!this.analysisResults) {
console.error('DIMA: Aucun résultat d\'analyse disponible pour créer le bouton');
return;
}
try {
// Supprimer bouton existant
document.getElementById('dima-btn')?.remove();
if (this.buttonCreated) return;
const button = document.createElement('div');
button.id = 'dima-btn';
button.innerHTML = `
Analyse DIMA
Détection de techniques de manipulation cognitive par
M82 Project
${this.analysisResults.globalScore}
Score Global
${this.analysisResults.detectedTechniques.length}
Techniques
${this.analysisResults.riskLevel}
Niveau Risque
${this.analysisResults.contentLength}
Caractères
${this.analysisResults.globalScore > 15 ? `
${this.getScoreIcon(this.analysisResults.globalScore)} Résumé de l'analyse
${this.generateExecutiveSummary()}
` : ''}
📄 Page analysée
${this.analysisResults.title}
${this.analysisResults.url}
Analysé le ${new Date(this.analysisResults.timestamp).toLocaleString('fr-FR')} •
${this.analysisResults.analyzedText} caractères traités • Type: ${this.pageType}
${this.analysisResults.phaseScores && Object.keys(this.analysisResults.phaseScores).length > 0 ? `
📊 Répartition par phase DIMA
${Object.entries(this.analysisResults.phaseScores).map(([phase, score]) => {
const maxScore = Math.max(...Object.values(this.analysisResults.phaseScores));
const percentage = maxScore > 0 ? (score / maxScore) * 100 : 0;
return `
${this.getPhaseEmoji(phase)} ${phase}
${score.toFixed(1)} pts
${this.getPhaseDescription(phase)}
`;
}).join('')}
💡 La matrice DIMA analyse comment l'information traverse les 4 phases cognitives
` : ''}
${this.analysisResults.detectedTechniques.length === 0 ? `
✅
Aucune manipulation détectée
Le contenu analysé semble exempt de techniques de manipulation cognitive manifestes
` : `
⚠️ Techniques de manipulation détectées
${this.analysisResults.detectedTechniques.slice(0, 8).map(technique => `
${technique.phase === 'Detect' ? '👁️' : technique.phase === 'Informer' ? '📢' : technique.phase === 'Mémoriser' ? '🧠' : '⚡'} ${technique.index}: ${technique.nom}
${technique.tactic ? `
↳ Tactique: ${technique.tactic}
` : ''}
${technique.description ? `
${technique.description}
` : ''}
${technique.confidence}%
${technique.phase}
Score pondéré: ${technique.weightedScore?.toFixed(1) || technique.score}
${technique.matchedKeywords?.length > 0 ? `
🔍 Mots-clés détectés:
${technique.matchedKeywords.slice(0, 4).map(keyword =>
`
${keyword.keyword} ${(keyword.count > 1) ? `(×${keyword.count})` : ''}
`
).join('')}
${technique.matchedKeywords.length > 4 ?
`+${technique.matchedKeywords.length - 4} autres...`
: ''
}
` : ''}
`).join('')}
`}
`;
modal.addEventListener('click', (e) => {
if (e.target === modal) modal.remove();
});
document.body.appendChild(modal);
this.log('Modal affiché');
} catch (error) {
console.error('DIMA: Erreur modal:', error);
}
}
}
// Make UIManager available globally for Chrome extension
window.UIManager = UIManager;