Basculer le menu
Changer de menu des préférences
Basculer le menu personnel
Non connecté(e)
Votre adresse IP sera visible au public si vous faites des modifications.

« MediaWiki:Common.js » : différence entre les versions

Page de l’interface de MediaWiki
Hiob (discussion | contributions)
Aucun résumé des modifications
Balise : Révoqué
Hiob (discussion | contributions)
Annulation des modifications 3831 de Hiob (discussion)
Balise : Annulation
 
(5 versions intermédiaires par le même utilisateur non affichées)
Ligne 15 : Ligne 15 :


/**
/**
  * Intégration recherche page d'accueil avec Citizen
  * MinecraftConnect - Boutons de copie d'adresse serveur Minecraft
* Inspiré de l'extension PreToClip
  */
  */
(function() {
(function() {
  'use strict';
    'use strict';
 
  mw.hook('wikipage.content').add(function($content) {
    // Sélectionne le bouton de recherche custom
    const $customSearch = $content.find('.home-header__search');
      
      
     if (!$customSearch.length) return;
     function initMinecraftButtons($content) {
        $content.find('.minecraft-connect-wrapper').each(function() {
            var $wrapper = $(this);
           
            // Éviter la double initialisation
            if ($wrapper.data('mc-initialized')) {
                return;
            }
            $wrapper.data('mc-initialized', true);
           
            var serverAddress = $wrapper.data('mc-server');
            var buttonText = $wrapper.data('mc-text');
           
            // Créer le bouton
            var $button = $('<button>')
                .addClass('mw-ui-button mw-ui-progressive minecraft-connect-btn')
                .attr('type', 'button')
                .attr('title', 'Cliquer pour copier : ' + serverAddress)
                .text(buttonText + ' 📋');
           
            // Remplacer le span par le bouton
            $wrapper.replaceWith($button);
           
            // Gestion du clic
            $button.on('click', function() {
                copyToClipboard(serverAddress, $button, buttonText);
            });
        });
    }
      
      
     // Déclenche la recherche native de Citizen au clic
     function copyToClipboard(text, $button, originalText) {
    $customSearch.on('click', function(e) {
        // Méthode moderne (Clipboard API)
      e.preventDefault();
        if (navigator.clipboard && navigator.clipboard.writeText) {
     
            navigator.clipboard.writeText(text).then(
      // Méthode 1: Déclenche le bouton de recherche Citizen
                function() {
      const citizenSearchButton = document.querySelector('.citizen-search__button');
                    showSuccess($button, originalText);
      if (citizenSearchButton) {
                },
        citizenSearchButton.click();
                function() {
        return;
                    // Fallback si échec
      }
                    fallbackCopy(text, $button, originalText);
     
                }
      // Méthode 2 (fallback): Focus direct sur l'input
            );
      const searchInput = document.querySelector('#searchInput, .citizen-search__input');
        } else {
      if (searchInput) {
            // Fallback pour anciens navigateurs
        searchInput.focus();
            fallbackCopy(text, $button, originalText);
      }
        }
     });
     }
      
      
     // Support du raccourci clavier "/"
     function fallbackCopy(text, $button, originalText) {
    document.addEventListener('keydown', function(e) {
        var $temp = $('<textarea>')
      if (e.key === '/' && !isInputFocused()) {
            .val(text)
         e.preventDefault();
            .css({
         $customSearch.click();
                position: 'fixed',
      }
                top: 0,
     });
                left: 0,
                width: '2em',
                height: '2em',
                padding: 0,
                border: 'none',
                outline: 'none',
                boxShadow: 'none',
                background: 'transparent'
            })
            .appendTo('body');
       
        $temp[0].select();
        $temp[0].setSelectionRange(0, 99999);
       
        try {
            var successful = document.execCommand('copy');
            if (successful) {
                showSuccess($button, originalText);
            } else {
                showError($button, originalText);
            }
         } catch (err) {
            showError($button, originalText);
        }
       
         $temp.remove();
     }
      
      
    // Vérifie si un input est focus
     function showSuccess($button, originalText) {
     function isInputFocused() {
        mw.notify('Adresse copiée dans le presse-papier !', {
      const activeEl = document.activeElement;
            type: 'success',
      return activeEl && (
            autoHide: true,
         activeEl.tagName === 'INPUT' ||
            tag: 'minecraft-connect'
        activeEl.tagName === 'TEXTAREA' ||
        });
        activeEl.isContentEditable
       
      );
        $button
            .text('✓ Copié !')
            .removeClass('mw-ui-progressive')
            .addClass('mw-ui-constructive')
            .prop('disabled', true);
       
         setTimeout(function() {
            $button
                .text(originalText + ' 📋')
                .prop('disabled', false)
                .removeClass('mw-ui-constructive')
                .addClass('mw-ui-progressive');
        }, 2000);
     }
     }
  });
   
})();
    function showError($button, originalText) {
        mw.notify('Erreur lors de la copie', {
            type: 'error',
            autoHide: true,
            tag: 'minecraft-connect'
        });
       
        $button
            .text('✗ Erreur')
            .removeClass('mw-ui-progressive')
            .addClass('mw-ui-destructive');
       
        setTimeout(function() {
            $button
                .text(originalText + ' 📋')
                .removeClass('mw-ui-destructive')
                .addClass('mw-ui-progressive');
        }, 2000);
    }
   
    // Initialisation au chargement et pour VisualEditor
    mw.hook('wikipage.content').add(initMinecraftButtons);
   
}());
Les témoins (''cookies'') nous aident à fournir nos services. En utilisant nos services, vous acceptez notre utilisation de témoins.