├── .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 | ![React Redux Weather](https://raw.githubusercontent.com/argelius/react-onsenui-redux-weather/master/react_redux_weather.png) 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 |
36 | {button} 37 | 38 |
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 | --------------------------------------------------------------------------------