From 01fe0db42a80f414156987996c25a975f5ece742 Mon Sep 17 00:00:00 2001 From: Bryan Housel Date: Tue, 27 Jun 2017 01:54:45 -0400 Subject: [PATCH] Add close 'x' to infobox --- css/80_app.css | 17 +++++++++++++++++ modules/ui/info.js | 24 ++++++++++++++++++------ modules/ui/info/measurement.js | 7 ++++++- 3 files changed, 41 insertions(+), 7 deletions(-) diff --git a/css/80_app.css b/css/80_app.css index 96e1fe949..88b05c3e0 100644 --- a/css/80_app.css +++ b/css/80_app.css @@ -2660,6 +2660,23 @@ img.tile-removing { padding: 5px 10px; } +.widget-title h3 { + display: inline-block; + margin-bottom: 0; +} + +.widget-title button.close { + float: right; + height: 20px; + background: none; + color: white; +} + +.widget-title button.close .icon { + height: 20px; + width: 16px; +} + .widget-content-measurement .measurement-heading { display: block; border-radius: 4px 0 0 0; diff --git a/modules/ui/info.js b/modules/ui/info.js index 72a32e1b9..b5f7086d1 100644 --- a/modules/ui/info.js +++ b/modules/ui/info.js @@ -1,6 +1,7 @@ import * as d3 from 'd3'; import { d3keybinding } from '../lib/d3.keybinding.js'; import { t } from '../util/locale'; +import { svgIcon } from '../svg/index'; import { uiCmd } from './cmd'; import { uiInfoWidgets } from './info/index'; @@ -33,7 +34,10 @@ export function uiInfo(context) { function toggle(setCurrent) { - current = setCurrent || current; + if (setCurrent && current !== setCurrent) { + current = setCurrent; + return; + } if (d3.event) { d3.event.preventDefault(); @@ -75,22 +79,30 @@ export function uiInfo(context) { .merge(infobox); - var containers = infobox.selectAll('.widget-container') + var container = infobox.selectAll('.widget-container') .data(ids); - containers.exit() + container.exit() .remove(); - var enter = containers.enter() + var enter = container.enter() .append('div') .attr('class', function(d) { return 'widget-container widget-container-' + d; }); - enter + var title = enter .append('div') - .attr('class', 'widget-title fillD2') + .attr('class', 'widget-title fillD2'); + + title .append('h3') .text(function(d) { return widgets[d].title; }); + title + .append('button') + .attr('class', 'close') + .on('click', function () { if (!isHidden) toggle(); }) + .call(svgIcon('#icon-close')); + enter .append('div') .attr('class', function(d) { return 'widget-content widget-content-' + d; }); diff --git a/modules/ui/info/measurement.js b/modules/ui/info/measurement.js index cd86be9ee..de033e678 100644 --- a/modules/ui/info/measurement.js +++ b/modules/ui/info/measurement.js @@ -11,7 +11,8 @@ import { export function uiInfoMeasurement(context) { - var isImperial = (utilDetect().locale.toLowerCase() === 'en-us'); + var isImperial = (utilDetect().locale.toLowerCase() === 'en-us'), + lastLength, lastSingular; function radiansToMeters(r) { @@ -117,6 +118,10 @@ export function uiInfoMeasurement(context) { extent = geoExtent(), entity; + if (selected.length === lastLength && singular === lastSingular) return; // no change + lastLength = selected.length; + lastSingular = singular; + selection.html(''); selection