MediaWiki:Common.js
Zur Navigation springen
Zur Suche springen
Hinweis: Leere nach dem Speichern den Browser-Cache, um die Änderungen sehen zu können.
- Firefox/Safari: Umschalttaste drücken und gleichzeitig Aktualisieren anklicken oder entweder Strg+F5 oder Strg+R (⌘+R auf dem Mac) drücken
- Google Chrome: Umschalttaste+Strg+R (⌘+Umschalttaste+R auf dem Mac) drücken
- Internet Explorer: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
- Opera: Gehe zu Menü → Einstellungen (Opera → Einstellungen auf dem Mac) und dann auf Datenschutz & Sicherheit → Browserdaten löschen → Gespeicherte Bilder und Dateien.
/* Das folgende JavaScript wird für alle Benutzer geladen. */
;(function() {
'use strict'
function scaleImageMap() {
function resizeMap() {
function resizeAreaTag(cachedAreaCoords, idx) {
function scale(coord) {
var dimension = 1 === (isWidth = 1 - isWidth) ? 'width' : 'height'
return (
padding[dimension] +
Math.floor(Number(coord) * scalingFactor[dimension])
)
}
var isWidth = 0
areas[idx].coords = cachedAreaCoords
.split(',')
.map(scale)
.join(',')
}
var scalingFactor = {
width: image.width / (image.naturalWidth * .52325),
height: image.height / (image.naturalHeight * .52325),
}
var padding = {
width: parseInt(
window.getComputedStyle(image, null).getPropertyValue('padding-left'),
10
),
height: parseInt(
window.getComputedStyle(image, null).getPropertyValue('padding-top'),
10
),
}
cachedAreaCoordsArray.forEach(resizeAreaTag)
}
function getCoords(e) {
//Normalize coord-string to csv format without any space chars
return e.coords.replace(/ *, */g, ',').replace(/ +/g, ',')
}
function debounce() {
clearTimeout(timer)
timer = setTimeout(resizeMap, 250)
}
function start() {
if (
image.width !== image.naturalWidth ||
image.height !== image.naturalHeight
) {
resizeMap()
}
}
function addEventListeners() {
image.addEventListener('load', resizeMap, false) //Detect late image loads in IE11
window.addEventListener('focus', resizeMap, false) //Cope with window being resized whilst on another tab
window.addEventListener('resize', debounce, false)
window.addEventListener('readystatechange', resizeMap, false)
document.addEventListener('fullscreenchange', resizeMap, false)
}
function beenHere() {
return 'function' === typeof map._resize
}
function getImg(name) {
return document.querySelector('img[usemap="' + name + '"]')
}
function setup() {
areas = map.getElementsByTagName('area')
cachedAreaCoordsArray = Array.prototype.map.call(areas, getCoords)
image = getImg('#' + map.name) || getImg(map.name)
map._resize = resizeMap //Bind resize method to HTML map element
}
var /*jshint validthis:true */
map = this,
areas = null,
cachedAreaCoordsArray = null,
image = null,
timer = null
if (!beenHere()) {
setup()
addEventListeners()
start()
} else {
map._resize() //Already setup, so just resize map
}
}
function factory() {
function chkMap(element) {
if (!element.tagName) {
throw new TypeError('Object is not a valid DOM element')
} else if ('MAP' !== element.tagName.toUpperCase()) {
throw new TypeError(
'Expected <MAP> tag, found <' + element.tagName + '>.'
)
}
}
function init(element) {
if (element) {
chkMap(element)
scaleImageMap.call(element)
maps.push(element)
}
}
var maps
return function imageMapResizeF(target) {
maps = [] // Only return maps from this call
switch (typeof target) {
case 'undefined':
case 'string':
Array.prototype.forEach.call(
document.querySelectorAll(target || 'map'),
init
)
break
case 'object':
init(target)
break
default:
throw new TypeError('Unexpected data type (' + typeof target + ').')
}
return maps
}
}
window.imageMapResize = factory()
})()
imageMapResize()