diff --git a/css/80_app.css b/css/80_app.css index 392e59e0a..f639fc2e6 100644 --- a/css/80_app.css +++ b/css/80_app.css @@ -1193,6 +1193,14 @@ a.hide-toggle { height: 50px; object-fit: contain; border-radius: 2px; + z-index: 2; + visibility: hidden; +} +.preset-icon-container.showing-img img.image-icon { + visibility: visible; +} +.preset-icon-container.showing-img *:not(.image-icon) { + visibility: hidden; } .preset-icon-point-border path { diff --git a/modules/ui/preset_icon.js b/modules/ui/preset_icon.js index 70ad9984f..fc1cd9582 100644 --- a/modules/ui/preset_icon.js +++ b/modules/ui/preset_icon.js @@ -202,7 +202,7 @@ export function uiPresetIcon(context) { geom = 'route'; } var imageURL = p.imageURL; - var picon = imageURL ? null : getIcon(p, geom); + var picon = getIcon(p, geom); var isMaki = picon && /^maki-/.test(picon); var isTemaki = picon && /^temaki-/.test(picon); var isFa = picon && /^fa[srb]-/.test(picon); @@ -236,20 +236,6 @@ export function uiPresetIcon(context) { container.classed('fallback', isFallback); - var imageIcon = container.selectAll('img.image-icon') - .data(imageURL ? [0] : []); - - imageIcon.exit() - .remove(); - - imageIcon = imageIcon.enter() - .append('img') - .attr('class', 'image-icon') - .merge(imageIcon); - - imageIcon - .attr('src', imageURL); - var pointBorder = container.selectAll('.preset-icon-point-border') .data(drawPoint ? [0] : []); @@ -329,7 +315,6 @@ export function uiPresetIcon(context) { } - var icon = container.selectAll('.preset-icon') .data(picon ? [0] : []); @@ -355,6 +340,26 @@ export function uiPresetIcon(context) { icon.selectAll('use') .attr('href', '#' + picon + (isMaki ? (isSmall() && geom === 'point' ? '-11' : '-15') : '')); + var imageIcon = container.selectAll('img.image-icon') + .data(imageURL ? [0] : []); + + imageIcon.exit() + .remove(); + + imageIcon = imageIcon.enter() + .append('img') + .attr('class', 'image-icon') + .on('load', function() { + container.classed('showing-img', true); + }) + .on('error', function() { + container.classed('showing-img', false); + }) + .merge(imageIcon); + + imageIcon + .attr('src', imageURL); + }