Différences entre versions de « MediaWiki:Common.js »

De wikiup
Sauter à la navigation Sauter à la recherche
 
(62 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
/* Tout JavaScript ici sera chargé avec chaque page accédée par n’importe quel utilisateur. */
+
$(document).ready(function() {
 +
    // Nettoyer les anciens boutons
 +
    $('#mw-content-text').find('#fontSizeButton, #themeButton').remove();
 +
    $('#fontSizeMenu').remove();
 +
 
 +
    // Créer un bouton pour changer la taille du texte via un menu déroulant
 +
    var fontSizeButton = $('<button>Changer la taille du texte</button>')
 +
        .attr('id', 'fontSizeButton')
 +
        .attr('aria-haspopup', 'true')
 +
        .attr('aria-expanded', 'false')
 +
        .attr('aria-controls', 'fontSizeMenu')
 +
        .attr('role', 'button');
 +
 
 +
    // Créer le menu déroulant invisible par défaut
 +
    var fontSizeMenu = $('<ul></ul>')
 +
        .attr('id', 'fontSizeMenu')
 +
        .attr('role', 'menu')
 +
        .attr('aria-hidden', 'true')
 +
        .css({
 +
            'list-style': 'none',
 +
            'padding': '5px',
 +
            'border': '1px solid #ccc',
 +
            'display': 'none',
 +
            'position': 'absolute',
 +
            'background-color': '#fff'
 +
        });
 +
 
 +
    // Ajouter des options pour différentes tailles de police
 +
    var fontSizes = [12, 14, 16, 18, 20, 24, 28, 32, 36, 40, 44, 48];
 +
    fontSizes.forEach(function(size) {
 +
        var listItem = $('<li></li>')
 +
            .attr('role', 'menuitem')
 +
            .css('cursor', 'pointer')
 +
            .text(size + ' px')
 +
            .click(function() {
 +
                $('body').css('font-size', size + 'px');
 +
                $('#fontSizeMenu').hide(); // Fermer le menu après sélection
 +
                fontSizeButton.attr('aria-expanded', 'false');
 +
            });
 +
        fontSizeMenu.append(listItem);
 +
    });
  
 +
    // Ajouter le bouton et le menu déroulant au début du contenu
 +
    $('#mw-content-text').prepend(fontSizeButton, fontSizeMenu);
  
$(document).ready(function() {
+
    // Fonction pour afficher/masquer le menu de taille de texte
 +
    fontSizeButton.click(function() {
 +
        var isExpanded = $(this).attr('aria-expanded') === 'true';
 +
        $('#fontSizeMenu').toggle(!isExpanded); // Affiche ou cache le menu
 +
        $(this).attr('aria-expanded', !isExpanded);
 +
        fontSizeMenu.attr('aria-hidden', isExpanded);
 +
    });
  
     console.log('Script chargé et exécuté'); // Ajout pour vérifier l'exécution du script
+
     // Fermer le menu si l'utilisateur clique ailleurs
 +
    $(document).click(function(e) {
 +
        if (!$(e.target).closest('#fontSizeButton, #fontSizeMenu').length) {
 +
            $('#fontSizeMenu').hide();
 +
            fontSizeButton.attr('aria-expanded', 'false');
 +
            fontSizeMenu.attr('aria-hidden', 'true');
 +
        }
 +
    });
  
     // Créer des boutons d'ajustement de la taille des polices avec des attributs ARIA
+
     // Créer un bouton pour changer le thème
     var increaseFontButton = $('<button>Augmenter la taille du texte</button>')
+
     var themeButton = $('<button>Changer le thème</button>')
         .attr('id', 'increaseFont')
+
         .attr('id', 'themeButton')
         .attr('aria-label', 'Augmenter la taille du texte')
+
         .attr('aria-pressed', 'false')
         .attr('aria-controls', 'mw-content-text')
+
         .attr('aria-label', 'Changer le thème entre clair et sombre')
 
         .attr('role', 'button');
 
         .attr('role', 'button');
  
     var decreaseFontButton = $('<button>Réduire la taille du texte</button>')
+
     // Ajouter le bouton au début du contenu
        .attr('id', 'decreaseFont')
+
    $('#mw-content-text').prepend(themeButton);
        .attr('aria-label', 'Réduire la taille du texte')
 
        .attr('aria-controls', 'mw-content-text')
 
        .attr('role', 'button');
 
  
     // Ajouter les boutons au début du contenu
+
     // Appliquer le thème par défaut basé sur le stockage local
     $('#mw-content-text').prepend(increaseFontButton, decreaseFontButton);
+
    var savedTheme = localStorage.getItem('theme');
});
+
     if (savedTheme === 'dark') {
 +
        $('body').addClass('dark-theme');
 +
        themeButton.text('Passer au thème clair');
 +
        themeButton.attr('aria-pressed', 'true');
 +
    } else {
 +
        $('body').removeClass('dark-theme');
 +
        themeButton.text('Passer au thème sombre');
 +
        themeButton.attr('aria-pressed', 'false');
 +
    }
  
     // Créer des boutons d'ajustement de la taille des polices
+
     themeButton.click(function() {
    var increaseFontButton = $('<button>Augmenter la taille du texte</button>').attr('id', 'increaseFont');
+
        var isDarkTheme = $(this).attr('aria-pressed') === 'true';
    var decreaseFontButton = $('<button>Réduire la taille du texte</button>').attr('id', 'decreaseFont');
+
        if (isDarkTheme) {
   
+
            $('body').removeClass('dark-theme');
    // Ajouter les boutons au début du contenu
+
            themeButton.text('Passer au thème sombre');
    $('#mw-content-text').prepend(increaseFontButton, decreaseFontButton);
+
            themeButton.attr('aria-pressed', 'false');
   
+
            localStorage.setItem('theme', 'light');
    // Définir une taille de police initiale
+
        } else {
    var currentFontSize = 16; // Taille de base
+
            $('body').addClass('dark-theme');
    $('body').css('font-size', currentFontSize + 'px');
+
            themeButton.text('Passer au thème clair');
   
+
            themeButton.attr('aria-pressed', 'true');
    // Fonction pour augmenter la taille de la police
+
            localStorage.setItem('theme', 'dark');
    $('#increaseFont').click(function() {
+
        }
        currentFontSize += 2;
 
        $('body').css('font-size', currentFontSize + 'px');
 
 
     });
 
     });
   
+
 
     // Fonction pour réduire la taille de la police
+
     // Assurer le chargement correct du CSS pour le mode sombre
     $('#decreaseFont').click(function() {
+
     (function() {
         if (currentFontSize > 10) { // Empêche la taille de devenir trop petite
+
         function updateStyles(isDarkMode) {
             currentFontSize -= 2;
+
             var darkModeStylesheet = document.getElementById('dark-theme-stylesheet');
             $('body').css('font-size', currentFontSize + 'px');
+
             if (isDarkMode) {
 +
                if (!darkModeStylesheet) {
 +
                    darkModeStylesheet = document.createElement('link');
 +
                    darkModeStylesheet.id = 'dark-theme-stylesheet';
 +
                    darkModeStylesheet.rel = 'stylesheet';
 +
                    darkModeStylesheet.href = mw.util.getUrl('/skins/Vector/skinStyles/custom-dark-mode.css');
 +
                    document.head.appendChild(darkModeStylesheet);
 +
                }
 +
            } else {
 +
                if (darkModeStylesheet) {
 +
                    darkModeStylesheet.remove();
 +
                }
 +
            }
 
         }
 
         }
     });
+
 
 +
        // Charger le mode sauvegardé depuis localStorage
 +
        document.addEventListener('DOMContentLoaded', function() {
 +
            var darkMode = localStorage.getItem('darkMode') === 'true';
 +
            if (darkMode) {
 +
                document.body.classList.add('dark-theme');
 +
                updateStyles(true);
 +
            }
 +
        });
 +
     })();
 
});
 
});
  
