MediaWiki:Common.js
De gahan
Révision datée du 1 juin 2024 à 22:54 par MetaOsten (discussion | contributions)
Note : après avoir publié vos modifications, il se peut que vous deviez forcer le rechargement complet du cache de votre navigateur pour voir les changements.
- Firefox / Safari : maintenez la touche Maj (Shift) en cliquant sur le bouton Actualiser ou appuyez sur Ctrl + F5 ou Ctrl + R (⌘ + R sur un Mac).
- Google Chrome : appuyez sur Ctrl + Maj + R (⌘ + Shift + R sur un Mac).
- Internet Explorer / Edge : maintenez la touche Ctrl en cliquant sur le bouton Actualiser ou pressez Ctrl + F5.
- Opera : appuyez sur Ctrl + F5.
var link = document.createElement('link'); link.href = 'https://fonts.googleapis.com/css2?family=Permanent+Marker&display=swap'; link.rel = 'stylesheet'; document.head.appendChild(link); / Ajouter un événement pour appliquer un effet visuel aux éléments avec la classe 'highlight' document.addEventListener("DOMContentLoaded", function() { var elements = document.querySelectorAll('.highlight'); elements.forEach(function(element) { element.addEventListener('mouseover', function() { element.style.transition = "background-color 0.5s ease"; element.style.backgroundColor = "#ffeb3b"; // Couleur de survol }); element.addEventListener('mouseout', function() { element.style.transition = "background-color 0.5s ease"; element.style.backgroundColor = ""; // Retour à la couleur d'origine }); }); }); /*===============*/ /* Wheelzoom */ /*===============*/ /*! Wheelzoom 4.0.1 license: MIT http://www.jacklmoore.com/wheelzoom https://www.jacklmoore.com/wheelzoom/ Compatible with: Chrome, Firefox 17+, Safari, Opera, Internet Explorer 9+. Usage: // assign wheelzoom wheelzoom(document.querySelectorAll('img')); // assign and set the zoom increment percentage wheelzoom(document.querySelectorAll('img'), {zoom: 0.05}); // set a maximum zoom amount wheelzoom(document.querySelectorAll('img'), {maxZoom: 2}); // zooming out can be triggered by calling 'wheelzoom.reset' document.querySelector('img').dispatchEvent(new CustomEvent('wheelzoom.reset')); // wheelzoom can be removed from an element by calling 'wheelzoom.destroy' document.querySelector('img').dispatchEvent(new CustomEvent('wheelzoom.destroy')); */ window.wheelzoom = (function(){ var defaults = { zoom: 0.10, maxZoom: false, initialZoom: 1, initialX: 0.5, initialY: 0.5, }; var main = function(img, options){ if (!img || !img.nodeName || img.nodeName !== 'IMG') { return; } var settings = {}; var width; var height; var bgWidth; var bgHeight; var bgPosX; var bgPosY; var previousEvent; var transparentSpaceFiller; function setSrcToBackground(img) { img.style.backgroundRepeat = 'no-repeat'; img.style.backgroundImage = 'url("'+img.src+'")'; transparentSpaceFiller = 'data:image/svg+xml;base64,'+window.btoa('<svg xmlns="http://www.w3.org/2000/svg" width="'+img.naturalWidth+'" height="'+img.naturalHeight+'"></svg>'); img.src = transparentSpaceFiller; } function updateBgStyle() { if (bgPosX > 0) { bgPosX = 0; } else if (bgPosX < width - bgWidth) { bgPosX = width - bgWidth; } if (bgPosY > 0) { bgPosY = 0; } else if (bgPosY < height - bgHeight) { bgPosY = height - bgHeight; } img.style.backgroundSize = bgWidth+'px '+bgHeight+'px'; img.style.backgroundPosition = bgPosX+'px '+bgPosY+'px'; } function reset() { bgWidth = width; bgHeight = height; bgPosX = bgPosY = 0; updateBgStyle(); } function onwheel(e) { var deltaY = 0; e.preventDefault(); if (e.deltaY) { // FireFox 17+ (IE9+, Chrome 31+?) deltaY = e.deltaY; } else if (e.wheelDelta) { deltaY = -e.wheelDelta; } // As far as I know, there is no good cross-browser way to get the cursor position relative to the event target. // We have to calculate the target element's position relative to the document, and subtrack that from the // cursor's position relative to the document. var rect = img.getBoundingClientRect(); var offsetX = e.pageX - rect.left - window.pageXOffset; var offsetY = e.pageY - rect.top - window.pageYOffset; // Record the offset between the bg edge and cursor: var bgCursorX = offsetX - bgPosX; var bgCursorY = offsetY - bgPosY; // Use the previous offset to get the percent offset between the bg edge and cursor: var bgRatioX = bgCursorX/bgWidth; var bgRatioY = bgCursorY/bgHeight; // Update the bg size: if (deltaY < 0) { bgWidth += bgWidth*settings.zoom; bgHeight += bgHeight*settings.zoom; } else { bgWidth -= bgWidth*settings.zoom; bgHeight -= bgHeight*settings.zoom; } if (settings.maxZoom) { bgWidth = Math.min(width*settings.maxZoom, bgWidth); bgHeight = Math.min(height*settings.maxZoom, bgHeight); } // Take the percent offset and apply it to the new size: bgPosX = offsetX - (bgWidth * bgRatioX); bgPosY = offsetY - (bgHeight * bgRatioY); // Prevent zooming out beyond the starting size if (bgWidth <= width || bgHeight <= height) { reset(); } else { updateBgStyle(); } } function drag(e) { e.preventDefault(); bgPosX += (e.pageX - previousEvent.pageX); bgPosY += (e.pageY - previousEvent.pageY); previousEvent = e; updateBgStyle(); } function removeDrag() { document.removeEventListener('mouseup', removeDrag); document.removeEventListener('mousemove', drag); } // Make the background draggable function draggable(e) { e.preventDefault(); previousEvent = e; document.addEventListener('mousemove', drag); document.addEventListener('mouseup', removeDrag); } function load() { var initial = Math.max(settings.initialZoom, 1); if (img.src === transparentSpaceFiller) return; var computedStyle = window.getComputedStyle(img, null); width = parseInt(computedStyle.width, 10); height = parseInt(computedStyle.height, 10); bgWidth = width * initial; bgHeight = height * initial; bgPosX = -(bgWidth - width) * settings.initialX; bgPosY = -(bgHeight - height) * settings.initialY; setSrcToBackground(img); img.style.backgroundSize = bgWidth+'px '+bgHeight+'px'; img.style.backgroundPosition = bgPosX+'px '+bgPosY+'px'; img.addEventListener('wheelzoom.reset', reset); img.addEventListener('wheel', onwheel); img.addEventListener('mousedown', draggable); } var destroy = function (originalProperties) { img.removeEventListener('wheelzoom.destroy', destroy); img.removeEventListener('wheelzoom.reset', reset); img.removeEventListener('load', load); img.removeEventListener('mouseup', removeDrag); img.removeEventListener('mousemove', drag); img.removeEventListener('mousedown', draggable); img.removeEventListener('wheel', onwheel); img.style.backgroundImage = originalProperties.backgroundImage; img.style.backgroundRepeat = originalProperties.backgroundRepeat; img.src = originalProperties.src; }.bind(null, { backgroundImage: img.style.backgroundImage, backgroundRepeat: img.style.backgroundRepeat, src: img.src }); img.addEventListener('wheelzoom.destroy', destroy); options = options || {}; Object.keys(defaults).forEach(function(key){ settings[key] = options[key] !== undefined ? options[key] : defaults[key]; }); if (img.complete) { load(); } img.addEventListener('load', load); }; // Do nothing in IE9 or below if (typeof window.btoa !== 'function') { return function(elements) { return elements; }; } else { return function(elements, options) { if (elements && elements.length) { Array.prototype.forEach.call(elements, function (node) { main(node, options); }); } else if (elements && elements.nodeName) { main(elements, options); } return elements; }; } }()); // Appliquer wheelzoom aux images avec la classe 'zoom' document.addEventListener("DOMContentLoaded", function() { var zoomImages = document.querySelectorAll('img.wheelzoom'); wheelzoom(zoomImages); }); /*===============*/ $(document).ready(function() { $('.zoomable-image').on('click', function() { var $image = $(this); var currentWidth = $image.width(); var currentHeight = $image.height(); if ($image.data('zoomed')) { // If the image is already zoomed, reset its size $image.width($image.data('original-width')); $image.height($image.data('original-height')); $image.data('zoomed', false); } else { // Store the original size $image.data('original-width', currentWidth); $image.data('original-height', currentHeight); // Double the size $image.width(currentWidth * 2); $image.height(currentHeight * 2); $image.data('zoomed', true); } }); });