├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── LICENSE
├── README.md
├── actions
└── index.js
├── api
└── index.js
├── components
├── App.js
├── Forecast.js
├── MainPage.js
├── NavBar.js
└── WeatherIcon.js
├── config.xml
├── containers
├── AddLocation.js
├── AddLocationDialog.js
├── Location.js
├── LocationList.js
└── WeatherPage.js
├── hooks
└── README.md
├── icons
├── css
│ ├── weather-icons-wind.css
│ ├── weather-icons-wind.min.css
│ ├── weather-icons.css
│ └── weather-icons.min.css
└── font
│ ├── weathericons-regular-webfont.eot
│ ├── weathericons-regular-webfont.svg
│ ├── weathericons-regular-webfont.ttf
│ ├── weathericons-regular-webfont.woff
│ └── weathericons-regular-webfont.woff2
├── index.js
├── package.json
├── react_redux_weather.png
├── reducers
├── dialog.js
├── index.js
├── locations.js
└── selectedLocation.js
├── scripts
└── build.sh
├── stylus
└── index.styl
├── util
└── index.js
├── webpack.config.js
├── webpack.config.prod.js
├── www
├── 19e65b89cee273a249fba4c09b951b74.eot
├── 1cd48d78f06d33973d9d761d426e69bf.woff2
├── 1dc35d25e61d819a9c357074014867ab.ttf
├── 25a32416abee198dd821b0b17a198a8f.eot
├── 2c159d0d05473040b53ec79df8797d32.woff
├── 4618f0de2a818e7ad3fe880e0b74d04a.ttf
├── 4b658767da6bd92ce2addb3ce512784d.eot
├── 8cac70ebda3f23ce472110d9f21e8593.woff
├── a4d31128b633bc0b1cc1f18a34fb3851.woff2
├── aff28a207631f39ee0272d5cdde43ee7.svg
├── b351bd62abcd96e924d9f44a3da169a7.ttf
├── bundle.js
├── bundle.js.map
├── c8ddf1e5e5bf3682bc7bebf30f394148.woff
├── d2a55d331bdd1a7ea97a8a1fbb3c569c.woff
├── d7c639084f684d66a1bc66855d193ed8.svg
├── dd4781d1acc57ba4c4808d1b44301201.ttf
├── demo.html
├── e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2
├── ecaf8b481729b18f6a8494d9f691cdae.svg
└── index.html
└── yarn.lock
/.eslintignore:
--------------------------------------------------------------------------------
1 | www
2 | platforms
3 | plugins
4 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "parserOptions": {
3 | "ecmaVersion": 6,
4 | "ecmaFeatures": {
5 | "experimentalObjectRestSpread": true,
6 | "jsx": true
7 | },
8 | "sourceType": "module"
9 | },
10 |
11 | "env": {
12 | "es6": true,
13 | "node": true,
14 | "browser": true
15 | },
16 |
17 | "plugins": [
18 | "standard",
19 | "promise",
20 | "react"
21 | ],
22 |
23 | "globals": {
24 | "document": false,
25 | "navigator": false,
26 | "window": false
27 | },
28 |
29 | "rules": {
30 | "accessor-pairs": 2,
31 | "arrow-spacing": [2, { "before": true, "after": true }],
32 | "block-spacing": [2, "always"],
33 | "brace-style": [2, "1tbs", { "allowSingleLine": true }],
34 | "comma-dangle": [2, "never"],
35 | "comma-spacing": [2, { "before": false, "after": true }],
36 | "comma-style": [2, "last"],
37 | "constructor-super": 2,
38 | "curly": [2, "multi-line"],
39 | "dot-location": [2, "property"],
40 | "eol-last": 2,
41 | "eqeqeq": [2, "allow-null"],
42 | "generator-star-spacing": [2, { "before": true, "after": true }],
43 | "handle-callback-err": [2, "^(err|error)$" ],
44 | "indent": [2, 2, { "SwitchCase": 1 }],
45 | "jsx-quotes": [2, "prefer-single"],
46 | "react/jsx-uses-vars": 2,
47 | "react/react-in-jsx-scope": 2,
48 | "react/jsx-uses-react": 2,
49 | "key-spacing": [2, { "beforeColon": false, "afterColon": true }],
50 | "keyword-spacing": [2, { "before": true, "after": true }],
51 | "new-cap": [2, { "newIsCap": true, "capIsNew": false }],
52 | "new-parens": 2,
53 | "no-array-constructor": 2,
54 | "no-caller": 2,
55 | "no-class-assign": 2,
56 | "no-cond-assign": 2,
57 | "no-const-assign": 2,
58 | "no-control-regex": 2,
59 | "no-debugger": 2,
60 | "no-delete-var": 2,
61 | "no-dupe-args": 2,
62 | "no-dupe-class-members": 2,
63 | "no-dupe-keys": 2,
64 | "no-duplicate-case": 2,
65 | "no-empty-character-class": 2,
66 | "no-empty-pattern": 2,
67 | "no-eval": 2,
68 | "no-ex-assign": 2,
69 | "no-extend-native": 2,
70 | "no-extra-bind": 2,
71 | "no-extra-boolean-cast": 2,
72 | "no-extra-parens": [2, "functions"],
73 | "no-fallthrough": 2,
74 | "no-floating-decimal": 2,
75 | "no-func-assign": 2,
76 | "no-implied-eval": 2,
77 | "no-inner-declarations": [2, "functions"],
78 | "no-invalid-regexp": 2,
79 | "no-irregular-whitespace": 2,
80 | "no-iterator": 2,
81 | "no-label-var": 2,
82 | "no-labels": [2, { "allowLoop": false, "allowSwitch": false }],
83 | "no-lone-blocks": 2,
84 | "no-mixed-spaces-and-tabs": 2,
85 | "no-multi-spaces": 2,
86 | "no-multi-str": 2,
87 | "no-multiple-empty-lines": [2, { "max": 1 }],
88 | "no-native-reassign": 2,
89 | "no-negated-in-lhs": 2,
90 | "no-new": 2,
91 | "no-new-func": 2,
92 | "no-new-object": 2,
93 | "no-new-require": 2,
94 | "no-new-symbol": 2,
95 | "no-new-wrappers": 2,
96 | "no-obj-calls": 2,
97 | "no-octal": 2,
98 | "no-octal-escape": 2,
99 | "no-path-concat": 2,
100 | "no-proto": 2,
101 | "no-redeclare": 2,
102 | "no-regex-spaces": 2,
103 | "no-return-assign": [2, "except-parens"],
104 | "no-self-assign": 2,
105 | "no-self-compare": 2,
106 | "no-sequences": 2,
107 | "no-shadow-restricted-names": 2,
108 | "no-spaced-func": 2,
109 | "no-sparse-arrays": 2,
110 | "no-this-before-super": 2,
111 | "no-throw-literal": 2,
112 | "no-trailing-spaces": 2,
113 | "no-undef": 2,
114 | "no-undef-init": 2,
115 | "no-unexpected-multiline": 2,
116 | "no-unneeded-ternary": [2, { "defaultAssignment": false }],
117 | "no-unreachable": 2,
118 | "no-unused-vars": [2, { "vars": "all", "args": "none" }],
119 | "no-useless-call": 2,
120 | "no-useless-constructor": 2,
121 | "no-with": 2,
122 | "one-var": [2, { "initialized": "never" }],
123 | "operator-linebreak": [2, "after", { "overrides": { "?": "before", ":": "before" } }],
124 | "padded-blocks": [2, "never"],
125 | "quotes": [2, "single", "avoid-escape"],
126 | "semi": [2, "always"],
127 | "semi-spacing": [2, { "before": false, "after": true }],
128 | "space-before-blocks": [2, "always"],
129 | "space-before-function-paren": [2, "never"],
130 | "space-in-parens": [2, "never"],
131 | "space-infix-ops": 2,
132 | "space-unary-ops": [2, { "words": true, "nonwords": false }],
133 | "spaced-comment": [2, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }],
134 | "template-curly-spacing": [2, "never"],
135 | "use-isnan": 2,
136 | "valid-typeof": 2,
137 | "wrap-iife": [2, "any"],
138 | "yield-star-spacing": [2, "both"],
139 | "yoda": [2, "never"],
140 |
141 | "standard/object-curly-even-spacing": [2, "either"],
142 | "standard/array-bracket-even-spacing": [2, "either"],
143 | "standard/computed-property-even-spacing": [2, "even"],
144 |
145 | "promise/param-names": 2
146 | },
147 | "globals": {
148 | "CustomElements": false
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 |
6 | # Runtime data
7 | pids
8 | *.pid
9 | *.seed
10 |
11 | # Directory for instrumented libs generated by jscoverage/JSCover
12 | lib-cov
13 |
14 | # Coverage directory used by tools like istanbul
15 | coverage
16 |
17 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
18 | .grunt
19 |
20 | # node-waf configuration
21 | .lock-wscript
22 |
23 | # Compiled binary addons (http://nodejs.org/api/addons.html)
24 | build/Release
25 |
26 | # Dependency directory
27 | node_modules
28 |
29 | # Optional npm cache directory
30 | .npm
31 |
32 | # Optional REPL history
33 | .node_repl_history
34 |
35 | # Cordova files
36 | platforms
37 | plugins
38 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2016 Andreas Argelius
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # React Redux Weather
2 |
3 | 
4 |
5 | Weather app using Onsen UI, Redux, React and Webpack.
6 |
7 | This app was built using [Onsen UI](https://onsen.io/), a hybrid app framework that provides both Material Design and iOS flat design. We recently released [React Components](https://onsen.io/v2/react.html).
8 |
9 | Check out the demo [here](http://argelius.github.io/react-onsenui-redux-weather/demo.html).
10 |
11 | ## How to run it
12 |
13 | To run it simply do:
14 |
15 | ```bash
16 | npm install
17 | npm start
18 | ```
19 |
20 | The app will run at [http://localhost:9000](http://localhost:9000).
21 |
22 | ## How to build it
23 |
24 | You can build it using Cordova.
25 |
26 | - [Install Cordova](https://cordova.apache.org/docs/en/latest/guide/cli/index.html#installing-the-cordova-cli):
27 |
28 | ```
29 | npm install -g cordova
30 | ```
31 |
32 | You need to build the project:
33 |
34 | ```
35 | npm run build
36 | ```
37 |
38 | Add a platform to run it on a device or emulator. For Android:
39 |
40 | ```
41 | cordova platform add android
42 | cordova run android
43 | ```
44 |
45 | This assumes that you have the Android SDK installed.
46 |
47 | ## Contributing
48 |
49 | 1. Fork it ( https://github.com/argelius/react-onsenui-redux-weather/fork )
50 | 2. Create your feature branch (`git checkout -b my-new-feature`)
51 | 3. Commit your changes (`git commit -am 'Add some feature'`)
52 | 4. Push to the branch (`git push origin my-new-feature`)
53 | 5. Create new Pull Request
54 |
--------------------------------------------------------------------------------
/actions/index.js:
--------------------------------------------------------------------------------
1 | import {v4 as generateId} from 'node-uuid';
2 |
3 | import {queryWeather} from '../api';
4 |
5 | export const ADD_LOCATION = 'ADD_LOCATION';
6 | export const REMOVE_LOCATION = 'REMOVE_LOCATION';
7 | export const SELECT_LOCATION = 'SELECT_LOCATION';
8 |
9 | export const REQUEST_WEATHER = 'REQUEST_WEATHER';
10 | export const RECEIVE_WEATHER = 'RECEIVE_WEATHER';
11 | export const SET_FETCH_ERROR = 'SET_FETCH_ERROR';
12 |
13 | export const OPEN_DIALOG = 'OPEN_DIALOG';
14 | export const CLOSE_DIALOG = 'CLOSE_DIALOG';
15 |
16 | export const addLocation = (name) => ({
17 | type: ADD_LOCATION,
18 | id: generateId(),
19 | name
20 | });
21 |
22 | export const removeLocation = id => ({
23 | type: REMOVE_LOCATION,
24 | id
25 | });
26 |
27 | export const selectLocation = id => ({
28 | type: SELECT_LOCATION,
29 | id
30 | });
31 |
32 | export const requestWeather = (id) => ({
33 | type: REQUEST_WEATHER,
34 | id
35 | });
36 |
37 | export const receiveWeather = (id, data) => ({
38 | type: RECEIVE_WEATHER,
39 | id,
40 | ...data
41 | });
42 |
43 | export const setFetchError = id => ({
44 | type: SET_FETCH_ERROR,
45 | id
46 | });
47 |
48 | export const fetchWeather = (id) => {
49 | /*
50 | * This function requests and receives the
51 | * weather data asynchronously.
52 | */
53 | return (dispatch, getState) => {
54 | const name = getState().locations[id].name;
55 |
56 | dispatch(requestWeather(id));
57 | queryWeather(name)
58 | .catch(() => dispatch(setFetchError(id)))
59 | .then((data) => dispatch(receiveWeather(id, data)));
60 | };
61 | };
62 |
63 | export const addLocationAndFetchWeather = name => {
64 | return (dispatch, getState) => {
65 | const id = dispatch(addLocation(name)).id;
66 | dispatch(fetchWeather(id));
67 | };
68 | };
69 |
70 | export const openDialog = () => ({
71 | type: OPEN_DIALOG
72 | });
73 |
74 | export const closeDialog = () => ({
75 | type: CLOSE_DIALOG
76 | });
77 |
--------------------------------------------------------------------------------
/api/index.js:
--------------------------------------------------------------------------------
1 | import fetch from 'isomorphic-fetch';
2 | import Promise from 'promise';
3 |
4 | const API_KEY = '5a043a1bd95bf3ee500eb89de107b41e';
5 | const API_URL = 'http://api.openweathermap.org/data/2.5';
6 |
7 | // http://api.openweathermap.org/data/2.5/forecast/daily?id=524901&cnt=5&appid=5a043a1bd95bf3ee500eb89de107b41e
8 |
9 | const kelvinToCelsius = (kelvin) => kelvin - 273.15;
10 |
11 | const round = (value, decimals = 1) => {
12 | const x = Math.pow(10, decimals);
13 | return Math.round(x * value) / x;
14 | };
15 |
16 | const apiCall = (url) => {
17 | return fetch(url)
18 | .then(response => {
19 | if (response.status >= 400) {
20 | return Promise.reject('Invalid response');
21 | }
22 |
23 | return response.json();
24 | })
25 | .then(json => {
26 | if (parseInt(json.cod) !== 200) {
27 | return Promise.reject('Invalid response');
28 | }
29 |
30 | return json;
31 | });
32 | };
33 |
34 | export const queryWeather = (city) => {
35 | let data;
36 |
37 | return apiCall(`${API_URL}/weather?q=${city.trim()}&appid=${API_KEY}`)
38 | .then(json => {
39 | data = {
40 | temperature: round(kelvinToCelsius(json.main.temp), 0),
41 | humidity: json.main.humidity,
42 | icon: json.weather[0].id,
43 | name: json.name,
44 | country: json.sys.country.toLowerCase()
45 | };
46 |
47 | return apiCall(`${API_URL}/forecast/daily?id=${json.id}&cnt=5&appid=${API_KEY}`);
48 | })
49 | .then(json => {
50 | return {
51 | ...data,
52 | forecast: json.list.map((d) => ({
53 | weekday: (new Date(d.dt * 1000)).getDay(),
54 | icon: d.weather[0].id,
55 | maxTemp: round(kelvinToCelsius(d.temp.max), 0),
56 | minTemp: round(kelvinToCelsius(d.temp.min), 0)
57 | }))
58 | };
59 | });
60 | };
61 |
--------------------------------------------------------------------------------
/components/App.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import {
4 | Navigator
5 | } from 'react-onsenui';
6 |
7 | import MainPage from './MainPage';
8 |
9 | const renderPage = (route, navigator) => (
10 |
11 | );
12 |
13 | const App = () => (
14 |
18 | );
19 |
20 | export default App;
21 |
--------------------------------------------------------------------------------
/components/Forecast.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import WeatherIcon from '../components/WeatherIcon';
4 | import {weatherCodeToColor} from '../util';
5 |
6 | const WEEKDAYS = {
7 | 0: 'SUN',
8 | 1: 'MON',
9 | 2: 'TUE',
10 | 3: 'WED',
11 | 4: 'THU',
12 | 5: 'FRI',
13 | 6: 'SAT'
14 | };
15 |
16 | const styles = {
17 | forecast: {
18 | margin: '0 25px',
19 | display: 'flex'
20 | },
21 | weekday: {
22 | flexGrow: 1,
23 | display: 'flex',
24 | flexDirection: 'column'
25 | },
26 | weekdayName: {
27 | fontSize: '16px',
28 | margin: '0 0 6px 0',
29 | fontWeight: 200
30 | },
31 | weekdayIcon: {
32 | fontSize: '24px'
33 | },
34 | weekdayMaxTemp: {
35 | margin: '6px 0 0 0',
36 | fontSize: '12px'
37 | },
38 | weekdayMinTemp: {
39 | opacity: 0.6,
40 | margin: '2px 0 0 0',
41 | fontWeight: 200,
42 | fontSize: '12px'
43 | }
44 | };
45 |
46 | const Forecast = ({days}) => (
47 |
48 | {days.map(({weekday, icon, maxTemp, minTemp}) => {
49 | const weatherColor = weatherCodeToColor(icon);
50 |
51 | return (
52 |
53 |
54 | {WEEKDAYS[weekday]}
55 |
56 |
57 |
58 |
59 |
60 | {maxTemp}°C
61 |
62 |
63 | {minTemp}°C
64 |
65 |
66 | );
67 | })}
68 |
69 | );
70 |
71 | export default Forecast;
72 |
--------------------------------------------------------------------------------
/components/MainPage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import {
4 | Page
5 | } from 'react-onsenui';
6 |
7 | import NavBar from './NavBar';
8 | import LocationList from '../containers/LocationList';
9 | import AddLocation from '../containers/AddLocation';
10 |
11 | const MainPage = ({navigator}) => (
12 | }>
13 |
14 |
15 |
16 | );
17 |
18 | export default MainPage;
19 |
--------------------------------------------------------------------------------
/components/NavBar.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | import {
4 | Toolbar,
5 | BackButton
6 | } from 'react-onsenui';
7 |
8 | const NavApp = ({title, navigator, backButton}) => (
9 |
10 |
11 | {backButton ? navigator.popPage()}>Back : null}
12 |
13 | {title}
14 |
15 | );
16 |
17 | export default NavApp;
18 |
--------------------------------------------------------------------------------
/components/WeatherIcon.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 |
3 | const WeatherIcon = ({icon, className, ...props}) => (
4 |
5 | );
6 |
7 | export default WeatherIcon;
8 |
--------------------------------------------------------------------------------
/config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | OnsenWeather
4 |
5 | A sample Apache Cordova application that responds to the deviceready event.
6 |
7 |
8 | Apache Cordova Team
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/containers/AddLocation.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 | import {bindActionCreators} from 'redux';
4 |
5 | import {platform} from 'onsenui';
6 |
7 | import * as Actions from '../actions';
8 | import AddLocationDialog from './AddLocationDialog';
9 |
10 | import {
11 | Fab,
12 | Icon,
13 | Button
14 | } from 'react-onsenui';
15 |
16 | const AddLocation = ({actions}) => {
17 | let button;
18 |
19 | if (platform.isAndroid()) {
20 | button = (
21 |
25 |
26 |
27 | );
28 | } else {
29 | button = (
30 |
31 | );
32 | }
33 |
34 | return (
35 |
39 | );
40 | };
41 |
42 | const mapDispatchToProps = (dispatch) => ({
43 | actions: bindActionCreators(Actions, dispatch)
44 | });
45 |
46 | export default connect(
47 | undefined,
48 | mapDispatchToProps
49 | )(AddLocation);
50 |
--------------------------------------------------------------------------------
/containers/AddLocationDialog.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {findDOMNode} from 'react-dom';
3 | import {connect} from 'react-redux';
4 | import {bindActionCreators} from 'redux';
5 |
6 | import {
7 | AlertDialog,
8 | Input
9 | } from 'react-onsenui';
10 |
11 | import * as Actions from '../actions';
12 |
13 | const AddLocationDialog = ({isOpen, actions}) => {
14 | let input;
15 |
16 | const handleButtonClick = () => {
17 | const node = findDOMNode(input);
18 |
19 | if (node.value.length > 0) {
20 | actions.addLocationAndFetchWeather(node.value);
21 | node.value = '';
22 | actions.closeDialog();
23 | };
24 | };
25 |
26 | return (
27 |
28 | Add a location
29 |
30 | (input = node)}
33 | placeholder='Location name' float
34 | />
35 |
36 |
37 |
40 |
43 |
44 |
45 | );
46 | };
47 |
48 | const mapStateToProps = (state) => ({
49 | isOpen: state.dialog.open
50 | });
51 |
52 | const mapDispatchToProps = (dispatch) => ({
53 | actions: bindActionCreators(Actions, dispatch)
54 | });
55 |
56 | export default connect(mapStateToProps, mapDispatchToProps)(AddLocationDialog);
57 |
--------------------------------------------------------------------------------
/containers/Location.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 | import {bindActionCreators} from 'redux';
4 |
5 | import {ListItem, Icon} from 'react-onsenui';
6 |
7 | import {platform} from 'onsenui';
8 |
9 | import * as Actions from '../actions';
10 | import WeatherPage from './WeatherPage';
11 | import WeatherIcon from '../components/WeatherIcon';
12 | import {weatherCodeToColor} from '../util';
13 |
14 | const styles = {
15 | weatherIcon: {
16 | color: '#fff',
17 | textAlign: 'center',
18 | width: platform.isAndroid() ? '36px' : '30px',
19 | height: platform.isAndroid() ? '36px' : '30px',
20 | lineHeight: platform.isAndroid() ? '36px' : '30px',
21 | borderRadius: '6px',
22 | fontSize: platform.isAndroid() ? '16px' : '14px'
23 | },
24 | buttons: {
25 | fontSize: '20px',
26 | color: '#cacaca'
27 | },
28 | refreshButton: {
29 | margin: '0 25px 0 0'
30 | },
31 | removeButton: {
32 | margin: '0 10px 0 0'
33 | }
34 | };
35 |
36 | const Location = ({
37 | id,
38 | name,
39 | temperature,
40 | humidity,
41 | icon,
42 | country,
43 | isFetching,
44 | isInvalid,
45 | navigator,
46 | actions
47 | }) => {
48 | let subtitle;
49 |
50 | if (isInvalid) {
51 | subtitle = (
52 |
53 | Unable to fetch data!
54 |
55 | );
56 | } else if (isFetching) {
57 | subtitle = (
58 | Fetching data...
59 | );
60 | } else {
61 | subtitle = (
62 |
63 | {temperature}°C
64 | {humidity}%
65 |
66 | );
67 | }
68 |
69 | const weatherColor = weatherCodeToColor(icon);
70 |
71 | return (
72 | {
73 | actions.selectLocation(id);
74 | navigator.pushPage({component: WeatherPage});
75 | }} tappable>
76 |
77 |
78 | {icon < 0 ? '?' : }
79 |
80 |
81 |
82 |
83 | {name}
84 |
85 |
86 | {subtitle}
87 |
88 |
89 |
90 |
{
91 | e.stopPropagation();
92 | actions.fetchWeather(id);
93 | }}>
94 |
95 |
96 |
{
97 | e.stopPropagation();
98 | actions.removeLocation(id);
99 | }}>
100 |
101 |
102 |
103 |
104 | );
105 | };
106 |
107 | const mapDispatchToProps = (dispatch) => {
108 | return {
109 | actions: bindActionCreators(Actions, dispatch)
110 | };
111 | };
112 |
113 | export default connect(
114 | undefined,
115 | mapDispatchToProps
116 | )(Location);
117 |
--------------------------------------------------------------------------------
/containers/LocationList.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 |
4 | import {List} from 'react-onsenui';
5 |
6 | import Location from './Location';
7 |
8 | const LocationList = ({locations, navigator}) => (
9 | locations[key])}
11 | renderRow={(location) =>
12 |
17 | }
18 | />
19 | );
20 |
21 | const mapStateToProps = (state) => ({
22 | locations: state.locations
23 | });
24 |
25 | export default connect(mapStateToProps)(LocationList);
26 |
--------------------------------------------------------------------------------
/containers/WeatherPage.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {connect} from 'react-redux';
3 | import {countries} from 'country-data';
4 |
5 | import {platform} from 'onsenui';
6 |
7 | import {
8 | Page,
9 | ProgressCircular
10 | } from 'react-onsenui';
11 |
12 | import NavBar from '../components/NavBar';
13 | import WeatherIcon from '../components/WeatherIcon';
14 | import Forecast from '../components/Forecast';
15 | import {weatherCodeToColor} from '../util';
16 |
17 | const styles = {
18 | main: {
19 | fontFamily: platform.isIOS() ? 'Lato' : null,
20 | textAlign: 'center',
21 | color: '#4a4a4a',
22 | width: '100%',
23 | marginTop: '30px'
24 | },
25 | invalid: {
26 | color: 'red',
27 | fontSize: '20px'
28 | },
29 | progress: {
30 | width: '50px',
31 | height: '50px'
32 | },
33 | name: {
34 | textTransform: 'uppercase',
35 | fontSize: '24px',
36 | lineHeight: '24px'
37 | },
38 | country: {
39 | margin: '2px 0 0 0',
40 | textTransform: 'uppercase',
41 | fontSize: '12px',
42 | lineHeight: '12px'
43 | },
44 | icon: {
45 | fontSize: '100px',
46 | margin: '20px 0 0px 0'
47 | },
48 | data: {
49 | fontSize: '40px',
50 | fontWeight: 300,
51 | display: 'flex',
52 | margin: '40px 25px'
53 | },
54 | dataColumn: {
55 | flexGrow: 1,
56 | display: 'flex',
57 | flexDirection: 'column'
58 | },
59 | dataValue: {
60 | fontSize: '60px'
61 | },
62 | dataCaption: {
63 | fontSize: '14px',
64 | fontWeight: 400
65 | }
66 | };
67 |
68 | const WeatherPage = ({
69 | navigator,
70 | name,
71 | temperature,
72 | humidity,
73 | country,
74 | icon,
75 | forecast,
76 | isFetching,
77 | isInvalid
78 | }) => {
79 | let content;
80 |
81 | const weatherColor = weatherCodeToColor(icon);
82 |
83 | if (isInvalid) {
84 | content = Unable to fetch data!
;
85 | } else if (isFetching) {
86 | content = ;
87 | } else {
88 | content = (
89 |
90 |
91 | {name}
92 |
93 |
94 |
95 | {countries[country.toUpperCase()].name}
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 | {temperature}°
106 |
107 |
108 | TEMPERATURE
109 |
110 |
111 |
112 |
113 | {humidity}%
114 |
115 |
116 | HUMIDITY
117 |
118 |
119 |
120 |
121 |
122 |
123 | );
124 | }
125 |
126 | return (
127 | }>
128 |
129 | {content}
130 |
131 |
132 | );
133 | };
134 |
135 | const mapStateToProps = (state) => ({
136 | ...state.locations[state.selectedLocation]
137 | });
138 |
139 | export default connect(
140 | mapStateToProps
141 | )(WeatherPage);
142 |
--------------------------------------------------------------------------------
/hooks/README.md:
--------------------------------------------------------------------------------
1 |
21 | # Cordova Hooks
22 |
23 | Cordova Hooks represent special scripts which could be added by application and plugin developers or even by your own build system to customize cordova commands. See Hooks Guide for more details: http://cordova.apache.org/docs/en/edge/guide_appdev_hooks_index.md.html#Hooks%20Guide.
24 |
--------------------------------------------------------------------------------
/icons/css/weather-icons.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Weather Icons 2.0.8
3 | * Updated September 19, 2015
4 | * Weather themed icons for Bootstrap
5 | * Author - Erik Flowers - erik@helloerik.com
6 | * Email: erik@helloerik.com
7 | * Twitter: http://twitter.com/Erik_UX
8 | * ------------------------------------------------------------------------------
9 | * Maintained at http://erikflowers.github.io/weather-icons
10 | *
11 | * License
12 | * ------------------------------------------------------------------------------
13 | * - Font licensed under SIL OFL 1.1 -
14 | * http://scripts.sil.org/OFL
15 | * - CSS, SCSS and LESS are licensed under MIT License -
16 | * http://opensource.org/licenses/mit-license.html
17 | * - Documentation licensed under CC BY 3.0 -
18 | * http://creativecommons.org/licenses/by/3.0/
19 | * - Inspired by and works great as a companion with Font Awesome
20 | * "Font Awesome by Dave Gandy - http://fontawesome.io"
21 | */
22 | @font-face {
23 | font-family: 'weathericons';
24 | src: url('../font/weathericons-regular-webfont.eot');
25 | src: url('../font/weathericons-regular-webfont.eot?#iefix') format('embedded-opentype'), url('../font/weathericons-regular-webfont.woff2') format('woff2'), url('../font/weathericons-regular-webfont.woff') format('woff'), url('../font/weathericons-regular-webfont.ttf') format('truetype'), url('../font/weathericons-regular-webfont.svg#weather_iconsregular') format('svg');
26 | font-weight: normal;
27 | font-style: normal;
28 | }
29 | .wi {
30 | display: inline-block;
31 | font-family: 'weathericons';
32 | font-style: normal;
33 | font-weight: normal;
34 | line-height: 1;
35 | -webkit-font-smoothing: antialiased;
36 | -moz-osx-font-smoothing: grayscale;
37 | }
38 | .wi-fw {
39 | text-align: center;
40 | width: 1.4em;
41 | }
42 | .wi-rotate-90 {
43 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
44 | -webkit-transform: rotate(90deg);
45 | -ms-transform: rotate(90deg);
46 | transform: rotate(90deg);
47 | }
48 | .wi-rotate-180 {
49 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2);
50 | -webkit-transform: rotate(180deg);
51 | -ms-transform: rotate(180deg);
52 | transform: rotate(180deg);
53 | }
54 | .wi-rotate-270 {
55 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=3);
56 | -webkit-transform: rotate(270deg);
57 | -ms-transform: rotate(270deg);
58 | transform: rotate(270deg);
59 | }
60 | .wi-flip-horizontal {
61 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);
62 | -webkit-transform: scale(-1, 1);
63 | -ms-transform: scale(-1, 1);
64 | transform: scale(-1, 1);
65 | }
66 | .wi-flip-vertical {
67 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);
68 | -webkit-transform: scale(1, -1);
69 | -ms-transform: scale(1, -1);
70 | transform: scale(1, -1);
71 | }
72 | .wi-day-sunny:before {
73 | content: "\f00d";
74 | }
75 | .wi-day-cloudy:before {
76 | content: "\f002";
77 | }
78 | .wi-day-cloudy-gusts:before {
79 | content: "\f000";
80 | }
81 | .wi-day-cloudy-windy:before {
82 | content: "\f001";
83 | }
84 | .wi-day-fog:before {
85 | content: "\f003";
86 | }
87 | .wi-day-hail:before {
88 | content: "\f004";
89 | }
90 | .wi-day-haze:before {
91 | content: "\f0b6";
92 | }
93 | .wi-day-lightning:before {
94 | content: "\f005";
95 | }
96 | .wi-day-rain:before {
97 | content: "\f008";
98 | }
99 | .wi-day-rain-mix:before {
100 | content: "\f006";
101 | }
102 | .wi-day-rain-wind:before {
103 | content: "\f007";
104 | }
105 | .wi-day-showers:before {
106 | content: "\f009";
107 | }
108 | .wi-day-sleet:before {
109 | content: "\f0b2";
110 | }
111 | .wi-day-sleet-storm:before {
112 | content: "\f068";
113 | }
114 | .wi-day-snow:before {
115 | content: "\f00a";
116 | }
117 | .wi-day-snow-thunderstorm:before {
118 | content: "\f06b";
119 | }
120 | .wi-day-snow-wind:before {
121 | content: "\f065";
122 | }
123 | .wi-day-sprinkle:before {
124 | content: "\f00b";
125 | }
126 | .wi-day-storm-showers:before {
127 | content: "\f00e";
128 | }
129 | .wi-day-sunny-overcast:before {
130 | content: "\f00c";
131 | }
132 | .wi-day-thunderstorm:before {
133 | content: "\f010";
134 | }
135 | .wi-day-windy:before {
136 | content: "\f085";
137 | }
138 | .wi-solar-eclipse:before {
139 | content: "\f06e";
140 | }
141 | .wi-hot:before {
142 | content: "\f072";
143 | }
144 | .wi-day-cloudy-high:before {
145 | content: "\f07d";
146 | }
147 | .wi-day-light-wind:before {
148 | content: "\f0c4";
149 | }
150 | .wi-night-clear:before {
151 | content: "\f02e";
152 | }
153 | .wi-night-alt-cloudy:before {
154 | content: "\f086";
155 | }
156 | .wi-night-alt-cloudy-gusts:before {
157 | content: "\f022";
158 | }
159 | .wi-night-alt-cloudy-windy:before {
160 | content: "\f023";
161 | }
162 | .wi-night-alt-hail:before {
163 | content: "\f024";
164 | }
165 | .wi-night-alt-lightning:before {
166 | content: "\f025";
167 | }
168 | .wi-night-alt-rain:before {
169 | content: "\f028";
170 | }
171 | .wi-night-alt-rain-mix:before {
172 | content: "\f026";
173 | }
174 | .wi-night-alt-rain-wind:before {
175 | content: "\f027";
176 | }
177 | .wi-night-alt-showers:before {
178 | content: "\f029";
179 | }
180 | .wi-night-alt-sleet:before {
181 | content: "\f0b4";
182 | }
183 | .wi-night-alt-sleet-storm:before {
184 | content: "\f06a";
185 | }
186 | .wi-night-alt-snow:before {
187 | content: "\f02a";
188 | }
189 | .wi-night-alt-snow-thunderstorm:before {
190 | content: "\f06d";
191 | }
192 | .wi-night-alt-snow-wind:before {
193 | content: "\f067";
194 | }
195 | .wi-night-alt-sprinkle:before {
196 | content: "\f02b";
197 | }
198 | .wi-night-alt-storm-showers:before {
199 | content: "\f02c";
200 | }
201 | .wi-night-alt-thunderstorm:before {
202 | content: "\f02d";
203 | }
204 | .wi-night-cloudy:before {
205 | content: "\f031";
206 | }
207 | .wi-night-cloudy-gusts:before {
208 | content: "\f02f";
209 | }
210 | .wi-night-cloudy-windy:before {
211 | content: "\f030";
212 | }
213 | .wi-night-fog:before {
214 | content: "\f04a";
215 | }
216 | .wi-night-hail:before {
217 | content: "\f032";
218 | }
219 | .wi-night-lightning:before {
220 | content: "\f033";
221 | }
222 | .wi-night-partly-cloudy:before {
223 | content: "\f083";
224 | }
225 | .wi-night-rain:before {
226 | content: "\f036";
227 | }
228 | .wi-night-rain-mix:before {
229 | content: "\f034";
230 | }
231 | .wi-night-rain-wind:before {
232 | content: "\f035";
233 | }
234 | .wi-night-showers:before {
235 | content: "\f037";
236 | }
237 | .wi-night-sleet:before {
238 | content: "\f0b3";
239 | }
240 | .wi-night-sleet-storm:before {
241 | content: "\f069";
242 | }
243 | .wi-night-snow:before {
244 | content: "\f038";
245 | }
246 | .wi-night-snow-thunderstorm:before {
247 | content: "\f06c";
248 | }
249 | .wi-night-snow-wind:before {
250 | content: "\f066";
251 | }
252 | .wi-night-sprinkle:before {
253 | content: "\f039";
254 | }
255 | .wi-night-storm-showers:before {
256 | content: "\f03a";
257 | }
258 | .wi-night-thunderstorm:before {
259 | content: "\f03b";
260 | }
261 | .wi-lunar-eclipse:before {
262 | content: "\f070";
263 | }
264 | .wi-stars:before {
265 | content: "\f077";
266 | }
267 | .wi-storm-showers:before {
268 | content: "\f01d";
269 | }
270 | .wi-thunderstorm:before {
271 | content: "\f01e";
272 | }
273 | .wi-night-alt-cloudy-high:before {
274 | content: "\f07e";
275 | }
276 | .wi-night-cloudy-high:before {
277 | content: "\f080";
278 | }
279 | .wi-night-alt-partly-cloudy:before {
280 | content: "\f081";
281 | }
282 | .wi-cloud:before {
283 | content: "\f041";
284 | }
285 | .wi-cloudy:before {
286 | content: "\f013";
287 | }
288 | .wi-cloudy-gusts:before {
289 | content: "\f011";
290 | }
291 | .wi-cloudy-windy:before {
292 | content: "\f012";
293 | }
294 | .wi-fog:before {
295 | content: "\f014";
296 | }
297 | .wi-hail:before {
298 | content: "\f015";
299 | }
300 | .wi-rain:before {
301 | content: "\f019";
302 | }
303 | .wi-rain-mix:before {
304 | content: "\f017";
305 | }
306 | .wi-rain-wind:before {
307 | content: "\f018";
308 | }
309 | .wi-showers:before {
310 | content: "\f01a";
311 | }
312 | .wi-sleet:before {
313 | content: "\f0b5";
314 | }
315 | .wi-snow:before {
316 | content: "\f01b";
317 | }
318 | .wi-sprinkle:before {
319 | content: "\f01c";
320 | }
321 | .wi-storm-showers:before {
322 | content: "\f01d";
323 | }
324 | .wi-thunderstorm:before {
325 | content: "\f01e";
326 | }
327 | .wi-snow-wind:before {
328 | content: "\f064";
329 | }
330 | .wi-snow:before {
331 | content: "\f01b";
332 | }
333 | .wi-smog:before {
334 | content: "\f074";
335 | }
336 | .wi-smoke:before {
337 | content: "\f062";
338 | }
339 | .wi-lightning:before {
340 | content: "\f016";
341 | }
342 | .wi-raindrops:before {
343 | content: "\f04e";
344 | }
345 | .wi-raindrop:before {
346 | content: "\f078";
347 | }
348 | .wi-dust:before {
349 | content: "\f063";
350 | }
351 | .wi-snowflake-cold:before {
352 | content: "\f076";
353 | }
354 | .wi-windy:before {
355 | content: "\f021";
356 | }
357 | .wi-strong-wind:before {
358 | content: "\f050";
359 | }
360 | .wi-sandstorm:before {
361 | content: "\f082";
362 | }
363 | .wi-earthquake:before {
364 | content: "\f0c6";
365 | }
366 | .wi-fire:before {
367 | content: "\f0c7";
368 | }
369 | .wi-flood:before {
370 | content: "\f07c";
371 | }
372 | .wi-meteor:before {
373 | content: "\f071";
374 | }
375 | .wi-tsunami:before {
376 | content: "\f0c5";
377 | }
378 | .wi-volcano:before {
379 | content: "\f0c8";
380 | }
381 | .wi-hurricane:before {
382 | content: "\f073";
383 | }
384 | .wi-tornado:before {
385 | content: "\f056";
386 | }
387 | .wi-small-craft-advisory:before {
388 | content: "\f0cc";
389 | }
390 | .wi-gale-warning:before {
391 | content: "\f0cd";
392 | }
393 | .wi-storm-warning:before {
394 | content: "\f0ce";
395 | }
396 | .wi-hurricane-warning:before {
397 | content: "\f0cf";
398 | }
399 | .wi-wind-direction:before {
400 | content: "\f0b1";
401 | }
402 | .wi-alien:before {
403 | content: "\f075";
404 | }
405 | .wi-celsius:before {
406 | content: "\f03c";
407 | }
408 | .wi-fahrenheit:before {
409 | content: "\f045";
410 | }
411 | .wi-degrees:before {
412 | content: "\f042";
413 | }
414 | .wi-thermometer:before {
415 | content: "\f055";
416 | }
417 | .wi-thermometer-exterior:before {
418 | content: "\f053";
419 | }
420 | .wi-thermometer-internal:before {
421 | content: "\f054";
422 | }
423 | .wi-cloud-down:before {
424 | content: "\f03d";
425 | }
426 | .wi-cloud-up:before {
427 | content: "\f040";
428 | }
429 | .wi-cloud-refresh:before {
430 | content: "\f03e";
431 | }
432 | .wi-horizon:before {
433 | content: "\f047";
434 | }
435 | .wi-horizon-alt:before {
436 | content: "\f046";
437 | }
438 | .wi-sunrise:before {
439 | content: "\f051";
440 | }
441 | .wi-sunset:before {
442 | content: "\f052";
443 | }
444 | .wi-moonrise:before {
445 | content: "\f0c9";
446 | }
447 | .wi-moonset:before {
448 | content: "\f0ca";
449 | }
450 | .wi-refresh:before {
451 | content: "\f04c";
452 | }
453 | .wi-refresh-alt:before {
454 | content: "\f04b";
455 | }
456 | .wi-umbrella:before {
457 | content: "\f084";
458 | }
459 | .wi-barometer:before {
460 | content: "\f079";
461 | }
462 | .wi-humidity:before {
463 | content: "\f07a";
464 | }
465 | .wi-na:before {
466 | content: "\f07b";
467 | }
468 | .wi-train:before {
469 | content: "\f0cb";
470 | }
471 | .wi-moon-new:before {
472 | content: "\f095";
473 | }
474 | .wi-moon-waxing-crescent-1:before {
475 | content: "\f096";
476 | }
477 | .wi-moon-waxing-crescent-2:before {
478 | content: "\f097";
479 | }
480 | .wi-moon-waxing-crescent-3:before {
481 | content: "\f098";
482 | }
483 | .wi-moon-waxing-crescent-4:before {
484 | content: "\f099";
485 | }
486 | .wi-moon-waxing-crescent-5:before {
487 | content: "\f09a";
488 | }
489 | .wi-moon-waxing-crescent-6:before {
490 | content: "\f09b";
491 | }
492 | .wi-moon-first-quarter:before {
493 | content: "\f09c";
494 | }
495 | .wi-moon-waxing-gibbous-1:before {
496 | content: "\f09d";
497 | }
498 | .wi-moon-waxing-gibbous-2:before {
499 | content: "\f09e";
500 | }
501 | .wi-moon-waxing-gibbous-3:before {
502 | content: "\f09f";
503 | }
504 | .wi-moon-waxing-gibbous-4:before {
505 | content: "\f0a0";
506 | }
507 | .wi-moon-waxing-gibbous-5:before {
508 | content: "\f0a1";
509 | }
510 | .wi-moon-waxing-gibbous-6:before {
511 | content: "\f0a2";
512 | }
513 | .wi-moon-full:before {
514 | content: "\f0a3";
515 | }
516 | .wi-moon-waning-gibbous-1:before {
517 | content: "\f0a4";
518 | }
519 | .wi-moon-waning-gibbous-2:before {
520 | content: "\f0a5";
521 | }
522 | .wi-moon-waning-gibbous-3:before {
523 | content: "\f0a6";
524 | }
525 | .wi-moon-waning-gibbous-4:before {
526 | content: "\f0a7";
527 | }
528 | .wi-moon-waning-gibbous-5:before {
529 | content: "\f0a8";
530 | }
531 | .wi-moon-waning-gibbous-6:before {
532 | content: "\f0a9";
533 | }
534 | .wi-moon-third-quarter:before {
535 | content: "\f0aa";
536 | }
537 | .wi-moon-waning-crescent-1:before {
538 | content: "\f0ab";
539 | }
540 | .wi-moon-waning-crescent-2:before {
541 | content: "\f0ac";
542 | }
543 | .wi-moon-waning-crescent-3:before {
544 | content: "\f0ad";
545 | }
546 | .wi-moon-waning-crescent-4:before {
547 | content: "\f0ae";
548 | }
549 | .wi-moon-waning-crescent-5:before {
550 | content: "\f0af";
551 | }
552 | .wi-moon-waning-crescent-6:before {
553 | content: "\f0b0";
554 | }
555 | .wi-moon-alt-new:before {
556 | content: "\f0eb";
557 | }
558 | .wi-moon-alt-waxing-crescent-1:before {
559 | content: "\f0d0";
560 | }
561 | .wi-moon-alt-waxing-crescent-2:before {
562 | content: "\f0d1";
563 | }
564 | .wi-moon-alt-waxing-crescent-3:before {
565 | content: "\f0d2";
566 | }
567 | .wi-moon-alt-waxing-crescent-4:before {
568 | content: "\f0d3";
569 | }
570 | .wi-moon-alt-waxing-crescent-5:before {
571 | content: "\f0d4";
572 | }
573 | .wi-moon-alt-waxing-crescent-6:before {
574 | content: "\f0d5";
575 | }
576 | .wi-moon-alt-first-quarter:before {
577 | content: "\f0d6";
578 | }
579 | .wi-moon-alt-waxing-gibbous-1:before {
580 | content: "\f0d7";
581 | }
582 | .wi-moon-alt-waxing-gibbous-2:before {
583 | content: "\f0d8";
584 | }
585 | .wi-moon-alt-waxing-gibbous-3:before {
586 | content: "\f0d9";
587 | }
588 | .wi-moon-alt-waxing-gibbous-4:before {
589 | content: "\f0da";
590 | }
591 | .wi-moon-alt-waxing-gibbous-5:before {
592 | content: "\f0db";
593 | }
594 | .wi-moon-alt-waxing-gibbous-6:before {
595 | content: "\f0dc";
596 | }
597 | .wi-moon-alt-full:before {
598 | content: "\f0dd";
599 | }
600 | .wi-moon-alt-waning-gibbous-1:before {
601 | content: "\f0de";
602 | }
603 | .wi-moon-alt-waning-gibbous-2:before {
604 | content: "\f0df";
605 | }
606 | .wi-moon-alt-waning-gibbous-3:before {
607 | content: "\f0e0";
608 | }
609 | .wi-moon-alt-waning-gibbous-4:before {
610 | content: "\f0e1";
611 | }
612 | .wi-moon-alt-waning-gibbous-5:before {
613 | content: "\f0e2";
614 | }
615 | .wi-moon-alt-waning-gibbous-6:before {
616 | content: "\f0e3";
617 | }
618 | .wi-moon-alt-third-quarter:before {
619 | content: "\f0e4";
620 | }
621 | .wi-moon-alt-waning-crescent-1:before {
622 | content: "\f0e5";
623 | }
624 | .wi-moon-alt-waning-crescent-2:before {
625 | content: "\f0e6";
626 | }
627 | .wi-moon-alt-waning-crescent-3:before {
628 | content: "\f0e7";
629 | }
630 | .wi-moon-alt-waning-crescent-4:before {
631 | content: "\f0e8";
632 | }
633 | .wi-moon-alt-waning-crescent-5:before {
634 | content: "\f0e9";
635 | }
636 | .wi-moon-alt-waning-crescent-6:before {
637 | content: "\f0ea";
638 | }
639 | .wi-moon-0:before {
640 | content: "\f095";
641 | }
642 | .wi-moon-1:before {
643 | content: "\f096";
644 | }
645 | .wi-moon-2:before {
646 | content: "\f097";
647 | }
648 | .wi-moon-3:before {
649 | content: "\f098";
650 | }
651 | .wi-moon-4:before {
652 | content: "\f099";
653 | }
654 | .wi-moon-5:before {
655 | content: "\f09a";
656 | }
657 | .wi-moon-6:before {
658 | content: "\f09b";
659 | }
660 | .wi-moon-7:before {
661 | content: "\f09c";
662 | }
663 | .wi-moon-8:before {
664 | content: "\f09d";
665 | }
666 | .wi-moon-9:before {
667 | content: "\f09e";
668 | }
669 | .wi-moon-10:before {
670 | content: "\f09f";
671 | }
672 | .wi-moon-11:before {
673 | content: "\f0a0";
674 | }
675 | .wi-moon-12:before {
676 | content: "\f0a1";
677 | }
678 | .wi-moon-13:before {
679 | content: "\f0a2";
680 | }
681 | .wi-moon-14:before {
682 | content: "\f0a3";
683 | }
684 | .wi-moon-15:before {
685 | content: "\f0a4";
686 | }
687 | .wi-moon-16:before {
688 | content: "\f0a5";
689 | }
690 | .wi-moon-17:before {
691 | content: "\f0a6";
692 | }
693 | .wi-moon-18:before {
694 | content: "\f0a7";
695 | }
696 | .wi-moon-19:before {
697 | content: "\f0a8";
698 | }
699 | .wi-moon-20:before {
700 | content: "\f0a9";
701 | }
702 | .wi-moon-21:before {
703 | content: "\f0aa";
704 | }
705 | .wi-moon-22:before {
706 | content: "\f0ab";
707 | }
708 | .wi-moon-23:before {
709 | content: "\f0ac";
710 | }
711 | .wi-moon-24:before {
712 | content: "\f0ad";
713 | }
714 | .wi-moon-25:before {
715 | content: "\f0ae";
716 | }
717 | .wi-moon-26:before {
718 | content: "\f0af";
719 | }
720 | .wi-moon-27:before {
721 | content: "\f0b0";
722 | }
723 | .wi-time-1:before {
724 | content: "\f08a";
725 | }
726 | .wi-time-2:before {
727 | content: "\f08b";
728 | }
729 | .wi-time-3:before {
730 | content: "\f08c";
731 | }
732 | .wi-time-4:before {
733 | content: "\f08d";
734 | }
735 | .wi-time-5:before {
736 | content: "\f08e";
737 | }
738 | .wi-time-6:before {
739 | content: "\f08f";
740 | }
741 | .wi-time-7:before {
742 | content: "\f090";
743 | }
744 | .wi-time-8:before {
745 | content: "\f091";
746 | }
747 | .wi-time-9:before {
748 | content: "\f092";
749 | }
750 | .wi-time-10:before {
751 | content: "\f093";
752 | }
753 | .wi-time-11:before {
754 | content: "\f094";
755 | }
756 | .wi-time-12:before {
757 | content: "\f089";
758 | }
759 | .wi-direction-up:before {
760 | content: "\f058";
761 | }
762 | .wi-direction-up-right:before {
763 | content: "\f057";
764 | }
765 | .wi-direction-right:before {
766 | content: "\f04d";
767 | }
768 | .wi-direction-down-right:before {
769 | content: "\f088";
770 | }
771 | .wi-direction-down:before {
772 | content: "\f044";
773 | }
774 | .wi-direction-down-left:before {
775 | content: "\f043";
776 | }
777 | .wi-direction-left:before {
778 | content: "\f048";
779 | }
780 | .wi-direction-up-left:before {
781 | content: "\f087";
782 | }
783 | .wi-wind-beaufort-0:before {
784 | content: "\f0b7";
785 | }
786 | .wi-wind-beaufort-1:before {
787 | content: "\f0b8";
788 | }
789 | .wi-wind-beaufort-2:before {
790 | content: "\f0b9";
791 | }
792 | .wi-wind-beaufort-3:before {
793 | content: "\f0ba";
794 | }
795 | .wi-wind-beaufort-4:before {
796 | content: "\f0bb";
797 | }
798 | .wi-wind-beaufort-5:before {
799 | content: "\f0bc";
800 | }
801 | .wi-wind-beaufort-6:before {
802 | content: "\f0bd";
803 | }
804 | .wi-wind-beaufort-7:before {
805 | content: "\f0be";
806 | }
807 | .wi-wind-beaufort-8:before {
808 | content: "\f0bf";
809 | }
810 | .wi-wind-beaufort-9:before {
811 | content: "\f0c0";
812 | }
813 | .wi-wind-beaufort-10:before {
814 | content: "\f0c1";
815 | }
816 | .wi-wind-beaufort-11:before {
817 | content: "\f0c2";
818 | }
819 | .wi-wind-beaufort-12:before {
820 | content: "\f0c3";
821 | }
822 | .wi-yahoo-0:before {
823 | content: "\f056";
824 | }
825 | .wi-yahoo-1:before {
826 | content: "\f00e";
827 | }
828 | .wi-yahoo-2:before {
829 | content: "\f073";
830 | }
831 | .wi-yahoo-3:before {
832 | content: "\f01e";
833 | }
834 | .wi-yahoo-4:before {
835 | content: "\f01e";
836 | }
837 | .wi-yahoo-5:before {
838 | content: "\f017";
839 | }
840 | .wi-yahoo-6:before {
841 | content: "\f017";
842 | }
843 | .wi-yahoo-7:before {
844 | content: "\f017";
845 | }
846 | .wi-yahoo-8:before {
847 | content: "\f015";
848 | }
849 | .wi-yahoo-9:before {
850 | content: "\f01a";
851 | }
852 | .wi-yahoo-10:before {
853 | content: "\f015";
854 | }
855 | .wi-yahoo-11:before {
856 | content: "\f01a";
857 | }
858 | .wi-yahoo-12:before {
859 | content: "\f01a";
860 | }
861 | .wi-yahoo-13:before {
862 | content: "\f01b";
863 | }
864 | .wi-yahoo-14:before {
865 | content: "\f00a";
866 | }
867 | .wi-yahoo-15:before {
868 | content: "\f064";
869 | }
870 | .wi-yahoo-16:before {
871 | content: "\f01b";
872 | }
873 | .wi-yahoo-17:before {
874 | content: "\f015";
875 | }
876 | .wi-yahoo-18:before {
877 | content: "\f017";
878 | }
879 | .wi-yahoo-19:before {
880 | content: "\f063";
881 | }
882 | .wi-yahoo-20:before {
883 | content: "\f014";
884 | }
885 | .wi-yahoo-21:before {
886 | content: "\f021";
887 | }
888 | .wi-yahoo-22:before {
889 | content: "\f062";
890 | }
891 | .wi-yahoo-23:before {
892 | content: "\f050";
893 | }
894 | .wi-yahoo-24:before {
895 | content: "\f050";
896 | }
897 | .wi-yahoo-25:before {
898 | content: "\f076";
899 | }
900 | .wi-yahoo-26:before {
901 | content: "\f013";
902 | }
903 | .wi-yahoo-27:before {
904 | content: "\f031";
905 | }
906 | .wi-yahoo-28:before {
907 | content: "\f002";
908 | }
909 | .wi-yahoo-29:before {
910 | content: "\f031";
911 | }
912 | .wi-yahoo-30:before {
913 | content: "\f002";
914 | }
915 | .wi-yahoo-31:before {
916 | content: "\f02e";
917 | }
918 | .wi-yahoo-32:before {
919 | content: "\f00d";
920 | }
921 | .wi-yahoo-33:before {
922 | content: "\f083";
923 | }
924 | .wi-yahoo-34:before {
925 | content: "\f00c";
926 | }
927 | .wi-yahoo-35:before {
928 | content: "\f017";
929 | }
930 | .wi-yahoo-36:before {
931 | content: "\f072";
932 | }
933 | .wi-yahoo-37:before {
934 | content: "\f00e";
935 | }
936 | .wi-yahoo-38:before {
937 | content: "\f00e";
938 | }
939 | .wi-yahoo-39:before {
940 | content: "\f00e";
941 | }
942 | .wi-yahoo-40:before {
943 | content: "\f01a";
944 | }
945 | .wi-yahoo-41:before {
946 | content: "\f064";
947 | }
948 | .wi-yahoo-42:before {
949 | content: "\f01b";
950 | }
951 | .wi-yahoo-43:before {
952 | content: "\f064";
953 | }
954 | .wi-yahoo-44:before {
955 | content: "\f00c";
956 | }
957 | .wi-yahoo-45:before {
958 | content: "\f00e";
959 | }
960 | .wi-yahoo-46:before {
961 | content: "\f01b";
962 | }
963 | .wi-yahoo-47:before {
964 | content: "\f00e";
965 | }
966 | .wi-yahoo-3200:before {
967 | content: "\f077";
968 | }
969 | .wi-forecast-io-clear-day:before {
970 | content: "\f00d";
971 | }
972 | .wi-forecast-io-clear-night:before {
973 | content: "\f02e";
974 | }
975 | .wi-forecast-io-rain:before {
976 | content: "\f019";
977 | }
978 | .wi-forecast-io-snow:before {
979 | content: "\f01b";
980 | }
981 | .wi-forecast-io-sleet:before {
982 | content: "\f0b5";
983 | }
984 | .wi-forecast-io-wind:before {
985 | content: "\f050";
986 | }
987 | .wi-forecast-io-fog:before {
988 | content: "\f014";
989 | }
990 | .wi-forecast-io-cloudy:before {
991 | content: "\f013";
992 | }
993 | .wi-forecast-io-partly-cloudy-day:before {
994 | content: "\f002";
995 | }
996 | .wi-forecast-io-partly-cloudy-night:before {
997 | content: "\f031";
998 | }
999 | .wi-forecast-io-hail:before {
1000 | content: "\f015";
1001 | }
1002 | .wi-forecast-io-thunderstorm:before {
1003 | content: "\f01e";
1004 | }
1005 | .wi-forecast-io-tornado:before {
1006 | content: "\f056";
1007 | }
1008 | .wi-wmo4680-0:before,
1009 | .wi-wmo4680-00:before {
1010 | content: "\f055";
1011 | }
1012 | .wi-wmo4680-1:before,
1013 | .wi-wmo4680-01:before {
1014 | content: "\f013";
1015 | }
1016 | .wi-wmo4680-2:before,
1017 | .wi-wmo4680-02:before {
1018 | content: "\f055";
1019 | }
1020 | .wi-wmo4680-3:before,
1021 | .wi-wmo4680-03:before {
1022 | content: "\f013";
1023 | }
1024 | .wi-wmo4680-4:before,
1025 | .wi-wmo4680-04:before {
1026 | content: "\f014";
1027 | }
1028 | .wi-wmo4680-5:before,
1029 | .wi-wmo4680-05:before {
1030 | content: "\f014";
1031 | }
1032 | .wi-wmo4680-10:before {
1033 | content: "\f014";
1034 | }
1035 | .wi-wmo4680-11:before {
1036 | content: "\f014";
1037 | }
1038 | .wi-wmo4680-12:before {
1039 | content: "\f016";
1040 | }
1041 | .wi-wmo4680-18:before {
1042 | content: "\f050";
1043 | }
1044 | .wi-wmo4680-20:before {
1045 | content: "\f014";
1046 | }
1047 | .wi-wmo4680-21:before {
1048 | content: "\f017";
1049 | }
1050 | .wi-wmo4680-22:before {
1051 | content: "\f017";
1052 | }
1053 | .wi-wmo4680-23:before {
1054 | content: "\f019";
1055 | }
1056 | .wi-wmo4680-24:before {
1057 | content: "\f01b";
1058 | }
1059 | .wi-wmo4680-25:before {
1060 | content: "\f015";
1061 | }
1062 | .wi-wmo4680-26:before {
1063 | content: "\f01e";
1064 | }
1065 | .wi-wmo4680-27:before {
1066 | content: "\f063";
1067 | }
1068 | .wi-wmo4680-28:before {
1069 | content: "\f063";
1070 | }
1071 | .wi-wmo4680-29:before {
1072 | content: "\f063";
1073 | }
1074 | .wi-wmo4680-30:before {
1075 | content: "\f014";
1076 | }
1077 | .wi-wmo4680-31:before {
1078 | content: "\f014";
1079 | }
1080 | .wi-wmo4680-32:before {
1081 | content: "\f014";
1082 | }
1083 | .wi-wmo4680-33:before {
1084 | content: "\f014";
1085 | }
1086 | .wi-wmo4680-34:before {
1087 | content: "\f014";
1088 | }
1089 | .wi-wmo4680-35:before {
1090 | content: "\f014";
1091 | }
1092 | .wi-wmo4680-40:before {
1093 | content: "\f017";
1094 | }
1095 | .wi-wmo4680-41:before {
1096 | content: "\f01c";
1097 | }
1098 | .wi-wmo4680-42:before {
1099 | content: "\f019";
1100 | }
1101 | .wi-wmo4680-43:before {
1102 | content: "\f01c";
1103 | }
1104 | .wi-wmo4680-44:before {
1105 | content: "\f019";
1106 | }
1107 | .wi-wmo4680-45:before {
1108 | content: "\f015";
1109 | }
1110 | .wi-wmo4680-46:before {
1111 | content: "\f015";
1112 | }
1113 | .wi-wmo4680-47:before {
1114 | content: "\f01b";
1115 | }
1116 | .wi-wmo4680-48:before {
1117 | content: "\f01b";
1118 | }
1119 | .wi-wmo4680-50:before {
1120 | content: "\f01c";
1121 | }
1122 | .wi-wmo4680-51:before {
1123 | content: "\f01c";
1124 | }
1125 | .wi-wmo4680-52:before {
1126 | content: "\f019";
1127 | }
1128 | .wi-wmo4680-53:before {
1129 | content: "\f019";
1130 | }
1131 | .wi-wmo4680-54:before {
1132 | content: "\f076";
1133 | }
1134 | .wi-wmo4680-55:before {
1135 | content: "\f076";
1136 | }
1137 | .wi-wmo4680-56:before {
1138 | content: "\f076";
1139 | }
1140 | .wi-wmo4680-57:before {
1141 | content: "\f01c";
1142 | }
1143 | .wi-wmo4680-58:before {
1144 | content: "\f019";
1145 | }
1146 | .wi-wmo4680-60:before {
1147 | content: "\f01c";
1148 | }
1149 | .wi-wmo4680-61:before {
1150 | content: "\f01c";
1151 | }
1152 | .wi-wmo4680-62:before {
1153 | content: "\f019";
1154 | }
1155 | .wi-wmo4680-63:before {
1156 | content: "\f019";
1157 | }
1158 | .wi-wmo4680-64:before {
1159 | content: "\f015";
1160 | }
1161 | .wi-wmo4680-65:before {
1162 | content: "\f015";
1163 | }
1164 | .wi-wmo4680-66:before {
1165 | content: "\f015";
1166 | }
1167 | .wi-wmo4680-67:before {
1168 | content: "\f017";
1169 | }
1170 | .wi-wmo4680-68:before {
1171 | content: "\f017";
1172 | }
1173 | .wi-wmo4680-70:before {
1174 | content: "\f01b";
1175 | }
1176 | .wi-wmo4680-71:before {
1177 | content: "\f01b";
1178 | }
1179 | .wi-wmo4680-72:before {
1180 | content: "\f01b";
1181 | }
1182 | .wi-wmo4680-73:before {
1183 | content: "\f01b";
1184 | }
1185 | .wi-wmo4680-74:before {
1186 | content: "\f076";
1187 | }
1188 | .wi-wmo4680-75:before {
1189 | content: "\f076";
1190 | }
1191 | .wi-wmo4680-76:before {
1192 | content: "\f076";
1193 | }
1194 | .wi-wmo4680-77:before {
1195 | content: "\f01b";
1196 | }
1197 | .wi-wmo4680-78:before {
1198 | content: "\f076";
1199 | }
1200 | .wi-wmo4680-80:before {
1201 | content: "\f019";
1202 | }
1203 | .wi-wmo4680-81:before {
1204 | content: "\f01c";
1205 | }
1206 | .wi-wmo4680-82:before {
1207 | content: "\f019";
1208 | }
1209 | .wi-wmo4680-83:before {
1210 | content: "\f019";
1211 | }
1212 | .wi-wmo4680-84:before {
1213 | content: "\f01d";
1214 | }
1215 | .wi-wmo4680-85:before {
1216 | content: "\f017";
1217 | }
1218 | .wi-wmo4680-86:before {
1219 | content: "\f017";
1220 | }
1221 | .wi-wmo4680-87:before {
1222 | content: "\f017";
1223 | }
1224 | .wi-wmo4680-89:before {
1225 | content: "\f015";
1226 | }
1227 | .wi-wmo4680-90:before {
1228 | content: "\f016";
1229 | }
1230 | .wi-wmo4680-91:before {
1231 | content: "\f01d";
1232 | }
1233 | .wi-wmo4680-92:before {
1234 | content: "\f01e";
1235 | }
1236 | .wi-wmo4680-93:before {
1237 | content: "\f01e";
1238 | }
1239 | .wi-wmo4680-94:before {
1240 | content: "\f016";
1241 | }
1242 | .wi-wmo4680-95:before {
1243 | content: "\f01e";
1244 | }
1245 | .wi-wmo4680-96:before {
1246 | content: "\f01e";
1247 | }
1248 | .wi-wmo4680-99:before {
1249 | content: "\f056";
1250 | }
1251 | .wi-owm-200:before {
1252 | content: "\f01e";
1253 | }
1254 | .wi-owm-201:before {
1255 | content: "\f01e";
1256 | }
1257 | .wi-owm-202:before {
1258 | content: "\f01e";
1259 | }
1260 | .wi-owm-210:before {
1261 | content: "\f016";
1262 | }
1263 | .wi-owm-211:before {
1264 | content: "\f016";
1265 | }
1266 | .wi-owm-212:before {
1267 | content: "\f016";
1268 | }
1269 | .wi-owm-221:before {
1270 | content: "\f016";
1271 | }
1272 | .wi-owm-230:before {
1273 | content: "\f01e";
1274 | }
1275 | .wi-owm-231:before {
1276 | content: "\f01e";
1277 | }
1278 | .wi-owm-232:before {
1279 | content: "\f01e";
1280 | }
1281 | .wi-owm-300:before {
1282 | content: "\f01c";
1283 | }
1284 | .wi-owm-301:before {
1285 | content: "\f01c";
1286 | }
1287 | .wi-owm-302:before {
1288 | content: "\f019";
1289 | }
1290 | .wi-owm-310:before {
1291 | content: "\f017";
1292 | }
1293 | .wi-owm-311:before {
1294 | content: "\f019";
1295 | }
1296 | .wi-owm-312:before {
1297 | content: "\f019";
1298 | }
1299 | .wi-owm-313:before {
1300 | content: "\f01a";
1301 | }
1302 | .wi-owm-314:before {
1303 | content: "\f019";
1304 | }
1305 | .wi-owm-321:before {
1306 | content: "\f01c";
1307 | }
1308 | .wi-owm-500:before {
1309 | content: "\f01c";
1310 | }
1311 | .wi-owm-501:before {
1312 | content: "\f019";
1313 | }
1314 | .wi-owm-502:before {
1315 | content: "\f019";
1316 | }
1317 | .wi-owm-503:before {
1318 | content: "\f019";
1319 | }
1320 | .wi-owm-504:before {
1321 | content: "\f019";
1322 | }
1323 | .wi-owm-511:before {
1324 | content: "\f017";
1325 | }
1326 | .wi-owm-520:before {
1327 | content: "\f01a";
1328 | }
1329 | .wi-owm-521:before {
1330 | content: "\f01a";
1331 | }
1332 | .wi-owm-522:before {
1333 | content: "\f01a";
1334 | }
1335 | .wi-owm-531:before {
1336 | content: "\f01d";
1337 | }
1338 | .wi-owm-600:before {
1339 | content: "\f01b";
1340 | }
1341 | .wi-owm-601:before {
1342 | content: "\f01b";
1343 | }
1344 | .wi-owm-602:before {
1345 | content: "\f0b5";
1346 | }
1347 | .wi-owm-611:before {
1348 | content: "\f017";
1349 | }
1350 | .wi-owm-612:before {
1351 | content: "\f017";
1352 | }
1353 | .wi-owm-615:before {
1354 | content: "\f017";
1355 | }
1356 | .wi-owm-616:before {
1357 | content: "\f017";
1358 | }
1359 | .wi-owm-620:before {
1360 | content: "\f017";
1361 | }
1362 | .wi-owm-621:before {
1363 | content: "\f01b";
1364 | }
1365 | .wi-owm-622:before {
1366 | content: "\f01b";
1367 | }
1368 | .wi-owm-701:before {
1369 | content: "\f01a";
1370 | }
1371 | .wi-owm-711:before {
1372 | content: "\f062";
1373 | }
1374 | .wi-owm-721:before {
1375 | content: "\f0b6";
1376 | }
1377 | .wi-owm-731:before {
1378 | content: "\f063";
1379 | }
1380 | .wi-owm-741:before {
1381 | content: "\f014";
1382 | }
1383 | .wi-owm-761:before {
1384 | content: "\f063";
1385 | }
1386 | .wi-owm-762:before {
1387 | content: "\f063";
1388 | }
1389 | .wi-owm-771:before {
1390 | content: "\f011";
1391 | }
1392 | .wi-owm-781:before {
1393 | content: "\f056";
1394 | }
1395 | .wi-owm-800:before {
1396 | content: "\f00d";
1397 | }
1398 | .wi-owm-801:before {
1399 | content: "\f011";
1400 | }
1401 | .wi-owm-802:before {
1402 | content: "\f011";
1403 | }
1404 | .wi-owm-803:before {
1405 | content: "\f012";
1406 | }
1407 | .wi-owm-804:before {
1408 | content: "\f013";
1409 | }
1410 | .wi-owm-900:before {
1411 | content: "\f056";
1412 | }
1413 | .wi-owm-901:before {
1414 | content: "\f01d";
1415 | }
1416 | .wi-owm-902:before {
1417 | content: "\f073";
1418 | }
1419 | .wi-owm-903:before {
1420 | content: "\f076";
1421 | }
1422 | .wi-owm-904:before {
1423 | content: "\f072";
1424 | }
1425 | .wi-owm-905:before {
1426 | content: "\f021";
1427 | }
1428 | .wi-owm-906:before {
1429 | content: "\f015";
1430 | }
1431 | .wi-owm-957:before {
1432 | content: "\f050";
1433 | }
1434 | .wi-owm-day-200:before {
1435 | content: "\f010";
1436 | }
1437 | .wi-owm-day-201:before {
1438 | content: "\f010";
1439 | }
1440 | .wi-owm-day-202:before {
1441 | content: "\f010";
1442 | }
1443 | .wi-owm-day-210:before {
1444 | content: "\f005";
1445 | }
1446 | .wi-owm-day-211:before {
1447 | content: "\f005";
1448 | }
1449 | .wi-owm-day-212:before {
1450 | content: "\f005";
1451 | }
1452 | .wi-owm-day-221:before {
1453 | content: "\f005";
1454 | }
1455 | .wi-owm-day-230:before {
1456 | content: "\f010";
1457 | }
1458 | .wi-owm-day-231:before {
1459 | content: "\f010";
1460 | }
1461 | .wi-owm-day-232:before {
1462 | content: "\f010";
1463 | }
1464 | .wi-owm-day-300:before {
1465 | content: "\f00b";
1466 | }
1467 | .wi-owm-day-301:before {
1468 | content: "\f00b";
1469 | }
1470 | .wi-owm-day-302:before {
1471 | content: "\f008";
1472 | }
1473 | .wi-owm-day-310:before {
1474 | content: "\f008";
1475 | }
1476 | .wi-owm-day-311:before {
1477 | content: "\f008";
1478 | }
1479 | .wi-owm-day-312:before {
1480 | content: "\f008";
1481 | }
1482 | .wi-owm-day-313:before {
1483 | content: "\f008";
1484 | }
1485 | .wi-owm-day-314:before {
1486 | content: "\f008";
1487 | }
1488 | .wi-owm-day-321:before {
1489 | content: "\f00b";
1490 | }
1491 | .wi-owm-day-500:before {
1492 | content: "\f00b";
1493 | }
1494 | .wi-owm-day-501:before {
1495 | content: "\f008";
1496 | }
1497 | .wi-owm-day-502:before {
1498 | content: "\f008";
1499 | }
1500 | .wi-owm-day-503:before {
1501 | content: "\f008";
1502 | }
1503 | .wi-owm-day-504:before {
1504 | content: "\f008";
1505 | }
1506 | .wi-owm-day-511:before {
1507 | content: "\f006";
1508 | }
1509 | .wi-owm-day-520:before {
1510 | content: "\f009";
1511 | }
1512 | .wi-owm-day-521:before {
1513 | content: "\f009";
1514 | }
1515 | .wi-owm-day-522:before {
1516 | content: "\f009";
1517 | }
1518 | .wi-owm-day-531:before {
1519 | content: "\f00e";
1520 | }
1521 | .wi-owm-day-600:before {
1522 | content: "\f00a";
1523 | }
1524 | .wi-owm-day-601:before {
1525 | content: "\f0b2";
1526 | }
1527 | .wi-owm-day-602:before {
1528 | content: "\f00a";
1529 | }
1530 | .wi-owm-day-611:before {
1531 | content: "\f006";
1532 | }
1533 | .wi-owm-day-612:before {
1534 | content: "\f006";
1535 | }
1536 | .wi-owm-day-615:before {
1537 | content: "\f006";
1538 | }
1539 | .wi-owm-day-616:before {
1540 | content: "\f006";
1541 | }
1542 | .wi-owm-day-620:before {
1543 | content: "\f006";
1544 | }
1545 | .wi-owm-day-621:before {
1546 | content: "\f00a";
1547 | }
1548 | .wi-owm-day-622:before {
1549 | content: "\f00a";
1550 | }
1551 | .wi-owm-day-701:before {
1552 | content: "\f009";
1553 | }
1554 | .wi-owm-day-711:before {
1555 | content: "\f062";
1556 | }
1557 | .wi-owm-day-721:before {
1558 | content: "\f0b6";
1559 | }
1560 | .wi-owm-day-731:before {
1561 | content: "\f063";
1562 | }
1563 | .wi-owm-day-741:before {
1564 | content: "\f003";
1565 | }
1566 | .wi-owm-day-761:before {
1567 | content: "\f063";
1568 | }
1569 | .wi-owm-day-762:before {
1570 | content: "\f063";
1571 | }
1572 | .wi-owm-day-781:before {
1573 | content: "\f056";
1574 | }
1575 | .wi-owm-day-800:before {
1576 | content: "\f00d";
1577 | }
1578 | .wi-owm-day-801:before {
1579 | content: "\f000";
1580 | }
1581 | .wi-owm-day-802:before {
1582 | content: "\f000";
1583 | }
1584 | .wi-owm-day-803:before {
1585 | content: "\f000";
1586 | }
1587 | .wi-owm-day-804:before {
1588 | content: "\f00c";
1589 | }
1590 | .wi-owm-day-900:before {
1591 | content: "\f056";
1592 | }
1593 | .wi-owm-day-902:before {
1594 | content: "\f073";
1595 | }
1596 | .wi-owm-day-903:before {
1597 | content: "\f076";
1598 | }
1599 | .wi-owm-day-904:before {
1600 | content: "\f072";
1601 | }
1602 | .wi-owm-day-906:before {
1603 | content: "\f004";
1604 | }
1605 | .wi-owm-day-957:before {
1606 | content: "\f050";
1607 | }
1608 | .wi-owm-night-200:before {
1609 | content: "\f02d";
1610 | }
1611 | .wi-owm-night-201:before {
1612 | content: "\f02d";
1613 | }
1614 | .wi-owm-night-202:before {
1615 | content: "\f02d";
1616 | }
1617 | .wi-owm-night-210:before {
1618 | content: "\f025";
1619 | }
1620 | .wi-owm-night-211:before {
1621 | content: "\f025";
1622 | }
1623 | .wi-owm-night-212:before {
1624 | content: "\f025";
1625 | }
1626 | .wi-owm-night-221:before {
1627 | content: "\f025";
1628 | }
1629 | .wi-owm-night-230:before {
1630 | content: "\f02d";
1631 | }
1632 | .wi-owm-night-231:before {
1633 | content: "\f02d";
1634 | }
1635 | .wi-owm-night-232:before {
1636 | content: "\f02d";
1637 | }
1638 | .wi-owm-night-300:before {
1639 | content: "\f02b";
1640 | }
1641 | .wi-owm-night-301:before {
1642 | content: "\f02b";
1643 | }
1644 | .wi-owm-night-302:before {
1645 | content: "\f028";
1646 | }
1647 | .wi-owm-night-310:before {
1648 | content: "\f028";
1649 | }
1650 | .wi-owm-night-311:before {
1651 | content: "\f028";
1652 | }
1653 | .wi-owm-night-312:before {
1654 | content: "\f028";
1655 | }
1656 | .wi-owm-night-313:before {
1657 | content: "\f028";
1658 | }
1659 | .wi-owm-night-314:before {
1660 | content: "\f028";
1661 | }
1662 | .wi-owm-night-321:before {
1663 | content: "\f02b";
1664 | }
1665 | .wi-owm-night-500:before {
1666 | content: "\f02b";
1667 | }
1668 | .wi-owm-night-501:before {
1669 | content: "\f028";
1670 | }
1671 | .wi-owm-night-502:before {
1672 | content: "\f028";
1673 | }
1674 | .wi-owm-night-503:before {
1675 | content: "\f028";
1676 | }
1677 | .wi-owm-night-504:before {
1678 | content: "\f028";
1679 | }
1680 | .wi-owm-night-511:before {
1681 | content: "\f026";
1682 | }
1683 | .wi-owm-night-520:before {
1684 | content: "\f029";
1685 | }
1686 | .wi-owm-night-521:before {
1687 | content: "\f029";
1688 | }
1689 | .wi-owm-night-522:before {
1690 | content: "\f029";
1691 | }
1692 | .wi-owm-night-531:before {
1693 | content: "\f02c";
1694 | }
1695 | .wi-owm-night-600:before {
1696 | content: "\f02a";
1697 | }
1698 | .wi-owm-night-601:before {
1699 | content: "\f0b4";
1700 | }
1701 | .wi-owm-night-602:before {
1702 | content: "\f02a";
1703 | }
1704 | .wi-owm-night-611:before {
1705 | content: "\f026";
1706 | }
1707 | .wi-owm-night-612:before {
1708 | content: "\f026";
1709 | }
1710 | .wi-owm-night-615:before {
1711 | content: "\f026";
1712 | }
1713 | .wi-owm-night-616:before {
1714 | content: "\f026";
1715 | }
1716 | .wi-owm-night-620:before {
1717 | content: "\f026";
1718 | }
1719 | .wi-owm-night-621:before {
1720 | content: "\f02a";
1721 | }
1722 | .wi-owm-night-622:before {
1723 | content: "\f02a";
1724 | }
1725 | .wi-owm-night-701:before {
1726 | content: "\f029";
1727 | }
1728 | .wi-owm-night-711:before {
1729 | content: "\f062";
1730 | }
1731 | .wi-owm-night-721:before {
1732 | content: "\f0b6";
1733 | }
1734 | .wi-owm-night-731:before {
1735 | content: "\f063";
1736 | }
1737 | .wi-owm-night-741:before {
1738 | content: "\f04a";
1739 | }
1740 | .wi-owm-night-761:before {
1741 | content: "\f063";
1742 | }
1743 | .wi-owm-night-762:before {
1744 | content: "\f063";
1745 | }
1746 | .wi-owm-night-781:before {
1747 | content: "\f056";
1748 | }
1749 | .wi-owm-night-800:before {
1750 | content: "\f02e";
1751 | }
1752 | .wi-owm-night-801:before {
1753 | content: "\f022";
1754 | }
1755 | .wi-owm-night-802:before {
1756 | content: "\f022";
1757 | }
1758 | .wi-owm-night-803:before {
1759 | content: "\f022";
1760 | }
1761 | .wi-owm-night-804:before {
1762 | content: "\f086";
1763 | }
1764 | .wi-owm-night-900:before {
1765 | content: "\f056";
1766 | }
1767 | .wi-owm-night-902:before {
1768 | content: "\f073";
1769 | }
1770 | .wi-owm-night-903:before {
1771 | content: "\f076";
1772 | }
1773 | .wi-owm-night-904:before {
1774 | content: "\f072";
1775 | }
1776 | .wi-owm-night-906:before {
1777 | content: "\f024";
1778 | }
1779 | .wi-owm-night-957:before {
1780 | content: "\f050";
1781 | }
1782 | .wi-wu-chanceflurries:before {
1783 | content: "\f064";
1784 | }
1785 | .wi-wu-chancerain:before {
1786 | content: "\f019";
1787 | }
1788 | .wi-wu-chancesleat:before {
1789 | content: "\f0b5";
1790 | }
1791 | .wi-wu-chancesnow:before {
1792 | content: "\f01b";
1793 | }
1794 | .wi-wu-chancetstorms:before {
1795 | content: "\f01e";
1796 | }
1797 | .wi-wu-clear:before {
1798 | content: "\f00d";
1799 | }
1800 | .wi-wu-cloudy:before {
1801 | content: "\f002";
1802 | }
1803 | .wi-wu-flurries:before {
1804 | content: "\f064";
1805 | }
1806 | .wi-wu-hazy:before {
1807 | content: "\f0b6";
1808 | }
1809 | .wi-wu-mostlycloudy:before {
1810 | content: "\f002";
1811 | }
1812 | .wi-wu-mostlysunny:before {
1813 | content: "\f00d";
1814 | }
1815 | .wi-wu-partlycloudy:before {
1816 | content: "\f002";
1817 | }
1818 | .wi-wu-partlysunny:before {
1819 | content: "\f00d";
1820 | }
1821 | .wi-wu-rain:before {
1822 | content: "\f01a";
1823 | }
1824 | .wi-wu-sleat:before {
1825 | content: "\f0b5";
1826 | }
1827 | .wi-wu-snow:before {
1828 | content: "\f01b";
1829 | }
1830 | .wi-wu-sunny:before {
1831 | content: "\f00d";
1832 | }
1833 | .wi-wu-tstorms:before {
1834 | content: "\f01e";
1835 | }
1836 | .wi-wu-unknown:before {
1837 | content: "\f00d";
1838 | }
1839 |
--------------------------------------------------------------------------------
/icons/css/weather-icons.min.css:
--------------------------------------------------------------------------------
1 | /*!
2 | * Weather Icons 2.0
3 | * Updated August 1, 2015
4 | * Weather themed icons for Bootstrap
5 | * Author - Erik Flowers - erik@helloerik.com
6 | * Email: erik@helloerik.com
7 | * Twitter: http://twitter.com/Erik_UX
8 | * ------------------------------------------------------------------------------
9 | * Maintained at http://erikflowers.github.io/weather-icons
10 | *
11 | * License
12 | * ------------------------------------------------------------------------------
13 | * - Font licensed under SIL OFL 1.1 -
14 | * http://scripts.sil.org/OFL
15 | * - CSS, SCSS and LESS are licensed under MIT License -
16 | * http://opensource.org/licenses/mit-license.html
17 | * - Documentation licensed under CC BY 3.0 -
18 | * http://creativecommons.org/licenses/by/3.0/
19 | * - Inspired by and works great as a companion with Font Awesome
20 | * "Font Awesome by Dave Gandy - http://fontawesome.io"
21 | *//*!
22 | * Weather Icons 2.0
23 | * Updated August 1, 2015
24 | * Weather themed icons for Bootstrap
25 | * Author - Erik Flowers - erik@helloerik.com
26 | * Email: erik@helloerik.com
27 | * Twitter: http://twitter.com/Erik_UX
28 | * ------------------------------------------------------------------------------
29 | * Maintained at http://erikflowers.github.io/weather-icons
30 | *
31 | * License
32 | * ------------------------------------------------------------------------------
33 | * - Font licensed under SIL OFL 1.1 -
34 | * http://scripts.sil.org/OFL
35 | * - CSS, SCSS and LESS are licensed under MIT License -
36 | * http://opensource.org/licenses/mit-license.html
37 | * - Documentation licensed under CC BY 3.0 -
38 | * http://creativecommons.org/licenses/by/3.0/
39 | * - Inspired by and works great as a companion with Font Awesome
40 | * "Font Awesome by Dave Gandy - http://fontawesome.io"
41 | */@font-face{font-family:weathericons;src:url(../font/weathericons-regular-webfont.eot);src:url(../font/weathericons-regular-webfont.eot?#iefix) format('embedded-opentype'),url(../font/weathericons-regular-webfont.woff2) format('woff2'),url(../font/weathericons-regular-webfont.woff) format('woff'),url(../font/weathericons-regular-webfont.ttf) format('truetype'),url(../font/weathericons-regular-webfont.svg#weather_iconsregular) format('svg');font-weight:400;font-style:normal}.wi{display:inline-block;font-family:weathericons;font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.wi-fw{text-align:center;width:1.4em}.wi-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.wi-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.wi-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.wi-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.wi-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}.wi-day-sunny:before{content:"\f00d"}.wi-day-cloudy:before{content:"\f002"}.wi-day-cloudy-gusts:before{content:"\f000"}.wi-day-cloudy-windy:before{content:"\f001"}.wi-day-fog:before{content:"\f003"}.wi-day-hail:before{content:"\f004"}.wi-day-haze:before{content:"\f0b6"}.wi-day-lightning:before{content:"\f005"}.wi-day-rain:before{content:"\f008"}.wi-day-rain-mix:before{content:"\f006"}.wi-day-rain-wind:before{content:"\f007"}.wi-day-showers:before{content:"\f009"}.wi-day-sleet:before{content:"\f0b2"}.wi-day-sleet-storm:before{content:"\f068"}.wi-day-snow:before{content:"\f00a"}.wi-day-snow-thunderstorm:before{content:"\f06b"}.wi-day-snow-wind:before{content:"\f065"}.wi-day-sprinkle:before{content:"\f00b"}.wi-day-storm-showers:before{content:"\f00e"}.wi-day-sunny-overcast:before{content:"\f00c"}.wi-day-thunderstorm:before{content:"\f010"}.wi-day-windy:before{content:"\f085"}.wi-solar-eclipse:before{content:"\f06e"}.wi-hot:before{content:"\f072"}.wi-day-cloudy-high:before{content:"\f07d"}.wi-day-light-wind:before{content:"\f0c4"}.wi-night-clear:before{content:"\f02e"}.wi-night-alt-cloudy:before{content:"\f086"}.wi-night-alt-cloudy-gusts:before{content:"\f022"}.wi-night-alt-cloudy-windy:before{content:"\f023"}.wi-night-alt-hail:before{content:"\f024"}.wi-night-alt-lightning:before{content:"\f025"}.wi-night-alt-rain:before{content:"\f028"}.wi-night-alt-rain-mix:before{content:"\f026"}.wi-night-alt-rain-wind:before{content:"\f027"}.wi-night-alt-showers:before{content:"\f029"}.wi-night-alt-sleet:before{content:"\f0b4"}.wi-night-alt-sleet-storm:before{content:"\f06a"}.wi-night-alt-snow:before{content:"\f02a"}.wi-night-alt-snow-thunderstorm:before{content:"\f06d"}.wi-night-alt-snow-wind:before{content:"\f067"}.wi-night-alt-sprinkle:before{content:"\f02b"}.wi-night-alt-storm-showers:before{content:"\f02c"}.wi-night-alt-thunderstorm:before{content:"\f02d"}.wi-night-cloudy:before{content:"\f031"}.wi-night-cloudy-gusts:before{content:"\f02f"}.wi-night-cloudy-windy:before{content:"\f030"}.wi-night-fog:before{content:"\f04a"}.wi-night-hail:before{content:"\f032"}.wi-night-lightning:before{content:"\f033"}.wi-night-partly-cloudy:before{content:"\f083"}.wi-night-rain:before{content:"\f036"}.wi-night-rain-mix:before{content:"\f034"}.wi-night-rain-wind:before{content:"\f035"}.wi-night-showers:before{content:"\f037"}.wi-night-sleet:before{content:"\f0b3"}.wi-night-sleet-storm:before{content:"\f069"}.wi-night-snow:before{content:"\f038"}.wi-night-snow-thunderstorm:before{content:"\f06c"}.wi-night-snow-wind:before{content:"\f066"}.wi-night-sprinkle:before{content:"\f039"}.wi-night-storm-showers:before{content:"\f03a"}.wi-night-thunderstorm:before{content:"\f03b"}.wi-lunar-eclipse:before{content:"\f070"}.wi-stars:before{content:"\f077"}.wi-storm-showers:before{content:"\f01d"}.wi-thunderstorm:before{content:"\f01e"}.wi-night-alt-cloudy-high:before{content:"\f07e"}.wi-night-cloudy-high:before{content:"\f080"}.wi-night-alt-partly-cloudy:before{content:"\f081"}.wi-cloud:before{content:"\f041"}.wi-cloudy:before{content:"\f013"}.wi-cloudy-gusts:before{content:"\f011"}.wi-cloudy-windy:before{content:"\f012"}.wi-fog:before{content:"\f014"}.wi-hail:before{content:"\f015"}.wi-rain:before{content:"\f019"}.wi-rain-mix:before{content:"\f017"}.wi-rain-wind:before{content:"\f018"}.wi-showers:before{content:"\f01a"}.wi-sleet:before{content:"\f0b5"}.wi-snow:before{content:"\f01b"}.wi-sprinkle:before{content:"\f01c"}.wi-storm-showers:before{content:"\f01d"}.wi-thunderstorm:before{content:"\f01e"}.wi-snow-wind:before{content:"\f064"}.wi-snow:before{content:"\f01b"}.wi-smog:before{content:"\f074"}.wi-smoke:before{content:"\f062"}.wi-lightning:before{content:"\f016"}.wi-raindrops:before{content:"\f04e"}.wi-raindrop:before{content:"\f078"}.wi-dust:before{content:"\f063"}.wi-snowflake-cold:before{content:"\f076"}.wi-windy:before{content:"\f021"}.wi-strong-wind:before{content:"\f050"}.wi-sandstorm:before{content:"\f082"}.wi-earthquake:before{content:"\f0c6"}.wi-fire:before{content:"\f0c7"}.wi-flood:before{content:"\f07c"}.wi-meteor:before{content:"\f071"}.wi-tsunami:before{content:"\f0c5"}.wi-volcano:before{content:"\f0c8"}.wi-hurricane:before{content:"\f073"}.wi-tornado:before{content:"\f056"}.wi-small-craft-advisory:before{content:"\f0cc"}.wi-gale-warning:before{content:"\f0cd"}.wi-storm-warning:before{content:"\f0ce"}.wi-hurricane-warning:before{content:"\f0cf"}.wi-wind-direction:before{content:"\f0b1"}.wi-alien:before{content:"\f075"}.wi-celsius:before{content:"\f03c"}.wi-fahrenheit:before{content:"\f045"}.wi-degrees:before{content:"\f042"}.wi-thermometer:before{content:"\f055"}.wi-thermometer-exterior:before{content:"\f053"}.wi-thermometer-internal:before{content:"\f054"}.wi-cloud-down:before{content:"\f03d"}.wi-cloud-up:before{content:"\f040"}.wi-cloud-refresh:before{content:"\f03e"}.wi-horizon:before{content:"\f047"}.wi-horizon-alt:before{content:"\f046"}.wi-sunrise:before{content:"\f051"}.wi-sunset:before{content:"\f052"}.wi-moonrise:before{content:"\f0c9"}.wi-moonset:before{content:"\f0ca"}.wi-refresh:before{content:"\f04c"}.wi-refresh-alt:before{content:"\f04b"}.wi-umbrella:before{content:"\f084"}.wi-barometer:before{content:"\f079"}.wi-humidity:before{content:"\f07a"}.wi-na:before{content:"\f07b"}.wi-train:before{content:"\f0cb"}.wi-moon-new:before{content:"\f095"}.wi-moon-waxing-crescent-1:before{content:"\f096"}.wi-moon-waxing-crescent-2:before{content:"\f097"}.wi-moon-waxing-crescent-3:before{content:"\f098"}.wi-moon-waxing-crescent-4:before{content:"\f099"}.wi-moon-waxing-crescent-5:before{content:"\f09a"}.wi-moon-waxing-crescent-6:before{content:"\f09b"}.wi-moon-first-quarter:before{content:"\f09c"}.wi-moon-waxing-gibbous-1:before{content:"\f09d"}.wi-moon-waxing-gibbous-2:before{content:"\f09e"}.wi-moon-waxing-gibbous-3:before{content:"\f09f"}.wi-moon-waxing-gibbous-4:before{content:"\f0a0"}.wi-moon-waxing-gibbous-5:before{content:"\f0a1"}.wi-moon-waxing-gibbous-6:before{content:"\f0a2"}.wi-moon-full:before{content:"\f0a3"}.wi-moon-waning-gibbous-1:before{content:"\f0a4"}.wi-moon-waning-gibbous-2:before{content:"\f0a5"}.wi-moon-waning-gibbous-3:before{content:"\f0a6"}.wi-moon-waning-gibbous-4:before{content:"\f0a7"}.wi-moon-waning-gibbous-5:before{content:"\f0a8"}.wi-moon-waning-gibbous-6:before{content:"\f0a9"}.wi-moon-third-quarter:before{content:"\f0aa"}.wi-moon-waning-crescent-1:before{content:"\f0ab"}.wi-moon-waning-crescent-2:before{content:"\f0ac"}.wi-moon-waning-crescent-3:before{content:"\f0ad"}.wi-moon-waning-crescent-4:before{content:"\f0ae"}.wi-moon-waning-crescent-5:before{content:"\f0af"}.wi-moon-waning-crescent-6:before{content:"\f0b0"}.wi-moon-alt-new:before{content:"\f0eb"}.wi-moon-alt-waxing-crescent-1:before{content:"\f0d0"}.wi-moon-alt-waxing-crescent-2:before{content:"\f0d1"}.wi-moon-alt-waxing-crescent-3:before{content:"\f0d2"}.wi-moon-alt-waxing-crescent-4:before{content:"\f0d3"}.wi-moon-alt-waxing-crescent-5:before{content:"\f0d4"}.wi-moon-alt-waxing-crescent-6:before{content:"\f0d5"}.wi-moon-alt-first-quarter:before{content:"\f0d6"}.wi-moon-alt-waxing-gibbous-1:before{content:"\f0d7"}.wi-moon-alt-waxing-gibbous-2:before{content:"\f0d8"}.wi-moon-alt-waxing-gibbous-3:before{content:"\f0d9"}.wi-moon-alt-waxing-gibbous-4:before{content:"\f0da"}.wi-moon-alt-waxing-gibbous-5:before{content:"\f0db"}.wi-moon-alt-waxing-gibbous-6:before{content:"\f0dc"}.wi-moon-alt-full:before{content:"\f0dd"}.wi-moon-alt-waning-gibbous-1:before{content:"\f0de"}.wi-moon-alt-waning-gibbous-2:before{content:"\f0df"}.wi-moon-alt-waning-gibbous-3:before{content:"\f0e0"}.wi-moon-alt-waning-gibbous-4:before{content:"\f0e1"}.wi-moon-alt-waning-gibbous-5:before{content:"\f0e2"}.wi-moon-alt-waning-gibbous-6:before{content:"\f0e3"}.wi-moon-alt-third-quarter:before{content:"\f0e4"}.wi-moon-alt-waning-crescent-1:before{content:"\f0e5"}.wi-moon-alt-waning-crescent-2:before{content:"\f0e6"}.wi-moon-alt-waning-crescent-3:before{content:"\f0e7"}.wi-moon-alt-waning-crescent-4:before{content:"\f0e8"}.wi-moon-alt-waning-crescent-5:before{content:"\f0e9"}.wi-moon-alt-waning-crescent-6:before{content:"\f0ea"}.wi-moon-0:before{content:"\f095"}.wi-moon-1:before{content:"\f096"}.wi-moon-2:before{content:"\f097"}.wi-moon-3:before{content:"\f098"}.wi-moon-4:before{content:"\f099"}.wi-moon-5:before{content:"\f09a"}.wi-moon-6:before{content:"\f09b"}.wi-moon-7:before{content:"\f09c"}.wi-moon-8:before{content:"\f09d"}.wi-moon-9:before{content:"\f09e"}.wi-moon-10:before{content:"\f09f"}.wi-moon-11:before{content:"\f0a0"}.wi-moon-12:before{content:"\f0a1"}.wi-moon-13:before{content:"\f0a2"}.wi-moon-14:before{content:"\f0a3"}.wi-moon-15:before{content:"\f0a4"}.wi-moon-16:before{content:"\f0a5"}.wi-moon-17:before{content:"\f0a6"}.wi-moon-18:before{content:"\f0a7"}.wi-moon-19:before{content:"\f0a8"}.wi-moon-20:before{content:"\f0a9"}.wi-moon-21:before{content:"\f0aa"}.wi-moon-22:before{content:"\f0ab"}.wi-moon-23:before{content:"\f0ac"}.wi-moon-24:before{content:"\f0ad"}.wi-moon-25:before{content:"\f0ae"}.wi-moon-26:before{content:"\f0af"}.wi-moon-27:before{content:"\f0b0"}.wi-time-1:before{content:"\f08a"}.wi-time-2:before{content:"\f08b"}.wi-time-3:before{content:"\f08c"}.wi-time-4:before{content:"\f08d"}.wi-time-5:before{content:"\f08e"}.wi-time-6:before{content:"\f08f"}.wi-time-7:before{content:"\f090"}.wi-time-8:before{content:"\f091"}.wi-time-9:before{content:"\f092"}.wi-time-10:before{content:"\f093"}.wi-time-11:before{content:"\f094"}.wi-time-12:before{content:"\f089"}.wi-direction-up:before{content:"\f058"}.wi-direction-up-right:before{content:"\f057"}.wi-direction-right:before{content:"\f04d"}.wi-direction-down-right:before{content:"\f088"}.wi-direction-down:before{content:"\f044"}.wi-direction-down-left:before{content:"\f043"}.wi-direction-left:before{content:"\f048"}.wi-direction-up-left:before{content:"\f087"}.wi-wind-beaufort-0:before{content:"\f0b7"}.wi-wind-beaufort-1:before{content:"\f0b8"}.wi-wind-beaufort-2:before{content:"\f0b9"}.wi-wind-beaufort-3:before{content:"\f0ba"}.wi-wind-beaufort-4:before{content:"\f0bb"}.wi-wind-beaufort-5:before{content:"\f0bc"}.wi-wind-beaufort-6:before{content:"\f0bd"}.wi-wind-beaufort-7:before{content:"\f0be"}.wi-wind-beaufort-8:before{content:"\f0bf"}.wi-wind-beaufort-9:before{content:"\f0c0"}.wi-wind-beaufort-10:before{content:"\f0c1"}.wi-wind-beaufort-11:before{content:"\f0c2"}.wi-wind-beaufort-12:before{content:"\f0c3"}.wi-yahoo-0:before{content:"\f056"}.wi-yahoo-1:before{content:"\f00e"}.wi-yahoo-2:before{content:"\f073"}.wi-yahoo-3:before{content:"\f01e"}.wi-yahoo-4:before{content:"\f01e"}.wi-yahoo-5:before{content:"\f017"}.wi-yahoo-6:before{content:"\f017"}.wi-yahoo-7:before{content:"\f017"}.wi-yahoo-8:before{content:"\f015"}.wi-yahoo-9:before{content:"\f01a"}.wi-yahoo-10:before{content:"\f015"}.wi-yahoo-11:before{content:"\f01a"}.wi-yahoo-12:before{content:"\f01a"}.wi-yahoo-13:before{content:"\f01b"}.wi-yahoo-14:before{content:"\f00a"}.wi-yahoo-15:before{content:"\f064"}.wi-yahoo-16:before{content:"\f01b"}.wi-yahoo-17:before{content:"\f015"}.wi-yahoo-18:before{content:"\f017"}.wi-yahoo-19:before{content:"\f063"}.wi-yahoo-20:before{content:"\f014"}.wi-yahoo-21:before{content:"\f021"}.wi-yahoo-22:before{content:"\f062"}.wi-yahoo-23:before{content:"\f050"}.wi-yahoo-24:before{content:"\f050"}.wi-yahoo-25:before{content:"\f076"}.wi-yahoo-26:before{content:"\f013"}.wi-yahoo-27:before{content:"\f031"}.wi-yahoo-28:before{content:"\f002"}.wi-yahoo-29:before{content:"\f031"}.wi-yahoo-30:before{content:"\f002"}.wi-yahoo-31:before{content:"\f02e"}.wi-yahoo-32:before{content:"\f00d"}.wi-yahoo-33:before{content:"\f083"}.wi-yahoo-34:before{content:"\f00c"}.wi-yahoo-35:before{content:"\f017"}.wi-yahoo-36:before{content:"\f072"}.wi-yahoo-37:before{content:"\f00e"}.wi-yahoo-38:before{content:"\f00e"}.wi-yahoo-39:before{content:"\f00e"}.wi-yahoo-40:before{content:"\f01a"}.wi-yahoo-41:before{content:"\f064"}.wi-yahoo-42:before{content:"\f01b"}.wi-yahoo-43:before{content:"\f064"}.wi-yahoo-44:before{content:"\f00c"}.wi-yahoo-45:before{content:"\f00e"}.wi-yahoo-46:before{content:"\f01b"}.wi-yahoo-47:before{content:"\f00e"}.wi-yahoo-3200:before{content:"\f077"}.wi-forecast-io-clear-day:before{content:"\f00d"}.wi-forecast-io-clear-night:before{content:"\f02e"}.wi-forecast-io-rain:before{content:"\f019"}.wi-forecast-io-snow:before{content:"\f01b"}.wi-forecast-io-sleet:before{content:"\f0b5"}.wi-forecast-io-wind:before{content:"\f050"}.wi-forecast-io-fog:before{content:"\f014"}.wi-forecast-io-cloudy:before{content:"\f013"}.wi-forecast-io-partly-cloudy-day:before{content:"\f002"}.wi-forecast-io-partly-cloudy-night:before{content:"\f031"}.wi-forecast-io-hail:before{content:"\f015"}.wi-forecast-io-thunderstorm:before{content:"\f01e"}.wi-forecast-io-tornado:before{content:"\f056"}.wi-wmo4680-00:before,.wi-wmo4680-0:before{content:"\f055"}.wi-wmo4680-01:before,.wi-wmo4680-1:before{content:"\f013"}.wi-wmo4680-02:before,.wi-wmo4680-2:before{content:"\f055"}.wi-wmo4680-03:before,.wi-wmo4680-3:before{content:"\f013"}.wi-wmo4680-04:before,.wi-wmo4680-4:before{content:"\f014"}.wi-wmo4680-05:before,.wi-wmo4680-5:before{content:"\f014"}.wi-wmo4680-10:before{content:"\f014"}.wi-wmo4680-11:before{content:"\f014"}.wi-wmo4680-12:before{content:"\f016"}.wi-wmo4680-18:before{content:"\f050"}.wi-wmo4680-20:before{content:"\f014"}.wi-wmo4680-21:before{content:"\f017"}.wi-wmo4680-22:before{content:"\f017"}.wi-wmo4680-23:before{content:"\f019"}.wi-wmo4680-24:before{content:"\f01b"}.wi-wmo4680-25:before{content:"\f015"}.wi-wmo4680-26:before{content:"\f01e"}.wi-wmo4680-27:before{content:"\f063"}.wi-wmo4680-28:before{content:"\f063"}.wi-wmo4680-29:before{content:"\f063"}.wi-wmo4680-30:before{content:"\f014"}.wi-wmo4680-31:before{content:"\f014"}.wi-wmo4680-32:before{content:"\f014"}.wi-wmo4680-33:before{content:"\f014"}.wi-wmo4680-34:before{content:"\f014"}.wi-wmo4680-35:before{content:"\f014"}.wi-wmo4680-40:before{content:"\f017"}.wi-wmo4680-41:before{content:"\f01c"}.wi-wmo4680-42:before{content:"\f019"}.wi-wmo4680-43:before{content:"\f01c"}.wi-wmo4680-44:before{content:"\f019"}.wi-wmo4680-45:before{content:"\f015"}.wi-wmo4680-46:before{content:"\f015"}.wi-wmo4680-47:before{content:"\f01b"}.wi-wmo4680-48:before{content:"\f01b"}.wi-wmo4680-50:before{content:"\f01c"}.wi-wmo4680-51:before{content:"\f01c"}.wi-wmo4680-52:before{content:"\f019"}.wi-wmo4680-53:before{content:"\f019"}.wi-wmo4680-54:before{content:"\f076"}.wi-wmo4680-55:before{content:"\f076"}.wi-wmo4680-56:before{content:"\f076"}.wi-wmo4680-57:before{content:"\f01c"}.wi-wmo4680-58:before{content:"\f019"}.wi-wmo4680-60:before{content:"\f01c"}.wi-wmo4680-61:before{content:"\f01c"}.wi-wmo4680-62:before{content:"\f019"}.wi-wmo4680-63:before{content:"\f019"}.wi-wmo4680-64:before{content:"\f015"}.wi-wmo4680-65:before{content:"\f015"}.wi-wmo4680-66:before{content:"\f015"}.wi-wmo4680-67:before{content:"\f017"}.wi-wmo4680-68:before{content:"\f017"}.wi-wmo4680-70:before{content:"\f01b"}.wi-wmo4680-71:before{content:"\f01b"}.wi-wmo4680-72:before{content:"\f01b"}.wi-wmo4680-73:before{content:"\f01b"}.wi-wmo4680-74:before{content:"\f076"}.wi-wmo4680-75:before{content:"\f076"}.wi-wmo4680-76:before{content:"\f076"}.wi-wmo4680-77:before{content:"\f01b"}.wi-wmo4680-78:before{content:"\f076"}.wi-wmo4680-80:before{content:"\f019"}.wi-wmo4680-81:before{content:"\f01c"}.wi-wmo4680-82:before{content:"\f019"}.wi-wmo4680-83:before{content:"\f019"}.wi-wmo4680-84:before{content:"\f01d"}.wi-wmo4680-85:before{content:"\f017"}.wi-wmo4680-86:before{content:"\f017"}.wi-wmo4680-87:before{content:"\f017"}.wi-wmo4680-89:before{content:"\f015"}.wi-wmo4680-90:before{content:"\f016"}.wi-wmo4680-91:before{content:"\f01d"}.wi-wmo4680-92:before{content:"\f01e"}.wi-wmo4680-93:before{content:"\f01e"}.wi-wmo4680-94:before{content:"\f016"}.wi-wmo4680-95:before{content:"\f01e"}.wi-wmo4680-96:before{content:"\f01e"}.wi-wmo4680-99:before{content:"\f056"}.wi-owm-200:before{content:"\f01e"}.wi-owm-201:before{content:"\f01e"}.wi-owm-202:before{content:"\f01e"}.wi-owm-210:before{content:"\f016"}.wi-owm-211:before{content:"\f016"}.wi-owm-212:before{content:"\f016"}.wi-owm-221:before{content:"\f016"}.wi-owm-230:before{content:"\f01e"}.wi-owm-231:before{content:"\f01e"}.wi-owm-232:before{content:"\f01e"}.wi-owm-300:before{content:"\f01c"}.wi-owm-301:before{content:"\f01c"}.wi-owm-302:before{content:"\f019"}.wi-owm-310:before{content:"\f017"}.wi-owm-311:before{content:"\f019"}.wi-owm-312:before{content:"\f019"}.wi-owm-313:before{content:"\f01a"}.wi-owm-314:before{content:"\f019"}.wi-owm-321:before{content:"\f01c"}.wi-owm-500:before{content:"\f01c"}.wi-owm-501:before{content:"\f019"}.wi-owm-502:before{content:"\f019"}.wi-owm-503:before{content:"\f019"}.wi-owm-504:before{content:"\f019"}.wi-owm-511:before{content:"\f017"}.wi-owm-520:before{content:"\f01a"}.wi-owm-521:before{content:"\f01a"}.wi-owm-522:before{content:"\f01a"}.wi-owm-531:before{content:"\f01d"}.wi-owm-600:before{content:"\f01b"}.wi-owm-601:before{content:"\f01b"}.wi-owm-602:before{content:"\f0b5"}.wi-owm-611:before{content:"\f017"}.wi-owm-612:before{content:"\f017"}.wi-owm-615:before{content:"\f017"}.wi-owm-616:before{content:"\f017"}.wi-owm-620:before{content:"\f017"}.wi-owm-621:before{content:"\f01b"}.wi-owm-622:before{content:"\f01b"}.wi-owm-701:before{content:"\f01a"}.wi-owm-711:before{content:"\f062"}.wi-owm-721:before{content:"\f0b6"}.wi-owm-731:before{content:"\f063"}.wi-owm-741:before{content:"\f014"}.wi-owm-761:before{content:"\f063"}.wi-owm-762:before{content:"\f063"}.wi-owm-771:before{content:"\f011"}.wi-owm-781:before{content:"\f056"}.wi-owm-800:before{content:"\f00d"}.wi-owm-801:before{content:"\f011"}.wi-owm-802:before{content:"\f011"}.wi-owm-803:before{content:"\f012"}.wi-owm-804:before{content:"\f013"}.wi-owm-900:before{content:"\f056"}.wi-owm-901:before{content:"\f01d"}.wi-owm-902:before{content:"\f073"}.wi-owm-903:before{content:"\f076"}.wi-owm-904:before{content:"\f072"}.wi-owm-905:before{content:"\f021"}.wi-owm-906:before{content:"\f015"}.wi-owm-957:before{content:"\f050"}.wi-owm-day-200:before{content:"\f010"}.wi-owm-day-201:before{content:"\f010"}.wi-owm-day-202:before{content:"\f010"}.wi-owm-day-210:before{content:"\f005"}.wi-owm-day-211:before{content:"\f005"}.wi-owm-day-212:before{content:"\f005"}.wi-owm-day-221:before{content:"\f005"}.wi-owm-day-230:before{content:"\f010"}.wi-owm-day-231:before{content:"\f010"}.wi-owm-day-232:before{content:"\f010"}.wi-owm-day-300:before{content:"\f00b"}.wi-owm-day-301:before{content:"\f00b"}.wi-owm-day-302:before{content:"\f008"}.wi-owm-day-310:before{content:"\f008"}.wi-owm-day-311:before{content:"\f008"}.wi-owm-day-312:before{content:"\f008"}.wi-owm-day-313:before{content:"\f008"}.wi-owm-day-314:before{content:"\f008"}.wi-owm-day-321:before{content:"\f00b"}.wi-owm-day-500:before{content:"\f00b"}.wi-owm-day-501:before{content:"\f008"}.wi-owm-day-502:before{content:"\f008"}.wi-owm-day-503:before{content:"\f008"}.wi-owm-day-504:before{content:"\f008"}.wi-owm-day-511:before{content:"\f006"}.wi-owm-day-520:before{content:"\f009"}.wi-owm-day-521:before{content:"\f009"}.wi-owm-day-522:before{content:"\f009"}.wi-owm-day-531:before{content:"\f00e"}.wi-owm-day-600:before{content:"\f00a"}.wi-owm-day-601:before{content:"\f0b2"}.wi-owm-day-602:before{content:"\f00a"}.wi-owm-day-611:before{content:"\f006"}.wi-owm-day-612:before{content:"\f006"}.wi-owm-day-615:before{content:"\f006"}.wi-owm-day-616:before{content:"\f006"}.wi-owm-day-620:before{content:"\f006"}.wi-owm-day-621:before{content:"\f00a"}.wi-owm-day-622:before{content:"\f00a"}.wi-owm-day-701:before{content:"\f009"}.wi-owm-day-711:before{content:"\f062"}.wi-owm-day-721:before{content:"\f0b6"}.wi-owm-day-731:before{content:"\f063"}.wi-owm-day-741:before{content:"\f003"}.wi-owm-day-761:before{content:"\f063"}.wi-owm-day-762:before{content:"\f063"}.wi-owm-day-781:before{content:"\f056"}.wi-owm-day-800:before{content:"\f00d"}.wi-owm-day-801:before{content:"\f000"}.wi-owm-day-802:before{content:"\f000"}.wi-owm-day-803:before{content:"\f000"}.wi-owm-day-804:before{content:"\f00c"}.wi-owm-day-900:before{content:"\f056"}.wi-owm-day-902:before{content:"\f073"}.wi-owm-day-903:before{content:"\f076"}.wi-owm-day-904:before{content:"\f072"}.wi-owm-day-906:before{content:"\f004"}.wi-owm-day-957:before{content:"\f050"}.wi-owm-night-200:before{content:"\f02d"}.wi-owm-night-201:before{content:"\f02d"}.wi-owm-night-202:before{content:"\f02d"}.wi-owm-night-210:before{content:"\f025"}.wi-owm-night-211:before{content:"\f025"}.wi-owm-night-212:before{content:"\f025"}.wi-owm-night-221:before{content:"\f025"}.wi-owm-night-230:before{content:"\f02d"}.wi-owm-night-231:before{content:"\f02d"}.wi-owm-night-232:before{content:"\f02d"}.wi-owm-night-300:before{content:"\f02b"}.wi-owm-night-301:before{content:"\f02b"}.wi-owm-night-302:before{content:"\f028"}.wi-owm-night-310:before{content:"\f028"}.wi-owm-night-311:before{content:"\f028"}.wi-owm-night-312:before{content:"\f028"}.wi-owm-night-313:before{content:"\f028"}.wi-owm-night-314:before{content:"\f028"}.wi-owm-night-321:before{content:"\f02b"}.wi-owm-night-500:before{content:"\f02b"}.wi-owm-night-501:before{content:"\f028"}.wi-owm-night-502:before{content:"\f028"}.wi-owm-night-503:before{content:"\f028"}.wi-owm-night-504:before{content:"\f028"}.wi-owm-night-511:before{content:"\f026"}.wi-owm-night-520:before{content:"\f029"}.wi-owm-night-521:before{content:"\f029"}.wi-owm-night-522:before{content:"\f029"}.wi-owm-night-531:before{content:"\f02c"}.wi-owm-night-600:before{content:"\f02a"}.wi-owm-night-601:before{content:"\f0b4"}.wi-owm-night-602:before{content:"\f02a"}.wi-owm-night-611:before{content:"\f026"}.wi-owm-night-612:before{content:"\f026"}.wi-owm-night-615:before{content:"\f026"}.wi-owm-night-616:before{content:"\f026"}.wi-owm-night-620:before{content:"\f026"}.wi-owm-night-621:before{content:"\f02a"}.wi-owm-night-622:before{content:"\f02a"}.wi-owm-night-701:before{content:"\f029"}.wi-owm-night-711:before{content:"\f062"}.wi-owm-night-721:before{content:"\f0b6"}.wi-owm-night-731:before{content:"\f063"}.wi-owm-night-741:before{content:"\f04a"}.wi-owm-night-761:before{content:"\f063"}.wi-owm-night-762:before{content:"\f063"}.wi-owm-night-781:before{content:"\f056"}.wi-owm-night-800:before{content:"\f02e"}.wi-owm-night-801:before{content:"\f022"}.wi-owm-night-802:before{content:"\f022"}.wi-owm-night-803:before{content:"\f022"}.wi-owm-night-804:before{content:"\f086"}.wi-owm-night-900:before{content:"\f056"}.wi-owm-night-902:before{content:"\f073"}.wi-owm-night-903:before{content:"\f076"}.wi-owm-night-904:before{content:"\f072"}.wi-owm-night-906:before{content:"\f024"}.wi-owm-night-957:before{content:"\f050"}.wi-wu-chanceflurries:before{content:"\f064"}.wi-wu-chancerain:before{content:"\f019"}.wi-wu-chancesleat:before{content:"\f0b5"}.wi-wu-chancesnow:before{content:"\f01b"}.wi-wu-chancetstorms:before{content:"\f01e"}.wi-wu-clear:before{content:"\f00d"}.wi-wu-cloudy:before{content:"\f002"}.wi-wu-flurries:before{content:"\f064"}.wi-wu-hazy:before{content:"\f0b6"}.wi-wu-mostlycloudy:before{content:"\f002"}.wi-wu-mostlysunny:before{content:"\f00d"}.wi-wu-partlycloudy:before{content:"\f002"}.wi-wu-partlysunny:before{content:"\f00d"}.wi-wu-rain:before{content:"\f01a"}.wi-wu-sleat:before{content:"\f0b5"}.wi-wu-snow:before{content:"\f01b"}.wi-wu-sunny:before{content:"\f00d"}.wi-wu-tstorms:before{content:"\f01e"}.wi-wu-unknown:before{content:"\f00d"}
--------------------------------------------------------------------------------
/icons/font/weathericons-regular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/icons/font/weathericons-regular-webfont.eot
--------------------------------------------------------------------------------
/icons/font/weathericons-regular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/icons/font/weathericons-regular-webfont.ttf
--------------------------------------------------------------------------------
/icons/font/weathericons-regular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/icons/font/weathericons-regular-webfont.woff
--------------------------------------------------------------------------------
/icons/font/weathericons-regular-webfont.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/icons/font/weathericons-regular-webfont.woff2
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | import React from 'react';
2 | import {render} from 'react-dom';
3 |
4 | import {Provider} from 'react-redux';
5 | import {createStore, applyMiddleware} from 'redux';
6 | import thunk from 'redux-thunk';
7 | import createLogger from 'redux-logger';
8 | import {AppContainer} from 'react-hot-loader';
9 |
10 | import weatherApp from './reducers';
11 | import App from './components/App';
12 |
13 | import './icons/css/weather-icons.css';
14 |
15 | import ons from 'onsenui';
16 | import 'onsenui/css/onsenui.css';
17 | import './stylus/index.styl';
18 |
19 | const logger = createLogger();
20 |
21 | const store = createStore(weatherApp,
22 | window.devToolsExtension ? window.devToolsExtension() : f => f,
23 | process.env.NODE_ENV === 'production'
24 | ? applyMiddleware(thunk)
25 | : applyMiddleware(thunk, logger)
26 | );
27 |
28 | import {addLocationAndFetchWeather} from './actions';
29 |
30 | [
31 | 'Tokyo',
32 | 'New York',
33 | 'London',
34 | 'Beijing',
35 | 'Sydney',
36 | 'Rio de Janeiro',
37 | 'Istanbul'
38 | ].forEach((city) => store.dispatch(addLocationAndFetchWeather(city)));
39 |
40 | const rootElement = document.getElementById('root');
41 |
42 | ons.ready(() => render(
43 |
44 |
45 |
46 |
47 | ,
48 | rootElement
49 | ));
50 |
51 | if (module.hot) {
52 | module.hot.accept('./components/App', () => {
53 | const NextApp = require('./components/App').default;
54 | render(
55 |
56 |
57 |
58 |
59 | ,
60 | rootElement
61 | );
62 | });
63 | }
64 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "react-onsenui-redux-weather",
3 | "version": "1.0.0",
4 | "description": "Simple Weather App implemntation with Onsen UI React Components and Redux",
5 | "main": "index.js",
6 | "scripts": {
7 | "start": "webpack-dev-server --host 0.0.0.0 --progress --content-base www/",
8 | "build": "npm run lint && cross-env NODE_ENV=production webpack --config webpack.config.prod.js",
9 | "deploy": "npm run build && git commit www -m \"Deploy\" && git subtree push --prefix www origin gh-pages",
10 | "lint": "eslint ."
11 | },
12 | "repository": {
13 | "type": "git",
14 | "url": "git+https://github.com/argelius/react-onsenui-redux-weather.git"
15 | },
16 | "author": "Andreas Argelius ",
17 | "license": "MIT",
18 | "bugs": {
19 | "url": "https://github.com/argelius/react-onsenui-redux-weather/issues"
20 | },
21 | "homepage": "https://github.com/argelius/react-onsenui-redux-weather#readme",
22 | "devDependencies": {
23 | "autoprefixer": "^6.5.1",
24 | "babel-core": "^6.18.0",
25 | "babel-loader": "^6.2.5",
26 | "babel-preset-es2015": "^6.18.0",
27 | "babel-preset-react": "^6.5.0",
28 | "babel-preset-stage-2": "^6.18.0",
29 | "country-data": "0.0.31",
30 | "cross-env": "^3.1.3",
31 | "css-loader": "^0.26.0",
32 | "eslint": "^3.8.1",
33 | "eslint-plugin-promise": "^3.3.0",
34 | "eslint-plugin-react": "^6.4.1",
35 | "eslint-plugin-standard": "^2.0.0",
36 | "file-loader": "^0.9.0",
37 | "isomorphic-fetch": "^2.2.1",
38 | "json-loader": "^0.5.4",
39 | "ncp": "^2.0.0",
40 | "node-uuid": "^1.4.7",
41 | "onsenui": "2.0.4",
42 | "postcss-loader": "^1.0.0",
43 | "promise": "^7.1.1",
44 | "react": "^15.3.1",
45 | "react-dom": "^15.3.1",
46 | "react-hot-loader": "^3.0.0-beta.6",
47 | "react-onsenui": "^1.0.4",
48 | "react-redux": "^4.4.5",
49 | "redux": "^3.6.0",
50 | "redux-logger": "^2.6.1",
51 | "redux-thunk": "^2.1.0",
52 | "style-loader": "^0.13.1",
53 | "stylus": "^0.54.5",
54 | "stylus-loader": "^2.3.1",
55 | "url-loader": "^0.5.7",
56 | "webpack": "^1.13.2",
57 | "webpack-dev-server": "^1.16.2"
58 | }
59 | }
60 |
--------------------------------------------------------------------------------
/react_redux_weather.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/react_redux_weather.png
--------------------------------------------------------------------------------
/reducers/dialog.js:
--------------------------------------------------------------------------------
1 | import {OPEN_DIALOG, CLOSE_DIALOG} from '../actions';
2 |
3 | const dialog = (state = {open: false}, action) => {
4 | switch (action.type) {
5 | case OPEN_DIALOG:
6 | return {
7 | open: true
8 | };
9 | case CLOSE_DIALOG:
10 | return {
11 | open: false
12 | };
13 | default:
14 | return state;
15 | }
16 | };
17 |
18 | export default dialog;
19 |
--------------------------------------------------------------------------------
/reducers/index.js:
--------------------------------------------------------------------------------
1 | import {combineReducers} from 'redux';
2 | import selectedLocation from './selectedLocation';
3 | import locations from './locations';
4 | import dialog from './dialog';
5 |
6 | const todoApp = combineReducers({
7 | locations,
8 | selectedLocation,
9 | dialog
10 | });
11 |
12 | export default todoApp;
13 |
--------------------------------------------------------------------------------
/reducers/locations.js:
--------------------------------------------------------------------------------
1 | import {
2 | ADD_LOCATION,
3 | REMOVE_LOCATION,
4 | REQUEST_WEATHER,
5 | RECEIVE_WEATHER,
6 | SET_FETCH_ERROR
7 | } from '../actions';
8 |
9 | const initialState = {
10 | isFetching: false,
11 | isInvalid: false,
12 | temperature: 0,
13 | icon: -1,
14 | humidity: 0
15 | };
16 |
17 | const location = (state = initialState, action) => {
18 | switch (action.type) {
19 | case ADD_LOCATION:
20 | return {
21 | id: action.id,
22 | name: action.name,
23 | ...state
24 | };
25 | case REQUEST_WEATHER:
26 | return {
27 | ...state,
28 | isFetching: true,
29 | isInvalid: false
30 | };
31 | case RECEIVE_WEATHER:
32 | return {
33 | ...state,
34 | isFetching: false,
35 | isInvalid: false,
36 | ...action
37 | };
38 | case SET_FETCH_ERROR:
39 | return {
40 | ...state,
41 | isFetching: false,
42 | isInvalid: true
43 | };
44 | default:
45 | return state;
46 | }
47 | };
48 |
49 | const locations = (state = {}, action) => {
50 | switch (action.type) {
51 | case ADD_LOCATION:
52 | return {
53 | ...state,
54 | [action.id]: location(undefined, action)
55 | };
56 | case REMOVE_LOCATION:
57 | const {...rest} = state;
58 | delete rest[action.id];
59 | return rest;
60 | case SET_FETCH_ERROR:
61 | case REQUEST_WEATHER:
62 | case RECEIVE_WEATHER:
63 | return {
64 | ...state,
65 | [action.id]: location({...state[action.id]}, action)
66 | };
67 | default:
68 | return state;
69 | }
70 | };
71 |
72 | export default locations;
73 |
--------------------------------------------------------------------------------
/reducers/selectedLocation.js:
--------------------------------------------------------------------------------
1 | const selectedLocation = (state = null, action) => {
2 | switch (action.type) {
3 | case 'SELECT_LOCATION':
4 | return action.id;
5 | default:
6 | return state;
7 | }
8 | };
9 |
10 | export default selectedLocation;
11 |
--------------------------------------------------------------------------------
/scripts/build.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | npm run build
4 |
--------------------------------------------------------------------------------
/stylus/index.styl:
--------------------------------------------------------------------------------
1 | $background-color = #f9f9f9
2 | $material-background-color = #ffffff
3 | $text-color = #1f1f21
4 | $sub-text-color = #999
5 | $highlight-color = #13bde2
6 | $second-highlight-color = #25a6d9
7 | $border-color = #ccc
8 | $toolbar-background-color = #13bde2
9 | $toolbar-button-color = #fff
10 | $toolbar-text-color = #fff
11 | $toolbar-border-color = #e1e1e1
12 | $buttonbar-color = rgba(18,114,224,0.77)
13 | $buttonbar-active-text-color = #fff
14 | $list-background-color = #fff
15 | $list-header-background-color = #eee
16 | $list-tap-active-background-color = #d9d9d9
17 | $tabbar-background-color = #fff
18 | $tabbar-text-color = #999
19 | $tabbar-highlight-text-color = rgba(24,103,194,0.81)
20 | $tabbar-border-color = #ccc
21 | $switch-highlight-color = #5198db
22 | $modal-background-color = rgba(0, 0, 0, 0.7)
23 | $modal-text-color = #fff
24 | $alert-dialog-background-color = #f4f4f4
25 | $alert-dialog-text-color = #1f1f21
26 | $alert-dialog-button-color = #13bde2
27 | $alert-dialog-separator-color = #ddd
28 | $dialog-background-color = #f4f4f4
29 | $popover-background-color = white
30 | $popover-text-color = #1f1f21
31 | $notification-background-color = #dc5236
32 | $material-switch-active-thumb-color = #009688
33 | $material-switch-inactive-thumb-color = #f1f1f1
34 | $material-switch-active-background-color = #77c2bb
35 | $material-switch-inactive-background-color = #b0afaf
36 | $material-range-track-color = #e0e0e0
37 | $material-range-thumb-color = #009688
38 | $material-toolbar-background-color = #13bde2
39 | $material-toolbar-text-color = #ffffff
40 | $material-toolbar-button-color = #ffffff
41 | $material-toolbar-button-active-color = #2cc3e4
42 | $material-button-background-color = #009688
43 | $material-button-text-color = #ffffff
44 | $material-checkbox-active-color = #009688
45 | $material-checkbox-inactive-color = #717171
46 | $material-checkbox-checkmark-color = #ffffff
47 | $material-radio-button-active-color = #009688
48 | $material-radio-button-inactive-color = #717171
49 | $material-text-input-text-color = #212121
50 | $material-text-input-active-color = #13bde2
51 | $material-text-input-inactive-color = #afafaf
52 | $material-dialog-background-color = #ffffff
53 | $material-alert-dialog-background-color = #ffffff
54 | $material-alert-dialog-title-color = #212121
55 | $material-alert-dialog-content-color = #727272
56 | $material-alert-dialog-button-color = #13bde2
57 | $material-progress-bar-primary-color = #009688
58 | $material-progress-bar-secondary-color = #80cbc4
59 | $material-progress-bar-background-color = #e0e0e0
60 | $material-progress-circle-primary-color = #13bde2
61 | $material-progress-circle-secondary-color = #80cbc4
62 | $material-tabbar-background-color = #009688
63 | $material-tabbar-text-color = rgba(255, 255, 255, 0.6)
64 | $material-tabbar-highlight-text-color = #ffffff
65 | $material-tabbar-highlight-color = #26a69a
66 | $fab-text-color = #ffffff
67 | $fab-background-color = #13bde2
68 |
69 | @import 'onsenui/stylus/components'
70 |
71 | .list__item__subtitle
72 | opacity 1
73 | color #6b6b6b
74 | font-size 12px
75 |
76 | .weather-button
77 | &:focus
78 | &:active
79 | color #13bde2
80 |
81 | .wi-owm-701:before
82 | content "\f014"
83 |
84 | @keyframes spin
85 | from
86 | transform rotate(0deg)
87 | to
88 | transform rotate(360deg)
89 |
90 | .spin-animation
91 | animation spin 0.5s linear infinite
92 |
--------------------------------------------------------------------------------
/util/index.js:
--------------------------------------------------------------------------------
1 | // http://openweathermap.org/weather-conditions
2 |
3 | const THUNDER = '#b8d74b';
4 | const RAIN = '#3690f3';
5 | const SNOW = '#61c9f2';
6 | const MIST = '#1199c0';
7 | const CLEAR = '#f7d346';
8 | const CLOUDS = '#94a8bd';
9 | const EXTREME = '#ee5850';
10 |
11 | export const weatherCodeToColor = (code) => {
12 | if (code < 0) {
13 | return CLOUDS;
14 | } else if (code >= 200 && code < 300) {
15 | return THUNDER;
16 | } else if (code >= 300 && code < 400) {
17 | return RAIN;
18 | } else if (code >= 500 && code < 600) {
19 | return RAIN;
20 | } else if (code >= 600 && code < 700) {
21 | return SNOW;
22 | } else if (code >= 700 && code < 800) {
23 | return MIST;
24 | } else if (code === 800) {
25 | return CLEAR;
26 | } else if (code >= 801 && code < 810) {
27 | return CLOUDS;
28 | } else if (code >= 900 && code < 903) {
29 | return EXTREME;
30 | } else {
31 | return CLEAR;
32 | }
33 | };
34 |
--------------------------------------------------------------------------------
/webpack.config.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack');
2 | var path = require('path');
3 |
4 | var autoprefixer = require('autoprefixer');
5 |
6 | module.exports = {
7 | devtool: 'eval-source-map',
8 | context: __dirname,
9 | entry: [
10 | 'react-hot-loader/patch',
11 | 'webpack-dev-server/client?http://0.0.0.0:9000',
12 | 'webpack/hot/only-dev-server',
13 | './index.js'
14 | ],
15 | output: {
16 | path: path.join(__dirname, 'www'),
17 | filename: 'bundle.js'
18 | },
19 |
20 | devServer: {
21 | colors: true,
22 | historyApiFallback: true,
23 | inline: false,
24 | port: 9000,
25 | hot: true
26 | },
27 |
28 | module: {
29 | loaders: [
30 | {
31 | test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
32 | loader: 'url-loader?limit=10000&minetype=application/font-woff'
33 | },
34 | { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
35 | loader: 'file-loader'
36 | },
37 | {
38 | test: /\.json$/,
39 | loader: 'json'
40 | },
41 | {
42 | test: /\.css$/,
43 | loader: 'style!css!postcss'
44 | },
45 | {
46 | test: /\.styl$/,
47 | loader: 'style!css!postcss!stylus?paths=node_modules'
48 | },
49 | {
50 | test: /\.js$/,
51 | loader: 'babel',
52 | query: {
53 | 'presets': ['es2015', 'stage-2', 'react'],
54 | 'plugins': ['react-hot-loader/babel']
55 | },
56 | exclude: path.join(__dirname, 'node_modules')
57 | }
58 | ]
59 | },
60 |
61 | postcss: function() {
62 | return [autoprefixer];
63 | },
64 |
65 | plugins: [
66 | new webpack.HotModuleReplacementPlugin()
67 | ]
68 | };
69 |
70 |
--------------------------------------------------------------------------------
/webpack.config.prod.js:
--------------------------------------------------------------------------------
1 | var webpack = require('webpack');
2 | var path = require('path');
3 | var autoprefixer = require('autoprefixer');
4 |
5 | module.exports = {
6 | devtool: 'source-map',
7 | context: __dirname,
8 | entry: [
9 | './index.js'
10 | ],
11 | output: {
12 | path: path.join(__dirname, 'www'),
13 | filename: 'bundle.js'
14 | },
15 |
16 | module: {
17 | loaders: [
18 | {
19 | test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
20 | loader: 'url-loader?limit=10000&minetype=application/font-woff'
21 | },
22 | { test: /\.(ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
23 | loader: 'file-loader'
24 | },
25 | {
26 | test: /\.json$/,
27 | loader: 'json'
28 | },
29 | {
30 | test: /\.css$/,
31 | loader: 'style!css!postcss'
32 | },
33 | {
34 | test: /\.styl$/,
35 | loader: 'style!css!postcss!stylus?paths=node_modules'
36 | },
37 | { test: /\.js$|\.jsx$/,
38 | exclude: [/node_modules/],
39 | loaders: [
40 | 'babel?' + JSON.stringify({presets: ['stage-2', 'es2015', 'react']})
41 | ]
42 | }
43 | ]
44 | },
45 |
46 | postcss: function() {
47 | return [autoprefixer];
48 | },
49 |
50 | plugins: [
51 | new webpack.DefinePlugin({
52 | 'process.env': {
53 | 'NODE_ENV': JSON.stringify('production')
54 | }
55 | })
56 | ]
57 | };
58 |
59 |
--------------------------------------------------------------------------------
/www/19e65b89cee273a249fba4c09b951b74.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/19e65b89cee273a249fba4c09b951b74.eot
--------------------------------------------------------------------------------
/www/1cd48d78f06d33973d9d761d426e69bf.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/1cd48d78f06d33973d9d761d426e69bf.woff2
--------------------------------------------------------------------------------
/www/1dc35d25e61d819a9c357074014867ab.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/1dc35d25e61d819a9c357074014867ab.ttf
--------------------------------------------------------------------------------
/www/25a32416abee198dd821b0b17a198a8f.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/25a32416abee198dd821b0b17a198a8f.eot
--------------------------------------------------------------------------------
/www/2c159d0d05473040b53ec79df8797d32.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/2c159d0d05473040b53ec79df8797d32.woff
--------------------------------------------------------------------------------
/www/4618f0de2a818e7ad3fe880e0b74d04a.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/4618f0de2a818e7ad3fe880e0b74d04a.ttf
--------------------------------------------------------------------------------
/www/4b658767da6bd92ce2addb3ce512784d.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/4b658767da6bd92ce2addb3ce512784d.eot
--------------------------------------------------------------------------------
/www/8cac70ebda3f23ce472110d9f21e8593.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/8cac70ebda3f23ce472110d9f21e8593.woff
--------------------------------------------------------------------------------
/www/a4d31128b633bc0b1cc1f18a34fb3851.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/a4d31128b633bc0b1cc1f18a34fb3851.woff2
--------------------------------------------------------------------------------
/www/b351bd62abcd96e924d9f44a3da169a7.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/b351bd62abcd96e924d9f44a3da169a7.ttf
--------------------------------------------------------------------------------
/www/c8ddf1e5e5bf3682bc7bebf30f394148.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/c8ddf1e5e5bf3682bc7bebf30f394148.woff
--------------------------------------------------------------------------------
/www/d2a55d331bdd1a7ea97a8a1fbb3c569c.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/d2a55d331bdd1a7ea97a8a1fbb3c569c.woff
--------------------------------------------------------------------------------
/www/dd4781d1acc57ba4c4808d1b44301201.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/dd4781d1acc57ba4c4808d1b44301201.ttf
--------------------------------------------------------------------------------
/www/demo.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Onsen UI App
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/www/e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/4f86bf0eeab8f6240c8e88f5d3772ec666eb5e8b/www/e6cf7c6ec7c2d6f670ae9d762604cb0b.woff2
--------------------------------------------------------------------------------
/www/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 | Onsen UI React Demo
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------