« MediaWiki:Common.js » : différence entre les versions
De gahan
Aller à la navigationAller à la recherche
Aucun résumé des modifications |
Aucun résumé des modifications |
||
| (12 versions intermédiaires par 2 utilisateurs non affichées) | |||
| Ligne 1 : | Ligne 1 : | ||
/ | var link = document.createElement('link'); | ||
link.href = 'https://fonts.googleapis.com/css2?family=Permanent+Marker&display=swap'; | |||
link.rel = 'stylesheet'; | |||
document.head.appendChild(link); | |||
(function | |||
/ 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); | |||
} | |||
}); | |||
}); | |||
Version actuelle datée du 1 juin 2024 à 22:54
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);
}
});
});