From 753599a91fc942468d8beab31ec6b7fff930a962 Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Wed, 19 Apr 2017 12:58:52 +0200 Subject: [PATCH 1/7] Added background selector plugin --- .../background/BackgroundSelector.jsx | 102 ++++++++++++++++++ .../components/background/PreviewButton.jsx | 46 ++++++++ .../components/background/PreviewIcon.jsx | 34 ++++++ .../components/background/PreviewList.jsx | 34 ++++++ .../components/background/css/background.css | 96 +++++++++++++++++ .../background/css/previewbutton.css | 45 ++++++++ .../components/background/css/previewicon.css | 23 ++++ .../components/background/css/previewlist.css | 10 ++ web/client/localConfig.json | 2 +- web/client/plugins/BackgroundSelector.jsx | 22 ++++ web/client/product/plugins.js | 3 +- 11 files changed, 415 insertions(+), 2 deletions(-) create mode 100644 web/client/components/background/BackgroundSelector.jsx create mode 100644 web/client/components/background/PreviewButton.jsx create mode 100644 web/client/components/background/PreviewIcon.jsx create mode 100644 web/client/components/background/PreviewList.jsx create mode 100644 web/client/components/background/css/background.css create mode 100644 web/client/components/background/css/previewbutton.css create mode 100644 web/client/components/background/css/previewicon.css create mode 100644 web/client/components/background/css/previewlist.css create mode 100644 web/client/plugins/BackgroundSelector.jsx diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx new file mode 100644 index 0000000000..99468a13a8 --- /dev/null +++ b/web/client/components/background/BackgroundSelector.jsx @@ -0,0 +1,102 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); +const ConfigProvider = require('../../utils/ConfigProvider'); + +const PreviewButton = require('./PreviewButton'); +const PreviewList = require('./PreviewList'); +const PreviewIcon = require('./PreviewIcon'); + +require('./css/background.css'); + +const BackgroundSelector = React.createClass({ + propTypes: { + mapType: React.PropTypes.string, + x: React.PropTypes.number, + y: React.PropTypes.number, + z: React.PropTypes.number, + s: React.PropTypes.string, + layers: React.PropTypes.array, + enabled: React.PropTypes.boolean, + onToggle: React.PropTypes.func + }, + getDefaultProps() { + return { + mapType: 'leaflet', + x: 4, + y: 8, + z: 5, + s: 'a', + layers: [], + enabled: false, + onToggle: () => {} + }; + }, + getLayerData() { + const providers = Object.keys(ConfigProvider); + return providers.filter((key) => { + return !ConfigProvider[key].variants; + }).map((key) => { + return {name: key, link: this.generateLink(ConfigProvider[key].url)}; + }); + }, + getLayerVariants() { + const providers = Object.keys(ConfigProvider); + return providers.filter((key) => { + return ConfigProvider[key].variants; + }).map((key) => { + const variants = Object.keys(ConfigProvider[key].variants); + return variants.map((k) => { + return {name: key + ' ' + k, link: this.generateLink(ConfigProvider[key].variants[k].url ? ConfigProvider[key].variants[k].url : ConfigProvider[key].url, ConfigProvider[key].variants[k])}; + }); + }).reduce((a, b) => { + return a.concat(b); + }, []); + }, + renderLayers() { + const layers = this.getLayerVariants().splice(0, 3); + // console.log(); + return layers.map((val, idx) => { + return ( +
+
+ +
+
+ ); + }); + }, + render() { + /*console.log(this.props.layers);*/ + return this.props.enabled ? ( +
+ +
+ + + +
+
+ ) : ( +
+ +
+
+ ); + }, + generateLink(url, k = '') { + const tile = {x: '4330', y: '2982', z: '13', s: 'a', variant: k}; + return Object.keys(tile).reduce((a, b) => { + return a.replace('{' + b + '}', tile[b]); + }, url); + // return 'https://a.tile.opentopomap.org/4/8/5.png'; + } +}); + +module.exports = BackgroundSelector; diff --git a/web/client/components/background/PreviewButton.jsx b/web/client/components/background/PreviewButton.jsx new file mode 100644 index 0000000000..8c1550fd38 --- /dev/null +++ b/web/client/components/background/PreviewButton.jsx @@ -0,0 +1,46 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); + +require('./css/previewbutton.css'); + +const PreviewButton = React.createClass({ + propTypes: { + src: React.PropTypes.string, + side: React.PropTypes.number, + label: React.PropTypes.string, + labelHeight: React.PropTypes.number, + onToggle: React.PropTypes.func + }, + getDefaultProps() { + return { + src: '/dist/web/client/components/TOC/background/images/mapthumbs/OpenTopoMap.jpg', + side: 50, + label: '', + labelHeight: 29, + onToggle: () => {} + }; + }, + render() { + const {src, side, label, labelHeight, onToggle} = this.props; + + return ( +
+
{label}
+
+
+ +
+
+
+ ); + } +}); + +module.exports = PreviewButton; diff --git a/web/client/components/background/PreviewIcon.jsx b/web/client/components/background/PreviewIcon.jsx new file mode 100644 index 0000000000..2bb813a19b --- /dev/null +++ b/web/client/components/background/PreviewIcon.jsx @@ -0,0 +1,34 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); + +require('./css/previewicon.css'); + +const PreviewIcon = React.createClass({ + propTypes: { + src: React.PropTypes.string + }, + getDefaultProps() { + return { + src: '' + }; + }, + render() { + const {src} = this.props; + return ( +
+
+ +
+
+ ); + } +}); + +module.exports = PreviewIcon; diff --git a/web/client/components/background/PreviewList.jsx b/web/client/components/background/PreviewList.jsx new file mode 100644 index 0000000000..31ef2367ec --- /dev/null +++ b/web/client/components/background/PreviewList.jsx @@ -0,0 +1,34 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); + +require('./css/previewlist.css'); + +const PreviewList = React.createClass({ + propTypes: { + width: React.PropTypes.number, + uid: React.PropTypes.number + }, + getDefaultProps() { + return { + width: 0, + uid: 0 + }; + }, + render() { + const {width, uid} = this.props; + console.log(this.props.children); + return ( +
+
+ ); + } +}); + +module.exports = PreviewList; diff --git a/web/client/components/background/css/background.css b/web/client/components/background/css/background.css new file mode 100644 index 0000000000..595759bf2b --- /dev/null +++ b/web/client/components/background/css/background.css @@ -0,0 +1,96 @@ + +.background-plugin-position { + bottom: 0; + left: 0; + position: fixed; + z-index: 9999; +} + +.background-thumbnail-container { + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + margin: 5px; + padding: 2px; + width: 54px; + height: 54px; + background-color: #fff; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; + + display: inline-block; +} + +.background-thumbnail-frame { + overflow: hidden; + width: 50px; + height: 50px; + -webkit-transition: all 0.5s; + -moz-transition: all 0.5s; + -o-transition: all 0.5s; + transition: all 0.5s; +} + +.background-thumbnail-container:hover { + width: 84px; + height: 84px; + cursor: pointer; +} + +.background-thumbnail-container:hover .background-thumbnail-frame { + width: 80px; + height: 80px; +} + +.background-thumbnail-frame img{ + width: auto; + height: 100%; +} + +.background-thumbnail-container-small { + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + margin: 5px; + padding: 2px; + width: 54px; + height: 54px; + background-color: #fff; + + display: inline-block; +} + +.background-thumbnail-frame-small { + overflow: hidden; + width: 50px; + height: 50px; +} + +.background-thumbnail-container-normal { + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + margin: 5px; + padding: 2px; + width: 84px; + height: 84px; + background-color: #fff; + + display: inline-block; +} + +.background-thumbnail-frame-normal { + overflow: hidden; + width: 80px; + height: 80px; +} + +/* ------- */ + +.background-list-container { + overflow: hidden; + position: fixed; + bottom: 0; + background-color: #0f0; + height: 200px; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} diff --git a/web/client/components/background/css/previewbutton.css b/web/client/components/background/css/previewbutton.css new file mode 100644 index 0000000000..6a69f97bf3 --- /dev/null +++ b/web/client/components/background/css/previewbutton.css @@ -0,0 +1,45 @@ +.background-preview-button { + margin: 5px; +} + +.background-preview-button-label { + background-color: #f00; + font-size: 12px; + text-align: center; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +.background-preview-button-container { + padding: 2px; + background-color: #fff; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} + +.background-preview-button-frame { + overflow: hidden; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +.background-preview-button-frame img{ + width: auto; + height: 100%; +} + +.background-preview-button-container:hover { + cursor: pointer; + box-shadow: none; +} + +.background-preview-button-container:active { + background-color: #ddd; +} diff --git a/web/client/components/background/css/previewicon.css b/web/client/components/background/css/previewicon.css new file mode 100644 index 0000000000..6dc6f56f29 --- /dev/null +++ b/web/client/components/background/css/previewicon.css @@ -0,0 +1,23 @@ + +.background-preview-icon-container { + padding: 2px; + background-color: #fff; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} + +.background-preview-icon-frame { + overflow: hidden; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; +} + +.background-preview-icon-frame img{ + width: auto; + height: 100%; +} diff --git a/web/client/components/background/css/previewlist.css b/web/client/components/background/css/previewlist.css new file mode 100644 index 0000000000..88457c3baf --- /dev/null +++ b/web/client/components/background/css/previewlist.css @@ -0,0 +1,10 @@ + +.background-preview-vertical-list { + width: 50px; + height:150px; + position: absolute; + background-color: #0ff; + bottom: 0; + left: 0; + margin: 0 5px 5px 0; +} diff --git a/web/client/localConfig.json b/web/client/localConfig.json index afd40b9dcc..ce5b3dc495 100644 --- a/web/client/localConfig.json +++ b/web/client/localConfig.json @@ -111,7 +111,7 @@ }, "Login", "OmniBar", "BurgerMenu", "Expander" ], - "desktop": ["Map", "Help", "Share", "DrawerMenu", { + "desktop": ["Map", "Help", "Share", "DrawerMenu", "BackgroundSelector", { "name": "Identify", "showIn": ["IdentifyBar", "Settings"], "cfg": { diff --git a/web/client/plugins/BackgroundSelector.jsx b/web/client/plugins/BackgroundSelector.jsx new file mode 100644 index 0000000000..cd4a99b48b --- /dev/null +++ b/web/client/plugins/BackgroundSelector.jsx @@ -0,0 +1,22 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const {connect} = require('react-redux'); +const {toggleControl} = require('../actions/controls'); + +const BackgroundSelectorPlugin = connect((state) => ({ + layers: state.layers && state.layers.flat && state.layers.flat.filter((layer) => layer.group === "background") || [], + enabled: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled || false +}), { + onToggle: toggleControl.bind(null, 'backgroundSelector', null) +})(require('../components/background/BackgroundSelector')); + +module.exports = { + BackgroundSelectorPlugin, + reducers: {} +}; diff --git a/web/client/product/plugins.js b/web/client/product/plugins.js index af13d1b5cf..48874d383e 100644 --- a/web/client/product/plugins.js +++ b/web/client/product/plugins.js @@ -66,7 +66,8 @@ module.exports = { TutorialPlugin: require('../plugins/Tutorial'), ThemeSwitcherPlugin: require('../plugins/ThemeSwitcher'), ScrollTopPlugin: require('../plugins/ScrollTop'), - GoFull: require('../plugins/GoFull') + GoFull: require('../plugins/GoFull'), + BackgroundSelectorPlugin: require('../plugins/BackgroundSelector') }, requires: { ReactSwipe: require('react-swipeable-views').default, From 6026a578eed132da34d39084bf805aca1231e25d Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Fri, 21 Apr 2017 18:18:49 +0200 Subject: [PATCH 2/7] Added mobile and resize window support on Background Selector plugin --- .../background/BackgroundSelector.jsx | 229 +++++++++++++----- .../background/PaginationButton.jsx | 41 ++++ .../components/background/PreviewButton.jsx | 24 +- .../components/background/PreviewIcon.jsx | 36 ++- .../components/background/PreviewList.jsx | 37 ++- .../components/background/css/background.css | 106 +++----- .../background/css/previewbutton.css | 30 ++- .../components/background/css/previewicon.css | 66 +++-- .../components/background/css/previewlist.css | 10 - .../background/images/mapthumbs/Aerial.jpg | Bin 0 -> 24704 bytes .../images/mapthumbs/AerialWithLabels.jpg | Bin 0 -> 33487 bytes .../background/images/mapthumbs/HYBRID.jpg | Bin 0 -> 34119 bytes .../images/mapthumbs/NASA_NIGHT.jpg | Bin 0 -> 26044 bytes .../images/mapthumbs/OpenTopoMap.jpg | Bin 0 -> 16235 bytes .../background/images/mapthumbs/ROADMAP.jpg | Bin 0 -> 31863 bytes .../background/images/mapthumbs/TERRAIN.jpg | Bin 0 -> 25375 bytes .../background/images/mapthumbs/dafault.jpg | Bin 0 -> 12348 bytes .../background/images/mapthumbs/mapnik.jpg | Bin 0 -> 33281 bytes .../images/mapthumbs/mapquest-osm.jpg | Bin 0 -> 35229 bytes .../background/images/mapthumbs/none.jpg | Bin 0 -> 1247 bytes web/client/localConfig.json | 8 +- web/client/plugins/BackgroundSelector.jsx | 16 +- web/client/plugins/DrawerMenu.jsx | 12 +- web/client/themes/default/ms2-theme.less | 8 + 24 files changed, 413 insertions(+), 210 deletions(-) create mode 100644 web/client/components/background/PaginationButton.jsx delete mode 100644 web/client/components/background/css/previewlist.css create mode 100644 web/client/components/background/images/mapthumbs/Aerial.jpg create mode 100644 web/client/components/background/images/mapthumbs/AerialWithLabels.jpg create mode 100644 web/client/components/background/images/mapthumbs/HYBRID.jpg create mode 100644 web/client/components/background/images/mapthumbs/NASA_NIGHT.jpg create mode 100644 web/client/components/background/images/mapthumbs/OpenTopoMap.jpg create mode 100644 web/client/components/background/images/mapthumbs/ROADMAP.jpg create mode 100644 web/client/components/background/images/mapthumbs/TERRAIN.jpg create mode 100644 web/client/components/background/images/mapthumbs/dafault.jpg create mode 100644 web/client/components/background/images/mapthumbs/mapnik.jpg create mode 100644 web/client/components/background/images/mapthumbs/mapquest-osm.jpg create mode 100644 web/client/components/background/images/mapthumbs/none.jpg diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx index 99468a13a8..4093d0d298 100644 --- a/web/client/components/background/BackgroundSelector.jsx +++ b/web/client/components/background/BackgroundSelector.jsx @@ -7,95 +7,190 @@ */ const React = require('react'); -const ConfigProvider = require('../../utils/ConfigProvider'); +const assign = require('object-assign'); +const {isEmpty} = require('lodash'); const PreviewButton = require('./PreviewButton'); const PreviewList = require('./PreviewList'); const PreviewIcon = require('./PreviewIcon'); +const HYBRID = require('./images/mapthumbs/HYBRID.jpg'); +const ROADMAP = require('./images/mapthumbs/ROADMAP.jpg'); +const TERRAIN = require('./images/mapthumbs/TERRAIN.jpg'); +const Aerial = require('./images/mapthumbs/Aerial.jpg'); +const mapnik = require('./images/mapthumbs/mapnik.jpg'); +const mapquestOsm = require('./images/mapthumbs/mapquest-osm.jpg'); +const empty = require('./images/mapthumbs/none.jpg'); +const unknown = require('./images/mapthumbs/dafault.jpg'); +const Night2012 = require('./images/mapthumbs/NASA_NIGHT.jpg'); +const AerialWithLabels = require('./images/mapthumbs/AerialWithLabels.jpg'); +const OpenTopoMap = require('./images/mapthumbs/OpenTopoMap.jpg'); + +const thumbs = { + google: { + HYBRID, + ROADMAP, + TERRAIN + }, + bing: { + Aerial, + AerialWithLabels + }, + osm: { + mapnik + }, + mapquest: { + osm: mapquestOsm + }, + ol: { + "undefined": empty + }, + nasagibs: { + Night2012 + }, + OpenTopoMap: { + OpenTopoMap + }, + unknown +}; + require('./css/background.css'); const BackgroundSelector = React.createClass({ propTypes: { - mapType: React.PropTypes.string, - x: React.PropTypes.number, - y: React.PropTypes.number, - z: React.PropTypes.number, - s: React.PropTypes.string, + drawerWidth: React.PropTypes.number, + start: React.PropTypes.number, + bottom: React.PropTypes.number, + isMobile: React.PropTypes.bool, + enabled: React.PropTypes.bool, + drawerEnabled: React.PropTypes.bool, layers: React.PropTypes.array, - enabled: React.PropTypes.boolean, - onToggle: React.PropTypes.func + currentLayer: React.PropTypes.object, + tempLayer: React.PropTypes.object, + size: React.PropTypes.object, + desktop: React.PropTypes.object, + mobile: React.PropTypes.object, + onToggle: React.PropTypes.func, + propertiesChangeHandler: React.PropTypes.func, + setControlProperty: React.PropTypes.func }, getDefaultProps() { return { - mapType: 'leaflet', - x: 4, - y: 8, - z: 5, - s: 'a', - layers: [], + drawerWidth: 0, + start: 0, + bottom: 0, + isMobile: false, enabled: false, - onToggle: () => {} + drawerEnabled: false, + layers: [], + currentLayer: {}, + tempLayer: {}, + size: {width: 0, height: 0}, + desktop: {}, + mobile: {}, + onToggle: () => {}, + propertiesChangeHandler: () => {}, + setControlProperty: () => {} }; }, - getLayerData() { - const providers = Object.keys(ConfigProvider); - return providers.filter((key) => { - return !ConfigProvider[key].variants; - }).map((key) => { - return {name: key, link: this.generateLink(ConfigProvider[key].url)}; - }); - }, - getLayerVariants() { - const providers = Object.keys(ConfigProvider); - return providers.filter((key) => { - return ConfigProvider[key].variants; - }).map((key) => { - const variants = Object.keys(ConfigProvider[key].variants); - return variants.map((k) => { - return {name: key + ' ' + k, link: this.generateLink(ConfigProvider[key].variants[k].url ? ConfigProvider[key].variants[k].url : ConfigProvider[key].url, ConfigProvider[key].variants[k])}; - }); - }).reduce((a, b) => { - return a.concat(b); - }, []); - }, - renderLayers() { - const layers = this.getLayerVariants().splice(0, 3); - // console.log(); - return layers.map((val, idx) => { - return ( -
-
- -
-
- ); - }); + componentWillUnmount() { + this.props.setControlProperty('backgroundSelector', 'currentLayer', {}); + this.props.setControlProperty('backgroundSelector', 'tempLayer', {}); + this.props.setControlProperty('backgroundSelector', 'start', 0); }, - render() { - /*console.log(this.props.layers);*/ - return this.props.enabled ? ( -
- -
- - - + componentWillUpdate(nextProps) { + if (this.props.size.width !== nextProps.size.width + || this.props.size.height !== nextProps.size.height + || this.props.drawerEnabled !== nextProps.drawerEnabled) { + this.props.setControlProperty('backgroundSelector', 'start', 0); + } + }, + getLayer() { + const tempLyr = isEmpty(this.props.tempLayer) ? this.props.layers.filter((layer) => { return layer.visibility === true; })[0] : this.props.tempLayer; + const currentLyr = isEmpty(this.props.currentLayer) ? this.props.layers.filter((layer) => { return layer.visibility === true; })[0] : this.props.currentLayer; + return this.props.enabled ? tempLyr : currentLyr; + }, + getIcons(side, frame, margin, vertical) { + return this.props.enabled ? this.props.layers.map((layer, idx) => { + let thumb = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + return ; + }) : []; + }, + getDimensions(side, frame, margin, left, size, iconsLength) { + const openPreviewSize = (side + frame * 2 + margin * 2) + (side + frame * 2 + margin) * iconsLength + left; + const minSize = (size / 2) - (side + frame * 2 + margin * 2) - left; + const pagination = openPreviewSize > size / 2; + let visibleIconsLength = Math.floor(minSize / (side + frame * 2 + margin)); + visibleIconsLength = visibleIconsLength > iconsLength ? iconsLength : visibleIconsLength; + const listSize = this.props.enabled ? (side + frame + margin) * visibleIconsLength + 52 : 0; + + return {pagination, listSize, visibleIconsLength}; + }, + renderDesktop() { + + const desktop = assign({ + side: 78, + sidePreview: 104, + frame: 3, + margin: 5 + }, this.props.desktop); + + const frame = desktop.frame * 2; + const side = desktop.side - frame; + const sideButton = this.props.enabled ? desktop.sidePreview - frame : side; + const margin = desktop.margin; + + const labelHeight = this.props.enabled ? sideButton - frame * 2 : 0; + const layer = this.getLayer(); + const src = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + const icons = this.getIcons(side, frame, margin, false); + let left = this.props.drawerWidth !== 0 ? this.props.drawerWidth : 300; + left = this.props.drawerEnabled ? left : 0; + const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, left, this.props.size.width, icons.length); + const buttonSize = side + frame + margin; + + return visibleIconsLength <= 0 && this.props.enabled ? null : ( +
+ +
+
- ) : ( -
- -
+ ); + }, + renderMobile() { + + const mobile = assign({ + side: 65, + frame: 3, + margin: 5 + }, this.props.mobile); + + const frame = mobile.frame * 2; + const side = mobile.side - frame; + const margin = mobile.margin; + + const layer = this.getLayer(); + const src = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + const icons = this.getIcons(side, frame, margin, true); + const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, 0, this.props.size.height, icons.length); + const buttonSizeWithMargin = side + frame + margin * 2; + const buttonSize = side + frame + margin; + + return this.props.drawerEnabled || visibleIconsLength <= 0 && this.props.enabled ? null : ( +
+ +
+ +
); }, - generateLink(url, k = '') { - const tile = {x: '4330', y: '2982', z: '13', s: 'a', variant: k}; - return Object.keys(tile).reduce((a, b) => { - return a.replace('{' + b + '}', tile[b]); - }, url); - // return 'https://a.tile.opentopomap.org/4/8/5.png'; + checkDevice() { + return this.props.isMobile ? this.renderMobile() : this.renderDesktop(); + }, + render() { + return this.props.layers.length > 0 ? this.checkDevice() : null; } }); diff --git a/web/client/components/background/PaginationButton.jsx b/web/client/components/background/PaginationButton.jsx new file mode 100644 index 0000000000..573df8aeff --- /dev/null +++ b/web/client/components/background/PaginationButton.jsx @@ -0,0 +1,41 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const React = require('react'); +const {Glyphicon} = require('react-bootstrap'); + +const PaginationButton = React.createClass({ + propTypes: { + side: React.PropTypes.number, + direction: React.PropTypes.bool, + vertical: React.PropTypes.bool, + onClick: React.PropTypes.func + }, + getDefaultProps() { + return { + side: 0, + direction: true, + vertical: false, + onClick: () => {} + }; + }, + render() { + let glyph = this.props.direction ? 'chevron-right' : 'chevron-left'; + glyph = this.props.vertical && this.props.direction ? 'chevron-down' : glyph; + glyph = this.props.vertical && !this.props.direction ? 'chevron-up' : glyph; + const paginationClass = this.props.vertical ? 'background-plugin-pagination-btn-vertical text-center' : 'background-plugin-pagination-btn-horizontal'; + const style = this.props.vertical ? {width: this.props.side} : {height: this.props.side}; + return ( +
+ +
+ ); + } +}); + +module.exports = PaginationButton; diff --git a/web/client/components/background/PreviewButton.jsx b/web/client/components/background/PreviewButton.jsx index 8c1550fd38..8edee352d3 100644 --- a/web/client/components/background/PreviewButton.jsx +++ b/web/client/components/background/PreviewButton.jsx @@ -14,28 +14,32 @@ const PreviewButton = React.createClass({ propTypes: { src: React.PropTypes.string, side: React.PropTypes.number, - label: React.PropTypes.string, + frame: React.PropTypes.number, + margin: React.PropTypes.number, labelHeight: React.PropTypes.number, + label: React.PropTypes.string, + showLabel: React.PropTypes.bool, onToggle: React.PropTypes.func }, getDefaultProps() { return { - src: '/dist/web/client/components/TOC/background/images/mapthumbs/OpenTopoMap.jpg', + src: './images/mapthumbs/none.jpg', side: 50, - label: '', + frame: 4, + margin: 5, labelHeight: 29, + label: '', + showLabel: true, onToggle: () => {} }; }, render() { - const {src, side, label, labelHeight, onToggle} = this.props; - return ( -
-
{label}
-
-
- +
+
+ {this.props.showLabel ? (
{this.props.label}
) : null} +
+
diff --git a/web/client/components/background/PreviewIcon.jsx b/web/client/components/background/PreviewIcon.jsx index 2bb813a19b..ce3aa9e76e 100644 --- a/web/client/components/background/PreviewIcon.jsx +++ b/web/client/components/background/PreviewIcon.jsx @@ -12,19 +12,43 @@ require('./css/previewicon.css'); const PreviewIcon = React.createClass({ propTypes: { - src: React.PropTypes.string + side: React.PropTypes.number, + frame: React.PropTypes.number, + margin: React.PropTypes.number, + src: React.PropTypes.string, + vertical: React.PropTypes.bool, + layer: React.PropTypes.object, + currentLayer: React.PropTypes.object, + onToggle: React.PropTypes.func, + onClose: React.PropTypes.func, + setLayer: React.PropTypes.func }, getDefaultProps() { return { - src: '' + side: 50, + frame: 4, + margin: 5, + src: '', + vertical: false, + layer: {}, + currentLayer: {}, + onToggle: () => {}, + onClose: () => {}, + setLayer: () => {} }; }, render() { - const {src} = this.props; + const containerClass = this.props.vertical ? 'background-preview-icon-container-vertical' : 'background-preview-icon-container-horizontal'; + let type = this.props.layer.visibility ? containerClass + ' bg-primary' : containerClass + ' bg-body'; + type = this.props.layer.invalid ? containerClass + ' disabled-icon bg-body' : type; + const click = this.props.layer.invalid ? () => {} : () => { this.props.onClose(); this.props.onToggle(this.props.layer.id, {visibility: true}); this.props.setLayer('backgroundSelector', 'currentLayer', this.props.layer); }; return ( -
-
- +
+
+ { this.props.setLayer('backgroundSelector', 'tempLayer', this.props.layer); }} + onMouseOut={() => { this.props.setLayer('backgroundSelector', 'tempLayer', this.props.currentLayer); }} + onClick={click} src={this.props.src}/>
); diff --git a/web/client/components/background/PreviewList.jsx b/web/client/components/background/PreviewList.jsx index 31ef2367ec..88af6e32aa 100644 --- a/web/client/components/background/PreviewList.jsx +++ b/web/client/components/background/PreviewList.jsx @@ -7,25 +7,48 @@ */ const React = require('react'); - -require('./css/previewlist.css'); +const PaginationButton = require('./PaginationButton'); const PreviewList = React.createClass({ propTypes: { + bottom: React.PropTypes.number, width: React.PropTypes.number, - uid: React.PropTypes.number + height: React.PropTypes.number, + length: React.PropTypes.number, + start: React.PropTypes.number, + pagination: React.PropTypes.bool, + vertical: React.PropTypes.bool, + icons: React.PropTypes.array, + onClick: React.PropTypes.func }, getDefaultProps() { return { + bottom: 0, width: 0, - uid: 0 + height: 0, + length: 0, + start: 0, + pagination: false, + vertical: false, + icons: [], + onClick: () => {} }; }, render() { - const {width, uid} = this.props; - console.log(this.props.children); + let iconButtons = [].concat(this.props.icons); + iconButtons = iconButtons.slice(this.props.start, this.props.start + this.props.length); + if (this.props.pagination) { + if (this.props.start !== 0) { + iconButtons.unshift( { this.props.onClick('backgroundSelector', 'start', this.props.start - 1); }} />); + } + if (this.props.start + this.props.length !== this.props.icons.length) { + iconButtons.push( { this.props.onClick('backgroundSelector', 'start', this.props.start + 1); } } />); + } + } + const style = this.props.vertical ? { height: this.props.pagination ? this.props.height + 50 : this.props.height, width: this.props.width, bottom: this.props.bottom} : { height: this.props.height, width: this.props.pagination ? this.props.width + 50 : this.props.width, bottom: this.props.bottom}; return ( -
+
+ {iconButtons}
); } diff --git a/web/client/components/background/css/background.css b/web/client/components/background/css/background.css index 595759bf2b..3f95a0e83a 100644 --- a/web/client/components/background/css/background.css +++ b/web/client/components/background/css/background.css @@ -3,94 +3,50 @@ bottom: 0; left: 0; position: fixed; - z-index: 9999; -} - -.background-thumbnail-container { - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); - margin: 5px; - padding: 2px; - width: 54px; - height: 54px; - background-color: #fff; - -webkit-transition: all 0.5s; - -moz-transition: all 0.5s; - -o-transition: all 0.5s; - transition: all 0.5s; - - display: inline-block; + z-index: 100; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; } -.background-thumbnail-frame { - overflow: hidden; - width: 50px; - height: 50px; - -webkit-transition: all 0.5s; - -moz-transition: all 0.5s; - -o-transition: all 0.5s; - transition: all 0.5s; +.background-list-container { + position: fixed; + bottom: 0; + height: auto; + -webkit-transition: all 0.3s; + -moz-transition: all 0.3s; + -o-transition: all 0.3s; + transition: all 0.3s; } -.background-thumbnail-container:hover { - width: 84px; - height: 84px; +.background-plugin-pagination-btn-horizontal { cursor: pointer; + width: 20px; + margin-right: 5px; + float: left; } -.background-thumbnail-container:hover .background-thumbnail-frame { - width: 80px; - height: 80px; +.background-plugin-pagination-btn-horizontal span { + font-size: 20px; + opacity: 1.0; } -.background-thumbnail-frame img{ - width: auto; - height: 100%; +.background-plugin-pagination-btn-horizontal:hover span{ + opacity: 0.5; } -.background-thumbnail-container-small { - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); - margin: 5px; - padding: 2px; - width: 54px; - height: 54px; - background-color: #fff; - - display: inline-block; -} - -.background-thumbnail-frame-small { - overflow: hidden; - width: 50px; - height: 50px; -} - -.background-thumbnail-container-normal { - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); - margin: 5px; - padding: 2px; - width: 84px; - height: 84px; - background-color: #fff; - - display: inline-block; +.background-plugin-pagination-btn-vertical { + cursor: pointer; + width: 20px; + margin-right: 5px; } -.background-thumbnail-frame-normal { - overflow: hidden; - width: 80px; - height: 80px; +.background-plugin-pagination-btn-vertical span { + font-size: 20px; + opacity: 1.0; } -/* ------- */ - -.background-list-container { - overflow: hidden; - position: fixed; - bottom: 0; - background-color: #0f0; - height: 200px; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; +.background-plugin-pagination-btn-vertical:hover span{ + opacity: 0.5; } diff --git a/web/client/components/background/css/previewbutton.css b/web/client/components/background/css/previewbutton.css index 6a69f97bf3..d0fa98d796 100644 --- a/web/client/components/background/css/previewbutton.css +++ b/web/client/components/background/css/previewbutton.css @@ -1,25 +1,33 @@ -.background-preview-button { - margin: 5px; -} .background-preview-button-label { - background-color: #f00; + position: absolute; + overflow: hidden; + font-weight: bold; font-size: 12px; text-align: center; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; + -webkit-transition: all 0.0s; + -moz-transition: all 0.0s; + -o-transition: all 0.0s; + transition: all 0.0s; + +} + +.background-preview-button-label div { + overflow: hidden; + opacity: 0.8; + box-shadow: 0 7px 14px rgba(0,0,0,0.12), 0 5px 5px rgba(0,0,0,0.11); + -webkit-box-shadow: 0 7px 14px rgba(0,0,0,0.12), 0 5px 5px rgba(0,0,0,0.11); + -moz-box-shadow: 0 7px 14px rgba(0,0,0,0.12), 0 5px 5px rgba(0,0,0,0.11); } .background-preview-button-container { - padding: 2px; - background-color: #fff; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; -o-transition: all 0.3s; transition: all 0.3s; box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -webkit-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -moz-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); } .background-preview-button-frame { @@ -41,5 +49,5 @@ } .background-preview-button-container:active { - background-color: #ddd; + opacity: 0.6; } diff --git a/web/client/components/background/css/previewicon.css b/web/client/components/background/css/previewicon.css index 6dc6f56f29..464b271473 100644 --- a/web/client/components/background/css/previewicon.css +++ b/web/client/components/background/css/previewicon.css @@ -1,23 +1,61 @@ -.background-preview-icon-container { - padding: 2px; - background-color: #fff; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; - box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); -} - .background-preview-icon-frame { overflow: hidden; - -webkit-transition: all 0.3s; - -moz-transition: all 0.3s; - -o-transition: all 0.3s; - transition: all 0.3s; } .background-preview-icon-frame img{ width: auto; height: 100%; } + +.background-preview-icon-container-horizontal { + cursor: pointer; + float: left; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -webkit-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -moz-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} + +.background-preview-icon-container-horizontal:hover { + cursor: pointer; + box-shadow: none; + opacity: 0.9; +} + +.background-preview-icon-container-horizontal:active { + opacity: 0.6; +} + +.background-preview-icon-container-horizontal.disabled-icon { + cursor: not-allowed; + float: left; + opacity: 0.5; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -webkit-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -moz-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} + +.background-preview-icon-container-vertical { + cursor: pointer; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -webkit-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -moz-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} + +.background-preview-icon-container-vertical:hover { + cursor: pointer; + box-shadow: none; + opacity: 0.9; +} + +.background-preview-icon-container-vertical:active { + opacity: 0.6; +} + +.background-preview-icon-container-vertical.disabled-icon { + cursor: not-allowed; + opacity: 0.5; + box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -webkit-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); + -moz-box-shadow: 0 14px 28px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22); +} diff --git a/web/client/components/background/css/previewlist.css b/web/client/components/background/css/previewlist.css deleted file mode 100644 index 88457c3baf..0000000000 --- a/web/client/components/background/css/previewlist.css +++ /dev/null @@ -1,10 +0,0 @@ - -.background-preview-vertical-list { - width: 50px; - height:150px; - position: absolute; - background-color: #0ff; - bottom: 0; - left: 0; - margin: 0 5px 5px 0; -} diff --git a/web/client/components/background/images/mapthumbs/Aerial.jpg b/web/client/components/background/images/mapthumbs/Aerial.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fd144b36b6812e5eaba95b9b2a3526b3602cf07a GIT binary patch literal 24704 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�NLfQ2sQA^nyS( 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 VNxjH9wxI_kPXe2km4CSXe*hh%^uYiC literal 0 HcmV?d00001 diff --git a/web/client/components/background/images/mapthumbs/AerialWithLabels.jpg b/web/client/components/background/images/mapthumbs/AerialWithLabels.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b985d00c34a4f38030953f3bd8acf7919ff40680 GIT binary patch literal 33487 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 literal 0 HcmV?d00001 diff --git a/web/client/components/background/images/mapthumbs/NASA_NIGHT.jpg b/web/client/components/background/images/mapthumbs/NASA_NIGHT.jpg new file mode 100644 index 0000000000000000000000000000000000000000..3e4c1e61911dc2e5bc91f018342851f299d11f07 GIT binary patch literal 26044 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 jE1Y{u45i~ze$6FQ^rfRM0| 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 literal 0 HcmV?d00001 diff --git a/web/client/components/background/images/mapthumbs/dafault.jpg b/web/client/components/background/images/mapthumbs/dafault.jpg new file mode 100644 index 0000000000000000000000000000000000000000..063879ea60921b720eeeefcc1c1a9199ac281553 GIT binary patch literal 12348 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 bl`uy!;Eid29~>6G!$ZT2T|cP)Z~y-Tjc|-d literal 0 HcmV?d00001 diff --git a/web/client/components/background/images/mapthumbs/mapquest-osm.jpg b/web/client/components/background/images/mapthumbs/mapquest-osm.jpg new file mode 100644 index 0000000000000000000000000000000000000000..71e26b959b6ceab087ea22467cb6428f9bb5d8cc GIT binary patch literal 35229 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

E(U!0}vAAp9D{AJfLaqsI?vhlcnVTGd&7(BP1FD zeGj?;EWUfxp029~`aUh5+`VZhx=Nl*u;2oeru_S;ZSjaP- zQQT3um;mA8MvzAmRB0rTXo5q;p+aD%1cD&I-oS!IH1f#WY7ekQZ2>O@j)Wh8gH8-E z<`6kA%)+pt|Ng6bK~yKPFfbWdSq7P%Qu1AWXaHOme1&B8wJk&GPJqAw@*T;6kDFVhPT#o@FU-u&hm^2|10E8nzi0hIx!F_)EIOrh!K*$0;@1zKr-|yCX4}|ff0(rCI)D^|6BS&2L(h23Y{Y$ zK>#rlAPJ!7uv7?*Ab{=h@on_)iwO)H86lwn!-~b|!Q}xRD*?d>L&R{Q0mB9wIErpA zcyPnUCis^GV*>_-EGd#i2R8?}R2Nt7NF&Dp3M!bTYa6?*mgj$wplBE&pi#gi7y7f8>h|mZy#ZJte=;Ft;%?8!mF1bADm*J*sey!sJ%|h`1s0 zuHnP`jQ;M1& literal 0 HcmV?d00001 diff --git a/web/client/components/background/images/mapthumbs/none.jpg b/web/client/components/background/images/mapthumbs/none.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d1cf2320271555c14f0ff169ef79d59f82c5fc96 GIT binary patch literal 1247 zcmeH_QBDFe5QhJ0x9qa*u2XE0H)G;G_Q8aJr||}I1i}Tlf@d%u0`$d8@LZ?KCI%IV z5BkJ(UOM^OY36I%q<8TBbUpYj zwLE5j8Dfm?;%YJulTnBvUqV{W6lQ45Ff_IazmD__Utx!xCJ*IFdrB{e@>J|cDdq63 ziu4Mn35qoX^t9MNbl&~Z1g^6U{_1EcHY#yMMm;=c!v9QYqK=Ld>XSIwWzh9q4iePe fNSFSHK+7z6HNQRQKTKeKLO-9>-xEjVW@7sR`TE3x literal 0 HcmV?d00001 diff --git a/web/client/localConfig.json b/web/client/localConfig.json index ce5b3dc495..a088aff76e 100644 --- a/web/client/localConfig.json +++ b/web/client/localConfig.json @@ -32,7 +32,7 @@ "cfg": { "tools": ["locate"] } - }, "DrawerMenu", { + }, "DrawerMenu", "BackgroundSelector", { "name": "Identify", "showIn": ["Settings"], "cfg": { @@ -65,7 +65,7 @@ "cfg": { "preset": "mapMobile" } - }, "BackgroundSwitcher", { + }, { "name": "Settings", "cfg": { "wrap": true @@ -136,7 +136,7 @@ "cfg": { "activateQueryTool": true } - }, "Tutorial", "BackgroundSwitcher", { + }, "Tutorial", { "name": "Measure", "cfg": { "showResults": false @@ -247,7 +247,7 @@ "alwaysVisible": true } } - }, "TOC", "BackgroundSwitcher", { + }, "TOC", { "name": "Settings", "cfg": { "wrap": true diff --git a/web/client/plugins/BackgroundSelector.jsx b/web/client/plugins/BackgroundSelector.jsx index cd4a99b48b..28d0a09acb 100644 --- a/web/client/plugins/BackgroundSelector.jsx +++ b/web/client/plugins/BackgroundSelector.jsx @@ -7,13 +7,23 @@ */ const {connect} = require('react-redux'); -const {toggleControl} = require('../actions/controls'); +const {toggleControl, setControlProperty} = require('../actions/controls'); +const {changeLayerProperties} = require('../actions/layers'); const BackgroundSelectorPlugin = connect((state) => ({ layers: state.layers && state.layers.flat && state.layers.flat.filter((layer) => layer.group === "background") || [], - enabled: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled || false + drawerEnabled: state.controls && state.controls.drawer && state.controls.drawer.enabled || false, + drawerWidth: state.controls && state.controls.drawer && state.controls.drawer.width || 0, + enabled: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled || false, + tempLayer: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.tempLayer || {}, + currentLayer: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.currentLayer || {}, + size: state.map && state.map.present && state.map.present.size || {width: 0, height: 0}, + start: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.start || 0, + isMobile: state.browser && state.browser.mobile || false }), { - onToggle: toggleControl.bind(null, 'backgroundSelector', null) + onToggle: toggleControl.bind(null, 'backgroundSelector', null), + propertiesChangeHandler: changeLayerProperties, + setControlProperty })(require('../components/background/BackgroundSelector')); module.exports = { diff --git a/web/client/plugins/DrawerMenu.jsx b/web/client/plugins/DrawerMenu.jsx index d39b7ab1df..d745a095b7 100644 --- a/web/client/plugins/DrawerMenu.jsx +++ b/web/client/plugins/DrawerMenu.jsx @@ -62,7 +62,8 @@ const DrawerMenu = React.createClass({ singleSection: React.PropTypes.bool, buttonClassName: React.PropTypes.string, menuButtonStyle: React.PropTypes.object, - disabled: React.PropTypes.bool + disabled: React.PropTypes.bool, + resetWidth: React.PropTypes.func }, contextTypes: { messages: React.PropTypes.object, @@ -78,9 +79,13 @@ const DrawerMenu = React.createClass({ menuOptions: {}, singleSection: true, buttonClassName: "square-button", - disabled: false + disabled: false, + resetWidth: () => {} }; }, + componentWillUnmount() { + this.props.resetWidth(); + }, renderItems() { return this.props.items.map((tool, index) => { const Plugin = tool.panel || tool.plugin; @@ -124,7 +129,8 @@ module.exports = { active: state.controls && state.controls.drawer && state.controls.drawer.active, disabled: state.controls && state.controls.drawer && state.controls.drawer.disabled }), { - toggleMenu: toggleControl.bind(null, 'drawer', null) + toggleMenu: toggleControl.bind(null, 'drawer', null), + resetWidth: setControlProperty.bind(null, 'drawer', 'width', 0) })(DrawerMenu), reducers: {} }; diff --git a/web/client/themes/default/ms2-theme.less b/web/client/themes/default/ms2-theme.less index 5f107ed2ac..d5055cce17 100644 --- a/web/client/themes/default/ms2-theme.less +++ b/web/client/themes/default/ms2-theme.less @@ -1020,3 +1020,11 @@ select.form-control option { .mapstore2-embedded { overflow: hidden; } + +.bg-body { + background-color: @ms2-color-background; +} + +.text-body { + color: @ms2-color-text; +} From ee74f37c0429c3acbd48349483093c5004312d26 Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Fri, 12 May 2017 16:35:15 +0200 Subject: [PATCH 3/7] Added documentation and test of BackgroundSelector --- docma-config.json | 1 + .../background/BackgroundSelector.jsx | 12 +- .../__tests__/BackgroundSelector-test.jsx | 196 ++++++++++++++++++ .../__tests__/PaginationButton-test.jsx | 48 +++++ .../__tests__/PreviewButton-test.jsx | 35 ++++ .../background/__tests__/PreviewIcon-test.jsx | 88 ++++++++ .../background/__tests__/PreviewList-test.jsx | 43 ++++ web/client/plugins/BackgroundSelector.jsx | 29 +++ 8 files changed, 448 insertions(+), 4 deletions(-) create mode 100644 web/client/components/background/__tests__/BackgroundSelector-test.jsx create mode 100644 web/client/components/background/__tests__/PaginationButton-test.jsx create mode 100644 web/client/components/background/__tests__/PreviewButton-test.jsx create mode 100644 web/client/components/background/__tests__/PreviewIcon-test.jsx create mode 100644 web/client/components/background/__tests__/PreviewList-test.jsx diff --git a/docma-config.json b/docma-config.json index 70f8851937..0bfdd151de 100644 --- a/docma-config.json +++ b/docma-config.json @@ -143,6 +143,7 @@ "jsapi": "web/client/jsapi/MapStore2.js", "plugins": [ "web/client/plugins/index.jsdoc", + "web/client/plugins/BackgroundSelector.jsx", "web/client/plugins/BackgroundSwitcher.jsx", "web/client/plugins/DrawerMenu.jsx", "web/client/plugins/GlobeViewSwitcher.jsx", diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx index 4093d0d298..4816c40396 100644 --- a/web/client/components/background/BackgroundSelector.jsx +++ b/web/client/components/background/BackgroundSelector.jsx @@ -105,6 +105,9 @@ const BackgroundSelector = React.createClass({ this.props.setControlProperty('backgroundSelector', 'start', 0); } }, + getThumb(layer) { + return thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + }, getLayer() { const tempLyr = isEmpty(this.props.tempLayer) ? this.props.layers.filter((layer) => { return layer.visibility === true; })[0] : this.props.tempLayer; const currentLyr = isEmpty(this.props.currentLayer) ? this.props.layers.filter((layer) => { return layer.visibility === true; })[0] : this.props.currentLayer; @@ -112,7 +115,7 @@ const BackgroundSelector = React.createClass({ }, getIcons(side, frame, margin, vertical) { return this.props.enabled ? this.props.layers.map((layer, idx) => { - let thumb = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + let thumb = this.getThumb(layer); return ; }) : []; }, @@ -142,14 +145,15 @@ const BackgroundSelector = React.createClass({ const labelHeight = this.props.enabled ? sideButton - frame * 2 : 0; const layer = this.getLayer(); - const src = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + const src = this.getThumb(layer); const icons = this.getIcons(side, frame, margin, false); let left = this.props.drawerWidth !== 0 ? this.props.drawerWidth : 300; left = this.props.drawerEnabled ? left : 0; const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, left, this.props.size.width, icons.length); const buttonSize = side + frame + margin; - return visibleIconsLength <= 0 && this.props.enabled ? null : ( + return visibleIconsLength <= 0 && this.props.enabled + || !this.props.enabled && this.props.size.width / 2 < left + sideButton + frame + margin * 2 ? null : (

@@ -171,7 +175,7 @@ const BackgroundSelector = React.createClass({ const margin = mobile.margin; const layer = this.getLayer(); - const src = thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + const src = this.getThumb(layer); const icons = this.getIcons(side, frame, margin, true); const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, 0, this.props.size.height, icons.length); const buttonSizeWithMargin = side + frame + margin * 2; diff --git a/web/client/components/background/__tests__/BackgroundSelector-test.jsx b/web/client/components/background/__tests__/BackgroundSelector-test.jsx new file mode 100644 index 0000000000..fd4ad6b79c --- /dev/null +++ b/web/client/components/background/__tests__/BackgroundSelector-test.jsx @@ -0,0 +1,196 @@ +const expect = require('expect'); + +const React = require('react'); +const ReactDOM = require('react-dom'); +const BackgroundSelector = require('../BackgroundSelector'); + +describe("test the BackgroundSelector", () => { + beforeEach((done) => { + document.body.innerHTML = '
'; + setTimeout(done); + }); + + afterEach((done) => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + setTimeout(done); + }); + + it('test BackgroundSelector default props', () => { + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toBe(null); + }); + + it('test BackgroundSelector on desktop', () => { + + const size = {width: 1000, height: 500}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + + const icons = backgroundSelector.getIcons(5, 5, 5, true); + expect(icons.length).toBe(0); + + backgroundSelector.getDimensions(5, 5, 5, 5, 5, 5); + }); + + it('test BackgroundSelector on desktop enabled', () => { + + const size = {width: 1000, height: 500}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + + backgroundSelector.componentWillUpdate({size: {width: 1000, height: 400}, drawerEnabled: false}); + backgroundSelector.componentWillUpdate({size: {width: 900, height: 500}, drawerEnabled: false}); + backgroundSelector.componentWillUpdate({size: {width: 1000, height: 500}, drawerEnabled: true}); + backgroundSelector.componentWillUpdate({size: {width: 1000, height: 500}, drawerEnabled: false}); + + const icons = backgroundSelector.getIcons(5, 5, 5, false); + expect(icons.length).toBeGreaterThan(0); + + backgroundSelector.getThumb({source: 'osm', name: 'mapnik'}); + backgroundSelector.getThumb({source: 'test', name: 'test', thumbURL: 'test'}); + backgroundSelector.getThumb({source: 'osm', name: 'map', thumbURL: 'test'}); + backgroundSelector.getThumb({source: 'osm', name: 'map'}); + backgroundSelector.getThumb({source: 'test', name: 'test'}); + + backgroundSelector.getDimensions(5, 5, 5, 5, 5, 5); + }); + + it('test BackgroundSelector on desktop enabled min width', () => { + + const size = {width: 10, height: 500}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + }); + + it('test BackgroundSelector on mobile', () => { + + const size = {width: 1000, height: 500}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + }); + + it('test BackgroundSelector on mobile enabled', () => { + + const size = {width: 1000, height: 500}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + }); + + it('test BackgroundSelector on mobile enabled min height', () => { + + const size = {width: 1000, height: 10}; + + const layers = [ + { + id: 'layer_0', + title: 'title_0' + }, + { + id: 'layer_1', + title: 'title_1' + } + ]; + + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toExist(); + }); + + it('test BackgroundSelector set layer current layer', () => { + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toBe(null); + + backgroundSelector.getLayer(); + }); + + it('test BackgroundSelector set layer temp layer', () => { + const backgroundSelector = ReactDOM.render(, document.getElementById("container")); + expect(backgroundSelector).toExist(); + const node = ReactDOM.findDOMNode(backgroundSelector); + expect(node).toBe(null); + + backgroundSelector.getLayer(); + }); +}); diff --git a/web/client/components/background/__tests__/PaginationButton-test.jsx b/web/client/components/background/__tests__/PaginationButton-test.jsx new file mode 100644 index 0000000000..7200c25f33 --- /dev/null +++ b/web/client/components/background/__tests__/PaginationButton-test.jsx @@ -0,0 +1,48 @@ +const expect = require('expect'); + +const React = require('react'); +const ReactDOM = require('react-dom'); +const PaginationButton = require('../PaginationButton'); +const ReactTestUtils = require('react-addons-test-utils'); + +describe("test the PaginationButton", () => { + beforeEach((done) => { + document.body.innerHTML = '
'; + setTimeout(done); + }); + + afterEach((done) => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + setTimeout(done); + }); + + it('test PaginationButton default props', () => { + const paginationButton = ReactDOM.render(, document.getElementById("container")); + expect(paginationButton).toExist(); + const node = ReactDOM.findDOMNode(paginationButton); + expect(node).toExist(); + ReactTestUtils.Simulate.click(node); + }); + + it('test PaginationButton vertical true', () => { + const paginationButton = ReactDOM.render(, document.getElementById("container")); + expect(paginationButton).toExist(); + const node = ReactDOM.findDOMNode(paginationButton); + expect(node).toExist(); + }); + + it('test PaginationButton direction false', () => { + const paginationButton = ReactDOM.render(, document.getElementById("container")); + expect(paginationButton).toExist(); + const node = ReactDOM.findDOMNode(paginationButton); + expect(node).toExist(); + }); + + it('test PaginationButton direction false and vertical true', () => { + const paginationButton = ReactDOM.render(, document.getElementById("container")); + expect(paginationButton).toExist(); + const node = ReactDOM.findDOMNode(paginationButton); + expect(node).toExist(); + }); +}); diff --git a/web/client/components/background/__tests__/PreviewButton-test.jsx b/web/client/components/background/__tests__/PreviewButton-test.jsx new file mode 100644 index 0000000000..14555de112 --- /dev/null +++ b/web/client/components/background/__tests__/PreviewButton-test.jsx @@ -0,0 +1,35 @@ +const expect = require('expect'); + +const React = require('react'); +const ReactDOM = require('react-dom'); +const PreviewButton = require('../PreviewButton'); +const ReactTestUtils = require('react-addons-test-utils'); + +describe("test the PreviewButton", () => { + beforeEach((done) => { + document.body.innerHTML = '
'; + setTimeout(done); + }); + + afterEach((done) => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + setTimeout(done); + }); + + it('test PreviewButton default props', () => { + const previewButton = ReactDOM.render(, document.getElementById("container")); + expect(previewButton).toExist(); + const node = ReactDOM.findDOMNode(previewButton); + expect(node).toExist(); + const container = node.querySelector('.background-preview-button-container'); + ReactTestUtils.Simulate.click(container); + }); + + it('test PreviewButton show label', () => { + const previewButton = ReactDOM.render(, document.getElementById("container")); + expect(previewButton).toExist(); + const node = ReactDOM.findDOMNode(previewButton); + expect(node).toExist(); + }); +}); diff --git a/web/client/components/background/__tests__/PreviewIcon-test.jsx b/web/client/components/background/__tests__/PreviewIcon-test.jsx new file mode 100644 index 0000000000..69e408d734 --- /dev/null +++ b/web/client/components/background/__tests__/PreviewIcon-test.jsx @@ -0,0 +1,88 @@ +const expect = require('expect'); + +const React = require('react'); +const ReactDOM = require('react-dom'); +const PreviewIcon = require('../PreviewIcon'); +const ReactTestUtils = require('react-addons-test-utils'); + +describe("test the PreviewIcon", () => { + beforeEach((done) => { + document.body.innerHTML = '
'; + setTimeout(done); + }); + + afterEach((done) => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + setTimeout(done); + }); + + it('test PreviewIcon default props', () => { + const previewIcon = ReactDOM.render(, document.getElementById("container")); + expect(previewIcon).toExist(); + const node = ReactDOM.findDOMNode(previewIcon); + expect(node).toExist(); + const image = node.querySelector('.background-preview-icon-frame').children[0]; + ReactTestUtils.Simulate.click(image); + ReactTestUtils.Simulate.mouseOver(image); + ReactTestUtils.Simulate.mouseOut(image); + }); + + it('test PreviewIcon actions', () => { + const actions = { + onToggle: () => {}, + onClose: () => {}, + setLayer: () => {} + }; + + const layer = { + visibility: true, + id: 'layer' + }; + + const spyToggle = expect.spyOn(actions, 'onToggle'); + const spyClose = expect.spyOn(actions, 'onClose'); + const spyLayer = expect.spyOn(actions, 'setLayer'); + + const previewIcon = ReactDOM.render(, document.getElementById("container")); + expect(previewIcon).toExist(); + const node = ReactDOM.findDOMNode(previewIcon); + expect(node).toExist(); + const image = node.querySelector('.background-preview-icon-frame').children[0]; + ReactTestUtils.Simulate.mouseOver(image); + expect(spyLayer).toHaveBeenCalled(); + ReactTestUtils.Simulate.click(image); + expect(spyToggle).toHaveBeenCalled(); + expect(spyClose).toHaveBeenCalled(); + expect(spyToggle).toHaveBeenCalledWith("layer", {visibility: true}); + + }); + + it('test PreviewIcon is invalid', () => { + const actions = { + onToggle: () => {}, + onClose: () => {}, + setLayer: () => {} + }; + + const layer = { + id: 'layer', + invalid: true + }; + + const spyToggle = expect.spyOn(actions, 'onToggle'); + const spyClose = expect.spyOn(actions, 'onClose'); + const spyLayer = expect.spyOn(actions, 'setLayer'); + + const previewIcon = ReactDOM.render(, document.getElementById("container")); + expect(previewIcon).toExist(); + const node = ReactDOM.findDOMNode(previewIcon); + expect(node).toExist(); + const image = node.querySelector('.background-preview-icon-frame').children[0]; + ReactTestUtils.Simulate.mouseOver(image); + expect(spyLayer).toHaveBeenCalled(); + ReactTestUtils.Simulate.click(image); + expect(spyToggle).toNotHaveBeenCalled(); + expect(spyClose).toNotHaveBeenCalled(); + }); +}); diff --git a/web/client/components/background/__tests__/PreviewList-test.jsx b/web/client/components/background/__tests__/PreviewList-test.jsx new file mode 100644 index 0000000000..c4570f3c24 --- /dev/null +++ b/web/client/components/background/__tests__/PreviewList-test.jsx @@ -0,0 +1,43 @@ +const expect = require('expect'); + +const React = require('react'); +const ReactDOM = require('react-dom'); +const PreviewList = require('../PreviewList'); +const ReactTestUtils = require('react-addons-test-utils'); + +describe("test the PreviewList", () => { + beforeEach((done) => { + document.body.innerHTML = '
'; + setTimeout(done); + }); + + afterEach((done) => { + ReactDOM.unmountComponentAtNode(document.getElementById("container")); + document.body.innerHTML = ''; + setTimeout(done); + }); + + it('test PreviewList default props', () => { + const previewList = ReactDOM.render(, document.getElementById("container")); + expect(previewList).toExist(); + const node = ReactDOM.findDOMNode(previewList); + expect(node).toExist(); + }); + + it('test PreviewList pagination is true', () => { + const previewList = ReactDOM.render(, document.getElementById("container")); + expect(previewList).toExist(); + const node = ReactDOM.findDOMNode(previewList); + expect(node).toExist(); + }); + + it('test PreviewList pagination is true and start is different from 0', () => { + const previewList = ReactDOM.render(, document.getElementById("container")); + expect(previewList).toExist(); + const node = ReactDOM.findDOMNode(previewList); + expect(node).toExist(); + const pagination = node.children[0]; + ReactTestUtils.Simulate.click(pagination); + }); + +}); diff --git a/web/client/plugins/BackgroundSelector.jsx b/web/client/plugins/BackgroundSelector.jsx index 28d0a09acb..ba9d21affc 100644 --- a/web/client/plugins/BackgroundSelector.jsx +++ b/web/client/plugins/BackgroundSelector.jsx @@ -10,6 +10,35 @@ const {connect} = require('react-redux'); const {toggleControl, setControlProperty} = require('../actions/controls'); const {changeLayerProperties} = require('../actions/layers'); +/** + * BackgroundSelector Plugin. + * @class BackgroundSelector + * @memberof plugins + * @static + * + * @prop {number} cfg.bottom plugin position from bottom of the map + * @prop {object} cfg.desktop dimensions of buttons in desktop mode + * @prop {object} cfg.mobile dimensions of buttons in mobile mode + * @class + * @example + * { + * "name": "BackgroundSelector", + * "cfg": { + * "mobile": { + * "side": 65, + * "frame": 3, + * "margin": 5 + * }, + * "desktop": { + * "side": 78, + * "sidePreview": 104, + * "frame": 3, + * "margin": 5 + * } + * } + * } + */ + const BackgroundSelectorPlugin = connect((state) => ({ layers: state.layers && state.layers.flat && state.layers.flat.filter((layer) => layer.group === "background") || [], drawerEnabled: state.controls && state.controls.drawer && state.controls.drawer.enabled || false, From 8e5b66a2f40e82f8fb3dca0e3b990a3da00813e2 Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Mon, 15 May 2017 16:59:39 +0200 Subject: [PATCH 4/7] Added background action, selector and reducer --- .../actions/__tests__/background-test.js | 41 ++++++++++++++++++ web/client/actions/background.js | 32 ++++++++++++++ .../background/BackgroundSelector.jsx | 20 +++++---- .../components/background/PreviewIcon.jsx | 6 +-- .../components/background/PreviewList.jsx | 4 +- web/client/plugins/BackgroundSelector.jsx | 43 +++++++++++++------ .../reducers/__tests__/background-test.js | 19 ++++++++ web/client/reducers/background.js | 33 ++++++++++++++ .../selectors/__tests__/background-test.js | 23 ++++++++++ web/client/selectors/background.js | 13 ++++++ 10 files changed, 206 insertions(+), 28 deletions(-) create mode 100644 web/client/actions/__tests__/background-test.js create mode 100644 web/client/actions/background.js create mode 100644 web/client/reducers/__tests__/background-test.js create mode 100644 web/client/reducers/background.js create mode 100644 web/client/selectors/__tests__/background-test.js create mode 100644 web/client/selectors/background.js diff --git a/web/client/actions/__tests__/background-test.js b/web/client/actions/__tests__/background-test.js new file mode 100644 index 0000000000..69131aec47 --- /dev/null +++ b/web/client/actions/__tests__/background-test.js @@ -0,0 +1,41 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const expect = require('expect'); +const { + SET_LAYER_BACKGROUND, + SET_START_BACKGROUND, + setLayerBackground, + setStartBackground +} = require('../background'); + +describe('Test background selector actions', () => { + it('test set layer background action', () => { + const name = "currentLayer"; + const layer = {}; + const e = setLayerBackground(name, layer); + + expect(e).toExist(); + expect(e.type).toBe(SET_LAYER_BACKGROUND); + expect(e.name).toExist(); + expect(e.name).toBe(name); + expect(e.layer).toExist(); + expect(e.layer).toEqual(layer); + + }); + + it('test set start background action', () => { + const start = 1; + const e = setStartBackground(start); + + expect(e).toExist(); + expect(e.type).toBe(SET_START_BACKGROUND); + expect(e.start).toExist(); + expect(e.start).toBe(start); + }); +}); diff --git a/web/client/actions/background.js b/web/client/actions/background.js new file mode 100644 index 0000000000..ff470f366b --- /dev/null +++ b/web/client/actions/background.js @@ -0,0 +1,32 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const SET_LAYER_BACKGROUND = 'SET_LAYER_BACKGROUND'; +const SET_START_BACKGROUND = 'SET_START_BACKGROUND'; + +function setLayerBackground(name, layer) { + return { + type: SET_LAYER_BACKGROUND, + name, + layer + }; +} + +function setStartBackground(start) { + return { + type: SET_START_BACKGROUND, + start + }; +} + +module.exports = { + SET_LAYER_BACKGROUND, + SET_START_BACKGROUND, + setLayerBackground, + setStartBackground +}; diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx index 4816c40396..029f51d76c 100644 --- a/web/client/components/background/BackgroundSelector.jsx +++ b/web/client/components/background/BackgroundSelector.jsx @@ -72,7 +72,8 @@ const BackgroundSelector = React.createClass({ mobile: React.PropTypes.object, onToggle: React.PropTypes.func, propertiesChangeHandler: React.PropTypes.func, - setControlProperty: React.PropTypes.func + setLayer: React.PropTypes.func, + setStart: React.PropTypes.func }, getDefaultProps() { return { @@ -90,19 +91,20 @@ const BackgroundSelector = React.createClass({ mobile: {}, onToggle: () => {}, propertiesChangeHandler: () => {}, - setControlProperty: () => {} + setLayer: () => {}, + setStart: () => {} }; }, componentWillUnmount() { - this.props.setControlProperty('backgroundSelector', 'currentLayer', {}); - this.props.setControlProperty('backgroundSelector', 'tempLayer', {}); - this.props.setControlProperty('backgroundSelector', 'start', 0); + this.props.setLayer('currentLayer', {}); + this.props.setLayer('tempLayer', {}); + this.props.setStart(0); }, componentWillUpdate(nextProps) { if (this.props.size.width !== nextProps.size.width || this.props.size.height !== nextProps.size.height || this.props.drawerEnabled !== nextProps.drawerEnabled) { - this.props.setControlProperty('backgroundSelector', 'start', 0); + this.props.setStart(0); } }, getThumb(layer) { @@ -116,7 +118,7 @@ const BackgroundSelector = React.createClass({ getIcons(side, frame, margin, vertical) { return this.props.enabled ? this.props.layers.map((layer, idx) => { let thumb = this.getThumb(layer); - return ; + return ; }) : []; }, getDimensions(side, frame, margin, left, size, iconsLength) { @@ -157,7 +159,7 @@ const BackgroundSelector = React.createClass({
- +
); @@ -185,7 +187,7 @@ const BackgroundSelector = React.createClass({
- +
); diff --git a/web/client/components/background/PreviewIcon.jsx b/web/client/components/background/PreviewIcon.jsx index ce3aa9e76e..a5844dccaa 100644 --- a/web/client/components/background/PreviewIcon.jsx +++ b/web/client/components/background/PreviewIcon.jsx @@ -41,13 +41,13 @@ const PreviewIcon = React.createClass({ const containerClass = this.props.vertical ? 'background-preview-icon-container-vertical' : 'background-preview-icon-container-horizontal'; let type = this.props.layer.visibility ? containerClass + ' bg-primary' : containerClass + ' bg-body'; type = this.props.layer.invalid ? containerClass + ' disabled-icon bg-body' : type; - const click = this.props.layer.invalid ? () => {} : () => { this.props.onClose(); this.props.onToggle(this.props.layer.id, {visibility: true}); this.props.setLayer('backgroundSelector', 'currentLayer', this.props.layer); }; + const click = this.props.layer.invalid ? () => {} : () => { this.props.onClose(); this.props.onToggle(this.props.layer.id, {visibility: true}); this.props.setLayer('currentLayer', this.props.layer); }; return (
{ this.props.setLayer('backgroundSelector', 'tempLayer', this.props.layer); }} - onMouseOut={() => { this.props.setLayer('backgroundSelector', 'tempLayer', this.props.currentLayer); }} + onMouseOver={() => { this.props.setLayer('tempLayer', this.props.layer); }} + onMouseOut={() => { this.props.setLayer('tempLayer', this.props.currentLayer); }} onClick={click} src={this.props.src}/>
diff --git a/web/client/components/background/PreviewList.jsx b/web/client/components/background/PreviewList.jsx index 88af6e32aa..3f5f55d09c 100644 --- a/web/client/components/background/PreviewList.jsx +++ b/web/client/components/background/PreviewList.jsx @@ -39,10 +39,10 @@ const PreviewList = React.createClass({ iconButtons = iconButtons.slice(this.props.start, this.props.start + this.props.length); if (this.props.pagination) { if (this.props.start !== 0) { - iconButtons.unshift( { this.props.onClick('backgroundSelector', 'start', this.props.start - 1); }} />); + iconButtons.unshift( { this.props.onClick(this.props.start - 1); }} />); } if (this.props.start + this.props.length !== this.props.icons.length) { - iconButtons.push( { this.props.onClick('backgroundSelector', 'start', this.props.start + 1); } } />); + iconButtons.push( { this.props.onClick(this.props.start + 1); } } />); } } const style = this.props.vertical ? { height: this.props.pagination ? this.props.height + 50 : this.props.height, width: this.props.width, bottom: this.props.bottom} : { height: this.props.height, width: this.props.pagination ? this.props.width + 50 : this.props.width, bottom: this.props.bottom}; diff --git a/web/client/plugins/BackgroundSelector.jsx b/web/client/plugins/BackgroundSelector.jsx index ba9d21affc..545df50319 100644 --- a/web/client/plugins/BackgroundSelector.jsx +++ b/web/client/plugins/BackgroundSelector.jsx @@ -7,8 +7,30 @@ */ const {connect} = require('react-redux'); -const {toggleControl, setControlProperty} = require('../actions/controls'); +const {toggleControl} = require('../actions/controls'); const {changeLayerProperties} = require('../actions/layers'); +const {setLayerBackground, setStartBackground} = require('../actions/background'); + +const {createSelector} = require('reselect'); +const {layersSelector} = require('../selectors/layers'); +const {backgroundSelSelector} = require('../selectors/background'); +const mapSelector = (state) => (state.map && state.map.present) || {}; +const isMobileSelector = (state) => (state.browser && state.browser.mobile) || false; +const drawerControlsSelector = (state) => (state.controls && state.controls.drawer && state.controls.drawer) || {}; +const backgroundControlsSelector = (state) => (state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled) || false; + +const backgroundSelector = createSelector([mapSelector, layersSelector, backgroundSelSelector, isMobileSelector, drawerControlsSelector, backgroundControlsSelector], + (map, layers, background, isMobile, drawerControls, enabled) => ({ + size: map.size || {width: 0, height: 0}, + layers: layers.filter((layer) => layer.group === "background") || [], + tempLayer: background.tempLayer || {}, + currentLayer: background.currentLayer || {}, + start: background.start || 0, + isMobile, + drawerEnabled: drawerControls.enabled || false, + drawerWidth: drawerControls.width || 0, + enabled + })); /** * BackgroundSelector Plugin. @@ -39,23 +61,16 @@ const {changeLayerProperties} = require('../actions/layers'); * } */ -const BackgroundSelectorPlugin = connect((state) => ({ - layers: state.layers && state.layers.flat && state.layers.flat.filter((layer) => layer.group === "background") || [], - drawerEnabled: state.controls && state.controls.drawer && state.controls.drawer.enabled || false, - drawerWidth: state.controls && state.controls.drawer && state.controls.drawer.width || 0, - enabled: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled || false, - tempLayer: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.tempLayer || {}, - currentLayer: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.currentLayer || {}, - size: state.map && state.map.present && state.map.present.size || {width: 0, height: 0}, - start: state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector.start || 0, - isMobile: state.browser && state.browser.mobile || false -}), { +const BackgroundSelectorPlugin = connect(backgroundSelector, { onToggle: toggleControl.bind(null, 'backgroundSelector', null), propertiesChangeHandler: changeLayerProperties, - setControlProperty + setLayer: setLayerBackground, + setStart: setStartBackground })(require('../components/background/BackgroundSelector')); module.exports = { BackgroundSelectorPlugin, - reducers: {} + reducers: { + background: require('../reducers/background') + } }; diff --git a/web/client/reducers/__tests__/background-test.js b/web/client/reducers/__tests__/background-test.js new file mode 100644 index 0000000000..6cd65d8246 --- /dev/null +++ b/web/client/reducers/__tests__/background-test.js @@ -0,0 +1,19 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ +const expect = require('expect'); +const background = require('../background'); +const {setLayerBackground, setStartBackground} = require('../../actions/background'); + +describe('Test the background selector reducer', () => { + it('check to store last 2d map type', () => { + const state = background(undefined, setLayerBackground("currentLayer", {})); + expect(state.currentLayer).toEqual({}); + const state2 = background(state, setStartBackground(1)); + expect(state2.start).toBe(1); + }); +}); diff --git a/web/client/reducers/background.js b/web/client/reducers/background.js new file mode 100644 index 0000000000..8f97929d46 --- /dev/null +++ b/web/client/reducers/background.js @@ -0,0 +1,33 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const { + SET_LAYER_BACKGROUND, + SET_START_BACKGROUND +} = require('../actions/background'); + +const assign = require('object-assign'); + +const initialState = { + currentLayer: {}, + start: 0, + tempLayer: {} +}; + +function background(state = initialState, action) { + switch (action.type) { + case SET_LAYER_BACKGROUND: + return assign({}, state, { [action.name]: action.layer }); + case SET_START_BACKGROUND: + return assign({}, state, { start: action.start }); + default: + return state; + } +} + +module.exports = background; diff --git a/web/client/selectors/__tests__/background-test.js b/web/client/selectors/__tests__/background-test.js new file mode 100644 index 0000000000..586a3c0e7a --- /dev/null +++ b/web/client/selectors/__tests__/background-test.js @@ -0,0 +1,23 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const expect = require('expect'); +const {backgroundSelSelector} = require('../background'); + +describe('Test background selector', () => { + it('test backgroundSelSelector', () => { + const background = backgroundSelSelector({background: {start: 0, tempLayer: {}, currentLayer: {}}}); + + expect(background).toExist(); + expect(background).toEqual({start: 0, tempLayer: {}, currentLayer: {}}); + + const backgroundNull = backgroundSelSelector({}); + expect(backgroundNull).toExist(); + expect(backgroundNull).toEqual({}); + }); +}); diff --git a/web/client/selectors/background.js b/web/client/selectors/background.js new file mode 100644 index 0000000000..5144a34863 --- /dev/null +++ b/web/client/selectors/background.js @@ -0,0 +1,13 @@ +/* + * Copyright 2017, GeoSolutions Sas. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. + */ + +const backgroundSelSelector = (state) => (state.background) || {}; + +module.exports = { + backgroundSelSelector +}; From 5019acab761485919f653ebe52c1700607530ca4 Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Thu, 18 May 2017 15:55:43 +0200 Subject: [PATCH 5/7] Fixed structure of background selector --- .../actions/__tests__/background-test.js | 41 ----- web/client/actions/background.js | 32 ---- .../background/BackgroundSelector.jsx | 172 ++++++------------ .../background/PaginationButton.jsx | 15 +- .../components/background/PreviewIcon.jsx | 21 ++- .../components/background/PreviewList.jsx | 8 +- .../background/__tests__/PreviewIcon-test.jsx | 30 +-- .../components/background/css/background.css | 4 +- .../{images/mapthumbs => img}/dafault.jpg | Bin web/client/localConfig.json | 16 +- web/client/plugins/BackgroundSelector.jsx | 91 ++++++--- web/client/plugins/DrawerMenu.jsx | 3 - .../background/assets/img}/Aerial.jpg | Bin .../assets/img}/AerialWithLabels.jpg | Bin .../background/assets/img}/HYBRID.jpg | Bin .../background/assets/img}/NASA_NIGHT.jpg | Bin .../background/assets/img}/OpenTopoMap.jpg | Bin .../background/assets/img}/ROADMAP.jpg | Bin .../background/assets/img}/TERRAIN.jpg | Bin .../plugins/background/assets/img/dafault.jpg | Bin 0 -> 12348 bytes .../background/assets/img}/mapnik.jpg | Bin .../background/assets/img}/mapquest-osm.jpg | Bin .../background/assets/img}/none.jpg | Bin .../reducers/__tests__/background-test.js | 19 -- web/client/reducers/background.js | 33 ---- .../selectors/__tests__/background-test.js | 23 --- web/client/selectors/background.js | 13 -- 27 files changed, 180 insertions(+), 341 deletions(-) delete mode 100644 web/client/actions/__tests__/background-test.js delete mode 100644 web/client/actions/background.js rename web/client/components/background/{images/mapthumbs => img}/dafault.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/Aerial.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/AerialWithLabels.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/HYBRID.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/NASA_NIGHT.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/OpenTopoMap.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/ROADMAP.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/TERRAIN.jpg (100%) create mode 100644 web/client/plugins/background/assets/img/dafault.jpg rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/mapnik.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/mapquest-osm.jpg (100%) rename web/client/{components/background/images/mapthumbs => plugins/background/assets/img}/none.jpg (100%) delete mode 100644 web/client/reducers/__tests__/background-test.js delete mode 100644 web/client/reducers/background.js delete mode 100644 web/client/selectors/__tests__/background-test.js delete mode 100644 web/client/selectors/background.js diff --git a/web/client/actions/__tests__/background-test.js b/web/client/actions/__tests__/background-test.js deleted file mode 100644 index 69131aec47..0000000000 --- a/web/client/actions/__tests__/background-test.js +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright 2017, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -const expect = require('expect'); -const { - SET_LAYER_BACKGROUND, - SET_START_BACKGROUND, - setLayerBackground, - setStartBackground -} = require('../background'); - -describe('Test background selector actions', () => { - it('test set layer background action', () => { - const name = "currentLayer"; - const layer = {}; - const e = setLayerBackground(name, layer); - - expect(e).toExist(); - expect(e.type).toBe(SET_LAYER_BACKGROUND); - expect(e.name).toExist(); - expect(e.name).toBe(name); - expect(e.layer).toExist(); - expect(e.layer).toEqual(layer); - - }); - - it('test set start background action', () => { - const start = 1; - const e = setStartBackground(start); - - expect(e).toExist(); - expect(e.type).toBe(SET_START_BACKGROUND); - expect(e.start).toExist(); - expect(e.start).toBe(start); - }); -}); diff --git a/web/client/actions/background.js b/web/client/actions/background.js deleted file mode 100644 index ff470f366b..0000000000 --- a/web/client/actions/background.js +++ /dev/null @@ -1,32 +0,0 @@ -/* - * Copyright 2017, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -const SET_LAYER_BACKGROUND = 'SET_LAYER_BACKGROUND'; -const SET_START_BACKGROUND = 'SET_START_BACKGROUND'; - -function setLayerBackground(name, layer) { - return { - type: SET_LAYER_BACKGROUND, - name, - layer - }; -} - -function setStartBackground(start) { - return { - type: SET_START_BACKGROUND, - start - }; -} - -module.exports = { - SET_LAYER_BACKGROUND, - SET_START_BACKGROUND, - setLayerBackground, - setStartBackground -}; diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx index 029f51d76c..427430ce1f 100644 --- a/web/client/components/background/BackgroundSelector.jsx +++ b/web/client/components/background/BackgroundSelector.jsx @@ -14,101 +14,58 @@ const PreviewButton = require('./PreviewButton'); const PreviewList = require('./PreviewList'); const PreviewIcon = require('./PreviewIcon'); -const HYBRID = require('./images/mapthumbs/HYBRID.jpg'); -const ROADMAP = require('./images/mapthumbs/ROADMAP.jpg'); -const TERRAIN = require('./images/mapthumbs/TERRAIN.jpg'); -const Aerial = require('./images/mapthumbs/Aerial.jpg'); -const mapnik = require('./images/mapthumbs/mapnik.jpg'); -const mapquestOsm = require('./images/mapthumbs/mapquest-osm.jpg'); -const empty = require('./images/mapthumbs/none.jpg'); -const unknown = require('./images/mapthumbs/dafault.jpg'); -const Night2012 = require('./images/mapthumbs/NASA_NIGHT.jpg'); -const AerialWithLabels = require('./images/mapthumbs/AerialWithLabels.jpg'); -const OpenTopoMap = require('./images/mapthumbs/OpenTopoMap.jpg'); - -const thumbs = { - google: { - HYBRID, - ROADMAP, - TERRAIN - }, - bing: { - Aerial, - AerialWithLabels - }, - osm: { - mapnik - }, - mapquest: { - osm: mapquestOsm - }, - ol: { - "undefined": empty - }, - nasagibs: { - Night2012 - }, - OpenTopoMap: { - OpenTopoMap - }, - unknown -}; - require('./css/background.css'); const BackgroundSelector = React.createClass({ propTypes: { - drawerWidth: React.PropTypes.number, start: React.PropTypes.number, + left: React.PropTypes.number, bottom: React.PropTypes.number, - isMobile: React.PropTypes.bool, enabled: React.PropTypes.bool, - drawerEnabled: React.PropTypes.bool, layers: React.PropTypes.array, currentLayer: React.PropTypes.object, tempLayer: React.PropTypes.object, size: React.PropTypes.object, - desktop: React.PropTypes.object, - mobile: React.PropTypes.object, + dimensions: React.PropTypes.object, + thumbs: React.PropTypes.object, + onPropertiesChange: React.PropTypes.func, onToggle: React.PropTypes.func, - propertiesChangeHandler: React.PropTypes.func, - setLayer: React.PropTypes.func, - setStart: React.PropTypes.func + onLayerChange: React.PropTypes.func, + onStartChange: React.PropTypes.func }, getDefaultProps() { return { - drawerWidth: 0, start: 0, bottom: 0, - isMobile: false, + left: 0, enabled: false, - drawerEnabled: false, layers: [], currentLayer: {}, tempLayer: {}, size: {width: 0, height: 0}, - desktop: {}, - mobile: {}, + dimensions: {}, + thumbs: { + unknown: require('./img/dafault.jpg') + }, + onPropertiesChange: () => {}, onToggle: () => {}, - propertiesChangeHandler: () => {}, - setLayer: () => {}, - setStart: () => {} + onLayerChange: () => {}, + onStartChange: () => {} }; }, componentWillUnmount() { - this.props.setLayer('currentLayer', {}); - this.props.setLayer('tempLayer', {}); - this.props.setStart(0); + this.props.onLayerChange('currentLayer', {}); + this.props.onLayerChange('tempLayer', {}); + this.props.onStartChange(0); }, componentWillUpdate(nextProps) { if (this.props.size.width !== nextProps.size.width - || this.props.size.height !== nextProps.size.height - || this.props.drawerEnabled !== nextProps.drawerEnabled) { - this.props.setStart(0); + || this.props.size.height !== nextProps.size.height) { + this.props.onStartChange(0); } }, getThumb(layer) { - return thumbs[layer.source] && thumbs[layer.source][layer.name] || layer.thumbURL || thumbs.unknown; + return this.props.thumbs[layer.source] && this.props.thumbs[layer.source][layer.name] || layer.thumbURL || this.props.thumbs.unknown; }, getLayer() { const tempLyr = isEmpty(this.props.tempLayer) ? this.props.layers.filter((layer) => { return layer.visibility === true; })[0] : this.props.tempLayer; @@ -118,7 +75,7 @@ const BackgroundSelector = React.createClass({ getIcons(side, frame, margin, vertical) { return this.props.enabled ? this.props.layers.map((layer, idx) => { let thumb = this.getThumb(layer); - return ; + return ; }) : []; }, getDimensions(side, frame, margin, left, size, iconsLength) { @@ -131,72 +88,61 @@ const BackgroundSelector = React.createClass({ return {pagination, listSize, visibleIconsLength}; }, - renderDesktop() { - - const desktop = assign({ + renerBackgroundSelector() { + const configuration = assign({ side: 78, sidePreview: 104, frame: 3, - margin: 5 - }, this.props.desktop); + margin: 5, + label: true, + vertical: false + }, this.props.dimensions); - const frame = desktop.frame * 2; - const side = desktop.side - frame; - const sideButton = this.props.enabled ? desktop.sidePreview - frame : side; - const margin = desktop.margin; + const frame = configuration.frame * 2; + const side = configuration.side - frame; + const sideButton = this.props.enabled ? configuration.sidePreview - frame : side; + const margin = configuration.margin; const labelHeight = this.props.enabled ? sideButton - frame * 2 : 0; const layer = this.getLayer(); const src = this.getThumb(layer); - const icons = this.getIcons(side, frame, margin, false); - let left = this.props.drawerWidth !== 0 ? this.props.drawerWidth : 300; - left = this.props.drawerEnabled ? left : 0; - const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, left, this.props.size.width, icons.length); - const buttonSize = side + frame + margin; - - return visibleIconsLength <= 0 && this.props.enabled - || !this.props.enabled && this.props.size.width / 2 < left + sideButton + frame + margin * 2 ? null : ( -
- -
- -
-
- ); - }, - renderMobile() { + const icons = this.getIcons(side, frame, margin, configuration.vertical); - const mobile = assign({ - side: 65, - frame: 3, - margin: 5 - }, this.props.mobile); + const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, this.props.left, configuration.vertical ? this.props.size.height : this.props.size.width, icons.length); + const buttonSize = side + frame + margin; + const buttonSizeWithMargin = side + frame + margin * 2; - const frame = mobile.frame * 2; - const side = mobile.side - frame; - const margin = mobile.margin; + const listContainerStyle = configuration.vertical ? { + bottom: this.props.bottom + buttonSizeWithMargin, + left: this.props.left, + width: buttonSizeWithMargin, + height: listSize + } : { + bottom: this.props.bottom, + left: this.props.left + sideButton + margin * 2 + frame, + width: listSize, + height: buttonSize + }; - const layer = this.getLayer(); - const src = this.getThumb(layer); - const icons = this.getIcons(side, frame, margin, true); - const {pagination, listSize, visibleIconsLength} = this.getDimensions(side, frame, margin, 0, this.props.size.height, icons.length); - const buttonSizeWithMargin = side + frame + margin * 2; - const buttonSize = side + frame + margin; + const previewListStyle = configuration.vertical ? { + height: buttonSize * visibleIconsLength, + width: buttonSize + } : { + height: buttonSize, + width: buttonSize * visibleIconsLength + }; - return this.props.drawerEnabled || visibleIconsLength <= 0 && this.props.enabled ? null : ( -
- -
- + return visibleIconsLength <= 0 && this.props.enabled ? null : ( +
+ +
+
); }, - checkDevice() { - return this.props.isMobile ? this.renderMobile() : this.renderDesktop(); - }, render() { - return this.props.layers.length > 0 ? this.checkDevice() : null; + return this.props.layers.length > 0 ? this.renerBackgroundSelector() : null; } }); diff --git a/web/client/components/background/PaginationButton.jsx b/web/client/components/background/PaginationButton.jsx index 573df8aeff..0939272279 100644 --- a/web/client/components/background/PaginationButton.jsx +++ b/web/client/components/background/PaginationButton.jsx @@ -14,6 +14,7 @@ const PaginationButton = React.createClass({ side: React.PropTypes.number, direction: React.PropTypes.bool, vertical: React.PropTypes.bool, + glyphs: React.PropTypes.object, onClick: React.PropTypes.func }, getDefaultProps() { @@ -21,13 +22,21 @@ const PaginationButton = React.createClass({ side: 0, direction: true, vertical: false, + glyphs: { + horizontal: { + next: 'chevron-right', + back: 'chevron-left' + }, + vertical: { + next: 'chevron-down', + back: 'chevron-up' + } + }, onClick: () => {} }; }, render() { - let glyph = this.props.direction ? 'chevron-right' : 'chevron-left'; - glyph = this.props.vertical && this.props.direction ? 'chevron-down' : glyph; - glyph = this.props.vertical && !this.props.direction ? 'chevron-up' : glyph; + const glyph = this.props.glyphs[this.props.vertical ? 'vertical' : 'horizontal'][this.props.direction ? 'next' : 'back']; const paginationClass = this.props.vertical ? 'background-plugin-pagination-btn-vertical text-center' : 'background-plugin-pagination-btn-horizontal'; const style = this.props.vertical ? {width: this.props.side} : {height: this.props.side}; return ( diff --git a/web/client/components/background/PreviewIcon.jsx b/web/client/components/background/PreviewIcon.jsx index a5844dccaa..76a97c5d98 100644 --- a/web/client/components/background/PreviewIcon.jsx +++ b/web/client/components/background/PreviewIcon.jsx @@ -19,9 +19,9 @@ const PreviewIcon = React.createClass({ vertical: React.PropTypes.bool, layer: React.PropTypes.object, currentLayer: React.PropTypes.object, + onPropertiesChange: React.PropTypes.func, onToggle: React.PropTypes.func, - onClose: React.PropTypes.func, - setLayer: React.PropTypes.func + onLayerChange: React.PropTypes.func }, getDefaultProps() { return { @@ -32,22 +32,23 @@ const PreviewIcon = React.createClass({ vertical: false, layer: {}, currentLayer: {}, + onPropertiesChange: () => {}, onToggle: () => {}, - onClose: () => {}, - setLayer: () => {} + onLayerChange: () => {} }; }, render() { const containerClass = this.props.vertical ? 'background-preview-icon-container-vertical' : 'background-preview-icon-container-horizontal'; - let type = this.props.layer.visibility ? containerClass + ' bg-primary' : containerClass + ' bg-body'; - type = this.props.layer.invalid ? containerClass + ' disabled-icon bg-body' : type; - const click = this.props.layer.invalid ? () => {} : () => { this.props.onClose(); this.props.onToggle(this.props.layer.id, {visibility: true}); this.props.setLayer('currentLayer', this.props.layer); }; + const type = this.props.layer.visibility ? ' bg-primary' : ' bg-body'; + const invalid = this.props.layer.invalid ? ' disabled-icon' : ''; + + const click = this.props.layer.invalid ? () => {} : () => { this.props.onToggle(); this.props.onPropertiesChange(this.props.layer.id, {visibility: true}); this.props.onLayerChange('currentLayer', this.props.layer); }; return ( -
+
{ this.props.setLayer('tempLayer', this.props.layer); }} - onMouseOut={() => { this.props.setLayer('tempLayer', this.props.currentLayer); }} + onMouseOver={() => { this.props.onLayerChange('tempLayer', this.props.layer); }} + onMouseOut={() => { this.props.onLayerChange('tempLayer', this.props.currentLayer); }} onClick={click} src={this.props.src}/>
diff --git a/web/client/components/background/PreviewList.jsx b/web/client/components/background/PreviewList.jsx index 3f5f55d09c..ba83444510 100644 --- a/web/client/components/background/PreviewList.jsx +++ b/web/client/components/background/PreviewList.jsx @@ -19,7 +19,7 @@ const PreviewList = React.createClass({ pagination: React.PropTypes.bool, vertical: React.PropTypes.bool, icons: React.PropTypes.array, - onClick: React.PropTypes.func + onStartChange: React.PropTypes.func }, getDefaultProps() { return { @@ -31,7 +31,7 @@ const PreviewList = React.createClass({ pagination: false, vertical: false, icons: [], - onClick: () => {} + onStartChange: () => {} }; }, render() { @@ -39,10 +39,10 @@ const PreviewList = React.createClass({ iconButtons = iconButtons.slice(this.props.start, this.props.start + this.props.length); if (this.props.pagination) { if (this.props.start !== 0) { - iconButtons.unshift( { this.props.onClick(this.props.start - 1); }} />); + iconButtons.unshift( { this.props.onStartChange(this.props.start - 1); }} />); } if (this.props.start + this.props.length !== this.props.icons.length) { - iconButtons.push( { this.props.onClick(this.props.start + 1); } } />); + iconButtons.push( { this.props.onStartChange(this.props.start + 1); } } />); } } const style = this.props.vertical ? { height: this.props.pagination ? this.props.height + 50 : this.props.height, width: this.props.width, bottom: this.props.bottom} : { height: this.props.height, width: this.props.pagination ? this.props.width + 50 : this.props.width, bottom: this.props.bottom}; diff --git a/web/client/components/background/__tests__/PreviewIcon-test.jsx b/web/client/components/background/__tests__/PreviewIcon-test.jsx index 69e408d734..0d89265036 100644 --- a/web/client/components/background/__tests__/PreviewIcon-test.jsx +++ b/web/client/components/background/__tests__/PreviewIcon-test.jsx @@ -30,9 +30,9 @@ describe("test the PreviewIcon", () => { it('test PreviewIcon actions', () => { const actions = { + onPropertiesChange: () => {}, onToggle: () => {}, - onClose: () => {}, - setLayer: () => {} + onLayerChange: () => {} }; const layer = { @@ -40,29 +40,29 @@ describe("test the PreviewIcon", () => { id: 'layer' }; + const spyPropertiesChange = expect.spyOn(actions, 'onPropertiesChange'); const spyToggle = expect.spyOn(actions, 'onToggle'); - const spyClose = expect.spyOn(actions, 'onClose'); - const spyLayer = expect.spyOn(actions, 'setLayer'); + const spyLayerChange = expect.spyOn(actions, 'onLayerChange'); - const previewIcon = ReactDOM.render(, document.getElementById("container")); + const previewIcon = ReactDOM.render(, document.getElementById("container")); expect(previewIcon).toExist(); const node = ReactDOM.findDOMNode(previewIcon); expect(node).toExist(); const image = node.querySelector('.background-preview-icon-frame').children[0]; ReactTestUtils.Simulate.mouseOver(image); - expect(spyLayer).toHaveBeenCalled(); + expect(spyLayerChange).toHaveBeenCalled(); ReactTestUtils.Simulate.click(image); + expect(spyPropertiesChange).toHaveBeenCalled(); expect(spyToggle).toHaveBeenCalled(); - expect(spyClose).toHaveBeenCalled(); - expect(spyToggle).toHaveBeenCalledWith("layer", {visibility: true}); + expect(spyPropertiesChange).toHaveBeenCalledWith("layer", {visibility: true}); }); it('test PreviewIcon is invalid', () => { const actions = { + onPropertiesChange: () => {}, onToggle: () => {}, - onClose: () => {}, - setLayer: () => {} + onLayerChange: () => {} }; const layer = { @@ -70,19 +70,19 @@ describe("test the PreviewIcon", () => { invalid: true }; + const spyPropertiesChange = expect.spyOn(actions, 'onPropertiesChange'); const spyToggle = expect.spyOn(actions, 'onToggle'); - const spyClose = expect.spyOn(actions, 'onClose'); - const spyLayer = expect.spyOn(actions, 'setLayer'); + const spyLayerChange = expect.spyOn(actions, 'onLayerChange'); - const previewIcon = ReactDOM.render(, document.getElementById("container")); + const previewIcon = ReactDOM.render(, document.getElementById("container")); expect(previewIcon).toExist(); const node = ReactDOM.findDOMNode(previewIcon); expect(node).toExist(); const image = node.querySelector('.background-preview-icon-frame').children[0]; ReactTestUtils.Simulate.mouseOver(image); - expect(spyLayer).toHaveBeenCalled(); + expect(spyLayerChange).toHaveBeenCalled(); ReactTestUtils.Simulate.click(image); + expect(spyPropertiesChange).toNotHaveBeenCalled(); expect(spyToggle).toNotHaveBeenCalled(); - expect(spyClose).toNotHaveBeenCalled(); }); }); diff --git a/web/client/components/background/css/background.css b/web/client/components/background/css/background.css index 3f95a0e83a..190222148c 100644 --- a/web/client/components/background/css/background.css +++ b/web/client/components/background/css/background.css @@ -2,7 +2,7 @@ .background-plugin-position { bottom: 0; left: 0; - position: fixed; + position: absolute; z-index: 100; -webkit-transition: all 0.3s; -moz-transition: all 0.3s; @@ -11,7 +11,7 @@ } .background-list-container { - position: fixed; + position: absolute; bottom: 0; height: auto; -webkit-transition: all 0.3s; diff --git a/web/client/components/background/images/mapthumbs/dafault.jpg b/web/client/components/background/img/dafault.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/dafault.jpg rename to web/client/components/background/img/dafault.jpg diff --git a/web/client/localConfig.json b/web/client/localConfig.json index a3868eaa79..c5913f161a 100644 --- a/web/client/localConfig.json +++ b/web/client/localConfig.json @@ -32,7 +32,21 @@ "cfg": { "tools": ["locate"] } - }, "Version", "DrawerMenu", "BackgroundSelector", { + }, "Version", "DrawerMenu", + { + "name": "BackgroundSelector", + "cfg": { + "dimensions": { + "side": 65, + "sidePreview": 65, + "frame": 3, + "margin": 5, + "label": false, + "vertical": true + } + } + }, + { "name": "Identify", "showIn": ["Settings"], "cfg": { diff --git a/web/client/plugins/BackgroundSelector.jsx b/web/client/plugins/BackgroundSelector.jsx index 545df50319..bd1a640aec 100644 --- a/web/client/plugins/BackgroundSelector.jsx +++ b/web/client/plugins/BackgroundSelector.jsx @@ -7,29 +7,65 @@ */ const {connect} = require('react-redux'); -const {toggleControl} = require('../actions/controls'); +const {toggleControl, setControlProperty} = require('../actions/controls'); const {changeLayerProperties} = require('../actions/layers'); -const {setLayerBackground, setStartBackground} = require('../actions/background'); const {createSelector} = require('reselect'); const {layersSelector} = require('../selectors/layers'); -const {backgroundSelSelector} = require('../selectors/background'); + const mapSelector = (state) => (state.map && state.map.present) || {}; -const isMobileSelector = (state) => (state.browser && state.browser.mobile) || false; -const drawerControlsSelector = (state) => (state.controls && state.controls.drawer && state.controls.drawer) || {}; -const backgroundControlsSelector = (state) => (state.controls && state.controls.backgroundSelector && state.controls.backgroundSelector && state.controls.backgroundSelector.enabled) || false; +const backgroundControlsSelector = (state) => (state.controls && state.controls.backgroundSelector) || {}; +const drawerEnabledControlSelector = (state) => (state.controls && state.controls.drawer && state.controls.drawer.enabled) || false; + +const HYBRID = require('./background/assets/img/HYBRID.jpg'); +const ROADMAP = require('./background/assets/img/ROADMAP.jpg'); +const TERRAIN = require('./background/assets/img/TERRAIN.jpg'); +const Aerial = require('./background/assets/img/Aerial.jpg'); +const mapnik = require('./background/assets/img/mapnik.jpg'); +const mapquestOsm = require('./background/assets/img/mapquest-osm.jpg'); +const empty = require('./background/assets/img/none.jpg'); +const unknown = require('./background/assets/img/dafault.jpg'); +const Night2012 = require('./background/assets/img/NASA_NIGHT.jpg'); +const AerialWithLabels = require('./background/assets/img/AerialWithLabels.jpg'); +const OpenTopoMap = require('./background/assets/img/OpenTopoMap.jpg'); -const backgroundSelector = createSelector([mapSelector, layersSelector, backgroundSelSelector, isMobileSelector, drawerControlsSelector, backgroundControlsSelector], - (map, layers, background, isMobile, drawerControls, enabled) => ({ +const thumbs = { + google: { + HYBRID, + ROADMAP, + TERRAIN + }, + bing: { + Aerial, + AerialWithLabels + }, + osm: { + mapnik + }, + mapquest: { + osm: mapquestOsm + }, + ol: { + "undefined": empty + }, + nasagibs: { + Night2012 + }, + OpenTopoMap: { + OpenTopoMap + }, + unknown +}; + +const backgroundSelector = createSelector([mapSelector, layersSelector, backgroundControlsSelector, drawerEnabledControlSelector], + (map, layers, controls, drawer) => ({ size: map.size || {width: 0, height: 0}, layers: layers.filter((layer) => layer.group === "background") || [], - tempLayer: background.tempLayer || {}, - currentLayer: background.currentLayer || {}, - start: background.start || 0, - isMobile, - drawerEnabled: drawerControls.enabled || false, - drawerWidth: drawerControls.width || 0, - enabled + tempLayer: controls.tempLayer || {}, + currentLayer: controls.currentLayer || {}, + start: controls.start || 0, + enabled: controls.enabled && !drawer, + thumbs })); /** @@ -38,39 +74,36 @@ const backgroundSelector = createSelector([mapSelector, layersSelector, backgrou * @memberof plugins * @static * + * @prop {number} cfg.left plugin position from left of the map * @prop {number} cfg.bottom plugin position from bottom of the map - * @prop {object} cfg.desktop dimensions of buttons in desktop mode - * @prop {object} cfg.mobile dimensions of buttons in mobile mode + * @prop {object} cfg.dimensions dimensions of buttons * @class * @example * { * "name": "BackgroundSelector", * "cfg": { - * "mobile": { + * "dimensions": { * "side": 65, + * "sidePreview": 65, * "frame": 3, - * "margin": 5 - * }, - * "desktop": { - * "side": 78, - * "sidePreview": 104, - * "frame": 3, - * "margin": 5 + * "margin": 5, + * "label": false, + * "vertical": true * } * } * } */ const BackgroundSelectorPlugin = connect(backgroundSelector, { + onPropertiesChange: changeLayerProperties, onToggle: toggleControl.bind(null, 'backgroundSelector', null), - propertiesChangeHandler: changeLayerProperties, - setLayer: setLayerBackground, - setStart: setStartBackground + onLayerChange: setControlProperty.bind(null, 'backgroundSelector'), + onStartChange: setControlProperty.bind(null, 'backgroundSelector', 'start') })(require('../components/background/BackgroundSelector')); module.exports = { BackgroundSelectorPlugin, reducers: { - background: require('../reducers/background') + controls: require('../reducers/controls') } }; diff --git a/web/client/plugins/DrawerMenu.jsx b/web/client/plugins/DrawerMenu.jsx index c8275ce48c..b4c937134c 100644 --- a/web/client/plugins/DrawerMenu.jsx +++ b/web/client/plugins/DrawerMenu.jsx @@ -83,9 +83,6 @@ const DrawerMenu = React.createClass({ resetWidth: () => {} }; }, - componentWillUnmount() { - this.props.resetWidth(); - }, renderItems() { return this.props.items.map((tool, index) => { const Plugin = tool.panel || tool.plugin; diff --git a/web/client/components/background/images/mapthumbs/Aerial.jpg b/web/client/plugins/background/assets/img/Aerial.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/Aerial.jpg rename to web/client/plugins/background/assets/img/Aerial.jpg diff --git a/web/client/components/background/images/mapthumbs/AerialWithLabels.jpg b/web/client/plugins/background/assets/img/AerialWithLabels.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/AerialWithLabels.jpg rename to web/client/plugins/background/assets/img/AerialWithLabels.jpg diff --git a/web/client/components/background/images/mapthumbs/HYBRID.jpg b/web/client/plugins/background/assets/img/HYBRID.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/HYBRID.jpg rename to web/client/plugins/background/assets/img/HYBRID.jpg diff --git a/web/client/components/background/images/mapthumbs/NASA_NIGHT.jpg b/web/client/plugins/background/assets/img/NASA_NIGHT.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/NASA_NIGHT.jpg rename to web/client/plugins/background/assets/img/NASA_NIGHT.jpg diff --git a/web/client/components/background/images/mapthumbs/OpenTopoMap.jpg b/web/client/plugins/background/assets/img/OpenTopoMap.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/OpenTopoMap.jpg rename to web/client/plugins/background/assets/img/OpenTopoMap.jpg diff --git a/web/client/components/background/images/mapthumbs/ROADMAP.jpg b/web/client/plugins/background/assets/img/ROADMAP.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/ROADMAP.jpg rename to web/client/plugins/background/assets/img/ROADMAP.jpg diff --git a/web/client/components/background/images/mapthumbs/TERRAIN.jpg b/web/client/plugins/background/assets/img/TERRAIN.jpg similarity index 100% rename from web/client/components/background/images/mapthumbs/TERRAIN.jpg rename to web/client/plugins/background/assets/img/TERRAIN.jpg diff --git a/web/client/plugins/background/assets/img/dafault.jpg b/web/client/plugins/background/assets/img/dafault.jpg new file mode 100644 index 0000000000000000000000000000000000000000..063879ea60921b720eeeefcc1c1a9199ac281553 GIT binary patch literal 12348 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 { - it('check to store last 2d map type', () => { - const state = background(undefined, setLayerBackground("currentLayer", {})); - expect(state.currentLayer).toEqual({}); - const state2 = background(state, setStartBackground(1)); - expect(state2.start).toBe(1); - }); -}); diff --git a/web/client/reducers/background.js b/web/client/reducers/background.js deleted file mode 100644 index 8f97929d46..0000000000 --- a/web/client/reducers/background.js +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright 2017, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -const { - SET_LAYER_BACKGROUND, - SET_START_BACKGROUND -} = require('../actions/background'); - -const assign = require('object-assign'); - -const initialState = { - currentLayer: {}, - start: 0, - tempLayer: {} -}; - -function background(state = initialState, action) { - switch (action.type) { - case SET_LAYER_BACKGROUND: - return assign({}, state, { [action.name]: action.layer }); - case SET_START_BACKGROUND: - return assign({}, state, { start: action.start }); - default: - return state; - } -} - -module.exports = background; diff --git a/web/client/selectors/__tests__/background-test.js b/web/client/selectors/__tests__/background-test.js deleted file mode 100644 index 586a3c0e7a..0000000000 --- a/web/client/selectors/__tests__/background-test.js +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright 2017, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -const expect = require('expect'); -const {backgroundSelSelector} = require('../background'); - -describe('Test background selector', () => { - it('test backgroundSelSelector', () => { - const background = backgroundSelSelector({background: {start: 0, tempLayer: {}, currentLayer: {}}}); - - expect(background).toExist(); - expect(background).toEqual({start: 0, tempLayer: {}, currentLayer: {}}); - - const backgroundNull = backgroundSelSelector({}); - expect(backgroundNull).toExist(); - expect(backgroundNull).toEqual({}); - }); -}); diff --git a/web/client/selectors/background.js b/web/client/selectors/background.js deleted file mode 100644 index 5144a34863..0000000000 --- a/web/client/selectors/background.js +++ /dev/null @@ -1,13 +0,0 @@ -/* - * Copyright 2017, GeoSolutions Sas. - * All rights reserved. - * - * This source code is licensed under the BSD-style license found in the - * LICENSE file in the root directory of this source tree. - */ - -const backgroundSelSelector = (state) => (state.background) || {}; - -module.exports = { - backgroundSelSelector -}; From 31a69ac462628acb80c053dd80d6c2a19d4ac538 Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Thu, 18 May 2017 16:01:28 +0200 Subject: [PATCH 6/7] Removed reset width from drawer menu --- web/client/components/background/BackgroundSelector.jsx | 4 ++-- web/client/plugins/DrawerMenu.jsx | 9 +++------ 2 files changed, 5 insertions(+), 8 deletions(-) diff --git a/web/client/components/background/BackgroundSelector.jsx b/web/client/components/background/BackgroundSelector.jsx index 427430ce1f..d26a1ce0c3 100644 --- a/web/client/components/background/BackgroundSelector.jsx +++ b/web/client/components/background/BackgroundSelector.jsx @@ -88,7 +88,7 @@ const BackgroundSelector = React.createClass({ return {pagination, listSize, visibleIconsLength}; }, - renerBackgroundSelector() { + renderBackgroundSelector() { const configuration = assign({ side: 78, sidePreview: 104, @@ -142,7 +142,7 @@ const BackgroundSelector = React.createClass({ ); }, render() { - return this.props.layers.length > 0 ? this.renerBackgroundSelector() : null; + return this.props.layers.length > 0 ? this.renderBackgroundSelector() : null; } }); diff --git a/web/client/plugins/DrawerMenu.jsx b/web/client/plugins/DrawerMenu.jsx index b4c937134c..bdefbb3e95 100644 --- a/web/client/plugins/DrawerMenu.jsx +++ b/web/client/plugins/DrawerMenu.jsx @@ -62,8 +62,7 @@ const DrawerMenu = React.createClass({ singleSection: React.PropTypes.bool, buttonClassName: React.PropTypes.string, menuButtonStyle: React.PropTypes.object, - disabled: React.PropTypes.bool, - resetWidth: React.PropTypes.func + disabled: React.PropTypes.bool }, contextTypes: { messages: React.PropTypes.object, @@ -79,8 +78,7 @@ const DrawerMenu = React.createClass({ menuOptions: {}, singleSection: true, buttonClassName: "square-button", - disabled: false, - resetWidth: () => {} + disabled: false }; }, renderItems() { @@ -126,8 +124,7 @@ module.exports = { active: state.controls && state.controls.drawer && state.controls.drawer.active, disabled: state.controls && state.controls.drawer && state.controls.drawer.disabled }), { - toggleMenu: toggleControl.bind(null, 'drawer', null), - resetWidth: setControlProperty.bind(null, 'drawer', 'width', 0) + toggleMenu: toggleControl.bind(null, 'drawer', null) })(DrawerMenu), reducers: {} }; From f007e6aacab70bd65322ff54dde43670ae8a1d9a Mon Sep 17 00:00:00 2001 From: allyoucanmap Date: Thu, 18 May 2017 16:47:14 +0200 Subject: [PATCH 7/7] Added embedded background selector --- web/client/examples/api/init.js | 14 +++++++++++++- web/client/examples/api/plugins.js | 2 +- web/client/localConfig.json | 12 ++++++++++++ 3 files changed, 26 insertions(+), 2 deletions(-) diff --git a/web/client/examples/api/init.js b/web/client/examples/api/init.js index 54e300dd8e..5dfc9fc682 100644 --- a/web/client/examples/api/init.js +++ b/web/client/examples/api/init.js @@ -26,7 +26,19 @@ function init() { "Search", "DrawerMenu", "TOC", - "BackgroundSwitcher", + { + "name": "BackgroundSelector", + "cfg": { + "dimensions": { + "side": 65, + "sidePreview": 65, + "frame": 3, + "margin": 5, + "label": false, + "vertical": true + } + } + }, "Identify", "FullScreen" ]}; diff --git a/web/client/examples/api/plugins.js b/web/client/examples/api/plugins.js index 57f12bd135..2ff6673302 100644 --- a/web/client/examples/api/plugins.js +++ b/web/client/examples/api/plugins.js @@ -40,7 +40,7 @@ module.exports = { SavePlugin: require('../../plugins/Save'), SaveAsPlugin: require('../../plugins/SaveAs'), TOCPlugin: require('../../plugins/TOC'), - BackgroundSwitcherPlugin: require('../../plugins/BackgroundSwitcher'), + BackgroundSelectorPlugin: require('../../plugins/BackgroundSelector'), MeasurePlugin: require('../../plugins/Measure') }, requires: { diff --git a/web/client/localConfig.json b/web/client/localConfig.json index c5913f161a..c90f0ab2bb 100644 --- a/web/client/localConfig.json +++ b/web/client/localConfig.json @@ -219,6 +219,18 @@ }, { "name": "DrawerMenu", "hide": "{!(request.query && request.query.forceDrawer)}" + },{ + "name": "BackgroundSelector", + "cfg": { + "dimensions": { + "side": 65, + "sidePreview": 65, + "frame": 3, + "margin": 5, + "label": false, + "vertical": true + } + } }, { "name": "Identify", "cfg": {