@@ -312,10 +312,18 @@ export var MapMLLayer = LayerGroup.extend({
312312 onEachFeature : function ( properties , geometry ) {
313313 // need to parse as HTML to preserve semantics and styles
314314 if ( properties ) {
315+ const map = layer . _map ;
316+ const popupOptions = {
317+ autoClose : false ,
318+ autoPan : true ,
319+ maxHeight : map . getSize ( ) . y * 0.5 - 50 ,
320+ maxWidth : map . getSize ( ) . x * 0.7 ,
321+ minWidth : 165
322+ } ;
315323 var c = document . createElement ( 'div' ) ;
316324 c . classList . add ( 'mapml-popup-content' ) ;
317325 c . insertAdjacentHTML ( 'afterbegin' , properties . innerHTML ) ;
318- geometry . bindPopup ( c , { autoClose : false , minWidth : 165 } ) ;
326+ geometry . bindPopup ( c , popupOptions ) ;
319327 }
320328 }
321329 } ) . addTo ( layer ) ;
@@ -527,8 +535,8 @@ export var MapMLLayer = LayerGroup.extend({
527535 let divider = DomUtil . create ( 'hr' , 'mapml-popup-divider' ) ;
528536
529537 popup . _navigationBar = div ;
530- popup . _content . appendChild ( divider ) ;
531- popup . _content . appendChild ( div ) ;
538+ popup . _content . parentElement . parentElement . appendChild ( divider ) ;
539+ popup . _content . parentElement . parentElement . appendChild ( div ) ;
532540
533541 content . focus ( ) ;
534542
@@ -631,31 +639,40 @@ export var MapMLLayer = LayerGroup.extend({
631639
632640 function attachZoomLink ( e ) {
633641 // this === popup
634- let content = this . _content ,
642+ let popupWrapper = this . _wrapper ,
635643 featureEl = e ? e . currFeature : this . _source . _groupLayer . _featureEl ;
636- if ( content . querySelector ( 'a.mapml-zoom-link' ) ) {
637- content . querySelector ( 'a.mapml-zoom-link' ) . remove ( ) ;
644+ if ( popupWrapper . querySelector ( 'a.mapml-zoom-link' ) ) {
645+ popupWrapper . querySelector ( 'a.mapml-zoom-link' ) . remove ( ) ;
638646 }
647+
648+ // return early if feature doesn't have map-geometry
639649 if ( ! featureEl . querySelector ( 'map-geometry' ) ) return ;
650+
651+ // calculate zoom parameters
640652 let tL = featureEl . extent . topLeft . gcrs ,
641653 bR = featureEl . extent . bottomRight . gcrs ,
642654 center = latLngBounds (
643655 latLng ( tL . horizontal , tL . vertical ) ,
644656 latLng ( bR . horizontal , bR . vertical )
645657 ) . getCenter ( true ) ;
658+
659+ // construct zoom link
646660 let zoomLink = document . createElement ( 'a' ) ;
647661 zoomLink . href = `#${ featureEl . getZoomToZoom ( ) } ,${ center . lng } ,${
648662 center . lat
649663 } `;
650664 zoomLink . innerHTML = `${ map . options . mapEl . locale . popupZoom } ` ;
651665 zoomLink . className = 'mapml-zoom-link' ;
666+
667+ // handle zoom link interactions
652668 zoomLink . onclick = zoomLink . onkeydown = function ( e ) {
653669 if ( ! ( e instanceof MouseEvent ) && e . keyCode !== 13 ) return ;
654670 e . preventDefault ( ) ;
655671 featureEl . zoomTo ( ) ;
656672 map . closePopup ( ) ;
657673 map . getContainer ( ) . focus ( ) ;
658674 } ;
675+
659676 // we found that the popupopen event is fired as many times as there
660677 // are layers on the map (<map-layer> elements / MapMLLayers that is).
661678 // In each case the target layer is always this layer, so we can't
@@ -665,11 +682,13 @@ export var MapMLLayer = LayerGroup.extend({
665682 // feature navigation buttons); obviously he dealt with this leaflet bug
666683 // this way some time ago, and we can't figure out how to get around it
667684 // apart from this slightly non-optimal method. Revisit sometime!
668- let link = content . querySelector ( '.mapml-zoom-link' ) ;
685+ let link = popupWrapper . querySelector ( '.mapml-zoom-link' ) ;
669686 if ( link ) link . remove ( ) ;
670- content . insertBefore (
687+
688+ // attach link to popup
689+ popupWrapper . insertBefore (
671690 zoomLink ,
672- content . querySelector ( 'hr.mapml-popup-divider' )
691+ popupWrapper . querySelector ( 'hr.mapml-popup-divider' )
673692 ) ;
674693 }
675694
0 commit comments