Compare commits
62 Commits
master
...
results_pa
Author | SHA1 | Date | |
---|---|---|---|
8c66fb0251 | |||
|
14d9c925f2 | ||
|
b5ae097872 | ||
|
1779d04546 | ||
|
fde16110cc | ||
|
ff519477ac | ||
|
ed1fffca88 | ||
|
3d20857fc1 | ||
c4603b8e03 | |||
9fe634dfd5 | |||
|
4c2a3361eb | ||
|
474000833c | ||
|
06065dea6e | ||
|
09dc73a5c1 | ||
|
1be52cd27e | ||
|
53214b12ea | ||
|
6ff0019b79 | ||
1eb6b8a1f4 | |||
|
34deaaeefe | ||
|
935c6d210c | ||
|
2bb636cb79 | ||
|
fcbfe7bc50 | ||
|
45da475ba6 | ||
|
45b435b201 | ||
|
0b51135517 | ||
|
a0489baae9 | ||
|
3c7050bcdc | ||
|
9cccc32dfd | ||
|
14adb5e86c | ||
6eb178ea39 | |||
ee15c0150d | |||
|
7d8778b51c | ||
f1667af8de | |||
86a90ca8da | |||
|
f0dc1e4f35 | ||
|
204f1de024 | ||
|
71a14e79d9 | ||
2d755be6b8 | |||
69c2181afa | |||
|
5c048b2036 | ||
f667e9ea8f | |||
c9d1495c43 | |||
|
7d48fad50a | ||
|
d36d4e6c6e | ||
e7471420d2 | |||
|
461ed1af37 | ||
|
2dcd50d361 | ||
|
aef0af64b6 | ||
|
3a42fee6e2 | ||
|
34f39d0253 | ||
|
c2bce65dce | ||
7a3e025278 | |||
d369c16540 | |||
|
bff021333f | ||
|
53de0e1916 | ||
|
396005c9fc | ||
|
da380dff81 | ||
|
a3ed5426c5 | ||
|
4b90d1f895 | ||
|
ba0f08036e | ||
|
c17e153fd3 | ||
|
401de982c8 |
|
@ -3,14 +3,22 @@
|
|||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"dependencies": {
|
||||
"connected-react-router": "^5.0.1",
|
||||
"font-awesome": "^4.7.0",
|
||||
"history": "^4.7.2",
|
||||
"node-sass": "^4.11.0",
|
||||
"prop-types": "^15.6.2",
|
||||
"react": "^16.6.3",
|
||||
"react-css-grid": "^2.0.0-0",
|
||||
"react-dom": "^16.6.3",
|
||||
"react-redux": "^5.1.1",
|
||||
"react-router": "^4.3.1",
|
||||
"react-router-dom": "^4.3.1",
|
||||
"react-scripts": "2.1.1",
|
||||
"redux": "^4.0.1",
|
||||
"redux-logger": "^3.0.6",
|
||||
"redux-thunk": "^2.3.0",
|
||||
"video-react": "^0.13.1",
|
||||
"whatwg-fetch": "^3.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
work correctly both with client-side routing and a non-root public URL.
|
||||
Learn how to configure a non-root public URL by running `npm run build`.
|
||||
-->
|
||||
<title>React App</title>
|
||||
<title>858</title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
|
37
src/App.js
|
@ -1,19 +1,38 @@
|
|||
import React, { Component } from 'react';
|
||||
import { Provider } from 'react-redux';
|
||||
import React, {Component} from 'react';
|
||||
import {Provider} from 'react-redux';
|
||||
import { ConnectedRouter } from 'connected-react-router'
|
||||
import './App.css';
|
||||
import { Route } from 'react-router-dom';
|
||||
import 'font-awesome/css/font-awesome.min.css';
|
||||
import { Route, Switch } from 'react-router-dom';
|
||||
import Home from './containers/Home';
|
||||
import TopicsList from './containers/TopicsList';
|
||||
import TopicsListContainer from './containers/TopicsListContainer';
|
||||
import store from './store/configureStore';
|
||||
import history from './history';
|
||||
import Header from "./components/Header";
|
||||
import Footer from "./components/Footer";
|
||||
import Search from "./components/Search";
|
||||
import Nav from "./components/Nav";
|
||||
import Video from "./containers/Video";
|
||||
import Results from "./containers/Results";
|
||||
|
||||
class App extends Component {
|
||||
render() {
|
||||
return (
|
||||
<Provider store={ store }>
|
||||
<div className="App">
|
||||
<Route exact={ true } path="/" component={ Home } />
|
||||
<Route path="/topics" component={ TopicsList } />
|
||||
</div>
|
||||
<Provider store={store}>
|
||||
<ConnectedRouter history={ history }>
|
||||
<div className="App">
|
||||
<Header/>
|
||||
<Search/>
|
||||
<Switch>
|
||||
<Route exact={true} path="/" component={Home}/>
|
||||
<Route path="/topics" component={TopicsListContainer}/>
|
||||
<Route path="/results/:categoryKey/:searchValue" component={Results}/>
|
||||
<Route path="/videos/:videoId" component={Video}/>
|
||||
</Switch>
|
||||
<Nav/>
|
||||
<Footer/>
|
||||
</div>
|
||||
</ConnectedRouter>
|
||||
</Provider>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,3 +1,15 @@
|
|||
export const TEST_ACTION = 'TEST_ACTION';
|
||||
export const START_LOADING_VIDEOS = 'START_LOADING_VIDEOS';
|
||||
export const RECEIVE_VIDEOS = 'RECEIVE_VIDEOS';
|
||||
// Topics Action Types
|
||||
export const START_LOADING_ALL_TOPICS = 'START_LOADING_ALL_TOPICS';
|
||||
export const LOADED_ALL_TOPICS = 'LOADED_ALL_TOPICS';
|
||||
export const START_LOADING_RANDOM_TOPIC = 'START_LOADING_RANDOM_TOPIC';
|
||||
export const LOADED_RANDOM_TOPIC = 'LOADED_RANDOM_TOPIC';
|
||||
|
||||
// Videos Action Types
|
||||
export const ADD_VIDEOS_TO_STATE = 'ADD_VIDEOS_TO_STATE';
|
||||
export const START_LOADING_VIDEO = 'START_LOADING_VIDEO';
|
||||
export const LOADED_VIDEO = 'LOADED_VIDEO';
|
||||
|
||||
|
||||
// Search Results Action Types
|
||||
export const START_LOADING_ALL_RESULTS = 'START_LOADING_ALL_RESULTS';
|
||||
export const LOADED_ALL_RESULTS = 'LOADED_ALL_RESULTS';
|
7
src/actions/errors.js
Normal file
|
@ -0,0 +1,7 @@
|
|||
|
||||
export function APIError(error) {
|
||||
return {
|
||||
type: 'ERROR',
|
||||
payload: error
|
||||
}
|
||||
}
|
|
@ -1,49 +0,0 @@
|
|||
import config from '../config';
|
||||
import { START_LOADING_VIDEOS, RECEIVE_VIDEOS } from './action_types';
|
||||
|
||||
function fetchVideos() {
|
||||
console.log('fetchVideos called');
|
||||
return dispatch => {
|
||||
console.log('inside dispatch function');
|
||||
dispatch(startLoadingVideos());
|
||||
const params = {
|
||||
"keys":["editable","modified","title","source","project","topic","language","duration","id"],
|
||||
"query": {
|
||||
"conditions":[],
|
||||
"operator":"&"
|
||||
},
|
||||
"range":[0,100],
|
||||
"sort": [{"key":"title","operator":"+"}]
|
||||
};
|
||||
let formData = new FormData();
|
||||
formData.append('action', 'find');
|
||||
formData.append('data', JSON.stringify(params));
|
||||
fetch(config.apiUrl, {
|
||||
method: 'POST',
|
||||
// headers: {
|
||||
// "Content-Type": "application/x-www-form-urlencoded"
|
||||
// },
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(json => {
|
||||
dispatch(receiveVideos(json.data.items));
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
function startLoadingVideos() {
|
||||
return {
|
||||
type: START_LOADING_VIDEOS
|
||||
}
|
||||
}
|
||||
|
||||
function receiveVideos(videos) {
|
||||
return {
|
||||
type: RECEIVE_VIDEOS,
|
||||
payload: videos
|
||||
}
|
||||
}
|
||||
|
||||
export default fetchVideos;
|
43
src/actions/search.js
Normal file
|
@ -0,0 +1,43 @@
|
|||
import {LOADED_ALL_RESULTS, LOADED_ALL_TOPICS, START_LOADING_ALL_RESULTS} from "./action_types";
|
||||
import {fetchVideosByTopic} from "../utils/api";
|
||||
import {APIError} from "./errors";
|
||||
import {setItem} from "../utils/safe-storage";
|
||||
|
||||
export function getSearchResults(categoryKey, searchValue) {
|
||||
// get the stuff from the api
|
||||
// dispatch loaded
|
||||
|
||||
switch (categoryKey) {
|
||||
case 'topic':
|
||||
console.log('topic')
|
||||
return dispatch => {
|
||||
dispatch(loadingAllResults())
|
||||
// this calls the API
|
||||
fetchVideosByTopic(searchValue)
|
||||
.then(videos => {
|
||||
dispatch(loadedResults(videos));
|
||||
}).catch(error => {
|
||||
dispatch(APIError(error));
|
||||
})
|
||||
};
|
||||
case 'date':
|
||||
console.log('date')
|
||||
case 'location':
|
||||
console.log('location')
|
||||
default:
|
||||
console.log('none')
|
||||
}
|
||||
|
||||
}
|
||||
function loadingAllResults() {
|
||||
return {
|
||||
type: START_LOADING_ALL_RESULTS
|
||||
}
|
||||
}
|
||||
|
||||
function loadedResults(videos) {
|
||||
return {
|
||||
type: LOADED_ALL_RESULTS,
|
||||
payload: videos
|
||||
};
|
||||
};
|
|
@ -1,10 +0,0 @@
|
|||
import { TEST_ACTION } from './action_types';
|
||||
|
||||
function testAction(data) {
|
||||
return {
|
||||
type: TEST_ACTION,
|
||||
payload: data
|
||||
}
|
||||
}
|
||||
|
||||
export default testAction;
|
70
src/actions/topics.js
Normal file
|
@ -0,0 +1,70 @@
|
|||
import { fetchAllTopics, fetchVideosByTopic } from '../utils/api';
|
||||
import { APIError } from './errors';
|
||||
import { getItem, setItem } from '../utils/safe-storage';
|
||||
import getRandomTopic from '../utils/get-random-topic';
|
||||
import { addVideosToState } from './videos';
|
||||
import {
|
||||
START_LOADING_ALL_TOPICS,
|
||||
LOADED_ALL_TOPICS,
|
||||
START_LOADING_RANDOM_TOPIC,
|
||||
LOADED_RANDOM_TOPIC
|
||||
} from './action_types';
|
||||
|
||||
export function getAllTopics() {
|
||||
return dispatch => {
|
||||
dispatch(startLoadingAllTopics());
|
||||
// this calls the API
|
||||
fetchAllTopics()
|
||||
.then(topics => {
|
||||
dispatch(loadedTopics(topics));
|
||||
}).catch(error => {
|
||||
dispatch(APIError(error));
|
||||
})
|
||||
};
|
||||
};
|
||||
|
||||
function startLoadingAllTopics() {
|
||||
return {
|
||||
type: START_LOADING_ALL_TOPICS
|
||||
};
|
||||
};
|
||||
|
||||
function loadedTopics(topics) {
|
||||
// cache
|
||||
setItem('allTopics', JSON.stringify(topics));
|
||||
setItem('topicsUpdatedAt', new Date());
|
||||
return {
|
||||
type: LOADED_ALL_TOPICS,
|
||||
payload: topics
|
||||
};
|
||||
};
|
||||
// actions :
|
||||
// - async actions
|
||||
// - simple: return action type and payload.
|
||||
export function getRandomTopicVideos(allTopics, numVideos=4) {
|
||||
return dispatch => {
|
||||
const randomTopic = getRandomTopic(allTopics);
|
||||
dispatch(loadingRandomTopicVideos());
|
||||
fetchVideosByTopic(randomTopic.name, 0, 4)
|
||||
.then(videos => {
|
||||
dispatch(addVideosToState(videos));
|
||||
dispatch(loadedRandomTopicVideos(randomTopic, videos));
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
function loadedRandomTopicVideos(topic, videos) {
|
||||
return {
|
||||
type: LOADED_RANDOM_TOPIC,
|
||||
payload: {
|
||||
topic: topic,
|
||||
videos: videos
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
function loadingRandomTopicVideos() {
|
||||
return {
|
||||
type: START_LOADING_RANDOM_TOPIC
|
||||
};
|
||||
};
|
8
src/actions/videos.js
Normal file
|
@ -0,0 +1,8 @@
|
|||
import { ADD_VIDEOS_TO_STATE } from './action_types';
|
||||
|
||||
export function addVideosToState(videos) {
|
||||
return {
|
||||
type: ADD_VIDEOS_TO_STATE,
|
||||
payload: videos
|
||||
};
|
||||
}
|
0
src/assets/fonts/BEBAS___.ttf
Normal file
BIN
src/assets/fonts/Fedra Arabic Reg_beta.ttf
Executable file
0
src/assets/fonts/Interstate-Bold.bmap
Executable file
0
src/assets/fonts/Interstate-Regular.bmap
Executable file
0
src/assets/fonts/MyriadPro-Regular.otf
Normal file
0
src/assets/fonts/majalla 2.ttf
Normal file
BIN
src/assets/images/byline.ar.png
Executable file
After Width: | Height: | Size: 64 KiB |
BIN
src/assets/images/counter.png
Executable file
After Width: | Height: | Size: 16 KiB |
BIN
src/assets/images/img1.png
Normal file
After Width: | Height: | Size: 992 KiB |
BIN
src/assets/images/img2.png
Normal file
After Width: | Height: | Size: 1.4 MiB |
BIN
src/assets/images/img3.png
Normal file
After Width: | Height: | Size: 1.5 MiB |
BIN
src/assets/images/img4.png
Normal file
After Width: | Height: | Size: 971 KiB |
BIN
src/assets/images/img5.png
Normal file
After Width: | Height: | Size: 551 KiB |
Before Width: | Height: | Size: 29 KiB After Width: | Height: | Size: 29 KiB |
BIN
src/assets/images/search.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
src/assets/images/video.jpg
Executable file
After Width: | Height: | Size: 6.0 KiB |
13
src/components/Footer.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
import React from 'react';
|
||||
class Footer extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
<footer>
|
||||
<span className="arabic-text"> جميع الحقوق محفوظة لمؤسسة مٌصرين</span>
|
||||
|
||||
<span className="english-text"> all rights reserved</span>
|
||||
</footer>
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (Footer);
|
37
src/components/Header.js
Normal file
|
@ -0,0 +1,37 @@
|
|||
import React from 'react';
|
||||
import '../stylesheets/style.scss'
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
class Header extends React.Component {
|
||||
render() {
|
||||
const Logo = () => {
|
||||
return (
|
||||
<section className="logo-container">
|
||||
<Link to="/">
|
||||
<img className="site-logo" src={require('../assets/images/logo.png')} alt="logo 858 "/>
|
||||
<br/>
|
||||
<img className="site-logo" src={require('../assets/images/byline.ar.png')} alt="logo 858 "/>
|
||||
<h1>An archive of resistance</h1>
|
||||
</Link>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
const Counter = () => {
|
||||
return (
|
||||
<div className="counter-container">
|
||||
<span>967</span>
|
||||
<br/>
|
||||
<span> ساعة وبيزيدوا</span>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<header>
|
||||
<Logo/>
|
||||
<Counter/>
|
||||
</header>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (Header);
|
49
src/components/Nav.js
Normal file
|
@ -0,0 +1,49 @@
|
|||
import React from 'react';
|
||||
|
||||
class Nav extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a href="">
|
||||
<span className="arabic-text">اتصل بنا</span>
|
||||
<br/>
|
||||
<span className="english-text"> contact us</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="">
|
||||
<span className="arabic-text">دليل توجيهي</span>
|
||||
<br/>
|
||||
<span className="english-text"> tutorials</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="">
|
||||
<span className="arabic-text">الرئيسية</span>
|
||||
<br/>
|
||||
<span className="english-text"> main</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="">
|
||||
<span className="arabic-text">الأرشيف</span>
|
||||
<br/>
|
||||
<span className="english-text"> the archive</span>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="">
|
||||
<span className="arabic-text">ماهذا الشيء</span>
|
||||
<br/>
|
||||
<span className="english-text"> what is this</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (Nav);
|
25
src/components/RandomDate.js
Normal file
|
@ -0,0 +1,25 @@
|
|||
import React from 'react';
|
||||
import Grid from 'react-css-grid';
|
||||
import VideoItem from "./VideoItem";
|
||||
import SectionHeading from "./SectionHeading";
|
||||
|
||||
class RandomDate extends React.Component {
|
||||
render() {
|
||||
|
||||
return (
|
||||
<section>
|
||||
<SectionHeading title="Random Date"/>
|
||||
<Grid
|
||||
width={220}
|
||||
gap={12}>
|
||||
<VideoItem/>
|
||||
<VideoItem/>
|
||||
<VideoItem/>
|
||||
<VideoItem/>
|
||||
</Grid>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (RandomDate);
|
24
src/components/RandomLocation.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
import React from 'react';
|
||||
import VideoItem from "./VideoItem";
|
||||
import Grid from 'react-css-grid'
|
||||
import SectionHeading from "./SectionHeading";
|
||||
|
||||
class RandomLocation extends React.Component {
|
||||
render() {
|
||||
|
||||
return (
|
||||
<section>
|
||||
<SectionHeading title="Random Location"/>
|
||||
<Grid
|
||||
width={225}
|
||||
gap={24}>
|
||||
<VideoItem/>
|
||||
<VideoItem/>
|
||||
<VideoItem/>
|
||||
</Grid>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (RandomLocation);
|
61
src/components/RandomTopic.js
Normal file
|
@ -0,0 +1,61 @@
|
|||
import Grid from 'react-css-grid'
|
||||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import VideoItem from "./VideoItem";
|
||||
import RandomItemTitle from "./SectionHeading";
|
||||
import {Link} from 'react-router-dom';
|
||||
class RandomTopic extends React.Component {
|
||||
|
||||
shuffleTopic() {
|
||||
this.props.getRandomTopicVideos(this.props.allTopics);
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<section>
|
||||
<h2 className="section-heading">from the Archive Topics - من مواضيع الارشيف</h2>
|
||||
<RandomItemTitle title={this.props.topicName}
|
||||
count={this.props.topicCount}
|
||||
src={'/topic/' + this.props.topicName}
|
||||
/>
|
||||
<Grid
|
||||
width={450}
|
||||
>
|
||||
{/* View all topics button*/}
|
||||
<Link to="/topics">
|
||||
<button className="view-all-topics">
|
||||
<span className="english-text">All Topics - </span>
|
||||
<span className="arabic-text"> جميع المواضيع </span>
|
||||
</button>
|
||||
</Link>
|
||||
{/* Shuffle button */}
|
||||
<button className="shuffle-button" onClick={this.shuffleTopic.bind(this)}>
|
||||
<span className="english-text">Shuffle Topics - </span>
|
||||
<span className="arabic-text"> موضوع عشوائي </span>
|
||||
<i className="fa fa-random"></i>
|
||||
</button>
|
||||
</Grid>
|
||||
|
||||
<Grid className="random-topics"
|
||||
width={220}
|
||||
gap={12}>
|
||||
{this.props.videos.map(video =>
|
||||
<VideoItem id={video.id} key={video.id} title={video.title}/>
|
||||
)}
|
||||
</Grid>
|
||||
</section>
|
||||
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
RandomTopic.propTypes = {
|
||||
topicName: PropTypes.string,
|
||||
allTopics: PropTypes.array,
|
||||
videos: PropTypes.array,
|
||||
loading: PropTypes.bool,
|
||||
topicCount: PropTypes.number,
|
||||
getRandomTopicVideos: PropTypes.func
|
||||
};
|
||||
|
||||
export default (RandomTopic);
|
17
src/components/Search.js
Normal file
|
@ -0,0 +1,17 @@
|
|||
import React from 'react';
|
||||
|
||||
class Search extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<form action="">
|
||||
<button className="search-button" type='submit'>
|
||||
<img src={require('../assets/images/search.png')} alt=""/>
|
||||
</button>
|
||||
|
||||
<input type="text" className="search-box" name="search-box" placeholder="search the Archive بحث في الأرشيف"/>
|
||||
</form>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (Search);
|
19
src/components/SectionHeading.js
Normal file
|
@ -0,0 +1,19 @@
|
|||
import React from 'react';
|
||||
|
||||
/**
|
||||
* a section heading is any heading that needs the style of having a horizontal line underneath it.
|
||||
* it could be the Topics Heading/Title, Date..etc.
|
||||
*/
|
||||
class SectionHeading extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<h3 className="section-title">
|
||||
<span>{this.props.title}
|
||||
<a className="normal-link" href={this.props.src}> ({this.props.count})</a>
|
||||
</span>
|
||||
</h3>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (SectionHeading);
|
56
src/components/TopicsList.js
Normal file
|
@ -0,0 +1,56 @@
|
|||
import React from 'react';
|
||||
import {Link} from 'react-router-dom';
|
||||
|
||||
class TopicsList extends React.Component {
|
||||
constructor() {
|
||||
super();
|
||||
this.state = {
|
||||
currentFilter: "",
|
||||
filteredTopics: [],
|
||||
}
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
this.setState({
|
||||
filteredTopics: this.props.allTopics
|
||||
})
|
||||
}
|
||||
|
||||
filterTopics(event) {
|
||||
// find the topics that contain that string
|
||||
// return filtered topics.
|
||||
// this.
|
||||
const input = event.target.value.toLowerCase();
|
||||
this.setState({
|
||||
filteredTopics: this.props.allTopics.filter(topic => topic.name.toLowerCase().indexOf(input) !== -1)
|
||||
})
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<main className="topics-list">
|
||||
<section className="filter-box">
|
||||
<label className="label" htmlFor="search-topics">
|
||||
<i className="fa fa-filter"> </i>
|
||||
Filter Topics :
|
||||
<input type="text" id="search-topics" ref="filter-element" onChange={event => this.filterTopics(event)}/>
|
||||
</label>
|
||||
</section>
|
||||
|
||||
{this.state.filteredTopics.map(topic => {
|
||||
return (
|
||||
<section className="topic-item" key={topic.name}>
|
||||
<Link to={"/results/topic/" + topic.name}>
|
||||
<h3>{topic.name} ({topic.items} videos)</h3>
|
||||
</Link>
|
||||
</section>
|
||||
)
|
||||
}
|
||||
)}
|
||||
</main>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
export default TopicsList;
|
26
src/components/VideoItem.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import { Link } from 'react-router-dom';
|
||||
import { getThumbnail } from '../utils/video';
|
||||
class VideoItem extends React.Component {
|
||||
|
||||
render() {
|
||||
const videoLink = `/videos/${this.props.id}`;
|
||||
return (
|
||||
<Link to={ videoLink }>
|
||||
<section className="video-item">
|
||||
<section className="video-thumbnail-container">
|
||||
<img className="video-thumbnail" src={ getThumbnail(this.props.id) } alt=""/>
|
||||
</section>
|
||||
<h3 className="video-title">{ this.props.title }</h3>
|
||||
</section>
|
||||
</Link>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
VideoItem.propTypes = {
|
||||
id: PropTypes.string,
|
||||
title: PropTypes.string,
|
||||
}
|
||||
export default (VideoItem);
|
27
src/components/VideoPlayer.js
Normal file
|
@ -0,0 +1,27 @@
|
|||
import React from 'react';
|
||||
import PropTypes from 'prop-types';
|
||||
import {getVideo} from '../utils/video';
|
||||
import { Player } from 'video-react';
|
||||
class VideoPlayer extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<section>
|
||||
<Player src={getVideo(this.props.id)} controls>
|
||||
</Player>
|
||||
<h2 className='video-player-title'>{this.props.title}</h2>
|
||||
<h3 className="video-player-date text-left">date {this.props.date} </h3>
|
||||
<p className="text-left">{this.props.description}</p>
|
||||
</section>
|
||||
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
VideoPlayer.propTypes = {
|
||||
title: PropTypes.string,
|
||||
date: PropTypes.string,
|
||||
description: PropTypes.string
|
||||
};
|
||||
|
||||
|
||||
export default VideoPlayer;
|
|
@ -1,3 +1,5 @@
|
|||
export default {
|
||||
apiUrl: 'https://858.ma/api'
|
||||
baseUrl: 'https://858.ma',
|
||||
videoBase: 'https://video22.858.ma',
|
||||
apiUrl: 'https://858.ma/api'
|
||||
};
|
|
@ -1,59 +1,57 @@
|
|||
import React from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import testAction from '../actions/test';
|
||||
import fetchVideos from '../actions/fetchVideos';
|
||||
import Search from '../subComponents/Search';
|
||||
import Footer from '../subComponents/Footer';
|
||||
import RandomLocation from "../subComponents/RandomLocation";
|
||||
import RandomDate from "../subComponents/RandomDate";
|
||||
import RandomTopic from "../subComponents/RandomTopic";
|
||||
import Header from "../subComponents/Header";
|
||||
import { getAllTopics, getRandomTopicVideos } from '../actions/topics';
|
||||
import RandomLocation from "../components/RandomLocation";
|
||||
import RandomDate from "../components/RandomDate";
|
||||
import RandomTopic from "../components/RandomTopic";
|
||||
|
||||
class Home extends React.Component {
|
||||
clickBtn() {
|
||||
this.props.testAction('some new value');
|
||||
componentDidMount() {
|
||||
if (this.props.allTopics && this.props.allTopics.length > 0 && !this.props.randomTopic) {
|
||||
this.props.getRandomTopicVideos(this.props.allTopics);
|
||||
} else {
|
||||
this.props.getAllTopics();
|
||||
}
|
||||
}
|
||||
|
||||
componentWillReceiveProps(nextProps) {
|
||||
// This is slightly awkward - we need to check that we have all topics,
|
||||
// But don't have a random topic yet (or at not already loading a random topic)
|
||||
if ((this.props.allTopics || nextProps.allTopics) && !this.props.loadingRandomTopic && !nextProps.loadingRandomTopic && !this.props.randomTopic) {
|
||||
this.props.getRandomTopicVideos(nextProps.allTopics);
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
<Header/>
|
||||
<Search/>
|
||||
<RandomTopic/>
|
||||
<RandomTopic
|
||||
topicName={ this.props.randomTopic || ''}
|
||||
allTopics={ this.props.allTopics || [] }
|
||||
topicCount={ this.props.randomTopicCount }
|
||||
videos = { this.props.randomTopicVideos || [] }
|
||||
loading = { this.props.loadingAllTopics || this.props.loadingRandomTopic }
|
||||
getRandomTopicVideos={ this.props.getRandomTopicVideos }
|
||||
/>
|
||||
<RandomLocation/>
|
||||
<RandomDate/>
|
||||
<Footer/>
|
||||
</div>
|
||||
);
|
||||
//
|
||||
// <div>
|
||||
// This is home. {this.props.test}
|
||||
// <div>
|
||||
// <Link to="/topics">Go to topics</Link>
|
||||
// </div>
|
||||
// <div>
|
||||
// <button onClick={this.clickBtn.bind(this)}>Click me</button>
|
||||
// <button onClick={this.props.fetchVideos}>Fetch videos</button>
|
||||
// </div>
|
||||
// <div>
|
||||
// {this.props.loading && 'Loading...'}
|
||||
// {this.props.videos.map(video => {
|
||||
// return (<div key={video.id}>{video.title}</div>);
|
||||
// })}
|
||||
// </div>
|
||||
// </div>
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
test: state.home.test,
|
||||
loading: state.home.loading,
|
||||
videos: state.home.videos
|
||||
allTopics: state.topics.allTopics,
|
||||
loadingAllTopics: state.topics.loadingAllTopics,
|
||||
randomTopic: state.topics.randomTopic,
|
||||
randomTopicCount: state.topics.randomTopicCount,
|
||||
loadingRandomTopic: state.topics.loadingRandomTopic,
|
||||
randomTopicVideos: state.topics.randomTopicVideos
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
testAction: value => dispatch(testAction(value)),
|
||||
fetchVideos: () => dispatch(fetchVideos())
|
||||
getAllTopics: () => dispatch(getAllTopics()),
|
||||
getRandomTopicVideos: allTopics => dispatch(getRandomTopicVideos(allTopics))
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(Home);
|
61
src/containers/Results.js
Normal file
|
@ -0,0 +1,61 @@
|
|||
import React from 'react';
|
||||
import Grid from "react-css-grid";
|
||||
import VideoItem from "../components/VideoItem";
|
||||
import PropTypes from "prop-types";
|
||||
import {getSearchResults} from "../actions/search";
|
||||
import connect from "react-redux/es/connect/connect";
|
||||
|
||||
class Results extends React.Component {
|
||||
|
||||
componentDidMount() {
|
||||
// get params from url
|
||||
const categoryKey = this.props.match.params.categoryKey;
|
||||
const searchValue = this.props.match.params.searchValue;
|
||||
|
||||
//FIXME: first check if current key / value / results is already in state
|
||||
this.props.getSearchResults(categoryKey, searchValue);
|
||||
}
|
||||
|
||||
render() {
|
||||
console.log('results', this.props.searchResults);
|
||||
return (
|
||||
<Grid className="random-topics"
|
||||
width={220}
|
||||
gap={12}>
|
||||
{this.props.searchResults && this.props.searchResults.map(video =>
|
||||
<VideoItem id={video.id} key={video.id} title={video.title}/>
|
||||
)}
|
||||
</Grid>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
searchResults: state.results.currentItems,
|
||||
currentKey: state.results.currentKey,
|
||||
currentValue: state.results.currentValue,
|
||||
currentQuery: state.results.queryParams
|
||||
});
|
||||
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
// the category key is either {topic, date, date}
|
||||
// the search value could be something like 25th-jan.
|
||||
getSearchResults: (categoryKey, searchValue) => dispatch(getSearchResults(categoryKey, searchValue)),
|
||||
});
|
||||
|
||||
// each result page has :
|
||||
// - currentKey: 858.ma/{key}/ where key could be like 'topic'
|
||||
// - currentValue: 858.ma/topic/{value} where value could be like 'alaa abd al fatah'
|
||||
// - currentQuery: 858.ma/{query} ?? not getting this! @TODO: clarify this please.
|
||||
// - currentItems: the list of items/videos.
|
||||
Results.propTypes = {
|
||||
// the category key is either a {topic, location, date}.
|
||||
currentKey: PropTypes.string,
|
||||
currentValue: PropTypes.string,
|
||||
currentItems: PropTypes.array,
|
||||
loading: PropTypes.bool,
|
||||
categoryItemCount: PropTypes.number,
|
||||
getSearchResults: PropTypes.func
|
||||
};
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(Results);
|
|
@ -1,13 +0,0 @@
|
|||
import React, { Component } from 'react';
|
||||
|
||||
class TopicsList extends React.Component {
|
||||
render() {
|
||||
return (
|
||||
<div>
|
||||
This is topics list.
|
||||
</div>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
export default TopicsList;
|
46
src/containers/TopicsListContainer.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
import React from 'react';
|
||||
import SectionHeading from "../components/SectionHeading";
|
||||
import TopicsList from "../components/TopicsList";
|
||||
import {getAllTopics} from "../actions/topics";
|
||||
import {connect} from 'react-redux'
|
||||
class TopicsListContainer extends React.Component {
|
||||
componentDidMount(){
|
||||
// if the data isn't there call the action.
|
||||
if (!this.props.allTopics){
|
||||
this.props.getAllTopics();
|
||||
}
|
||||
}
|
||||
render() {
|
||||
return (
|
||||
<section>
|
||||
<SectionHeading title="All Topics"/>
|
||||
{/* TODO: get the topics objects*/}
|
||||
<TopicsList allTopics={this.props.allTopics}/>
|
||||
</section>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// function ->
|
||||
// - recieves the global state.
|
||||
// - maps the global state to the local props of the component.
|
||||
// - maps the global actions to the local props of the component.
|
||||
/**
|
||||
*
|
||||
* @param state
|
||||
* @returns object
|
||||
*/
|
||||
const mapStateToProps = state => ({
|
||||
allTopics: state.topics.allTopics,
|
||||
loadingAllTopics: state.topics.loadingAllTopics,
|
||||
});
|
||||
/**
|
||||
*
|
||||
* @param dispatch: Redux's action dispatcher.
|
||||
* @returns {{}}
|
||||
*/
|
||||
const mapDispatchToProps = dispatch => ({
|
||||
getAllTopics: () => dispatch(getAllTopics()),
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(TopicsListContainer);
|
56
src/containers/Video.js
Normal file
|
@ -0,0 +1,56 @@
|
|||
import React from 'react';
|
||||
import {connect} from 'react-redux';
|
||||
import VideoPlayer from "../components/VideoPlayer";
|
||||
import { fetchVideoById } from '../utils/api';
|
||||
|
||||
class Video extends React.Component {
|
||||
|
||||
constructor() {
|
||||
super();
|
||||
this.state = {
|
||||
currentVideo: null
|
||||
};
|
||||
}
|
||||
|
||||
componentDidMount() {
|
||||
// get videoId from the URL
|
||||
const videoId = this.props.match.params.videoId;
|
||||
|
||||
// if data for videoId is already part of allVideos, setState to currentVideo
|
||||
if (this.props.allVideos && this.props.allVideos.hasOwnProperty(videoId)) {
|
||||
const currentVideo = this.props.allVideos[videoId];
|
||||
this.setState({currentVideo: currentVideo});
|
||||
} else {
|
||||
|
||||
// video is not part of allVideos, fetch it from the API
|
||||
fetchVideoById(videoId)
|
||||
.then(video => {
|
||||
this.setState({
|
||||
currentVideo: video
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
render() {
|
||||
const video = this.state.currentVideo;
|
||||
return (
|
||||
<section>
|
||||
{ video &&
|
||||
<VideoPlayer
|
||||
id={ video.id }
|
||||
title={ video.title }
|
||||
date = { video.date }
|
||||
description={ video.description }
|
||||
/>
|
||||
}
|
||||
</section>
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
allVideos: state.videos.allVideos
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(Video);
|
5
src/history.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
import { createBrowserHistory } from 'history';
|
||||
|
||||
const history = createBrowserHistory();
|
||||
|
||||
export default history;
|
|
@ -3,12 +3,9 @@ import ReactDOM from 'react-dom';
|
|||
import './index.css';
|
||||
import App from './App';
|
||||
import * as serviceWorker from './serviceWorker';
|
||||
import { BrowserRouter } from 'react-router-dom';
|
||||
|
||||
ReactDOM.render(
|
||||
<BrowserRouter>
|
||||
<App />
|
||||
</BrowserRouter>,
|
||||
<App />,
|
||||
document.getElementById('root')
|
||||
);
|
||||
|
||||
|
|
|
@ -1,9 +1,13 @@
|
|||
import { combineReducers } from 'redux';
|
||||
|
||||
import HomeReducer from './home'
|
||||
import TopicsReducer from './topics';
|
||||
import VideosReducer from './videos';
|
||||
import SearchReducer from './search';
|
||||
|
||||
const rootReducer = combineReducers({
|
||||
home: HomeReducer
|
||||
import { connectRouter } from 'connected-react-router'
|
||||
export default (history) => combineReducers({
|
||||
router: connectRouter(history),
|
||||
topics: TopicsReducer,
|
||||
videos: VideosReducer,
|
||||
results: SearchReducer,
|
||||
});
|
||||
|
||||
export default rootReducer;
|
21
src/reducers/search.js
Normal file
|
@ -0,0 +1,21 @@
|
|||
import {
|
||||
START_LOADING_ALL_RESULTS,
|
||||
LOADED_ALL_RESULTS
|
||||
} from '../actions/action_types';
|
||||
|
||||
export default function(state={}, action) {
|
||||
switch (action.type) {
|
||||
|
||||
case START_LOADING_ALL_RESULTS:
|
||||
return Object.assign({}, state, { loadingAllTopics: true });
|
||||
|
||||
case LOADED_ALL_RESULTS:
|
||||
return Object.assign({}, state, {
|
||||
loadingAllTopics: false,
|
||||
currentItems: action.payload
|
||||
});
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
36
src/reducers/topics.js
Normal file
|
@ -0,0 +1,36 @@
|
|||
import {
|
||||
START_LOADING_ALL_TOPICS,
|
||||
LOADED_ALL_TOPICS,
|
||||
START_LOADING_RANDOM_TOPIC,
|
||||
LOADED_RANDOM_TOPIC
|
||||
} from '../actions/action_types';
|
||||
|
||||
export default function(state={}, action) {
|
||||
switch (action.type) {
|
||||
|
||||
case START_LOADING_ALL_TOPICS:
|
||||
return Object.assign({}, state, { loadingAllTopics: true });
|
||||
|
||||
case LOADED_ALL_TOPICS:
|
||||
return Object.assign({}, state, {
|
||||
loadingAllTopics: false,
|
||||
allTopics: action.payload
|
||||
});
|
||||
|
||||
case START_LOADING_RANDOM_TOPIC:
|
||||
return Object.assign({}, state, {
|
||||
loadingRandomTopic: true
|
||||
});
|
||||
|
||||
case LOADED_RANDOM_TOPIC:
|
||||
return Object.assign({}, state, {
|
||||
loadingRandomTopic: false,
|
||||
randomTopic: action.payload.topic.name,
|
||||
randomTopicCount: action.payload.topic.items,
|
||||
randomTopicVideos: action.payload.videos
|
||||
});
|
||||
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
};
|
22
src/reducers/videos.js
Normal file
|
@ -0,0 +1,22 @@
|
|||
import {
|
||||
ADD_VIDEOS_TO_STATE
|
||||
} from '../actions/action_types';
|
||||
|
||||
export default function(state={}, action) {
|
||||
switch (action.type) {
|
||||
case ADD_VIDEOS_TO_STATE:
|
||||
let clonedState = Object.assign({}, state);
|
||||
if (!clonedState.allVideos) {
|
||||
clonedState.allVideos = {};
|
||||
}
|
||||
const videosToAdd = action.payload;
|
||||
videosToAdd.forEach(video => {
|
||||
if (!clonedState.allVideos.hasOwnProperty(video.id)) {
|
||||
clonedState.allVideos[video.id] = video;
|
||||
}
|
||||
});
|
||||
return clonedState;
|
||||
default:
|
||||
return state;
|
||||
}
|
||||
}
|
|
@ -1,20 +1,21 @@
|
|||
import { createStore, applyMiddleware } from 'redux';
|
||||
import { createStore, applyMiddleware, compose } from 'redux';
|
||||
import thunk from 'redux-thunk';
|
||||
import history from '../history';
|
||||
import { routerMiddleware } from 'connected-react-router'
|
||||
import rootReducer from '../reducers';
|
||||
import getInitialState from '../utils/get-initial-state';
|
||||
|
||||
// Add initial state here
|
||||
const initialState = {
|
||||
'home': {
|
||||
'test': 'foo',
|
||||
'loading': false,
|
||||
'videos': []
|
||||
}
|
||||
};
|
||||
const initialState = getInitialState();
|
||||
|
||||
const store = createStore(
|
||||
rootReducer,
|
||||
rootReducer(history),
|
||||
initialState,
|
||||
applyMiddleware(thunk)
|
||||
compose(
|
||||
applyMiddleware(
|
||||
routerMiddleware(history),
|
||||
thunk
|
||||
)
|
||||
)
|
||||
);
|
||||
|
||||
export default store;
|
||||
|
|
|
@ -1,4 +0,0 @@
|
|||
.site-logo{
|
||||
max-width: 300px;
|
||||
}
|
||||
|
11
src/stylesheets/footer.scss
Normal file
|
@ -0,0 +1,11 @@
|
|||
@import "variables";
|
||||
/* footer */
|
||||
footer {
|
||||
background: $light-gray-color;
|
||||
position: absolute;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
margin-top: 1em;
|
||||
padding: 1em;
|
||||
font-weight: bold;
|
||||
}
|
83
src/stylesheets/globals.scss
Normal file
|
@ -0,0 +1,83 @@
|
|||
@import "variables";
|
||||
/* globals */
|
||||
* {
|
||||
box-sizing: border-box;
|
||||
margin: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
|
||||
/* fonts */
|
||||
@font-face {
|
||||
font-family: 'Fedra Arabic';
|
||||
src: url('../assets/fonts/Fedra Arabic Reg_beta.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'bebas';
|
||||
src: url('../assets/fonts/BEBAS___.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'majalla';
|
||||
src: url('../assets/fonts/majalla 2.ttf') format('truetype');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'MyriadPro Regular';
|
||||
src: url('../assets/fonts/MyriadPro-Regular.otf') format('otf');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: 'interstate';
|
||||
src: url('../assets/fonts/Interstate-Regular.bmap') format('bmap'),
|
||||
url('../assets/fonts/Interstate-Bold.bmap') format('bmap');
|
||||
}
|
||||
|
||||
.text-left {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.arabic-text {
|
||||
font-family: "Fedra Arabic", serif;
|
||||
padding: .3em;
|
||||
}
|
||||
|
||||
.english-text {
|
||||
font-family: majalla, serif;
|
||||
padding: .3em;
|
||||
}
|
||||
|
||||
/* App */
|
||||
.App {
|
||||
max-width: 1200px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
// buttons
|
||||
|
||||
button {
|
||||
padding: 1em;
|
||||
font-weight: bold;
|
||||
font-size: 1em;
|
||||
max-width: 300px;
|
||||
justify-self: center; // for the css grid
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
// spans
|
||||
span {
|
||||
display: inline-block;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
// links
|
||||
a {
|
||||
text-decoration: none;
|
||||
font-size: 14px;
|
||||
color: black;
|
||||
}
|
||||
|
||||
.normal-link{
|
||||
text-decoration: underline;
|
||||
color: $normal-link-color;
|
||||
}
|
25
src/stylesheets/header.scss
Normal file
|
@ -0,0 +1,25 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
|
||||
/* header */
|
||||
header {
|
||||
padding-top: 1em;
|
||||
}
|
||||
|
||||
.site-logo {
|
||||
max-width: 300px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.counter-container {
|
||||
position: absolute;
|
||||
display: inline-block;
|
||||
right: 0;
|
||||
top: 0;
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
.counter {
|
||||
position: relative;
|
||||
right: 0;
|
||||
}
|
23
src/stylesheets/items-list.scss
Normal file
|
@ -0,0 +1,23 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
|
||||
#search-topics {
|
||||
padding: 1em;
|
||||
border: .5px solid gray;
|
||||
}
|
||||
|
||||
.label {
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.topic-item {
|
||||
h3 {
|
||||
text-align: left;
|
||||
padding: 1em;
|
||||
font-size: 30px;
|
||||
}
|
||||
border-left: 2px solid black;
|
||||
border-bottom: 6px solid black;
|
||||
margin-bottom: 2em;
|
||||
}
|
||||
|
24
src/stylesheets/nav.scss
Normal file
|
@ -0,0 +1,24 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
@import "header";
|
||||
|
||||
/* nav */
|
||||
nav {
|
||||
margin: 3em;
|
||||
}
|
||||
|
||||
nav ul li {
|
||||
display: inline-block;
|
||||
list-style-type: none;
|
||||
padding: 1em;
|
||||
border-right: 1px solid black;
|
||||
}
|
||||
|
||||
nav ul li:last-child {
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
nav ul li a {
|
||||
text-decoration: none;
|
||||
color: black;
|
||||
}
|
35
src/stylesheets/random-item.scss
Normal file
|
@ -0,0 +1,35 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
|
||||
.section-heading {
|
||||
padding-top: 1em;
|
||||
}
|
||||
.section-title{
|
||||
line-height: 0.5;
|
||||
text-align: center;
|
||||
padding: 1em;
|
||||
}
|
||||
// --------------------------
|
||||
// add horizontal lines around the section title.
|
||||
//----------------------------
|
||||
.section-title span:before,
|
||||
.section-title span:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
height: 8px;
|
||||
border-bottom: 3px solid black;
|
||||
top: 0;
|
||||
width: 400px;
|
||||
}
|
||||
.section-title span:before {
|
||||
right: 100%;
|
||||
margin-right: 15px;
|
||||
}
|
||||
.section-title span:after {
|
||||
left: 100%;
|
||||
margin-left: 15px;
|
||||
}
|
||||
// Topics
|
||||
.random-topics{
|
||||
margin-top: 2em;
|
||||
}
|
48
src/stylesheets/search.scss
Normal file
|
@ -0,0 +1,48 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
@import "header";
|
||||
|
||||
|
||||
/* search */
|
||||
.search-button {
|
||||
background: white;
|
||||
bottom: -18px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.search-button img {
|
||||
max-width: 50px;
|
||||
}
|
||||
|
||||
.search-box {
|
||||
padding: 1em;
|
||||
width: 50%;
|
||||
background: $light-gray-color;
|
||||
}
|
||||
|
||||
.search-box::placeholder {
|
||||
color: black;
|
||||
text-align: center;
|
||||
font-size: 1.5em;
|
||||
color: gray;
|
||||
}
|
||||
|
||||
@media screen and (max-width: 700px) {
|
||||
.search-box::placeholder {
|
||||
font-size: 1em;
|
||||
}
|
||||
}
|
||||
|
||||
@media screen and (max-width: 400px) {
|
||||
.search-box::placeholder {
|
||||
font-size: .75em;
|
||||
}
|
||||
}
|
||||
|
||||
// filter
|
||||
.filter-box{
|
||||
background: $light-gray-color;
|
||||
padding: 1em;
|
||||
margin-bottom: 2em;
|
||||
text-align: left;
|
||||
}
|
11
src/stylesheets/style.scss
Normal file
|
@ -0,0 +1,11 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
@import "header";
|
||||
@import "nav";
|
||||
@import "search";
|
||||
@import "random-item";
|
||||
@import "video-item";
|
||||
@import "video-player";
|
||||
@import "footer";
|
||||
@import "items-list";
|
||||
@import "~video-react/styles/scss/video-react";
|
2
src/stylesheets/variables.scss
Normal file
|
@ -0,0 +1,2 @@
|
|||
$light-gray-color: #ebebeb;
|
||||
$normal-link-color: blue;
|
29
src/stylesheets/video-item.scss
Normal file
|
@ -0,0 +1,29 @@
|
|||
@import "variables";
|
||||
@import "globals";
|
||||
@import "header";
|
||||
|
||||
/* Video item*/
|
||||
.video-item {
|
||||
background: $light-gray-color;
|
||||
min-height: 300px;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
.video-thumbnail {
|
||||
width: 100%;
|
||||
max-height: 150px;
|
||||
transition: all .4s ease-in-out;
|
||||
}
|
||||
|
||||
.video-thumbnail:hover {
|
||||
transform: scale(1.1);
|
||||
}
|
||||
|
||||
.video-thumbnail-container {
|
||||
position: relative;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
.video-title {
|
||||
padding-top: 1em;
|
||||
}
|
20
src/stylesheets/video-player.scss
Normal file
|
@ -0,0 +1,20 @@
|
|||
@import "variables";
|
||||
|
||||
video{
|
||||
margin-top: 3em;
|
||||
}
|
||||
.video-player-title
|
||||
{
|
||||
text-align: left;
|
||||
padding: 1em 1em 0 1em;
|
||||
background: $light-gray-color;
|
||||
margin-top: 1em;
|
||||
}
|
||||
.video-player-date{
|
||||
padding: 1em;
|
||||
background: $light-gray-color;
|
||||
text-align: left;
|
||||
}
|
||||
.video-react{
|
||||
margin-top: 3em;
|
||||
}
|
|
@ -1,9 +0,0 @@
|
|||
import React from 'react';
|
||||
class Footer extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
'hello Footer!'
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (Footer);
|
|
@ -1,24 +0,0 @@
|
|||
import React from 'react';
|
||||
import logo from '../logo.png';
|
||||
import '../styleSheets/style.css'
|
||||
|
||||
class Header extends React.Component {
|
||||
render() {
|
||||
const Logo = () => {
|
||||
return (
|
||||
<nav>
|
||||
<img className="site-logo" src={logo} alt="logo 858 "/>
|
||||
</nav>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<header>
|
||||
<section className="container">
|
||||
<Logo/>
|
||||
</section>
|
||||
</header>
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
export default (Header);
|
|
@ -1,9 +0,0 @@
|
|||
import React from 'react';
|
||||
class RandomDate extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
'hello Dandom Date!'
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (RandomDate);
|
|
@ -1,9 +0,0 @@
|
|||
import React from 'react';
|
||||
class RandomLocation extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
'hello Random Location!'
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (RandomLocation);
|
|
@ -1,9 +0,0 @@
|
|||
import React from 'react';
|
||||
class RandomTopic extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
'hello Random Topic!'
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (RandomTopic);
|
|
@ -1,9 +0,0 @@
|
|||
import React from 'react';
|
||||
class Search extends React.Component{
|
||||
render(){
|
||||
return(
|
||||
'hello Search!'
|
||||
)
|
||||
}
|
||||
}
|
||||
export default (Search);
|
|
@ -1,6 +1,16 @@
|
|||
import config from '../config';
|
||||
import 'whatwg-fetch';
|
||||
|
||||
const VIDEO_KEYS = [
|
||||
"title",
|
||||
"source",
|
||||
"project",
|
||||
"topic",
|
||||
"language",
|
||||
"duration",
|
||||
"id",
|
||||
"date"
|
||||
];
|
||||
|
||||
/*
|
||||
Base function to make API calls
|
||||
|
@ -20,7 +30,7 @@ export function callApi(action, data) {
|
|||
method: 'POST',
|
||||
body: formData
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(response => response.json()) // convert the response to json (instead of response object).
|
||||
.then(data => {
|
||||
if (data.status.code === 200) {
|
||||
return data.data;
|
||||
|
@ -40,6 +50,7 @@ export function callApi(action, data) {
|
|||
@returns {Promise<Array>} array of topic objects like: {'name': '<topicName>', 'items': <no_of_items>}
|
||||
*/
|
||||
export function fetchAllTopics(startRange=0, endRange=1000) {
|
||||
// the object that we need to send to the api
|
||||
const data = {
|
||||
"query": {
|
||||
"conditions": [],
|
||||
|
@ -98,11 +109,11 @@ export function fetchAllDates(startRange=0, endRange=1000) {
|
|||
*/
|
||||
export function fetchVideosByX(key, value, startRange, endRange, sortKey='random') {
|
||||
const data = {
|
||||
"keys": ["editable", "modified", "title", "source", "project", "topic", "language", "duration", "id"],
|
||||
"keys": VIDEO_KEYS,
|
||||
"query": {
|
||||
"conditions": [{
|
||||
"key": key,
|
||||
"value": encodeURIComponent(value),
|
||||
"value": value,
|
||||
"operator": "=="
|
||||
}],
|
||||
"operator": "&"
|
||||
|
@ -199,10 +210,13 @@ export function fetchRandomPlace() {
|
|||
"operator": "-"
|
||||
}]
|
||||
};
|
||||
return callApi('findPlaces', data).then(data => data.items[0]);
|
||||
return callApi('findPlaces', data).then(data => data.items[0]);
|
||||
}
|
||||
|
||||
|
||||
export function fetchVideosByPlace(placeId, startRange=0, endRange=100, sortKey='random') {
|
||||
return fetchVideosByX('place', placeId, startRange, endRange, sortKey);
|
||||
}
|
||||
|
||||
export function fetchVideoById(id) {
|
||||
return callApi('get', {'id': id, keys: VIDEO_KEYS});
|
||||
}
|
||||
|
|
14
src/utils/get-initial-state.js
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { getItem } from './safe-storage';
|
||||
|
||||
export default function getInitialState() {
|
||||
let initialState = {
|
||||
topics: {}
|
||||
};
|
||||
const allTopics = getItem('allTopics');
|
||||
if (allTopics) {
|
||||
initialState.topics.allTopics = JSON.parse(allTopics);
|
||||
initialState.topics.loadingAllTopics = false;
|
||||
}
|
||||
|
||||
return initialState;
|
||||
}
|
5
src/utils/get-random-topic.js
Normal file
|
@ -0,0 +1,5 @@
|
|||
|
||||
export default function getRandomTopic(allTopics, minVideos=4) {
|
||||
const validTopics = allTopics.filter(topic => topic.items >= minVideos);
|
||||
return validTopics[Math.floor(Math.random() * validTopics.length)];
|
||||
}
|
40
src/utils/safe-storage.js
Normal file
|
@ -0,0 +1,40 @@
|
|||
// Transparent wrapper over Window.localStorage
|
||||
// Adheres to the Web Storage API:
|
||||
// https://developer.mozilla.org/en-US/docs/Web/API/Storage
|
||||
|
||||
/**
|
||||
* Wraps localStorage.getItem in a try/catch. Return null
|
||||
* if the key does not exist or localStorage fails.
|
||||
*/
|
||||
function getItem(key) {
|
||||
try {
|
||||
return localStorage.getItem(key) || null;
|
||||
} catch (err) {
|
||||
console.warn('Could not read from localStorage.');
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps localStorage.setItem in a try/catch.
|
||||
*/
|
||||
function setItem(key, value) {
|
||||
try {
|
||||
localStorage.setItem(key, value);
|
||||
} catch (err) {
|
||||
console.warn('Could not write to localStorage.');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Wraps localStorage.removeItem in a try/catch.
|
||||
*/
|
||||
function removeItem(key) {
|
||||
try {
|
||||
localStorage.removeItem(key);
|
||||
} catch (err) {
|
||||
console.warn('Could not delete from localStorage.');
|
||||
}
|
||||
}
|
||||
|
||||
export { getItem, setItem, removeItem };
|
9
src/utils/video.js
Normal file
|
@ -0,0 +1,9 @@
|
|||
import config from '../config';
|
||||
|
||||
export function getThumbnail(id, size='200') {
|
||||
return `${config.baseUrl}/${id}/${size}p.jpg`
|
||||
}
|
||||
|
||||
export function getVideo(id, size='480') {
|
||||
return `${config.videoBase}/${id}/${size}p.mp4`;
|
||||
}
|
498
yarn.lock
|
@ -950,6 +950,11 @@ alphanum-sort@^1.0.0:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3"
|
||||
|
||||
amdefine@>=0.0.4:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5"
|
||||
integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=
|
||||
|
||||
ansi-colors@^3.0.0:
|
||||
version "3.2.1"
|
||||
resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.1.tgz#9638047e4213f3428a11944a7d4b31cba0a3ff95"
|
||||
|
@ -1043,6 +1048,11 @@ array-filter@~0.0.0:
|
|||
version "0.0.1"
|
||||
resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-0.0.1.tgz#7da8cf2e26628ed732803581fd21f67cacd2eeec"
|
||||
|
||||
array-find-index@^1.0.1:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1"
|
||||
integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=
|
||||
|
||||
array-flatten@1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2"
|
||||
|
@ -1088,7 +1098,7 @@ arrify@^1.0.0, arrify@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
|
||||
|
||||
asap@~2.0.6:
|
||||
asap@~2.0.3, asap@~2.0.6:
|
||||
version "2.0.6"
|
||||
resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46"
|
||||
|
||||
|
@ -1132,6 +1142,11 @@ async-each@^1.0.0:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.1.tgz#19d386a1d9edc6e7c1c85d388aedbcc56d33602d"
|
||||
|
||||
async-foreach@^0.1.3:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542"
|
||||
integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=
|
||||
|
||||
async-limiter@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.0.tgz#78faed8c3d074ab81f22b4e985d79e8738f720f8"
|
||||
|
@ -1453,6 +1468,13 @@ binary-extensions@^1.0.0:
|
|||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14"
|
||||
|
||||
block-stream@*:
|
||||
version "0.0.9"
|
||||
resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a"
|
||||
integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=
|
||||
dependencies:
|
||||
inherits "~2.0.0"
|
||||
|
||||
bluebird@^3.5.1:
|
||||
version "3.5.2"
|
||||
resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.2.tgz#1be0908e054a751754549c270489c1505d4ab15a"
|
||||
|
@ -1630,6 +1652,13 @@ buffer@^4.3.0:
|
|||
ieee754 "^1.1.4"
|
||||
isarray "^1.0.0"
|
||||
|
||||
buffer@^5.0.3:
|
||||
version "5.2.1"
|
||||
resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.2.1.tgz#dd57fa0f109ac59c602479044dca7b8b3d0b71d6"
|
||||
dependencies:
|
||||
base64-js "^1.0.2"
|
||||
ieee754 "^1.1.4"
|
||||
|
||||
builtin-modules@^1.0.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f"
|
||||
|
@ -1718,6 +1747,24 @@ camel-case@3.0.x:
|
|||
no-case "^2.2.0"
|
||||
upper-case "^1.1.1"
|
||||
|
||||
camelcase-keys@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7"
|
||||
integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc=
|
||||
dependencies:
|
||||
camelcase "^2.0.0"
|
||||
map-obj "^1.0.0"
|
||||
|
||||
camelcase@^2.0.0:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f"
|
||||
integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=
|
||||
|
||||
camelcase@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a"
|
||||
integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo=
|
||||
|
||||
camelcase@^4.1.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd"
|
||||
|
@ -1761,7 +1808,7 @@ chalk@2.4.1, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1:
|
|||
escape-string-regexp "^1.0.5"
|
||||
supports-color "^5.3.0"
|
||||
|
||||
chalk@^1.1.3:
|
||||
chalk@^1.1.1, chalk@^1.1.3:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98"
|
||||
dependencies:
|
||||
|
@ -1832,6 +1879,11 @@ class-utils@^0.3.5:
|
|||
isobject "^3.0.0"
|
||||
static-extend "^0.1.1"
|
||||
|
||||
classnames@^2.2.3:
|
||||
version "2.2.6"
|
||||
resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.6.tgz#43935bffdd291f326dad0a205309b38d00f650ce"
|
||||
integrity sha512-JR/iSQOSt+LQIWwrwEzJ9uk0xfN3mTVYMwt1Ir5mUcSN6pU+V4zQFFaJsclJbPuAUQH+yfWef6tm7l1quW3C8Q==
|
||||
|
||||
clean-css@4.2.x:
|
||||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/clean-css/-/clean-css-4.2.1.tgz#2d411ef76b8569b6d0c84068dabe85b0aa5e5c17"
|
||||
|
@ -1848,6 +1900,15 @@ cli-width@^2.0.0:
|
|||
version "2.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639"
|
||||
|
||||
cliui@^3.2.0:
|
||||
version "3.2.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d"
|
||||
integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=
|
||||
dependencies:
|
||||
string-width "^1.0.1"
|
||||
strip-ansi "^3.0.1"
|
||||
wrap-ansi "^2.0.0"
|
||||
|
||||
cliui@^4.0.0:
|
||||
version "4.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49"
|
||||
|
@ -1997,6 +2058,13 @@ connect-history-api-fallback@^1.3.0:
|
|||
version "1.5.0"
|
||||
resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz#b06873934bc5e344fef611a196a6faae0aee015a"
|
||||
|
||||
connected-react-router@^5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/connected-react-router/-/connected-react-router-5.0.1.tgz#8379854fad7e027b1e27652c00ad534f8ad244b3"
|
||||
dependencies:
|
||||
immutable "^3.8.1"
|
||||
seamless-immutable "^7.1.3"
|
||||
|
||||
console-browserify@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.1.0.tgz#f0241c45730a9fc6323b206dbf38edc741d0bb10"
|
||||
|
@ -2056,6 +2124,10 @@ core-js@2.5.7, core-js@^2.4.0, core-js@^2.5.0:
|
|||
version "2.5.7"
|
||||
resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.7.tgz#f972608ff0cead68b841a16a932d0b183791814e"
|
||||
|
||||
core-js@^1.0.0:
|
||||
version "1.2.7"
|
||||
resolved "http://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz#652294c14651db28fa93bd2d5ff2983a4f08c636"
|
||||
|
||||
core-util-is@1.0.2, 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"
|
||||
|
@ -2115,6 +2187,14 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5:
|
|||
shebang-command "^1.2.0"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^3.0.0:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982"
|
||||
integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI=
|
||||
dependencies:
|
||||
lru-cache "^4.0.1"
|
||||
which "^1.2.9"
|
||||
|
||||
cross-spawn@^5.0.1:
|
||||
version "5.1.0"
|
||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
|
||||
|
@ -2139,6 +2219,10 @@ crypto-browserify@^3.11.0:
|
|||
randombytes "^2.0.0"
|
||||
randomfill "^1.0.3"
|
||||
|
||||
css-color-keywords@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05"
|
||||
|
||||
css-color-names@0.0.4, css-color-names@^0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0"
|
||||
|
@ -2197,6 +2281,14 @@ css-selector-tokenizer@^0.7.0:
|
|||
fastparse "^1.1.1"
|
||||
regexpu-core "^1.0.0"
|
||||
|
||||
css-to-react-native@^2.0.3:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/css-to-react-native/-/css-to-react-native-2.2.2.tgz#c077d0f7bf3e6c915a539e7325821c9dd01f9965"
|
||||
dependencies:
|
||||
css-color-keywords "^1.0.0"
|
||||
fbjs "^0.8.5"
|
||||
postcss-value-parser "^3.3.0"
|
||||
|
||||
css-tree@1.0.0-alpha.28:
|
||||
version "1.0.0-alpha.28"
|
||||
resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.28.tgz#8e8968190d886c9477bc8d61e96f61af3f7ffa7f"
|
||||
|
@ -2313,6 +2405,13 @@ cssstyle@^1.0.0, cssstyle@^1.1.1:
|
|||
dependencies:
|
||||
cssom "0.3.x"
|
||||
|
||||
currently-unhandled@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea"
|
||||
integrity sha1-mI3zP+qxke95mmE2nddsF635V+o=
|
||||
dependencies:
|
||||
array-find-index "^1.0.1"
|
||||
|
||||
cyclist@~0.2.2:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-0.2.2.tgz#1b33792e11e914a2fd6d6ed6447464444e5fa640"
|
||||
|
@ -2357,7 +2456,7 @@ debug@^3.1.0:
|
|||
dependencies:
|
||||
ms "^2.1.1"
|
||||
|
||||
decamelize@^1.1.1:
|
||||
decamelize@^1.1.1, decamelize@^1.1.2:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
|
||||
|
||||
|
@ -2668,6 +2767,12 @@ encodeurl@~1.0.2:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
|
||||
encoding@^0.1.11:
|
||||
version "0.1.12"
|
||||
resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb"
|
||||
dependencies:
|
||||
iconv-lite "~0.4.13"
|
||||
|
||||
end-of-stream@^1.0.0, end-of-stream@^1.1.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43"
|
||||
|
@ -3146,6 +3251,18 @@ fb-watchman@^2.0.0:
|
|||
dependencies:
|
||||
bser "^2.0.0"
|
||||
|
||||
fbjs@^0.8.5, fbjs@^0.8.9:
|
||||
version "0.8.17"
|
||||
resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.17.tgz#c4d598ead6949112653d6588b01a5cdcd9f90fdd"
|
||||
dependencies:
|
||||
core-js "^1.0.0"
|
||||
isomorphic-fetch "^2.1.1"
|
||||
loose-envify "^1.0.0"
|
||||
object-assign "^4.1.0"
|
||||
promise "^7.1.1"
|
||||
setimmediate "^1.0.5"
|
||||
ua-parser-js "^0.7.18"
|
||||
|
||||
figgy-pudding@^3.1.0, figgy-pudding@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.yarnpkg.com/figgy-pudding/-/figgy-pudding-3.5.1.tgz#862470112901c727a0e495a80744bd5baa1d6790"
|
||||
|
@ -3285,6 +3402,11 @@ follow-redirects@^1.0.0:
|
|||
dependencies:
|
||||
debug "=3.1.0"
|
||||
|
||||
font-awesome@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/font-awesome/-/font-awesome-4.7.0.tgz#8fa8cf0411a1a31afd07b06d2902bb9fc815a133"
|
||||
integrity sha1-j6jPBBGhoxr9B7BtKQK7n8gVoTM=
|
||||
|
||||
for-in@^0.1.3:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1"
|
||||
|
@ -3393,6 +3515,16 @@ fsevents@1.2.4, fsevents@^1.2.2, fsevents@^1.2.3:
|
|||
nan "^2.9.2"
|
||||
node-pre-gyp "^0.10.0"
|
||||
|
||||
fstream@^1.0.0, fstream@^1.0.2:
|
||||
version "1.0.11"
|
||||
resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171"
|
||||
integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
inherits "~2.0.0"
|
||||
mkdirp ">=0.5 0"
|
||||
rimraf "2"
|
||||
|
||||
function-bind@^1.1.0, function-bind@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
|
||||
|
@ -3414,6 +3546,13 @@ gauge@~2.7.3:
|
|||
strip-ansi "^3.0.1"
|
||||
wide-align "^1.1.0"
|
||||
|
||||
gaze@^1.0.0:
|
||||
version "1.1.3"
|
||||
resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a"
|
||||
integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==
|
||||
dependencies:
|
||||
globule "^1.0.0"
|
||||
|
||||
get-caller-file@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a"
|
||||
|
@ -3422,6 +3561,11 @@ get-own-enumerable-property-symbols@^3.0.0:
|
|||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz#b877b49a5c16aefac3655f2ed2ea5b684df8d203"
|
||||
|
||||
get-stdin@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
|
||||
|
||||
get-stream@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14"
|
||||
|
@ -3460,7 +3604,7 @@ glob-to-regexp@^0.3.0:
|
|||
version "0.3.0"
|
||||
resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab"
|
||||
|
||||
glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
|
||||
glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2, glob@~7.1.1:
|
||||
version "7.1.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1"
|
||||
dependencies:
|
||||
|
@ -3530,6 +3674,15 @@ globby@^6.1.0:
|
|||
pify "^2.0.0"
|
||||
pinkie-promise "^2.0.0"
|
||||
|
||||
globule@^1.0.0:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/globule/-/globule-1.2.1.tgz#5dffb1b191f22d20797a9369b49eab4e9839696d"
|
||||
integrity sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==
|
||||
dependencies:
|
||||
glob "~7.1.1"
|
||||
lodash "~4.17.10"
|
||||
minimatch "~3.0.2"
|
||||
|
||||
graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6:
|
||||
version "4.1.11"
|
||||
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658"
|
||||
|
@ -3710,6 +3863,10 @@ hoek@4.x.x:
|
|||
version "4.2.1"
|
||||
resolved "https://registry.yarnpkg.com/hoek/-/hoek-4.2.1.tgz#9634502aa12c445dd5a7c5734b572bb8738aacbb"
|
||||
|
||||
hoist-non-react-statics@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "http://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb"
|
||||
|
||||
hoist-non-react-statics@^2.5.0:
|
||||
version "2.5.5"
|
||||
resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.5.5.tgz#c5903cf409c0dfd908f388e619d86b9c1174cb47"
|
||||
|
@ -3857,7 +4014,7 @@ iconv-lite@0.4.23:
|
|||
dependencies:
|
||||
safer-buffer ">= 2.1.2 < 3"
|
||||
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
|
||||
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4, iconv-lite@~0.4.13:
|
||||
version "0.4.24"
|
||||
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||
dependencies:
|
||||
|
@ -3905,6 +4062,10 @@ immer@1.7.2:
|
|||
version "1.7.2"
|
||||
resolved "https://registry.yarnpkg.com/immer/-/immer-1.7.2.tgz#a51e9723c50b27e132f6566facbec1c85fc69547"
|
||||
|
||||
immutable@^3.8.1:
|
||||
version "3.8.2"
|
||||
resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.2.tgz#c2439951455bb39913daf281376f1530e104adf3"
|
||||
|
||||
import-cwd@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9"
|
||||
|
@ -3935,6 +4096,18 @@ imurmurhash@^0.1.4:
|
|||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
|
||||
in-publish@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51"
|
||||
integrity sha1-4g/146KvwmkDILbcVSaCqcf631E=
|
||||
|
||||
indent-string@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80"
|
||||
integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=
|
||||
dependencies:
|
||||
repeating "^2.0.0"
|
||||
|
||||
indexes-of@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607"
|
||||
|
@ -3950,7 +4123,7 @@ inflight@^1.0.4:
|
|||
once "^1.3.0"
|
||||
wrappy "1"
|
||||
|
||||
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3:
|
||||
inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de"
|
||||
|
||||
|
@ -4252,7 +4425,7 @@ is-root@2.0.0:
|
|||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-root/-/is-root-2.0.0.tgz#838d1e82318144e5a6f77819d90207645acc7019"
|
||||
|
||||
is-stream@^1.1.0:
|
||||
is-stream@^1.0.1, is-stream@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44"
|
||||
|
||||
|
@ -4312,6 +4485,13 @@ isobject@^3.0.0, isobject@^3.0.1:
|
|||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df"
|
||||
|
||||
isomorphic-fetch@^2.1.1:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz#611ae1acf14f5e81f729507472819fe9733558a9"
|
||||
dependencies:
|
||||
node-fetch "^1.0.1"
|
||||
whatwg-fetch ">=0.10.0"
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
|
@ -4681,6 +4861,11 @@ joi@^11.1.1:
|
|||
isemail "3.x.x"
|
||||
topo "2.x.x"
|
||||
|
||||
js-base64@^2.1.8:
|
||||
version "2.4.9"
|
||||
resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.4.9.tgz#748911fb04f48a60c4771b375cac45a80df11c03"
|
||||
integrity sha512-xcinL3AuDJk7VSzsHgb9DvvIXayBbadtMZ4HFPx8rUszbW1MuNMlwYVC4zzCZ6e1sqZpnNS5ZFYOhXqA39T7LQ==
|
||||
|
||||
js-levenshtein@^1.1.3:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/js-levenshtein/-/js-levenshtein-1.1.4.tgz#3a56e3cbf589ca0081eb22cd9ba0b1290a16d26e"
|
||||
|
@ -4973,10 +5158,20 @@ lodash._reinterpolate@~3.0.0:
|
|||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d"
|
||||
|
||||
lodash.assign@^4.2.0:
|
||||
version "4.2.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.assign/-/lodash.assign-4.2.0.tgz#0d99f3ccd7a6d261d19bdaeb9245005d285808e7"
|
||||
integrity sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=
|
||||
|
||||
lodash.camelcase@^4.3.0:
|
||||
version "4.3.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
|
||||
|
||||
lodash.clonedeep@^4.3.2:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef"
|
||||
integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=
|
||||
|
||||
lodash.debounce@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af"
|
||||
|
@ -4985,6 +5180,11 @@ lodash.memoize@^4.1.2:
|
|||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe"
|
||||
|
||||
lodash.mergewith@^4.6.0:
|
||||
version "4.6.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927"
|
||||
integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ==
|
||||
|
||||
lodash.sortby@^4.7.0:
|
||||
version "4.7.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438"
|
||||
|
@ -5006,11 +5206,16 @@ lodash.templatesettings@^4.0.0:
|
|||
dependencies:
|
||||
lodash._reinterpolate "~3.0.0"
|
||||
|
||||
lodash.throttle@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz#c23e91b710242ac70c37f1e1cda9274cc39bf2f4"
|
||||
integrity sha1-wj6RtxAkKscMN/HhzaknTMOb8vQ=
|
||||
|
||||
lodash.uniq@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
|
||||
"lodash@>=3.5 <5", lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5:
|
||||
"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@~4.17.10:
|
||||
version "4.17.11"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d"
|
||||
|
||||
|
@ -5024,6 +5229,14 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3
|
|||
dependencies:
|
||||
js-tokens "^3.0.0 || ^4.0.0"
|
||||
|
||||
loud-rejection@^1.0.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f"
|
||||
integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=
|
||||
dependencies:
|
||||
currently-unhandled "^0.4.1"
|
||||
signal-exit "^3.0.0"
|
||||
|
||||
lower-case@^1.1.1:
|
||||
version "1.1.4"
|
||||
resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-1.1.4.tgz#9a2cabd1b9e8e0ae993a4bf7d5875c39c42e8eac"
|
||||
|
@ -5061,6 +5274,11 @@ map-cache@^0.2.2:
|
|||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf"
|
||||
|
||||
map-obj@^1.0.0, map-obj@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
|
||||
integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=
|
||||
|
||||
map-visit@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f"
|
||||
|
@ -5108,6 +5326,22 @@ memory-fs@^0.4.0, memory-fs@~0.4.1:
|
|||
errno "^0.1.3"
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
meow@^3.7.0:
|
||||
version "3.7.0"
|
||||
resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb"
|
||||
integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=
|
||||
dependencies:
|
||||
camelcase-keys "^2.0.0"
|
||||
decamelize "^1.1.2"
|
||||
loud-rejection "^1.0.0"
|
||||
map-obj "^1.0.1"
|
||||
minimist "^1.1.3"
|
||||
normalize-package-data "^2.3.4"
|
||||
object-assign "^4.0.1"
|
||||
read-pkg-up "^1.0.1"
|
||||
redent "^1.0.0"
|
||||
trim-newlines "^1.0.0"
|
||||
|
||||
merge-deep@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2"
|
||||
|
@ -5219,7 +5453,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1:
|
|||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a"
|
||||
|
||||
minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4:
|
||||
minimatch@3.0.4, minimatch@^3.0.3, minimatch@^3.0.4, minimatch@~3.0.2:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
dependencies:
|
||||
|
@ -5229,7 +5463,7 @@ minimist@0.0.8:
|
|||
version "0.0.8"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d"
|
||||
|
||||
minimist@^1.1.1, minimist@^1.2.0:
|
||||
minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284"
|
||||
|
||||
|
@ -5294,7 +5528,7 @@ mixin-object@^2.0.1:
|
|||
for-in "^0.1.3"
|
||||
is-extendable "^0.1.1"
|
||||
|
||||
mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
|
||||
mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1:
|
||||
version "0.5.1"
|
||||
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903"
|
||||
dependencies:
|
||||
|
@ -5334,7 +5568,7 @@ mute-stream@0.0.7:
|
|||
version "0.0.7"
|
||||
resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab"
|
||||
|
||||
nan@^2.9.2:
|
||||
nan@^2.10.0, nan@^2.9.2:
|
||||
version "2.11.1"
|
||||
resolved "https://registry.yarnpkg.com/nan/-/nan-2.11.1.tgz#90e22bccb8ca57ea4cd37cc83d3819b52eea6766"
|
||||
|
||||
|
@ -5384,10 +5618,35 @@ no-case@^2.2.0:
|
|||
dependencies:
|
||||
lower-case "^1.1.1"
|
||||
|
||||
node-fetch@^1.0.1:
|
||||
version "1.7.3"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef"
|
||||
dependencies:
|
||||
encoding "^0.1.11"
|
||||
is-stream "^1.0.1"
|
||||
|
||||
node-forge@0.7.5:
|
||||
version "0.7.5"
|
||||
resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.7.5.tgz#6c152c345ce11c52f465c2abd957e8639cd674df"
|
||||
|
||||
node-gyp@^3.8.0:
|
||||
version "3.8.0"
|
||||
resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c"
|
||||
integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==
|
||||
dependencies:
|
||||
fstream "^1.0.0"
|
||||
glob "^7.0.3"
|
||||
graceful-fs "^4.1.2"
|
||||
mkdirp "^0.5.0"
|
||||
nopt "2 || 3"
|
||||
npmlog "0 || 1 || 2 || 3 || 4"
|
||||
osenv "0"
|
||||
request "^2.87.0"
|
||||
rimraf "2"
|
||||
semver "~5.3.0"
|
||||
tar "^2.0.0"
|
||||
which "1"
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
|
||||
|
@ -5450,6 +5709,38 @@ node-releases@^1.0.0-alpha.11, node-releases@^1.0.1:
|
|||
dependencies:
|
||||
semver "^5.3.0"
|
||||
|
||||
node-sass@^4.11.0:
|
||||
version "4.11.0"
|
||||
resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a"
|
||||
integrity sha512-bHUdHTphgQJZaF1LASx0kAviPH7sGlcyNhWade4eVIpFp6tsn7SV8xNMTbsQFpEV9VXpnwTTnNYlfsZXgGgmkA==
|
||||
dependencies:
|
||||
async-foreach "^0.1.3"
|
||||
chalk "^1.1.1"
|
||||
cross-spawn "^3.0.0"
|
||||
gaze "^1.0.0"
|
||||
get-stdin "^4.0.1"
|
||||
glob "^7.0.3"
|
||||
in-publish "^2.0.0"
|
||||
lodash.assign "^4.2.0"
|
||||
lodash.clonedeep "^4.3.2"
|
||||
lodash.mergewith "^4.6.0"
|
||||
meow "^3.7.0"
|
||||
mkdirp "^0.5.1"
|
||||
nan "^2.10.0"
|
||||
node-gyp "^3.8.0"
|
||||
npmlog "^4.0.0"
|
||||
request "^2.88.0"
|
||||
sass-graph "^2.2.4"
|
||||
stdout-stream "^1.4.0"
|
||||
"true-case-path" "^1.0.2"
|
||||
|
||||
"nopt@2 || 3":
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9"
|
||||
integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k=
|
||||
dependencies:
|
||||
abbrev "1"
|
||||
|
||||
nopt@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d"
|
||||
|
@ -5457,7 +5748,7 @@ nopt@^4.0.1:
|
|||
abbrev "1"
|
||||
osenv "^0.1.4"
|
||||
|
||||
normalize-package-data@^2.3.2:
|
||||
normalize-package-data@^2.3.2, normalize-package-data@^2.3.4:
|
||||
version "2.4.0"
|
||||
resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.4.0.tgz#12f95a307d58352075a04907b84ac8be98ac012f"
|
||||
dependencies:
|
||||
|
@ -5497,7 +5788,7 @@ npm-run-path@^2.0.0:
|
|||
dependencies:
|
||||
path-key "^2.0.0"
|
||||
|
||||
npmlog@^4.0.2:
|
||||
"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2:
|
||||
version "4.1.2"
|
||||
resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b"
|
||||
dependencies:
|
||||
|
@ -5663,6 +5954,13 @@ os-homedir@^1.0.0:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3"
|
||||
|
||||
os-locale@^1.4.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9"
|
||||
integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=
|
||||
dependencies:
|
||||
lcid "^1.0.0"
|
||||
|
||||
os-locale@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2"
|
||||
|
@ -5683,7 +5981,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||
|
||||
osenv@^0.1.4:
|
||||
osenv@0, osenv@^0.1.4:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410"
|
||||
dependencies:
|
||||
|
@ -6545,6 +6843,12 @@ promise@8.0.2:
|
|||
dependencies:
|
||||
asap "~2.0.6"
|
||||
|
||||
promise@^7.1.1:
|
||||
version "7.3.1"
|
||||
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
|
||||
dependencies:
|
||||
asap "~2.0.3"
|
||||
|
||||
prompts@^0.1.9:
|
||||
version "0.1.14"
|
||||
resolved "https://registry.yarnpkg.com/prompts/-/prompts-0.1.14.tgz#a8e15c612c5c9ec8f8111847df3337c9cbd443b2"
|
||||
|
@ -6552,7 +6856,7 @@ prompts@^0.1.9:
|
|||
kleur "^2.0.1"
|
||||
sisteransi "^0.1.1"
|
||||
|
||||
prop-types@^15.6.1, prop-types@^15.6.2:
|
||||
prop-types@^15.5.10, prop-types@^15.5.4, prop-types@^15.5.8, prop-types@^15.6.1, prop-types@^15.6.2:
|
||||
version "15.6.2"
|
||||
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.2.tgz#05d5ca77b4453e985d60fc7ff8c859094a497102"
|
||||
dependencies:
|
||||
|
@ -6702,6 +7006,13 @@ react-app-polyfill@^0.1.3:
|
|||
raf "3.4.0"
|
||||
whatwg-fetch "3.0.0"
|
||||
|
||||
react-css-grid@^2.0.0-0:
|
||||
version "2.0.0-0"
|
||||
resolved "https://registry.yarnpkg.com/react-css-grid/-/react-css-grid-2.0.0-0.tgz#df89242decc1f072425f154f254f176bb60500a7"
|
||||
dependencies:
|
||||
prop-types "^15.5.10"
|
||||
styled-components "^2.1.2"
|
||||
|
||||
react-dev-utils@^6.1.1:
|
||||
version "6.1.1"
|
||||
resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-6.1.1.tgz#a07e3e8923c4609d9f27e5af5207e3ca20724895"
|
||||
|
@ -6734,7 +7045,6 @@ react-dev-utils@^6.1.1:
|
|||
react-dom@^16.6.3:
|
||||
version "16.6.3"
|
||||
resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.6.3.tgz#8fa7ba6883c85211b8da2d0efeffc9d3825cccc0"
|
||||
integrity sha512-8ugJWRCWLGXy+7PmNh8WJz3g1TaTUt1XyoIcFN+x0Zbkoz+KKdUyx1AQLYJdbFXjuF41Nmjn5+j//rxvhFjgSQ==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
@ -6845,7 +7155,6 @@ react-scripts@2.1.1:
|
|||
react@^16.6.3:
|
||||
version "16.6.3"
|
||||
resolved "https://registry.yarnpkg.com/react/-/react-16.6.3.tgz#25d77c91911d6bbdd23db41e70fb094cc1e0871c"
|
||||
integrity sha512-zCvmH2vbEolgKxtqXL2wmGCUxUyNheYn/C+PD1YAjfxHC54+MhdruyhO7QieQrYsYeTxrn93PM2y0jRH1zEExw==
|
||||
dependencies:
|
||||
loose-envify "^1.1.0"
|
||||
object-assign "^4.1.1"
|
||||
|
@ -6923,6 +7232,14 @@ recursive-readdir@2.2.2:
|
|||
dependencies:
|
||||
minimatch "3.0.4"
|
||||
|
||||
redent@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde"
|
||||
integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=
|
||||
dependencies:
|
||||
indent-string "^2.1.0"
|
||||
strip-indent "^1.0.1"
|
||||
|
||||
redux-logger@^3.0.6:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/redux-logger/-/redux-logger-3.0.6.tgz#f7555966f3098f3c88604c449cf0baf5778274bf"
|
||||
|
@ -6933,7 +7250,7 @@ redux-thunk@^2.3.0:
|
|||
version "2.3.0"
|
||||
resolved "https://registry.yarnpkg.com/redux-thunk/-/redux-thunk-2.3.0.tgz#51c2c19a185ed5187aaa9a2d08b666d0d6467622"
|
||||
|
||||
redux@^4.0.1:
|
||||
redux@^4.0.0, redux@^4.0.1:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.1.tgz#436cae6cc40fbe4727689d7c8fae44808f1bfef5"
|
||||
dependencies:
|
||||
|
@ -7172,7 +7489,7 @@ rgba-regex@^1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3"
|
||||
|
||||
rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
|
||||
rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2:
|
||||
version "2.6.2"
|
||||
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36"
|
||||
dependencies:
|
||||
|
@ -7236,6 +7553,16 @@ sane@^2.0.0:
|
|||
optionalDependencies:
|
||||
fsevents "^1.2.3"
|
||||
|
||||
sass-graph@^2.2.4:
|
||||
version "2.2.4"
|
||||
resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49"
|
||||
integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=
|
||||
dependencies:
|
||||
glob "^7.0.0"
|
||||
lodash "^4.0.0"
|
||||
scss-tokenizer "^0.2.3"
|
||||
yargs "^7.0.0"
|
||||
|
||||
sass-loader@7.1.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-7.1.0.tgz#16fd5138cb8b424bf8a759528a1972d72aad069d"
|
||||
|
@ -7279,6 +7606,18 @@ schema-utils@^1.0.0:
|
|||
ajv-errors "^1.0.0"
|
||||
ajv-keywords "^3.1.0"
|
||||
|
||||
scss-tokenizer@^0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1"
|
||||
integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE=
|
||||
dependencies:
|
||||
js-base64 "^2.1.8"
|
||||
source-map "^0.4.2"
|
||||
|
||||
seamless-immutable@^7.1.3:
|
||||
version "7.1.4"
|
||||
resolved "https://registry.yarnpkg.com/seamless-immutable/-/seamless-immutable-7.1.4.tgz#6e9536def083ddc4dea0207d722e0e80d0f372f8"
|
||||
|
||||
select-hose@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca"
|
||||
|
@ -7293,6 +7632,11 @@ selfsigned@^1.9.1:
|
|||
version "5.6.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.6.0.tgz#7e74256fbaa49c75aa7c7a205cc22799cac80004"
|
||||
|
||||
semver@~5.3.0:
|
||||
version "5.3.0"
|
||||
resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f"
|
||||
integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8=
|
||||
|
||||
send@0.16.2:
|
||||
version "0.16.2"
|
||||
resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1"
|
||||
|
@ -7358,7 +7702,7 @@ set-value@^2.0.0:
|
|||
is-plain-object "^2.0.3"
|
||||
split-string "^3.0.1"
|
||||
|
||||
setimmediate@^1.0.4:
|
||||
setimmediate@^1.0.4, setimmediate@^1.0.5:
|
||||
version "1.0.5"
|
||||
resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285"
|
||||
|
||||
|
@ -7513,6 +7857,13 @@ source-map-url@^0.4.0:
|
|||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3"
|
||||
|
||||
source-map@^0.4.2:
|
||||
version "0.4.4"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b"
|
||||
integrity sha1-66T12pwNyZneaAMti092FzZSA2s=
|
||||
dependencies:
|
||||
amdefine ">=0.0.4"
|
||||
|
||||
source-map@^0.5.0, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7:
|
||||
version "0.5.7"
|
||||
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
|
||||
|
@ -7625,6 +7976,13 @@ statuses@~1.4.0:
|
|||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087"
|
||||
|
||||
stdout-stream@^1.4.0:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de"
|
||||
integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==
|
||||
dependencies:
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
stealthy-require@^1.1.0:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b"
|
||||
|
@ -7664,7 +8022,7 @@ string-length@^2.0.0:
|
|||
astral-regex "^1.0.0"
|
||||
strip-ansi "^4.0.0"
|
||||
|
||||
string-width@^1.0.1:
|
||||
string-width@^1.0.1, string-width@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3"
|
||||
dependencies:
|
||||
|
@ -7730,6 +8088,13 @@ strip-eof@^1.0.0:
|
|||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf"
|
||||
|
||||
strip-indent@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2"
|
||||
integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=
|
||||
dependencies:
|
||||
get-stdin "^4.0.1"
|
||||
|
||||
strip-json-comments@^2.0.1, strip-json-comments@~2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
|
||||
|
@ -7741,6 +8106,19 @@ style-loader@0.23.0:
|
|||
loader-utils "^1.1.0"
|
||||
schema-utils "^0.4.5"
|
||||
|
||||
styled-components@^2.1.2:
|
||||
version "2.4.1"
|
||||
resolved "https://registry.yarnpkg.com/styled-components/-/styled-components-2.4.1.tgz#663bd0485d4b6ab46f946210dc03d2398d1ade74"
|
||||
dependencies:
|
||||
buffer "^5.0.3"
|
||||
css-to-react-native "^2.0.3"
|
||||
fbjs "^0.8.9"
|
||||
hoist-non-react-statics "^1.2.0"
|
||||
is-plain-object "^2.0.1"
|
||||
prop-types "^15.5.4"
|
||||
stylis "^3.4.0"
|
||||
supports-color "^3.2.3"
|
||||
|
||||
stylehacks@^4.0.0:
|
||||
version "4.0.1"
|
||||
resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.1.tgz#3186595d047ab0df813d213e51c8b94e0b9010f2"
|
||||
|
@ -7749,11 +8127,15 @@ stylehacks@^4.0.0:
|
|||
postcss "^7.0.0"
|
||||
postcss-selector-parser "^3.0.0"
|
||||
|
||||
stylis@^3.4.0:
|
||||
version "3.5.4"
|
||||
resolved "https://registry.yarnpkg.com/stylis/-/stylis-3.5.4.tgz#f665f25f5e299cf3d64654ab949a57c768b73fbe"
|
||||
|
||||
supports-color@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7"
|
||||
|
||||
supports-color@^3.1.2:
|
||||
supports-color@^3.1.2, supports-color@^3.2.3:
|
||||
version "3.2.3"
|
||||
resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6"
|
||||
dependencies:
|
||||
|
@ -7807,6 +8189,15 @@ tapable@^1.0.0, tapable@^1.1.0:
|
|||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.0.tgz#0d076a172e3d9ba088fd2272b2668fb8d194b78c"
|
||||
|
||||
tar@^2.0.0:
|
||||
version "2.2.1"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.1.tgz#8e4d2a256c0e2185c6b18ad694aec968b83cb1d1"
|
||||
integrity sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=
|
||||
dependencies:
|
||||
block-stream "*"
|
||||
fstream "^1.0.2"
|
||||
inherits "2"
|
||||
|
||||
tar@^4:
|
||||
version "4.4.6"
|
||||
resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.6.tgz#63110f09c00b4e60ac8bcfe1bf3c8660235fbc9b"
|
||||
|
@ -7946,10 +8337,22 @@ tr46@^1.0.1:
|
|||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
trim-newlines@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613"
|
||||
integrity sha1-WIeWa7WCpFA6QetST301ARgVphM=
|
||||
|
||||
trim-right@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||
|
||||
"true-case-path@^1.0.2":
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d"
|
||||
integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==
|
||||
dependencies:
|
||||
glob "^7.1.2"
|
||||
|
||||
tryer@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tryer/-/tryer-1.0.1.tgz#f2c85406800b9b0f74c9f7465b81eaad241252f8"
|
||||
|
@ -7989,6 +8392,10 @@ typedarray@^0.0.6:
|
|||
version "0.0.6"
|
||||
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
|
||||
|
||||
ua-parser-js@^0.7.18:
|
||||
version "0.7.19"
|
||||
resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.19.tgz#94151be4c0a7fb1d001af7022fdaca4642659e4b"
|
||||
|
||||
uglify-es@^3.3.4:
|
||||
version "3.3.9"
|
||||
resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.3.9.tgz#0c1c4f0700bed8dbc124cdb304d2592ca203e677"
|
||||
|
@ -8189,6 +8596,16 @@ verror@1.10.0:
|
|||
core-util-is "1.0.2"
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
video-react@^0.13.1:
|
||||
version "0.13.1"
|
||||
resolved "https://registry.yarnpkg.com/video-react/-/video-react-0.13.1.tgz#5d0dc68748f9b12e118beea1998d6ae5f6cbd6ba"
|
||||
integrity sha512-AeGSpddfHv0UxeJztWUALYEjCdzXM1QdtQ5GD1VUd3vxcgwgIfB7EzFKcewRevSHHK8TDmjNksbvbWRobF/QeA==
|
||||
dependencies:
|
||||
classnames "^2.2.3"
|
||||
lodash.throttle "^4.1.1"
|
||||
prop-types "^15.5.8"
|
||||
redux "^4.0.0"
|
||||
|
||||
vm-browserify@0.0.4:
|
||||
version "0.0.4"
|
||||
resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-0.0.4.tgz#5d7ea45bbef9e4a6ff65f95438e0a87c357d5a73"
|
||||
|
@ -8362,7 +8779,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3, whatwg-encoding@^1.0.5:
|
|||
dependencies:
|
||||
iconv-lite "0.4.24"
|
||||
|
||||
whatwg-fetch@3.0.0, whatwg-fetch@^3.0.0:
|
||||
whatwg-fetch@3.0.0, whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
|
||||
|
||||
|
@ -8386,11 +8803,16 @@ whatwg-url@^7.0.0:
|
|||
tr46 "^1.0.1"
|
||||
webidl-conversions "^4.0.2"
|
||||
|
||||
which-module@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f"
|
||||
integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=
|
||||
|
||||
which-module@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"
|
||||
|
||||
which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0:
|
||||
which@1, which@^1.2.12, which@^1.2.14, which@^1.2.9, which@^1.3.0:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
|
||||
dependencies:
|
||||
|
@ -8603,6 +9025,13 @@ yargs-parser@^10.1.0:
|
|||
dependencies:
|
||||
camelcase "^4.1.0"
|
||||
|
||||
yargs-parser@^5.0.0:
|
||||
version "5.0.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a"
|
||||
integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=
|
||||
dependencies:
|
||||
camelcase "^3.0.0"
|
||||
|
||||
yargs-parser@^9.0.2:
|
||||
version "9.0.2"
|
||||
resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-9.0.2.tgz#9ccf6a43460fe4ed40a9bb68f48d43b8a68cc077"
|
||||
|
@ -8642,3 +9071,22 @@ yargs@^11.0.0:
|
|||
which-module "^2.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^9.0.2"
|
||||
|
||||
yargs@^7.0.0:
|
||||
version "7.1.0"
|
||||
resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8"
|
||||
integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=
|
||||
dependencies:
|
||||
camelcase "^3.0.0"
|
||||
cliui "^3.2.0"
|
||||
decamelize "^1.1.1"
|
||||
get-caller-file "^1.0.1"
|
||||
os-locale "^1.4.0"
|
||||
read-pkg-up "^1.0.1"
|
||||
require-directory "^2.1.1"
|
||||
require-main-filename "^1.0.1"
|
||||
set-blocking "^2.0.0"
|
||||
string-width "^1.0.2"
|
||||
which-module "^1.0.0"
|
||||
y18n "^3.2.1"
|
||||
yargs-parser "^5.0.0"
|
||||
|
|