Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DETECT/DETECT.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ Ce mécanisme est particulièrement à l’œuvre dans la diffusion des thèses

source : https://www.psychomedia.qc.ca/psychologie/biais-cognitifs

## T0122: Effet de contexte
## TE0122: Effet de contexte
Tendance à analyser une perception par rapport à des situation proches ou similaires.

https://en.wikipedia.org/wiki/Context_effect
Expand Down
2 changes: 1 addition & 1 deletion MEMORISE/MEMORISE.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Tactique qui favorise la mémorisation d'une information en s'appuyant sur des s

## TE0321 : [Stéréotype implicite](https://en.wikipedia.org/wiki/Implicit_stereotype)
## TE0322 : [Effacement négatif](https://en.wikipedia.org/wiki/Fading_affect_bias)
## TE0323 : [Effet de contexte](https://books.openedition.org/editionsmsh/14811)
## TE0122 : [Effet de contexte](https://books.openedition.org/editionsmsh/14811)

# TA0033 Exposition de contenus
Tactique qui favorise la surexposition à une information pour favoriser sa mémorisation
Expand Down
148 changes: 148 additions & 0 deletions plugin/plugin_chrome/releases/Plugin-dima/modules/uiManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,110 @@ ${techniques.map(t => `• ${t.nom}`).join('\n')}
Contenu: ${this.analysisResults.contentLength} caractères`;
}

getScoreIcon(score) {
if (score >= 75) return '🚨'; // Critique
if (score >= 50) return '⚠️'; // Élevé
if (score >= 30) return '⚡'; // Modéré
if (score >= 15) return '👀'; // Faible
return '✅'; // Très faible
}

generateExecutiveSummary() {
const score = this.analysisResults.globalScore;
const techniqueCount = this.analysisResults.detectedTechniques.length;
const topTechniques = this.analysisResults.detectedTechniques.slice(0, 3);

let summary = "";

// Évaluation générale selon le score
if (score >= 75) {
summary = `🚨 <strong>Manipulation intensive détectée</strong> : Ce contenu présente un niveau critique de techniques manipulatoires (${techniqueCount} technique${techniqueCount > 1 ? 's' : ''}). `;
} else if (score >= 50) {
summary = `⚠️ <strong>Manipulation significative</strong> : Ce contenu utilise plusieurs techniques suspectes (${techniqueCount} technique${techniqueCount > 1 ? 's' : ''}). `;
} else if (score >= 30) {
summary = `⚡ <strong>Éléments manipulatoires présents</strong> : Quelques techniques détectées nécessitent votre attention (${techniqueCount} technique${techniqueCount > 1 ? 's' : ''}). `;
} else {
summary = `👀 <strong>Faible niveau de manipulation</strong> : Peu d'éléments manipulatoires détectés (${techniqueCount} technique${techniqueCount > 1 ? 's' : ''}). `;
}

// Analyse des phases dominantes
if (this.analysisResults.phaseScores && Object.keys(this.analysisResults.phaseScores).length > 0) {
const sortedPhases = Object.entries(this.analysisResults.phaseScores)
.sort(([,a], [,b]) => b - a)
.slice(0, 2);

if (sortedPhases.length > 0) {
const dominantPhase = sortedPhases[0][0];
summary += `La manipulation se concentre principalement sur la phase "<strong>${dominantPhase}</strong>" (${this.getPhaseExplanation(dominantPhase)}). `;
}
}

// Technique principale
if (topTechniques.length > 0) {
const mainTechnique = topTechniques[0];
summary += `La technique dominante est <strong>${mainTechnique.nom}</strong> avec ${mainTechnique.confidence}% de confiance. `;

// Conseil spécifique selon la technique
summary += this.getTechniqueAdvice(mainTechnique.index);
}

return summary;
}

getPhaseEmoji(phase) {
const emojis = {
'Detect': '👁️',
'Informer': '📢',
'Mémoriser': '🧠',
'Act': '⚡'
};
return emojis[phase] || '📍';
}

getPhaseColor(phase) {
const colors = {
'Detect': '#e3f2fd', // Bleu clair
'Informer': '#f3e5f5', // Violet clair
'Mémoriser': '#e8f5e8', // Vert clair
'Act': '#fff3e0' // Orange clair
};
return colors[phase] || '#f5f5f5';
}

getPhaseDescription(phase) {
const descriptions = {
'Detect': 'Capter l\'attention',
'Informer': 'Influencer ou orienter la compréhension',
'Mémoriser': 'Ancrer l\'information',
'Act': 'Provoquer l\'action'
};
return descriptions[phase] || phase;
}

