Difference between revisions of "MediaWiki:Common.js"
Jump to navigation
Jump to search
Line 21: | Line 21: | ||
} | } | ||
}, 1000); // Espera para garantir que a biblioteca carregou | }, 1000); // Espera para garantir que a biblioteca carregou | ||
+ | }); | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | $(document).ready(function() { | ||
+ | // Função para processar o conteúdo da página | ||
+ | function processWarpTags() { | ||
+ | // Seleciona todos os elementos com a classe mw-parser-output | ||
+ | var $content = $('.mw-parser-output'); | ||
+ | |||
+ | // Obtém o HTML atual | ||
+ | var html = $content.html(); | ||
+ | if (!html) return; | ||
+ | |||
+ | // Substitui os padrões <v ... <c ... <c> v> por spans clicáveis | ||
+ | var newHtml = html.replace(/<v\s+(.*?)<c\s+(.*?)<c>\s*v>/g, function(match, visible, copyText) { | ||
+ | return '<span class="warp-copy" data-copy="' + copyText.trim() + '" style="color:#0066cc;cursor:pointer;border-bottom:1px dotted #0066cc;">' + visible.trim() + '</span>'; | ||
+ | }); | ||
+ | |||
+ | // Atualiza o HTML se houve mudanças | ||
+ | if (html !== newHtml) { | ||
+ | $content.html(newHtml); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | // Adiciona o handler de clique para os elementos | ||
+ | $(document).on('click', '.warp-copy', function() { | ||
+ | var textToCopy = $(this).attr('data-copy'); | ||
+ | |||
+ | // Cria um elemento temporário para a cópia | ||
+ | var tempInput = document.createElement('textarea'); | ||
+ | tempInput.style.position = 'absolute'; | ||
+ | tempInput.style.left = '-9999px'; | ||
+ | tempInput.value = textToCopy; | ||
+ | document.body.appendChild(tempInput); | ||
+ | tempInput.select(); | ||
+ | document.execCommand('copy'); | ||
+ | document.body.removeChild(tempInput); | ||
+ | |||
+ | // Feedback visual | ||
+ | var originalColor = $(this).css('color'); | ||
+ | $(this).css('color', 'green'); | ||
+ | var self = this; | ||
+ | setTimeout(function() { | ||
+ | $(self).css('color', originalColor); | ||
+ | }, 500); | ||
+ | }); | ||
+ | |||
+ | // Processa a página após o carregamento | ||
+ | processWarpTags(); | ||
+ | |||
+ | // Também processa quando o conteúdo é atualizado via AJAX | ||
+ | mw.hook('wikipage.content').add(processWarpTags); | ||
}); | }); |
Revision as of 12:10, 11 April 2025
/* Any JavaScript here will be loaded for all users on every page load. */ // Adicione no MediaWiki:Common.js mw.loader.load('https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/2.0.8/clipboard.min.js', 'text/javascript'); $(document).ready(function() { setTimeout(function() { if (typeof ClipboardJS !== 'undefined') { new ClipboardJS('.copy-button'); // Feedback visual $('.copy-button').on('click', function() { var $this = $(this); var originalColor = $this.css('color'); $this.css('color', 'green'); setTimeout(function() { $this.css('color', originalColor); }, 500); }); } }, 1000); // Espera para garantir que a biblioteca carregou }); $(document).ready(function() { // Função para processar o conteúdo da página function processWarpTags() { // Seleciona todos os elementos com a classe mw-parser-output var $content = $('.mw-parser-output'); // Obtém o HTML atual var html = $content.html(); if (!html) return; // Substitui os padrões <v ... <c ... <c> v> por spans clicáveis var newHtml = html.replace(/<v\s+(.*?)<c\s+(.*?)<c>\s*v>/g, function(match, visible, copyText) { return '<span class="warp-copy" data-copy="' + copyText.trim() + '" style="color:#0066cc;cursor:pointer;border-bottom:1px dotted #0066cc;">' + visible.trim() + '</span>'; }); // Atualiza o HTML se houve mudanças if (html !== newHtml) { $content.html(newHtml); } } // Adiciona o handler de clique para os elementos $(document).on('click', '.warp-copy', function() { var textToCopy = $(this).attr('data-copy'); // Cria um elemento temporário para a cópia var tempInput = document.createElement('textarea'); tempInput.style.position = 'absolute'; tempInput.style.left = '-9999px'; tempInput.value = textToCopy; document.body.appendChild(tempInput); tempInput.select(); document.execCommand('copy'); document.body.removeChild(tempInput); // Feedback visual var originalColor = $(this).css('color'); $(this).css('color', 'green'); var self = this; setTimeout(function() { $(self).css('color', originalColor); }, 500); }); // Processa a página após o carregamento processWarpTags(); // Também processa quando o conteúdo é atualizado via AJAX mw.hook('wikipage.content').add(processWarpTags); });