import _debounce from 'lodash-es/debounce'; import { descending as d3_descending, ascending as d3_ascending } from 'd3-array'; import { event as d3_event, select as d3_select } from 'd3-selection'; import { prefs } from '../../core/preferences'; import { t, localizer } from '../../core/localizer'; import { uiTooltip } from '../tooltip'; import { svgIcon } from '../../svg/icon'; import { uiCmd } from '../cmd'; import { uiSettingsCustomBackground } from '../settings/custom_background'; import { uiMapInMap } from '../map_in_map'; import { uiSection } from '../section'; export function uiSectionBackgroundList(context) { var _backgroundList = d3_select(null); var _customSource = context.background().findSource('custom'); var _settingsCustomBackground = uiSettingsCustomBackground(context) .on('change', customChanged); var section = uiSection('background-list', context) .label(t.html('background.backgrounds')) .disclosureContent(renderDisclosureContent); function previousBackgroundID() { return prefs('background-last-used-toggle'); } function renderDisclosureContent(selection) { // the background list var container = selection.selectAll('.layer-background-list') .data([0]); _backgroundList = container.enter() .append('ul') .attr('class', 'layer-list layer-background-list') .attr('dir', 'auto') .merge(container); // add minimap toggle below list var bgExtrasListEnter = selection.selectAll('.bg-extras-list') .data([0]) .enter() .append('ul') .attr('class', 'layer-list bg-extras-list'); var minimapLabelEnter = bgExtrasListEnter .append('li') .attr('class', 'minimap-toggle-item') .append('label') .call(uiTooltip() .title(t.html('background.minimap.tooltip')) .keys([t('background.minimap.key')]) .placement('top') ); minimapLabelEnter .append('input') .attr('type', 'checkbox') .on('change', function() { d3_event.preventDefault(); uiMapInMap.toggle(); }); minimapLabelEnter .append('span') .html(t.html('background.minimap.description')); var panelLabelEnter = bgExtrasListEnter .append('li') .attr('class', 'background-panel-toggle-item') .append('label') .call(uiTooltip() .title(t.html('background.panel.tooltip')) .keys([uiCmd('⌘⇧' + t('info_panels.background.key'))]) .placement('top') ); panelLabelEnter .append('input') .attr('type', 'checkbox') .on('change', function() { d3_event.preventDefault(); context.ui().info.toggle('background'); }); panelLabelEnter .append('span') .html(t.html('background.panel.description')); var locPanelLabelEnter = bgExtrasListEnter .append('li') .attr('class', 'location-panel-toggle-item') .append('label') .call(uiTooltip() .title(t.html('background.location_panel.tooltip')) .keys([uiCmd('⌘⇧' + t('info_panels.location.key'))]) .placement('top') ); locPanelLabelEnter .append('input') .attr('type', 'checkbox') .on('change', function() { d3_event.preventDefault(); context.ui().info.toggle('location'); }); locPanelLabelEnter .append('span') .html(t.html('background.location_panel.description')); // "Info / Report a Problem" link selection.selectAll('.imagery-faq') .data([0]) .enter() .append('div') .attr('class', 'imagery-faq') .append('a') .attr('target', '_blank') .call(svgIcon('#iD-icon-out-link', 'inline')) .attr('href', 'https://github.com/openstreetmap/iD/blob/develop/FAQ.md#how-can-i-report-an-issue-with-background-imagery') .append('span') .html(t.html('background.imagery_problem_faq')); _backgroundList .call(drawListItems, 'radio', chooseBackground, function(d) { return !d.isHidden() && !d.overlay; }); } function setTooltips(selection) { selection.each(function(d, i, nodes) { var item = d3_select(this).select('label'); var span = item.select('span'); var placement = (i < nodes.length / 2) ? 'bottom' : 'top'; var description = d.description(); var isOverflowing = (span.property('clientWidth') !== span.property('scrollWidth')); item.call(uiTooltip().destroyAny); if (d.id === previousBackgroundID()) { item.call(uiTooltip() .placement(placement) .title('