Générateur de Pages Ressources - IA Formation
📝 Configuration de la page
📥 Mise à jour (Optionnel)
đź’ˇ Pour mettre Ă jour une page existante
Collez le code HTML de votre page actuelle ci-dessous :
🚀 Actions
📋 Ressources ajoutées
📱 Aperçu de la page
🚀 Configurez votre page et ajoutez des ressources pour voir l'aperçu
📄 Code HTML généré
`;
return html;
}
function importFromHTML() {
const htmlContent = document.getElementById('importHTML').value.trim();
if (!htmlContent) {
alert('⚠️ Veuillez coller du code HTML dans la zone de texte');
return;
}
try {
// Créer un document temporaire pour parser le HTML
const parser = new DOMParser();
const doc = parser.parseFromString(htmlContent, 'text/html');
// Extraire le titre et sous-titre
const titleElement = doc.querySelector('.page-title');
const subtitleElement = doc.querySelector('.page-subtitle');
if (titleElement) {
document.getElementById('pageTitle').value = titleElement.textContent.trim();
}
if (subtitleElement) {
document.getElementById('pageSubtitle').value = subtitleElement.textContent.trim();
}
// Réinitialiser les ressources
resources = {
outils: [],
guides: [],
reunions: [],
formations: [],
pedagogiques: [],
guides_peda: [],
codage: [],
pdf: []
};
// Extraire les ressources par section
const sections = doc.querySelectorAll('.category-section');
sections.forEach(section => {
const titleElement = section.querySelector('.category-title');
if (titleElement) {
const sectionTitle = titleElement.textContent.trim();
let category = null;
// Déterminer la catégorie basée sur le titre
if (sectionTitle.includes('Outils de vente')) category = 'outils';
else if (sectionTitle.includes('Guides pratiques')) category = 'guides';
else if (sectionTitle.includes('Comptes-rendus') || sectionTitle.includes('réunions')) category = 'reunions';
else if (sectionTitle.includes('Formations')) category = 'formations';
else if (sectionTitle.includes('Outils pédagogiques')) category = 'pedagogiques';
else if (sectionTitle.includes('Guides pédagogiques')) category = 'guides_peda';
else if (sectionTitle.includes('Outils de codage')) category = 'codage';
else if (sectionTitle.includes('PDF')) category = 'pdf';
if (category) {
const cards = section.querySelectorAll('.resource-card');
cards.forEach((card, index) => {
const titleEl = card.querySelector('.resource-title');
const descEl = card.querySelector('.resource-description');
const linkEl = card.querySelector('.resource-link');
if (titleEl && descEl && linkEl) {
let title = titleEl.textContent.trim();
let date = null;
// Extraire la date si c'est un CR de réunion
if (category === 'reunions') {
const dateMatch = title.match(/- (\d{1,2} \w+ \d{4})$/);
if (dateMatch) {
const dateStr = dateMatch[1];
title = title.replace(dateMatch[0], '').trim();
// Convertir la date française en format ISO
const months = {
'janvier': '01', 'février': '02', 'mars': '03', 'avril': '04',
'mai': '05', 'juin': '06', 'juillet': '07', 'août': '08',
'septembre': '09', 'octobre': '10', 'novembre': '11', 'décembre': '12'
};
const parts = dateStr.split(' ');
if (parts.length === 3) {
const day = parts[0].padStart(2, '0');
const month = months[parts[1].toLowerCase()];
const year = parts[2];
if (month) {
date = `${year}-${month}-${day}`;
}
}
}
}
const resource = {
id: Date.now() + index,
title: title,
description: descEl.textContent.trim(),
link: linkEl.href,
date: date
};
resources[category].push(resource);
}
});
}
}
});
// Vider la zone d'import
document.getElementById('importHTML').value = '';
// Mettre Ă jour l'affichage
updateDisplay();
alert('✅ Données importées avec succès !');
} catch (error) {
console.error('Erreur lors de l\'import:', error);
alert('❌ Erreur lors de l\'import du HTML. Vérifiez le format du code.');
}
}
function copyHTML() {
const htmlCode = document.getElementById('htmlCode');
htmlCode.select();
document.execCommand('copy');
alert('✅ Code HTML copié dans le presse-papiers !');
}
function closeModal() {
document.getElementById('htmlModal').style.display = 'none';
}
function clearAll() {
if (confirm('⚠️ Êtes-vous sûr de vouloir vider toutes les ressources ?')) {
resources = {
outils: [],
guides: [],
reunions: [],
formations: [],
pedagogiques: [],
guides_peda: [],
codage: [],
pdf: []
};
updateDisplay();
}
}
function saveData() {
const data = {
resources: resources,
pageTitle: document.getElementById('pageTitle').value,
pageSubtitle: document.getElementById('pageSubtitle').value,
theme: currentTheme
};
const dataStr = JSON.stringify(data, null, 2);
const blob = new Blob([dataStr], {type: 'application/json'});
const url = URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'page-ressources-' + new Date().toISOString().split('T')[0] + '.json';
a.click();
URL.revokeObjectURL(url);
}
function loadData() {
const input = document.createElement('input');
input.type = 'file';
input.accept = '.json';
input.onchange = function(e) {
const file = e.target.files[0];
if (file) {
const reader = new FileReader();
reader.onload = function(e) {
try {
const data = JSON.parse(e.target.result);
if (data.resources) resources = data.resources;
if (data.pageTitle) document.getElementById('pageTitle').value = data.pageTitle;
if (data.pageSubtitle) document.getElementById('pageSubtitle').value = data.pageSubtitle;
if (data.theme) {
currentTheme = data.theme;
document.querySelectorAll('.theme-option').forEach(o => o.classList.remove('active'));
document.querySelector(`[data-theme="${data.theme}"]`).classList.add('active');
}
updateDisplay();
alert('✅ Données chargées avec succès !');
} catch (error) {
alert('❌ Erreur lors du chargement du fichier');
}
};
reader.readAsText(file);
}
};
input.click();
}
// Fermer la modal en cliquant à l'extérieur
document.getElementById('htmlModal').addEventListener('click', function(e) {
if (e.target === this) {
closeModal();
}
});
// Initialisation
updateDisplay();