Hinweis: Leere nach dem Veröffentlichen 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
- Edge: Strg+F5 drücken oder Strg drücken und gleichzeitig Aktualisieren anklicken
//<nowiki> /****************************************************************************** * ColourfulMarkers * Färbt Marker um * * Maintainer: Nw520 ******************************************************************************/ mw.hook( 'wikipage.content' ).add( async function hook( $container ) { mw.hook( 'wikipage.content' ).remove( hook ); mw.hook( 'wikipage.content' ).add( main ); await mw.loader.using( [ 'mediawiki.util' ] ); const bases = window.nw520_config?.colourfulMarkers_bases ?? { see: [ 207, 44, 49 ] }; const colourLookup = {}; const types = window.nw520_config?.colourfulMarkers_types ?? [ { base: 'see', offset: -35, types: [ 'castle', 'chateau', 'city wall', 'fort', 'wall' ] }, { base: 'see', offset: 70, types: [ 'archive', 'botanical_garden', 'exhibition', 'gallery', 'open_air_museum', 'mining_museum', 'museum', 'museum_ship' ] }, { base: 'see', offset: 35, types: [ 'bahai_temple', 'basilica', 'cathedral', 'chapel', 'church', 'hindu_temple', 'minaret', 'monastery', 'mosque', 'nunnery', 'religious_site', 'sanctuary', 'shinto_shrine', 'shrine', 'synagogue', 'temple', 'wat' ] } ]; function main() { const mapLinks = $container[ 0 ].querySelectorAll( '.mw-kartographer-maplink' ); applyColoursToMap( mapLinks ); // Apply once for all embedded maps for ( const maplink of [ ...mapLinks, ...document.querySelectorAll( '.oo-ui-icon-fullScreen' ) ] ) { maplink.addEventListener( 'click', async function eventHandler() { mapLinks.forEach( ( maplink ) => maplink.removeEventListener( 'click', eventHandler ) ); // Remove handler, running once should suffice applyColoursToMap( mapLinks ); // Apply for fullscreen map } ); } } function addCss() { for ( const subgroup of types ) { const base = bases[ subgroup.base ]; for ( const member of subgroup.types ) { const newColour = subgroup.offset !== undefined ? `hsl(calc(${base[ 0 ]} + ${subgroup.offset}), ${base[ 1 ]}%, ${base[ 2 ]}%)` : subgroup.colour; mw.util.addCSS( `.mw-parser-output .vcard[data-type=${member}] .listing-map, .mw-parser-output .vcard[data-type=${member}] .listing-map .mw-kartographer-maplink { background-color: ${newColour} !important; border-color: ${newColour} !important; }` ); } } } async function applyColoursToMap() { await new Promise( ( resolve ) => setTimeout( resolve, 1000 ) ); for ( const vcard of $container[ 0 ].querySelectorAll( '.vcard' ) ) { const vcardColour = vcard.dataset.color; const vcardTitle = vcard.dataset.name; const vcardType = vcard.dataset.type; const newColour = colourLookup[ vcardType ]; if ( newColour === undefined ) { continue; } for ( const pin of document.querySelectorAll( `.mw-kartographer-map .leaflet-marker-icon[src$="${vcardColour.slice( 1 )}.png"][title="${vcardTitle.replace( /"/g, '' )}"], .mw-kartographer-mapDialog-map .leaflet-marker-icon[src$="${vcardColour.slice( 1 )}.png"][title="${vcardTitle.replace( /"/g, '' )}"]` ) ) { const counter = pin.src.match( /pin-m-(\d+)\+[\dA-F]{6}\.png$/ )[ 1 ]; pin.src = `https://maps.wikimedia.org/v4/marker/pin-m-${counter}+${newColour}.png`; } } } /** * https://stackoverflow.com/a/44134328 * * @param {number} h * @param {number} s * @param {number} l * @return {string} */ function hslToHex( h, s, l ) { l /= 100; const a = s * Math.min( l, 1 - l ) / 100; const f = ( n ) => { const k = ( n + h / 30 ) % 12; const color = l - a * Math.max( Math.min( k - 3, 9 - k, 1 ), -1 ); return Math.round( 255 * color ).toString( 16 ).padStart( 2, '0' ); // convert to Hex and prefix "0" if needed }; return `#${f( 0 )}${f( 8 )}${f( 4 )}`; } function index() { for ( const subgroup of types ) { const base = bases[ subgroup.base ]; for ( const member of subgroup.types ) { const newColour = subgroup.offset !== undefined ? hslToHex( base[ 0 ] + subgroup.offset, base[ 1 ], base[ 2 ] ).slice( 1 ) : subgroup.colour; colourLookup[ member ] = newColour; } } } addCss(); index(); main(); } ); //</nowiki>