MediaWiki:Common.js: Difference between revisions
No edit summary |
No edit summary |
||
| Line 233: | Line 233: | ||
function normalize( data ) { | function normalize( data ) { | ||
if ( Array.isArray( data ) ) { | |||
return { | |||
pins: data, | |||
categories: {} | |||
}; | |||
} | |||
if ( data && Array.isArray( data.pins ) ) { | |||
return { | |||
pins: data.pins, | |||
categories: data.categories || {} | |||
}; | |||
} | } | ||
return { | |||
pins: [], | |||
categories: {} | |||
}; | |||
} | |||
function fetchMarkers( src ) { | function fetchMarkers( src ) { | ||
| Line 265: | Line 274: | ||
'<circle cx="12" cy="11.2" r="4.2" fill="#fff" fill-opacity=".92"/></svg>'; | '<circle cx="12" cy="11.2" r="4.2" fill="#fff" fill-opacity=".92"/></svg>'; | ||
function buildPin( p, categories ) { | |||
var category = categories && p.category ? categories[p.category] : null; | |||
var color = p.color || ( category && category.color ); | |||
var pin = document.createElement( p.page ? 'a' : 'span' ); | |||
pin.className = 'imap-pin'; | pin.className = 'imap-pin'; | ||
if ( p.page ) { | if ( p.page ) { | ||
pin.href = articleUrl( p.page ); | pin.href = articleUrl( p.page ); | ||
} | } | ||
if ( color ) { | |||
pin.style.setProperty( '--pin-color', color ); | |||
} | |||
pin.setAttribute( 'aria-label', p.title || p.page || 'map location' ); | pin.setAttribute( 'aria-label', p.title || p.page || 'map location' ); | ||
pin.innerHTML = PIN_SVG; | pin.innerHTML = PIN_SVG; | ||
| Line 302: | Line 314: | ||
// Add every marker; return a list we can show / hide by zoom. | // Add every marker; return a list we can show / hide by zoom. | ||
function addMarkers( viewer, markers, categories ) { | |||
var ti = viewer.world.getItemAt( 0 ); | var ti = viewer.world.getItemAt( 0 ); | ||
var tracked = []; | var tracked = []; | ||
| Line 312: | Line 324: | ||
return; | return; | ||
} | } | ||
var built = ( p.kind === 'label' ) ? buildLabel( p ) : buildPin( p, categories ); | |||
viewer.addOverlay( { | viewer.addOverlay( { | ||
element: built.element, | element: built.element, | ||
| Line 420: | Line 432: | ||
enableCoordHelper( viewer, el ); | enableCoordHelper( viewer, el ); | ||
} | } | ||
fetchMarkers( markersSrc ).then( function ( markerData ) { | |||
var tracked = addMarkers( viewer, markerData.pins, markerData.categories ); | |||
var update = makeVisibilityUpdater( viewer, tracked ); | var update = makeVisibilityUpdater( viewer, tracked ); | ||
update(); // set the correct state for the starting zoom | update(); // set the correct state for the starting zoom | ||