####################################################################
 
/*
 
  
 +
/*mettre le menu en 1er en navigation par tab/lecteur d'écran*/
 
$(document).ready(function() {
 
$(document).ready(function() {
     // Créer des boutons d'ajustement de la taille des polices
+
     // Sélectionne et modifie le tabindex des éléments de navigation principaux
     var increaseFontButton = $('<button>Augmenter la taille du texte</button>').attr('id', 'increaseFont');
+
     var menus = [
    var decreaseFontButton = $('<button>Réduire la taille du texte</button>').attr('id', 'decreaseFont');
+
        '#p-Menu',
    $('#mw-content-text').prepend(increaseFontButton, decreaseFontButton);
+
        '#p-Créer/Fabriquer',
   
+
        '#p-Projets et supports pédagogiques par état d\'avancement',
    // Charger la taille de police à partir de localStorage
+
        '#p-Catégorie',
    var currentFontSize = localStorage.getItem('fontSize') || 16;
+
        '#p-Infos pratiques Humanlab Rennes',
    $('body').css('font-size', currentFontSize + 'px');
+
        '#p-Réseau des Humanlabs',
      
+
        '#p-tb'
    // Fonction pour augmenter la taille de la police
+
     ];
     $('#increaseFont').click(function() {
+
 
         currentFontSize = parseInt(currentFontSize) + 2;
+
     menus.forEach(function(menu, index) {
         $('body').css('font-size', currentFontSize + 'px');
+
         var element = document.querySelector(menu);
        localStorage.setItem('fontSize', currentFontSize); // Sauvegarder la taille dans localStorage
+
         if (element) {
    });
+
            element.setAttribute('tabindex', index + 1); // Attribue un tabindex en fonction de l'ordre
   
+
            console.log("Tabindex ajouté à " + menu);
    // Fonction pour réduire la taille de la police
+
         } else {
    $('#decreaseFont').click(function() {
+
             console.error(menu + " non trouvé.");
         if (currentFontSize > 10) {
 
             currentFontSize = parseInt(currentFontSize) - 2;
 
            $('body').css('font-size', currentFontSize + 'px');
 
            localStorage.setItem('fontSize', currentFontSize); // Sauvegarder la taille dans localStorage
 
 
         }
 
         }
 
     });
 
     });
 
});
 
});
 