getPhaseExplanation(phase) {
const explanations = {
'Detect': 'techniques pour attirer et capter votre attention',
'Informer': 'méthodes pour orienter votre interprétation des faits',
'Mémoriser': 'stratégies pour ancrer certaines idées dans votre mémoire',
'Act': 'pressions pour vous pousser à agir rapidement'
};
return explanations[phase] || 'manipulation cognitive';
}

getTechniqueAdvice(techniqueIndex) {
const advices = {
'TE0500': 'Méfiez-vous des titres sensationnalistes et vérifiez les sources.',
'TE0132': 'Prenez du recul face aux messages alarmistes excessifs.',
'TE0501': 'Résistez à la pression de l\'urgence et prenez le temps de réfléchir.',
'TE0422': 'Vérifiez les qualifications réelles des "experts" cités.',
'TE0251': 'Questionnez les affirmations sur ce que "tout le monde" pense.',
'TE0221': 'Attention aux généralisations excessives sur des groupes.',
'TE0212': 'Ne tirez pas de conclusions générales à partir d\'anecdotes.',
'TE0321': 'Cherchez des sources contradictoires pour éviter le biais de confirmation.'
};
return advices[techniqueIndex] || 'Restez critique et vérifiez les informations.';
}

showModal() {
try {
this.log('Affichage du modal');
Expand Down Expand Up @@ -173,6 +277,18 @@ Contenu: ${this.analysisResults.contentLength} caractères`;
</div>
</div>

<!-- Résumé exécutif -->
${this.analysisResults.globalScore > 15 ? `
<div style="background: ${this.analysisResults.globalScore >= 50 ? '#ffebee' : this.analysisResults.globalScore >= 30 ? '#fff3e0' : '#e8f5e8'}; padding: 20px; border-radius: 12px; margin-bottom: 25px; border-left: 4px solid ${this.analysisResults.riskColor};">
<h4 style="margin: 0 0 10px 0; color: ${this.analysisResults.riskColor}; font-size: 1.1em;">
${this.getScoreIcon(this.analysisResults.globalScore)} Résumé de l'analyse
</h4>
<p style="margin: 0; color: #444; line-height: 1.5; font-size: 0.95em;">
${this.generateExecutiveSummary()}
</p>
</div>
` : ''}

<!-- Informations sur la page -->
<div style="background: #f8f9fa; padding: 20px; border-radius: 12px; margin-bottom: 25px; border: 1px solid #e9ecef;">
<h4 style="margin: 0 0 10px 0; color: #2c3e50; font-size: 1.1em;">📄 Page analysée</h4>
Expand All @@ -184,6 +300,38 @@ Contenu: ${this.analysisResults.contentLength} caractères`;
</div>
</div>

<!-- Répartition par phase DIMA -->
${this.analysisResults.phaseScores && Object.keys(this.analysisResults.phaseScores).length > 0 ? `
<div style="background: #f8f9fa; padding: 20px; border-radius: 12px; margin-bottom: 25px; border: 1px solid #e9ecef;">
<h4 style="margin: 0 0 15px 0; color: #2c3e50; font-size: 1.1em;">📊 Répartition par phase DIMA</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 15px;">
${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 `
<div style="text-align: center;">
<div style="font-size: 0.85em; color: #666; margin-bottom: 8px; font-weight: 500;">
${this.getPhaseEmoji(phase)} ${phase}
</div>
<div style="background: ${this.getPhaseColor(phase)}; height: 12px; border-radius: 6px; margin-bottom: 8px; overflow: hidden;">
<div style="background: ${this.analysisResults.riskColor}; height: 100%; width: ${Math.min(percentage, 100)}%; border-radius: 6px; transition: width 0.8s ease;"></div>
</div>
<div style="font-size: 0.8em; font-weight: bold; color: #333;">
${score.toFixed(1)} pts
</div>
<div style="font-size: 0.7em; color: #888;">
${this.getPhaseDescription(phase)}
</div>
</div>
`;
}).join('')}
</div>
<div style="margin-top: 15px; padding-top: 15px; border-top: 1px solid #e9ecef; font-size: 0.8em; color: #666; text-align: center;">
💡 La matrice DIMA analyse comment l'information traverse les 4 phases cognitives
</div>
</div>
` : ''}

<!-- Message si aucune technique -->
${this.analysisResults.detectedTechniques.length === 0 ? `
<div style="background: linear-gradient(135deg, #d4edda, #c3e6cb); color: #155724; padding: 25px; border-radius: 12px; text-align: center; border: 1px solid #c3e6cb;">
Expand Down