diff --git a/data/stat_charts/men_stats_ca/oembed?url=https%3A%2F%2Fcharts.datawrapper.de%2FR5FSu%2F&format=json b/data/stat_charts/men_stats_ca/oembed?url=https%3A%2F%2Fcharts.datawrapper.de%2FR5FSu%2F&format=json
deleted file mode 100755
index e69de29b..00000000
diff --git a/package.json b/package.json
index 98f4362c..ba68488e 100644
--- a/package.json
+++ b/package.json
@@ -6,13 +6,13 @@
"clean:client": "rimraf dist",
"clean:server": "rimraf dist-server",
"clean:all": "npm run clean:client && npm run clean:server && rimraf bower_components && rimraf node_modules",
- "build:webpack-client": "NODE_ENV=production webpack --config webpack.config.prod.js --bail",
- "build:webpack-server": "NODE_ENV=production webpack --config webpack.config.server.prod.js --bail",
+ "build:webpack-client": "cross-env NODE_ENV=production webpack --config webpack.config.prod.js --bail",
+ "build:webpack-server": "cross-env NODE_ENV=production webpack --config webpack.config.server.prod.js --bail",
"build:client": "npm run clean:client && npm run build:webpack-client",
"build:server": "npm run clean:server && npm run build:webpack-server",
- "build": "npm run clean:client && npm run clean:server && concurrently \"npm run build:client\" \"npm run build:server\"",
- "start": "NODE_ENV=production NODE_PATH=./src node src/server/index.js",
- "dev:server": "NODE_PATH=./src nodemon src/server/index.js",
+ "build": "npm run clean:client && npm run clean:server && concurrently \"npm run build:webpack-client\" \"npm run build:webpack-server\"",
+ "start": "cross-env NODE_ENV=production NODE_PATH=./src node src/server/index.js",
+ "dev:server": "cross-env NODE_PATH=./src nodemon src/server/index.js",
"dev": "node src/server/devServer.js",
"eslint:ci": "eslint src/ --ext .js,.jsx --max-warnings 10",
"eslint": "eslint src/ --ext .js,.jsx || true",
@@ -20,7 +20,7 @@
"reinstall": "npm run clean:all && bower i && npm i",
"postinstall": "bower install && npm run build",
"ngrok": "ngrok http 8888",
- "tape-tests": "NODE_PATH=./src tape -r './src/tests/index.js' 'src/**/tests/**/*.js'",
+ "tape-tests": "cross-env NODE_PATH=./src tape -r './src/tests/index.js' 'src/**/tests/**/*.js'",
"test": "npm run tape-tests | tap-spec",
"test:dot": "npm run tape-tests | tap-dot || true"
},
@@ -55,10 +55,11 @@
"babel-preset-es2015-node6": "^0.3.0",
"babel-preset-react": "^6.16.0",
"babel-preset-stage-2": "^6.17.0",
- "bower": "^1.7.9",
+ "bower": "^1.8.0",
"chalk": "^1.1.3",
"compression": "^1.6.2",
"concurrently": "^2.1.0",
+ "cross-env": "^5.0.0",
"css-loader": "0.14.5",
"eslint": "~2.11.1",
"eslint-plugin-react": "^5.1.1",
@@ -80,12 +81,12 @@
"react-transform-hmr": "^1.0.2",
"redbox-react": "^1.3.1",
"redux-logger": "^2.7.0",
- "rimraf": "^2.4.4",
- "shortid": "^2.2.6",
+ "rimraf": "^2.6.1",
"sass-loader": "^4.0.2",
+ "shortid": "^2.2.6",
"style-loader": "^0.13.0",
- "tap-dot": "^1.0.5",
"svg-inline-loader": "^0.7.1",
+ "tap-dot": "^1.0.5",
"tap-spec": "^4.1.1",
"tape": "^4.6.2",
"url-loader": "^0.5.7",
diff --git a/src/client/calendar/Calendars.jsx b/src/client/calendar/Calendars.jsx
new file mode 100644
index 00000000..9ace66a4
--- /dev/null
+++ b/src/client/calendar/Calendars.jsx
@@ -0,0 +1,37 @@
+import Component from 'react-pure-render/component'
+import './Calendars.scss'
+import React from 'react'
+
+class Calendars extends Component {
+ render() {
+ const {
+ calendars
+ } = this.props
+
+ const calendarsComponents = Object.keys(calendars)
+ .map(key =>
+
+ {calendars[key].name}
+
+ {calendars[key].description && Description: {calendars[key].description}
}
+ )
+
+ return (
+
+
Calendars:
+
+ {calendarsComponents}
+
+
+ )
+ }
+}
+
+import { connect } from 'react-redux'
+import { getAllCalendars } from 'shared/reducers/reducer.js'
+
+export default connect(
+ (state, ownProps) => ({
+ calendars: getAllCalendars(state)
+ })
+)(Calendars)
diff --git a/src/client/calendar/Calendars.scss b/src/client/calendar/Calendars.scss
new file mode 100644
index 00000000..d8e51a20
--- /dev/null
+++ b/src/client/calendar/Calendars.scss
@@ -0,0 +1,22 @@
+.Calendars {
+ list-style-type: none;
+
+ li {
+ height: 8rem;
+ width: 20rem;
+ float: left;
+ text-align: center;
+ margin-right: 1rem;
+ border: 0.1rem solid #aaa;
+ padding: 0 1rem;
+ }
+
+ li a {
+ text-decoration: none;
+ text-transform: uppercase;
+ }
+
+ li a:hover {
+ font-weight: bold;
+ }
+}
diff --git a/src/client/routes.js b/src/client/routes.js
index 051956e6..9a02592c 100644
--- a/src/client/routes.js
+++ b/src/client/routes.js
@@ -6,6 +6,7 @@ import Dev from 'Dev'
import MtbCalendar from 'calendar/MtbCalendar'
import NcncaCalendar from 'calendar/NcncaCalendar'
import NcncaDraftCalendar from 'calendar/NcncaDraftCalendar'
+import Calendars from 'calendar/Calendars.jsx'
import EventDetails from 'calendar/events/event-details/EventDetails.jsx'
import AdminIndex from 'admin/index'
import CreateEventId from 'admin/events/CreateEventId.jsx'
@@ -14,6 +15,7 @@ const routes = (
+
diff --git a/src/shared/reducers/reducer.js b/src/shared/reducers/reducer.js
index 908d4ec1..c51e2e2f 100644
--- a/src/shared/reducers/reducer.js
+++ b/src/shared/reducers/reducer.js
@@ -224,10 +224,11 @@ const eventsByDate = (events) => {
const getEvent = (state, id) => state.events[id]
const getCalendar = (state, props) => state.calendars[props.calendarId]
+const getAllCalendars = (state) => state.calendars
+
const getAllEvents = state => state.events
const getEventIdsForCalendar = (state, props) => getCalendar(state, props).eventsIds
-
const getEventsForCalendar = createSelector(
getEventIdsForCalendar,
getAllEvents,
@@ -244,6 +245,7 @@ export {
getCalendar,
getEventsForCalendar,
getEventsByDateForCalendar,
+ getAllCalendars
}
export default rootReducer
diff --git a/yarn.lock b/yarn.lock
index 417da940..4adc99ad 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -1273,6 +1273,13 @@ core-util-is@~1.0.0:
version "1.0.2"
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
+cross-env@^5.0.0:
+ version "5.0.0"
+ resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-5.0.0.tgz#565ccae4d09676441a5087f406fe7661a29c931b"
+ dependencies:
+ cross-spawn "^5.1.0"
+ is-windows "^1.0.0"
+
cross-spawn@^0.2.9:
version "0.2.9"
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-0.2.9.tgz#bd67f96c07efb6303b7fe94c1e979f88478e0a39"
@@ -1286,6 +1293,14 @@ cross-spawn@^3.0.0:
lru-cache "^4.0.1"
which "^1.2.9"
+cross-spawn@^5.1.0:
+ version "5.1.0"
+ resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
+ dependencies:
+ lru-cache "^4.0.1"
+ shebang-command "^1.2.0"
+ which "^1.2.9"
+
cryptiles@2.x.x:
version "2.0.5"
resolved "https://registry.yarnpkg.com/cryptiles/-/cryptiles-2.0.5.tgz#3bdfecdc608147c1c67202fa291e7dca59eaa3b8"
@@ -2464,6 +2479,10 @@ is-utf8@^0.2.0:
version "0.2.1"
resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72"
+is-windows@^1.0.0:
+ version "1.0.1"
+ resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.1.tgz#310db70f742d259a16a369202b51af84233310d9"
+
isarray@0.0.1:
version "0.0.1"
resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
@@ -3665,12 +3684,18 @@ right-align@^0.1.1:
dependencies:
align-text "^0.1.1"
-rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@~2.5.0, rimraf@~2.5.1:
+rimraf@2, rimraf@^2.2.8, rimraf@~2.5.0, rimraf@~2.5.1:
version "2.5.4"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.5.4.tgz#96800093cbf1a0c86bd95b4625467535c29dfa04"
dependencies:
glob "^7.0.5"
+rimraf@^2.6.1:
+ version "2.6.1"
+ resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d"
+ dependencies:
+ glob "^7.0.5"
+
ripemd160@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-0.2.0.tgz#2bf198bde167cacfa51c0a928e84b68bbe171fce"
@@ -3759,6 +3784,12 @@ sha.js@2.2.6:
version "2.2.6"
resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.2.6.tgz#17ddeddc5f722fb66501658895461977867315ba"
+shebang-command@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
+ dependencies:
+ shebang-regex "^1.0.0"
+
shebang-regex@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"