*/
 
 
<button id="increaseFont" aria-label="Augmenter la taille du texte">Augmenter la taille du texte</button>
 
<button id="decreaseFont" aria-label="Réduire la taille du texte">Réduire la taille du texte</button>
 

Version actuelle datée du 27 septembre 2024 à 11:27

$(document).ready(function() {
    // Nettoyer les anciens boutons
    $('#mw-content-text').find('#fontSizeButton, #themeButton').remove();
    $('#fontSizeMenu').remove();

    // Créer un bouton pour changer la taille du texte via un menu déroulant
    var fontSizeButton = $('<button>Changer la taille du texte</button>')
        .attr('id', 'fontSizeButton')
        .attr('aria-haspopup', 'true')
        .attr('aria-expanded', 'false')
        .attr('aria-controls', 'fontSizeMenu')
        .attr('role', 'button');

    // Créer le menu déroulant invisible par défaut
    var fontSizeMenu = $('<ul></ul>')
        .attr('id', 'fontSizeMenu')
        .attr('role', 'menu')
        .attr('aria-hidden', 'true')
        .css({
            'list-style': 'none',
            'padding': '5px',
            'border': '1px solid #ccc',
            'display': 'none',
            'position': 'absolute',
            'background-color': '#fff'
        });

    // Ajouter des options pour différentes tailles de police
    var fontSizes = [12, 14, 16, 18, 20, 24, 28, 32, 36, 40, 44, 48];
    fontSizes.forEach(function(size) {
        var listItem = $('<li></li>')
            .attr('role', 'menuitem')
            .css('cursor', 'pointer')
            .text(size + ' px')
            .click(function() {
                $('body').css('font-size', size + 'px');
                $('#fontSizeMenu').hide(); // Fermer le menu après sélection
                fontSizeButton.attr('aria-expanded', 'false');
            });
        fontSizeMenu.append(listItem);
    });

    // Ajouter le bouton et le menu déroulant au début du contenu
    $('#mw-content-text').prepend(fontSizeButton, fontSizeMenu);

    // Fonction pour afficher/masquer le menu de taille de texte
    fontSizeButton.click(function() {
        var isExpanded = $(this).attr('aria-expanded') === 'true';
        $('#fontSizeMenu').toggle(!isExpanded); // Affiche ou cache le menu
        $(this).attr('aria-expanded', !isExpanded);
        fontSizeMenu.attr('aria-hidden', isExpanded);
    });

    // Fermer le menu si l'utilisateur clique ailleurs
    $(document).click(function(e) {
        if (!$(e.target).closest('#fontSizeButton, #fontSizeMenu').length) {
            $('#fontSizeMenu').hide();
            fontSizeButton.attr('aria-expanded', 'false');
            fontSizeMenu.attr('aria-hidden', 'true');
        }
    });

    // Créer un bouton pour changer le thème
    var themeButton = $('<button>Changer le thème</button>')
        .attr('id', 'themeButton')
        .attr('aria-pressed', 'false')
        .attr('aria-label', 'Changer le thème entre clair et sombre')
        .attr('role', 'button');

    // Ajouter le bouton au début du contenu
    $('#mw-content-text').prepend(themeButton);

    // Appliquer le thème par défaut basé sur le stockage local
    var savedTheme = localStorage.getItem('theme');
    if (savedTheme === 'dark') {
        $('body').addClass('dark-theme');
        themeButton.text('Passer au thème clair');
        themeButton.attr('aria-pressed', 'true');
    } else {
        $('body').removeClass('dark-theme');
        themeButton.text('Passer au thème sombre');
        themeButton.attr('aria-pressed', 'false');
    }

    themeButton.click(function() {
        var isDarkTheme = $(this).attr('aria-pressed') === 'true';
        if (isDarkTheme) {
            $('body').removeClass('dark-theme');
            themeButton.text('Passer au thème sombre');
            themeButton.attr('aria-pressed', 'false');
            localStorage.setItem('theme', 'light');
        } else {
            $('body').addClass('dark-theme');
            themeButton.text('Passer au thème clair');
            themeButton.attr('aria-pressed', 'true');
            localStorage.setItem('theme', 'dark');
        }
    });

    // Assurer le chargement correct du CSS pour le mode sombre
    (function() {
        function updateStyles(isDarkMode) {
            var darkModeStylesheet = document.getElementById('dark-theme-stylesheet');
            if (isDarkMode) {
                if (!darkModeStylesheet) {
                    darkModeStylesheet = document.createElement('link');
                    darkModeStylesheet.id = 'dark-theme-stylesheet';
                    darkModeStylesheet.rel = 'stylesheet';
                    darkModeStylesheet.href = mw.util.getUrl('/skins/Vector/skinStyles/custom-dark-mode.css');
                    document.head.appendChild(darkModeStylesheet);
                }
            } else {
                if (darkModeStylesheet) {
                    darkModeStylesheet.remove();
                }
            }
        }

        // Charger le mode sauvegardé depuis localStorage
        document.addEventListener('DOMContentLoaded', function() {
            var darkMode = localStorage.getItem('darkMode') === 'true';
            if (darkMode) {
                document.body.classList.add('dark-theme');
                updateStyles(true);
            }
        });
    })();
});


/*mettre le menu en 1er en navigation par tab/lecteur d'écran*/
$(document).ready(function() {
    // Sélectionne et modifie le tabindex des éléments de navigation principaux
    var menus = [
        '#p-Menu',
        '#p-Créer/Fabriquer',
        '#p-Projets et supports pédagogiques par état d\'avancement',
        '#p-Catégorie',
        '#p-Infos pratiques Humanlab Rennes',
        '#p-Réseau des Humanlabs',
        '#p-tb'
    ];

    menus.forEach(function(menu, index) {
        var element = document.querySelector(menu);
        if (element) {
            element.setAttribute('tabindex', index + 1); // Attribue un tabindex en fonction de l'ordre
            console.log("Tabindex ajouté à " + menu);
        } else {
            console.error(menu + " non trouvé.");
        }
    });
});