More work in home, footer, new credits page

This commit is contained in:
vjrj 2017-12-11 07:56:54 +01:00
parent b6b8f893e3
commit 441dfa4c62
22 changed files with 155 additions and 104 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 304 KiB

View file

@ -24,7 +24,7 @@ class CenterInMyPosition extends React.Component {
var viewport = { var viewport = {
center: [userGeoLocation.get().lat, userGeoLocation.get().lng], center: [userGeoLocation.get().lat, userGeoLocation.get().lng],
zoom: 11 zoom: 11
} };
self.props.onClick(viewport); self.props.onClick(viewport);
// console.log(viewport); // console.log(viewport);
// self.onViewportChanged(viewport); // self.onViewportChanged(viewport);

View file

@ -22,6 +22,7 @@ const Footer = (props) => {
<li><Link to="/terms"> {t('Términos')}<span className="d-none d-md-inline"> {t('de Servicio')}</span></Link></li> <li><Link to="/terms"> {t('Términos')}<span className="d-none d-md-inline"> {t('de Servicio')}</span></Link></li>
<li><Link to="/privacy"><span className="d-none d-md-inline">{t('Política de')} </span>{t('Privacidad')}</Link></li> <li><Link to="/privacy"><span className="d-none d-md-inline">{t('Política de')} </span>{t('Privacidad')}</Link></li>
<li><span className="d-none d-md-inline"><Link to="/license">{t('Licencia')}</Link></span></li> <li><span className="d-none d-md-inline"><Link to="/license">{t('Licencia')}</Link></span></li>
<li><span className="d-none d-md-inline"><Link to="/credits">{t('Créditos')}</Link></span></li>
</ul> </ul>
</Grid> </Grid>
</div> </div>

View file

@ -43,7 +43,7 @@ body {
ul li { ul li {
float: left; float: left;
&:first-child, &:nth-child(2) { &:first-child, &:nth-child(3) {
margin-right: 15px; margin-right: 15px;
} }

View file

@ -40,6 +40,7 @@ import Footer from '../../components/Footer/Footer';
import Terms from '../../pages/Terms/Terms'; import Terms from '../../pages/Terms/Terms';
import Privacy from '../../pages/Privacy/Privacy'; import Privacy from '../../pages/Privacy/Privacy';
import License from '../../pages/License/License'; import License from '../../pages/License/License';
import Credits from '../../pages/Credits/Credits';
import FireSubscription from '../../pages/FireSubscription/FireSubscription'; import FireSubscription from '../../pages/FireSubscription/FireSubscription';
import ReSendEmail from '../../components/ReSendEmail/ReSendEmail'; import ReSendEmail from '../../components/ReSendEmail/ReSendEmail';
import FiresMap from '../../pages/FiresMap/FiresMap'; import FiresMap from '../../pages/FiresMap/FiresMap';
@ -74,13 +75,14 @@ const App = props => (
<Public path="/login" component={Login} {...props} /> <Public path="/login" component={Login} {...props} />
<Route path="/logout" component={Logout} {...props} /> <Route path="/logout" component={Logout} {...props} />
<Route path="/sandbox" component={Sandbox} {...props} /> <Route path="/sandbox" component={Sandbox} {...props} />
<Public path="/subscriptions" component={FireSubscription} {...props} /> <Public path="/subscriptions" component={FireSubscription} focusInput {...props} />
<Route name="verify-email" path="/verify-email/:token" component={VerifyEmail} /> <Route name="verify-email" path="/verify-email/:token" component={VerifyEmail} />
<Route name="recover-password" path="/recover-password" component={RecoverPassword} /> <Route name="recover-password" path="/recover-password" component={RecoverPassword} />
<Route name="reset-password" path="/reset-password/:token" component={ResetPassword} /> <Route name="reset-password" path="/reset-password/:token" component={ResetPassword} />
<Route name="terms" path="/terms" component={Terms} /> <Route name="terms" path="/terms" component={Terms} />
<Route name="privacy" path="/privacy" component={Privacy} /> <Route name="privacy" path="/privacy" component={Privacy} />
<Route name="license" path="/license" component={License} /> <Route name="license" path="/license" component={License} />
<Route name="credits" path="/credits" component={Credits} />
<Route component={NotFound} /> <Route component={NotFound} />
</Switch> </Switch>
</Grid> </Grid>

View file

@ -0,0 +1,15 @@
import React from 'react';
import Page from '../Page/Page';
import { translate } from 'react-i18next';
const Credits = props => (
<div className="Credits">
<Page
title={props.t("Créditos")}
subtitle={props.t("Sobre los datos y imágenes usados")}
page="credits"
/>
</div>
);
export default translate([], { wait: true })(Credits);

View file

@ -50,6 +50,7 @@ class FireSubscription extends React.Component {
<div> <div>
<h4 className="page-header"><Trans parent="span">Suscríbete a alertas de fuegos</Trans></h4> <h4 className="page-header"><Trans parent="span">Suscríbete a alertas de fuegos</Trans></h4>
<SubsAutocomplete <SubsAutocomplete
focusInput={this.props.focusInput}
onChange={ (value) => this.onAutocompleteChange(value) }/> onChange={ (value) => this.onAutocompleteChange(value) }/>
</div> </div>
</Col> </Col>
@ -75,7 +76,8 @@ class FireSubscription extends React.Component {
} }
FireSubscription.propTypes = { FireSubscription.propTypes = {
history: PropTypes.object.isRequired history: PropTypes.object.isRequired,
focusInput: PropTypes.bool.isRequired
}; };
export default translate([], { wait: true })(FireSubscription); export default translate([], { wait: true })(FireSubscription);

View file

@ -1,6 +1,7 @@
import React from 'react'; import React from 'react';
import PropTypes from 'prop-types';
import { Trans, translate } from 'react-i18next'; import { Trans, translate } from 'react-i18next';
import PlacesAutocomplete, { geocodeByAddress, geocodeByPlaceId, getLatLng } from 'react-places-autocomplete' import PlacesAutocomplete, { geocodeByAddress, geocodeByPlaceId, getLatLng } from 'react-places-autocomplete';
import { FormGroup, ControlLabel, HelpBlock } from 'react-bootstrap'; import { FormGroup, ControlLabel, HelpBlock } from 'react-bootstrap';
class SubsAutocomplete extends React.Component { class SubsAutocomplete extends React.Component {
@ -84,7 +85,7 @@ class SubsAutocomplete extends React.Component {
placeholder: this.props.t("Escribe aquí un lugar "), placeholder: this.props.t("Escribe aquí un lugar "),
onBlur:() => { /* console.log('Blur event!'); */ }, onBlur:() => { /* console.log('Blur event!'); */ },
onFocus:() => { /* console.log('Focused!'); */ }, onFocus:() => { /* console.log('Focused!'); */ },
autoFocus:true autoFocus: this.props.focusInput
}} /> }} />
<HelpBlock><Trans parent="span">También puedes seleccionar el lugar en el mapa arrastrando el puntero naranja.</Trans></HelpBlock> <HelpBlock><Trans parent="span">También puedes seleccionar el lugar en el mapa arrastrando el puntero naranja.</Trans></HelpBlock>
</FormGroup> </FormGroup>
@ -93,5 +94,8 @@ class SubsAutocomplete extends React.Component {
} }
} }
SubsAutocomplete.propTypes = {
focusInput: PropTypes.bool.isRequired
};
export default translate([], { wait: true }) (SubsAutocomplete); export default translate([], { wait: true }) (SubsAutocomplete);

View file

@ -94,7 +94,7 @@ FireMark.propTypes = {
}; };
// Below this use only pixels // Below this use only pixels
const MAXZOOM = 7; const MAXZOOM = 6;
const MyMarkersList = ({ markers }) => { const MyMarkersList = ({ markers }) => {
const items = markers.map(({ key, ...props }) => ( const items = markers.map(({ key, ...props }) => (
@ -111,7 +111,7 @@ const FireList = ({ fires, scale, useMarkers, nasa }) => {
* } * }
* }*/ * }*/
const items = fires.map(({ _id, ...props }) => ( const items = fires.map(({ _id, ...props }) => (
useMarkers && !scale? <MyPopupMarker key={_id} nasa={nasa} {...props} />: useMarkers && scale? <MyPopupMarker key={_id} nasa={nasa} {...props} />:
(!nasa && !scale)? <FirePixel key={_id} nasa={nasa} {...props} />:<FireMark key={_id} nasa={nasa} {...props} />)); (!nasa && !scale)? <FirePixel key={_id} nasa={nasa} {...props} />:<FireMark key={_id} nasa={nasa} {...props} />));
return <div style={{ display: 'none' }}>{items}</div>; return <div style={{ display: 'none' }}>{items}</div>;
}; };
@ -141,30 +141,33 @@ class FiresMap extends React.Component {
} }
centerOnUserLocation = (viewport) => { centerOnUserLocation = (viewport) => {
this.onViewportChanged(viewport); this.handleViewportChange(viewport);
}; };
handleViewportChange = function (viewport) {
console.log(`Viewport changed: ${JSON.stringify(viewport)}`);
zoom.set(viewport.zoom);
lat.set(viewport.center[0]);
lng.set(viewport.center[1]);
this.state.viewport = viewport;
this.state.modified = true;
if (this.props.subsready && this.refs.fireMap) {
this.showSubsUnion(this.state.showSubsUnion);
}
}
componentDidMount() { componentDidMount() {
height.set(this.divElement.clientHeight); height.set(this.divElement.clientHeight);
width.set(this.divElement.clientWidth); width.set(this.divElement.clientWidth);
this.addScale(); this.addScale();
const self = this; const self = this;
this.handleViewportChangeDebounced = _.debounce(function (viewport) { // viewportchange
console.log(`Viewport changed: ${JSON.stringify(this.state.viewport)}`); this.debounceView = _.debounce(function(viewport) {this.handleViewportChange(viewport); }.bind(this), 2000);
zoom.set(viewport.zoom);
lat.set(viewport.center[0]);
lng.set(viewport.center[1]);
self.state.viewport = viewport;
self.state.modified = true;
if (self.props.subsready && self.refs.fireMap) {
self.showSubsUnion(self.state.showSubsUnion);
}
}, 2000);
} }
// https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js // https://stackoverflow.com/questions/23123138/perform-debounce-in-react-js
onViewportChanged = (viewport) => { onViewportChanged = (viewport) => {
this.handleViewportChangeDebounced(viewport); this.debounceView(viewport);
}; };
onClickReset = () => { onClickReset = () => {
@ -253,15 +256,16 @@ class FiresMap extends React.Component {
<Checkbox inline={false} defaultChecked={this.state.showSubsUnion} onClick={e => this.showSubsUnion(e.target.checked)}> <Checkbox inline={false} defaultChecked={this.state.showSubsUnion} onClick={e => this.showSubsUnion(e.target.checked)}>
<Trans className="mark-checkbox" parent="span">Resaltar en verde el área vigilada por nuestros usuarios/as</Trans>&nbsp;(*) <Trans className="mark-checkbox" parent="span">Resaltar en verde el área vigilada por nuestros usuarios/as</Trans>&nbsp;(*)
</Checkbox> </Checkbox>
<Checkbox disabled={this.state.viewport.zoom < MAXZOOM} inline={false} onClick={e => this.useMarkers(e.target.checked)}> {(this.state.viewport.zoom >= MAXZOOM) && <Checkbox inline={false} onClick={e => this.useMarkers(e.target.checked)}>
<Trans className="mark-checkbox" parent="span">Resaltar los fuegos con un marcador</Trans> <Trans className="mark-checkbox" parent="span">Resaltar los fuegos con un marcador</Trans>
</Checkbox> </Checkbox>}
<CenterInMyPosition onClick={(viewport) => this.centerOnUserLocation(viewport)} /> <CenterInMyPosition onClick={(viewport) => this.centerOnUserLocation(viewport)} />
</Col> </Col>
</Row> </Row>
<Row> <Row>
<Map ref="fireMap" <Map ref="fireMap"
animate={true} animate={true}
minZoom={5}
preferCanvas={true} preferCanvas={true}
onClick={this.onClickReset} onClick={this.onClickReset}
viewport={this.state.viewport} viewport={this.state.viewport}
@ -273,7 +277,7 @@ class FiresMap extends React.Component {
/> />
<FireList <FireList
fires={this.props.activefires} fires={this.props.activefires}
scale={this.state.viewport.zoom > MAXZOOM} scale={this.state.viewport.zoom >= MAXZOOM}
useMarkers={this.state.useMarkers} useMarkers={this.state.useMarkers}
nasa={true} nasa={true}
/> />

View file

@ -140,3 +140,31 @@
color: white; color: white;
text-transform: uppercase; text-transform: uppercase;
} }
.bg-image-full {
color: white;
text-shadow: 2px 2px 1px #280B0B;
background: no-repeat center center scroll;
-webkit-background-size: cover;
-moz-background-size: cover;
background-size: cover;
-o-background-size: cover;
background-image: url('/home-fires.jpg');
}
@media only screen and (max-width: 767px) {
.bg-image-full {
background-image: url('/home-fires-800.jpg');
}
}
@media only screen and (max-width: 400px) {
.bg-image-full {
background-image: url('/home-fires-400.jpg');
}
}
@media only screen and (max-width: 1000px) {
.bg-image-full {
background-image: url('/home-fires-1000.jpg'); }
}

View file

@ -7,7 +7,7 @@ import { Link } from 'react-router-dom';
import ReactResizeDetector from 'react-resize-detector'; import ReactResizeDetector from 'react-resize-detector';
import FiresMap from '../FiresMap/FiresMap'; import FiresMap from '../FiresMap/FiresMap';
import FireSubscription from '/imports/ui/pages/FireSubscription/FireSubscription'; import FireSubscription from '/imports/ui/pages/FireSubscription/FireSubscription';
import './new-age.js'; // disabled import './new-age.js';
import './Index.scss'; import './Index.scss';
import './Index-custom.scss'; import './Index-custom.scss';
@ -123,12 +123,12 @@ class Index extends Component {
</div> </div>
</section> </section>
<section className="download bg-primary text-center" id="download"> <section className="download text-center bg-image-full" id="download">
<div className="container"> <div className="container">
<div className="row"> <div className="row">
<div className="col-md-8 mx-auto"> <div className="col-md-8 mx-auto">
<h2 className="section-heading">Discover what all the buzz is about!</h2> <h2 className="section-heading">Colaboración masiva contra los incendios</h2>
<p>Our app is available on any mobile device! Download now to get started!</p> <p><Trans>Imágenes capturadas por los satélites de la NASA muestran el humo de grandes incendios que se extienden sobre el Océano Pacífico. La actividad del fuego está delineada en rojo.</Trans></p>
<div className="badges"> <div className="badges">
<a className="badge-link" href="#"><img src="img/google-play-badge.svg" alt=""/></a> <a className="badge-link" href="#"><img src="img/google-play-badge.svg" alt=""/></a>
<a className="badge-link" href="#"><img src="img/app-store-badge.svg" alt=""/></a> <a className="badge-link" href="#"><img src="img/app-store-badge.svg" alt=""/></a>
@ -141,8 +141,8 @@ class Index extends Component {
<section className="features" id="features"> <section className="features" id="features">
<div className="container"> <div className="container">
<div className="section-heading text-center"> <div className="section-heading text-center">
<h2>Unlimited Features, Unlimited Fun</h2> <h2><Trans>Somos muchos ojos</Trans></h2>
<p className="text-muted">Check out what you can do with this app theme!</p> <p className="text-muted"><Trans>Usamos diferentes fuentes de datos para notificarte de fuegos activos en tus zonas de interés</Trans></p>
<hr/> <hr/>
</div> </div>
<div className="row"> <div className="row">
@ -165,11 +165,11 @@ class Index extends Component {
<div className="container-fluid"> <div className="container-fluid">
<div className="row"> <div className="row">
<div className="col-lg-6"> <div className="col-lg-6">
<div className="feature-item"> <a className="feature-link"target="_blank" href="https://t.me/TodosContraElFuego_bot"><div className="feature-item">
<i className="fa fa-telegram text-primary"></i> <i className="fa fa-telegram text-primary"></i>
<h3>Telegram</h3> <h3>Telegram</h3>
<p className="text-muted"><Trans>Usa nuestro bot de Telegram</Trans></p> <p className="text-muted"><Trans>Usa nuestro bot de Telegram para estar al tanto de los fuegos en tus área</Trans></p>
</div> </div></a>
</div> </div>
<div className="col-lg-6"> <div className="col-lg-6">
<div className="feature-item"> <div className="feature-item">
@ -204,8 +204,7 @@ class Index extends Component {
<section className="cta"> <section className="cta">
<div className="cta-content"> <div className="cta-content">
<div className="container"> <div className="container">
<h2>Stop waiting.<br/>Start building.</h2> <FiresMap />
<a href="#contact" className="btn btn-outline btn-xl js-scroll-trigger">Let's Get Started!</a>
</div> </div>
</div> </div>
<div className="overlay"></div> <div className="overlay"></div>
@ -213,38 +212,7 @@ class Index extends Component {
<section className="contact bg-primary" id="contact"> <section className="contact bg-primary" id="contact">
<div className="container"> <div className="container">
<h2>We <FireSubscription history={this.props.history} focusInput={false} />
<i className="fa fa-heart"></i>
new friends!</h2>
<ul className="list-inline list-social">
<li className="list-inline-item social-twitter">
<a href="#">
<i className="fa fa-twitter"></i>
</a>
</li>
{/* <li className="list-inline-item social-facebook">
<a href="#">
<i className="fa fa-facebook"></i>
</a>
</li>
<li className="list-inline-item social-google-plus">
<a href="#">
<i className="fa fa-google-plus"></i>
</a>
</li> */}
</ul>
</div>
</section>
<section className="py-5">
<div className="container">
<FireSubscription history={this.props.history} />
</div>
</section>
<section className="py-5">
<div className="container">
<FiresMap />
</div> </div>
</section> </section>

View file

@ -75,7 +75,7 @@ class Login extends React.Component {
services={['google']} services={['google']}
emailMessage={{ emailMessage={{
offset: 100, offset: 100,
text: this.t('o inicia sesión con un correo') text: this.t('o con un correo')
}} }}
/> />
</Col> </Col>

View file

@ -14,13 +14,13 @@ body {
} }
a { a {
color: #fdcc52; /* color: #fdcc52; */
-webkit-transition: all .35s; -webkit-transition: all .35s;
-moz-transition: all .35s; -moz-transition: all .35s;
transition: all .35s; } transition: all .35s; }
a:hover, a:focus { a:hover, a:focus {
color: #fcbd20; } /* color: #fcbd20; */ }
hr { hr {
max-width: 100px; max-width: 100px;
@ -263,22 +263,6 @@ section.contact ul.list-social li.social-google-plus a {
section.contact ul.list-social li.social-google-plus a:hover { section.contact ul.list-social li.social-google-plus a:hover {
background-color: #d73925; } background-color: #d73925; }
footer {
padding: 25px 0;
text-align: center;
color: rgba(255, 255, 255, 0.3);
background-color: #222222; }
footer p {
font-size: 12px;
margin: 0; }
footer ul {
margin-bottom: 0; }
footer ul li a {
font-size: 12px;
color: rgba(255, 255, 255, 0.3); }
footer ul li a:hover, footer ul li a:focus, footer ul li a:active, footer ul li a.active {
text-decoration: none; }
.bg-primary { .bg-primary {
background: #fdcc52; background: #fdcc52;
background: -webkit-linear-gradient(#fdcc52, #fdc539); background: -webkit-linear-gradient(#fdcc52, #fdc539);
@ -301,11 +285,34 @@ footer ul li a:hover, footer ul li a:focus, footer ul li a:active, footer ul li
background-color: #fdcc52; } background-color: #fdcc52; }
.btn { .btn {
border-radius: 300px; /* border-radius: 300px; */
font-family: 'Lato', 'Helvetica', 'Arial', 'sans-serif'; font-family: 'Lato', 'Helvetica', 'Arial', 'sans-serif';
/* text-transform: uppercase; */ }
@media (min-width: 480px) {
.btn {
letter-spacing: 2px; letter-spacing: 2px;
text-transform: uppercase; } text-transform: uppercase;
}
}
.EmailMessage {
font-size: 16px;
}
.OAuthLoginButtons > .btn {
letter-spacing: inherit;
text-transform: none;
}
h1 {
font-family: 'Lato', 'Helvetica', 'Arial', 'sans-serif';
}
.btn-xl { .btn-xl {
font-size: 11px; font-size: 11px;
padding: 15px 45px; } padding: 15px 45px; }
a.feature-link:hover {
text-decoration: none;
}

19
package-lock.json generated
View file

@ -4849,10 +4849,6 @@
"resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz",
"integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==" "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ=="
}, },
"hoist-non-react-statics": {
"version": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz",
"integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA="
},
"home-or-tmp": { "home-or-tmp": {
"version": "2.0.0", "version": "2.0.0",
"resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz",
@ -9861,13 +9857,20 @@
} }
}, },
"react-i18next": { "react-i18next": {
"version": "6.2.0", "version": "7.1.1",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-6.2.0.tgz", "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-7.1.1.tgz",
"integrity": "sha512-OYoZku8QErBiqEvSq8/Lm7RPdOQP/TQF/CWa52vwT6SeBll4YFeGu4dssz3fmKgTEDmxC3MOaNb7NZv9V4Yc8Q==", "integrity": "sha1-T7XLTvf3rU/HfMKY6Sln0H1t7nU=",
"requires": { "requires": {
"hoist-non-react-statics": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz", "hoist-non-react-statics": "2.3.1",
"html-parse-stringify2": "2.0.1", "html-parse-stringify2": "2.0.1",
"prop-types": "15.6.0" "prop-types": "15.6.0"
},
"dependencies": {
"hoist-non-react-statics": {
"version": "2.3.1",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz",
"integrity": "sha1-ND24TGAYxlB3iJgkATWhQg7iLOA="
}
} }
}, },
"react-leaflet": { "react-leaflet": {

View file

@ -45,7 +45,7 @@
"react-addons-pure-render-mixin": "^15.6.2", "react-addons-pure-render-mixin": "^15.6.2",
"react-bootstrap": "^0.31.5", "react-bootstrap": "^0.31.5",
"react-dom": "^16.0.0", "react-dom": "^16.0.0",
"react-i18next": "^6.1.0", "react-i18next": "^7.1.1",
"react-leaflet": "^1.7.7", "react-leaflet": "^1.7.7",
"react-leaflet-control": "^1.4.0", "react-leaflet-control": "^1.4.0",
"react-places-autocomplete": "^5.4.3", "react-places-autocomplete": "^5.4.3",

9
private/pages/credits.md Normal file
View file

@ -0,0 +1,9 @@
## Data ##
We acknowledge the use of data and imagery from LANCE FIRMS operated by the NASA/GSFC/Earth Science Data and Information System (ESDIS) with funding provided by NASA/HQ.
## Photos ##
https://commons.wikimedia.org/wiki/File:California_Wildfires_October_23_2007.jpg
Source: http://www.nasa.gov/vision/earth/lookingatearth/socal_wildfires_oct07.html

BIN
public/home-fires-1000.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 629 KiB

BIN
public/home-fires-400.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 128 KiB

BIN
public/home-fires-800.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 429 KiB

BIN
public/home-fires.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 703 KiB

View file

@ -15,8 +15,8 @@
"Regístrate": "Sign Up", "Regístrate": "Sign Up",
"Iniciar sesión": "Login", "Iniciar sesión": "Login",
"o regístrate con un correo": "or Sign Up with an Email Address", "o regístrate con un correo": "or Sign Up with an Email Address",
"o inicia sesión con un correo": "o con un correo":
"or Log In with an Email Address", "or with an Email Address",
"Nombre": "Nombre":
"First Name", "First Name",
"Apellidos": "Apellidos":
@ -100,5 +100,9 @@
"Repite la nueva contraseña": "Repite la nueva contraseña":
"Repeat New Password", "Repeat New Password",
"Resetea la contraseña y entra": "Resetea la contraseña y entra":
"Reset Password &amp; Login" "Reset Password &amp; Login",
"Imágenes capturadas por los satélites de la NASA muestran el humo de grandes incendios que se extienden sobre el Océano Pacífico. La actividad del fuego está delineada en rojo.":
"Images captured by NASA satellites show the smoke of large fires spreading over the Pacific Ocean. Fire activity is outlined in red.",
"Colaboración masiva contra los incendios":
"Corwdsourcing against wildfires"
} }

View file

@ -16,8 +16,8 @@
"Iniciar sesión": "Iniciar sesión", "Iniciar sesión": "Iniciar sesión",
"o regístrate con un correo": "o regístrate con un correo":
"o regístrate con un correo", "o regístrate con un correo",
"o inicia sesión con un correo": "o con un correo":
"o inicia sesión con un correo", "o con un correo",
"Nombre": "Nombre":
"Nombre", "Nombre",
"Apellidos": "Apellidos":
@ -127,5 +127,9 @@
"mapPrivacy": "mapPrivacy":
"<0>Para preservar la privacidad de nuestros usuarios/as, los datos reflejados están aleatoriamente alterados y son solo orientativos.</0> <0>Para preservar la privacidad de nuestros usuarios/as, los datos reflejados están aleatoriamente alterados y son solo orientativos.</0>", "<0>Para preservar la privacidad de nuestros usuarios/as, los datos reflejados están aleatoriamente alterados y son solo orientativos.</0> <0>Para preservar la privacidad de nuestros usuarios/as, los datos reflejados están aleatoriamente alterados y son solo orientativos.</0>",
"Nuevas notificaciones de {{app}}": "Nuevas notificaciones de {{app}}":
"Nuevas notificaciones de {{app}}" "Nuevas notificaciones de {{app}}",
"Imágenes capturadas por los satélites de la NASA muestran el humo de grandes incendios que se extienden sobre el Océano Pacífico. La actividad del fuego está delineada en rojo.":
"Imágenes capturadas por los satélites de la NASA muestran el humo de grandes incendios que se extienden sobre el Océano Pacífico. La actividad del fuego está delineada en rojo.",
"Colaboración masiva contra los incendios":
"Colaboración masiva contra los incendios"
} }