diff --git a/src/components/MapNarratives.jsx b/src/components/MapNarratives.jsx
index 8b92bb8..6b901f1 100644
--- a/src/components/MapNarratives.jsx
+++ b/src/components/MapNarratives.jsx
@@ -18,21 +18,6 @@ class MapNarratives extends React.Component {
return this.props.narrativeProps[styleName]
}
- getStrokeWidth(narrative, step) {
- if (!step) return 0
- return this.getNarrativeStyle(narrative.id).strokeWidth
- }
-
- getStrokeDashArray(narrative, step) {
- if (!step) return 'none'
- return (this.getNarrativeStyle(narrative.id).style === 'dotted') ? "2px 5px" : 'none'
- }
-
- getStroke(narrative, step) {
- if (!step || this.props.narrative === null) return 'none'
- return this.getNarrativeStyle(narrative.id).stroke
- }
-
getStrokeOpacity(narrative, step) {
if (this.props.narrative === null) return 0
if (!step || narrative.id !== this.props.narrative.id) return 0.1
@@ -43,16 +28,39 @@ class MapNarratives extends React.Component {
return (step.latitude === '' || step.longitude === '')
}
- renderNarrativeStep(allSteps, step, idx, n) {
- const { x, y } = this.projectPoint([step.latitude, step.longitude])
- const step2 = allSteps[idx + 1]
+ renderNarrativeStep(idx, n, stepStyle = null) {
+ const step = n.steps[idx]
+ const step2 = n.steps[idx + 1]
// don't draw if one of the steps has no location
if (this.hasNoLocation(step) || this.hasNoLocation(step2))
return null
+ const { narrative } = this.props
+ const { x, y } = this.projectPoint([step.latitude, step.longitude])
const p2 = this.projectPoint([step2.latitude, step2.longitude])
+ // 0 if not in narrative mode, 1 if active narrative, 0.1 if inactive
+ const strokeOpacity = (n === null) ? 0
+ : (step && (n.id === narrative.id)) ? 1 : 0.1
+ let strokeWidth = 0
+ let strokeDasharray = 'none'
+ let stroke = 'none'
+
+ // style narartive step if appropriate
+ if (step) {
+ // stepStyle only provided to functionl if NARRATIVE_STEP_STYLES enabled
+ if (!!stepStyle) {
+ console.log('TODO: step by step styling')
+ // otherwise steps are styled per narrative
+ } else {
+ const narStyle = this.getNarrativeStyle(n.id)
+ stroke = narStyle.stroke
+ strokeWidth = narStyle.strokeWidth
+ strokeDasharray = narStyle.strokeDasharray
+ }
+ }
+
return (
this.props.onSelectNarrative(n)}
style={{
- strokeWidth: this.getStrokeWidth(n, step),
- strokeDasharray: this.getStrokeDashArray(n, step),
- strokeOpacity: this.getStrokeOpacity(n, step),
- stroke: this.getStroke(n, step)
+ strokeWidth,
+ strokeDasharray,
+ strokeOpacity,
+ stroke,
}}
>
@@ -78,7 +86,16 @@ class MapNarratives extends React.Component {
return (
- {steps.map((s, idx) => this.renderNarrativeStep(n.steps, s, idx, n))}
+ {steps.map((s, idx) => {
+ if (process.env.features.NARRATIVE_STEP_STYLES) {
+ const _idx = s.narratives.indexOf(n.id)
+ const stepStyle = s.narrative___stepStyles[_idx]
+ if (stepStyle !== 'None')
+ return this.renderNarrativeStep(idx, n, stepStyle)
+ } else {
+ return this.renderNarrativeStep(idx, n)
+ }
+ })}
)
}
diff --git a/src/reducers/schema/eventSchema.js b/src/reducers/schema/eventSchema.js
index edf80a2..7e9b38a 100644
--- a/src/reducers/schema/eventSchema.js
+++ b/src/reducers/schema/eventSchema.js
@@ -12,11 +12,13 @@ const eventSchema = Joi.object().keys({
type: Joi.string().allow(''),
category: Joi.string().required(),
narratives: Joi.array(),
- narrative___movements: Joi.array(),
sources: Joi.array(),
tags: Joi.string().allow(''),
comments: Joi.string().allow(''),
timestamp: Joi.string().required(),
+
+ // nested
+ narrative___stepStyles: Joi.array(),
});
export default eventSchema;
diff --git a/webpack.config.js b/webpack.config.js
index 768e021..5475885 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -1,8 +1,6 @@
const webpack = require('webpack');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const HtmlWebpackPlugin = require('html-webpack-plugin');
-const userConfig = require('./config');
-const userConfigJSON = {};
const devMode = process.env.NODE_ENV !== 'production';
const path = require('path');
@@ -10,8 +8,16 @@ const path = require('path');
const APP_DIR = path.resolve(__dirname, './src');
const BUILD_DIR = path.resolve(__dirname, './build');
-for (const k in userConfig) {
- userConfigJSON[k] = JSON.stringify(userConfig[k]);
+/** env variables from config.js */
+const envConfig = require('./config');
+const userConfig = {}
+const userFeatures = {}
+for (const k in envConfig) {
+ userConfig[k] = JSON.stringify(envConfig[k]);
+}
+
+for (const k in envConfig['features']) {
+ userFeatures[k] = JSON.stringify(envConfig['features'][k])
}
const config = {
@@ -59,14 +65,9 @@ const config = {
plugins: [
new webpack.DefinePlugin({
'process.env': {
- ...userConfigJSON,
+ ...userConfig,
'NODE_ENV': JSON.stringify('production'),
- 'features': {
- 'USE_TAGS': JSON.stringify(userConfig.features.USE_TAGS),
- 'USE_SEARCH': JSON.stringify(userConfig.features.USE_SEARCH),
- 'USE_SITES': JSON.stringify(userConfig.features.USE_SITES),
- 'USE_SOURCES': JSON.stringify(userConfig.features.USE_SOURCES)
- }
+ 'features': userFeatures
}
}),
new MiniCssExtractPlugin({