2018-10-04 17:50:33 -04:00
|
|
|
|
import React, { Fragment } from 'react';
|
|
|
|
|
import { NavLink } from 'react-router-dom';
|
2018-09-10 07:41:00 -04:00
|
|
|
|
|
2018-09-11 15:59:37 -04:00
|
|
|
|
import Sidebar from './sidebar';
|
2018-10-04 17:50:33 -04:00
|
|
|
|
import { HelpIcon } from './icons';
|
2018-10-02 16:47:59 -04:00
|
|
|
|
import './legend.css';
|
2018-09-11 15:59:37 -04:00
|
|
|
|
|
2018-10-04 17:50:33 -04:00
|
|
|
|
import CONFIG from './fields-config.json';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const LEGEND_CONFIG = {
|
2018-10-25 07:39:41 -04:00
|
|
|
|
location: [
|
|
|
|
|
{
|
|
|
|
|
title: 'Location Information (number of data entries)',
|
|
|
|
|
slug: 'location',
|
|
|
|
|
elements: [
|
|
|
|
|
{ color: '#f0f9e8', text: '>5' },
|
|
|
|
|
{ color: '#bae4bc', text: '4' },
|
|
|
|
|
{ color: '#7bccc4', text: '3' },
|
|
|
|
|
{ color: '#43a2ca', text: '2' },
|
|
|
|
|
{ color: '#0868ac', text: '1' }
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
2018-10-04 17:50:33 -04:00
|
|
|
|
age: [
|
|
|
|
|
{
|
|
|
|
|
title: 'Year Built',
|
|
|
|
|
slug: 'date_year',
|
|
|
|
|
elements: [
|
|
|
|
|
{ color: '#f0eaba', text: '≥2000' },
|
|
|
|
|
{ color: '#fae269', text: '1980–2000' },
|
|
|
|
|
{ color: '#fbaf27', text: '1960–1980' },
|
|
|
|
|
{ color: '#e6711d', text: '1940–1960' },
|
|
|
|
|
{ color: '#d73d3a', text: '1920–1940' },
|
|
|
|
|
{ color: '#ba221c', text: '1900–1920' },
|
|
|
|
|
{ color: '#bb859b', text: '1880–1900' },
|
|
|
|
|
{ color: '#8b3654', text: '1860–1880' },
|
|
|
|
|
{ color: '#8f5385', text: '1840–1860' },
|
|
|
|
|
{ color: '#56619b', text: '1820–1840' },
|
|
|
|
|
{ color: '#6793b2', text: '1800–1820' },
|
|
|
|
|
{ color: '#83c3b3', text: '1780–1800' },
|
|
|
|
|
{ color: '#adc88f', text: '1760–1780' },
|
|
|
|
|
{ color: '#83a663', text: '1740–1760' },
|
|
|
|
|
{ color: '#77852d', text: '1720–1740' },
|
|
|
|
|
{ color: '#69814e', text: '1700–1720' },
|
|
|
|
|
{ color: '#d0c291', text: '1680–1700' },
|
|
|
|
|
{ color: '#918158', text: '1660–1680' },
|
|
|
|
|
{ color: '#7a5732', text: '<1660' },
|
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
size: [
|
|
|
|
|
{
|
|
|
|
|
title: 'Number of storeys',
|
|
|
|
|
slug: 'size_storeys',
|
|
|
|
|
elements: [
|
2018-10-25 05:07:05 -04:00
|
|
|
|
{ color: '#fef0d9', text: '≥20' },
|
|
|
|
|
{ color: '#fdd49e', text: '10–20' },
|
|
|
|
|
{ color: '#fdbb84', text: '5–10' },
|
|
|
|
|
{ color: '#fc8d59', text: '4' },
|
|
|
|
|
{ color: '#ef6548', text: '3' },
|
|
|
|
|
{ color: '#d7301f', text: '2' },
|
|
|
|
|
{ color: '#990000', text: '1' },
|
2018-10-04 17:50:33 -04:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
],
|
|
|
|
|
like: [
|
|
|
|
|
{
|
2018-10-05 16:05:49 -04:00
|
|
|
|
title: 'Which buildings do you like?',
|
2018-10-04 17:50:33 -04:00
|
|
|
|
slug: 'like',
|
|
|
|
|
elements: [
|
2018-10-05 16:05:49 -04:00
|
|
|
|
{ color: '#f65400', text: 'We like these buildings 👍 🎉 +1' },
|
2018-10-04 17:50:33 -04:00
|
|
|
|
]
|
|
|
|
|
}
|
|
|
|
|
]
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const Legend = (props) => {
|
|
|
|
|
var data_layer = undefined;
|
|
|
|
|
if (props.match && props.match.params && props.match.params.map) {
|
|
|
|
|
data_layer = props.match.params.map;
|
2018-09-10 16:49:58 -04:00
|
|
|
|
}
|
2018-09-10 07:41:00 -04:00
|
|
|
|
|
2018-10-04 17:50:33 -04:00
|
|
|
|
return (
|
2018-10-25 06:18:42 -04:00
|
|
|
|
<Sidebar title="Colouring Maps">
|
2018-10-05 16:05:49 -04:00
|
|
|
|
<p className="data-intro">Click on the map to see more information about a building…</p>
|
|
|
|
|
{
|
|
|
|
|
CONFIG.map((data_group) => (
|
|
|
|
|
<LegendGroup {...data_group} maps={LEGEND_CONFIG[data_group.slug]}
|
|
|
|
|
data_layer={data_layer} key={data_group.slug} />
|
|
|
|
|
))
|
|
|
|
|
}
|
2018-10-04 17:50:33 -04:00
|
|
|
|
</Sidebar>
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const LegendGroup = (props) => {
|
|
|
|
|
const match = props.data_layer === props.slug;
|
|
|
|
|
const inactive = props.inactive || !props.maps;
|
|
|
|
|
return (
|
|
|
|
|
<section className={(inactive? "inactive ": "") + "data-section legend"}>
|
2018-10-25 07:15:19 -04:00
|
|
|
|
<header className={(match? "active " : "") + " section-header view"}>
|
2018-10-04 17:50:33 -04:00
|
|
|
|
<NavLink
|
2018-10-25 07:15:19 -04:00
|
|
|
|
to={match? "/map/base.html": `/map/${props.slug}.html`}
|
2018-10-25 05:47:19 -04:00
|
|
|
|
isActive={() => match}
|
|
|
|
|
title={(inactive)? 'Coming soon… Click the ? for more info.' :
|
|
|
|
|
(match)? '' : 'Show on map'}>
|
2018-10-04 17:50:33 -04:00
|
|
|
|
<h3 className="h3">{props.title}</h3>
|
|
|
|
|
</NavLink>
|
|
|
|
|
{
|
|
|
|
|
props.help?
|
2018-10-05 04:10:20 -04:00
|
|
|
|
<nav className="icon-buttons">
|
2018-10-25 07:15:19 -04:00
|
|
|
|
<a className="icon-button help" title="Find out more" href={props.help}>
|
|
|
|
|
Help
|
2018-10-05 04:10:20 -04:00
|
|
|
|
<HelpIcon />
|
|
|
|
|
</a>
|
|
|
|
|
</nav>
|
2018-10-04 17:50:33 -04:00
|
|
|
|
: null
|
|
|
|
|
}
|
|
|
|
|
</header>
|
|
|
|
|
<dl className="data-list">
|
|
|
|
|
{
|
|
|
|
|
(match && props.maps)?
|
|
|
|
|
props.maps.map((data_section) => (
|
|
|
|
|
<LegendSection {...data_section} key={data_section.slug}>
|
|
|
|
|
{
|
|
|
|
|
data_section.elements.map((data_item) => (
|
|
|
|
|
<LegendItem {...data_item} key={data_item.color} />
|
|
|
|
|
))
|
|
|
|
|
}
|
|
|
|
|
</LegendSection>
|
|
|
|
|
))
|
|
|
|
|
: null
|
|
|
|
|
}
|
|
|
|
|
</dl>
|
|
|
|
|
</section>
|
|
|
|
|
)
|
|
|
|
|
};
|
2018-09-10 07:41:00 -04:00
|
|
|
|
|
2018-09-10 16:49:58 -04:00
|
|
|
|
const LegendSection = (props) => (
|
|
|
|
|
<Fragment>
|
|
|
|
|
<dt>
|
2018-10-04 17:50:33 -04:00
|
|
|
|
{ props.title }
|
2018-09-10 16:49:58 -04:00
|
|
|
|
</dt>
|
|
|
|
|
<dd>
|
|
|
|
|
<ul className="data-legend">
|
|
|
|
|
{ props.children }
|
|
|
|
|
</ul>
|
|
|
|
|
</dd>
|
|
|
|
|
</Fragment>
|
|
|
|
|
);
|
|
|
|
|
|
2018-10-04 17:50:33 -04:00
|
|
|
|
const LegendItem = (props) => (
|
|
|
|
|
<li>
|
|
|
|
|
<span className="key" style={ { background: props.color } }>-</span>
|
|
|
|
|
{ props.text }
|
|
|
|
|
</li>
|
2018-09-10 16:49:58 -04:00
|
|
|
|
);
|
|
|
|
|
|
2018-09-10 07:41:00 -04:00
|
|
|
|
export default Legend;
|