Style improvements in home, navigation, and footer
This commit is contained in:
parent
f76abc7c89
commit
ce18aab493
21 changed files with 215 additions and 118 deletions
|
|
@ -450,9 +450,9 @@
|
||||||
</g>
|
</g>
|
||||||
<g
|
<g
|
||||||
id="g17717"
|
id="g17717"
|
||||||
inkscape:export-filename="/mnt/md1/proyectos/dev/todos-contra-el-fuego-web/public/apple-touch-icon-precomposed.png"
|
inkscape:export-filename="/mnt/md1/proyectos/dev/todos-contra-el-fuego-web/public/favicon-200.png"
|
||||||
inkscape:export-xdpi="17.27"
|
inkscape:export-xdpi="28.790001"
|
||||||
inkscape:export-ydpi="17.27">
|
inkscape:export-ydpi="28.790001">
|
||||||
<rect
|
<rect
|
||||||
y="108.84225"
|
y="108.84225"
|
||||||
x="-419.07861"
|
x="-419.07861"
|
||||||
|
|
|
||||||
|
Before Width: | Height: | Size: 46 KiB After Width: | Height: | Size: 46 KiB |
33
imports/ui/components/BetaRibbon/BetaRibbon.js
Normal file
33
imports/ui/components/BetaRibbon/BetaRibbon.js
Normal file
|
|
@ -0,0 +1,33 @@
|
||||||
|
/* eslint-disable react/jsx-indent-props */
|
||||||
|
/* eslint-disable import/no-absolute-path */
|
||||||
|
/* eslint-disable import/no-absolute-path */
|
||||||
|
|
||||||
|
import React, { Component } from 'react';
|
||||||
|
import PropTypes from 'prop-types';
|
||||||
|
import { translate } from 'react-i18next';
|
||||||
|
|
||||||
|
import './BetaRibbon.scss';
|
||||||
|
|
||||||
|
class BetaRibbon extends Component {
|
||||||
|
constructor(props) {
|
||||||
|
super(props);
|
||||||
|
this.t = props.t;
|
||||||
|
this.state = {
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
render() {
|
||||||
|
return (
|
||||||
|
<div className="ribbon"><span>BETA</span></div>
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BetaRibbon.propTypes = {
|
||||||
|
t: PropTypes.func.isRequired
|
||||||
|
};
|
||||||
|
|
||||||
|
BetaRibbon.defaultProps = {
|
||||||
|
};
|
||||||
|
|
||||||
|
export default translate([], { wait: true })(BetaRibbon);
|
||||||
43
imports/ui/components/BetaRibbon/BetaRibbon.scss
Normal file
43
imports/ui/components/BetaRibbon/BetaRibbon.scss
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
.ribbon {
|
||||||
|
position: absolute;
|
||||||
|
left: -5px; top: -5px;
|
||||||
|
z-index: 2000;
|
||||||
|
overflow: hidden;
|
||||||
|
width: 75px; height: 75px;
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
.ribbon span {
|
||||||
|
font-size: 10px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #FFF;
|
||||||
|
text-transform: uppercase;
|
||||||
|
text-align: center;
|
||||||
|
line-height: 20px;
|
||||||
|
transform: rotate(-45deg);
|
||||||
|
-webkit-transform: rotate(-45deg);
|
||||||
|
width: 100px;
|
||||||
|
display: block;
|
||||||
|
background: #79A70A;
|
||||||
|
background: linear-gradient(#9BC90D 0%, #9BC90D 100%);
|
||||||
|
box-shadow: 0 3px 10px -5px rgba(0, 0, 0, 1);
|
||||||
|
position: absolute;
|
||||||
|
top: 19px; left: -21px;
|
||||||
|
}
|
||||||
|
.ribbon span::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute; left: 0px; top: 100%;
|
||||||
|
z-index: -1;
|
||||||
|
border-left: 3px solid #9BC90D;
|
||||||
|
border-right: 3px solid transparent;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
border-top: 3px solid #9BC90D;
|
||||||
|
}
|
||||||
|
.ribbon span::after {
|
||||||
|
content: "";
|
||||||
|
position: absolute; right: 0px; top: 100%;
|
||||||
|
z-index: -1;
|
||||||
|
border-left: 3px solid transparent;
|
||||||
|
border-right: 3px solid #9BC90D;
|
||||||
|
border-bottom: 3px solid transparent;
|
||||||
|
border-top: 3px solid #9BC90D;
|
||||||
|
}
|
||||||
|
|
@ -35,15 +35,22 @@ class CenterInMyPosition extends React.Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
const { onlyIcon, t } = this.props;
|
||||||
|
const msg = t('Centrar en tu ubicación');
|
||||||
return (
|
return (
|
||||||
<Button bsStyle="default" onClick={() => this.onClick()}>
|
<Button bsStyle="default" onClick={() => this.onClick()}>
|
||||||
<i className="icons icon-target" />{this.props.t('Centrar en tu ubicación')}
|
<i className="icons icon-target" title={!onlyIcon ? msg : ''} />{!onlyIcon ? msg : ''}
|
||||||
</Button>);
|
</Button>);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
CenterInMyPosition.defaultProps = {
|
||||||
|
onlyIcon: false
|
||||||
|
};
|
||||||
|
|
||||||
CenterInMyPosition.propTypes = {
|
CenterInMyPosition.propTypes = {
|
||||||
t: PropTypes.func.isRequired
|
t: PropTypes.func.isRequired,
|
||||||
|
onlyIcon: PropTypes.bool
|
||||||
};
|
};
|
||||||
|
|
||||||
export default translate([], { wait: true })(CenterInMyPosition);
|
export default translate([], { wait: true })(CenterInMyPosition);
|
||||||
|
|
|
||||||
|
|
@ -14,10 +14,10 @@ body {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
height: 60px;
|
/* height: 60px; */
|
||||||
background-color: #fff;
|
background-color: #fff;
|
||||||
border-top: 1px solid $gray-lighter;
|
border-top: 1px solid $gray-lighter;
|
||||||
padding: 20px 0;
|
padding: 15px 0 0 0;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
color: $gray-light;
|
color: $gray-light;
|
||||||
|
|
|
||||||
|
|
@ -4,15 +4,18 @@ import { Navbar } from 'react-bootstrap';
|
||||||
import { Link } from 'react-router-dom';
|
import { Link } from 'react-router-dom';
|
||||||
import { LinkContainer } from 'react-router-bootstrap';
|
import { LinkContainer } from 'react-router-bootstrap';
|
||||||
import { Trans, translate } from 'react-i18next';
|
import { Trans, translate } from 'react-i18next';
|
||||||
|
import BetaRibbon from '../../components/BetaRibbon/BetaRibbon';
|
||||||
import PublicNavigation from '../PublicNavigation/PublicNavigation';
|
import PublicNavigation from '../PublicNavigation/PublicNavigation';
|
||||||
import AuthenticatedNavigation from '../AuthenticatedNavigation/AuthenticatedNavigation';
|
import AuthenticatedNavigation from '../AuthenticatedNavigation/AuthenticatedNavigation';
|
||||||
import NavItem from '../NavItem/NavItem';
|
import NavItem from '../NavItem/NavItem';
|
||||||
|
|
||||||
import './Navigation.scss';
|
import './Navigation.scss';
|
||||||
|
|
||||||
|
// removed class: fixed-top
|
||||||
const Navigation = props => (
|
const Navigation = props => (
|
||||||
<nav className="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
|
<nav className="navbar navbar-expand-lg navbar-dark bg-dark">
|
||||||
<div className="container">
|
<div style={{ overflow: 'hidden' } /* for ribbon */} className="container">
|
||||||
|
<BetaRibbon />
|
||||||
{/* <Navbar bsClass="navbar navbar-dark bg-dark"> */}
|
{/* <Navbar bsClass="navbar navbar-dark bg-dark"> */}
|
||||||
{/* https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Navbar.js */}
|
{/* https://github.com/react-bootstrap/react-bootstrap/blob/master/src/Navbar.js */}
|
||||||
<Navbar.Header>
|
<Navbar.Header>
|
||||||
|
|
|
||||||
|
|
@ -44,5 +44,5 @@ a.navbar-brand {
|
||||||
}
|
}
|
||||||
|
|
||||||
.hide-brand {
|
.hide-brand {
|
||||||
/* opacity: 0; */
|
opacity: 0;
|
||||||
}
|
}
|
||||||
|
|
@ -164,17 +164,18 @@ class SelectionMap extends Component {
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={12} md={12} lg={12}>
|
<Col xs={12} sm={12} md={12} lg={12}>
|
||||||
<Map
|
<Map
|
||||||
className="selectionmap-leaflet-container"
|
|
||||||
center={this.state.center}
|
|
||||||
zoom={this.state.zoom}
|
|
||||||
ref={(map) => {
|
ref={(map) => {
|
||||||
this.selectionMap = map;
|
this.selectionMap = map;
|
||||||
this.handleLeafletLoad(map);
|
this.handleLeafletLoad(map);
|
||||||
}}
|
}}
|
||||||
|
zoom={this.state.zoom}
|
||||||
|
center={this.state.center}
|
||||||
|
className="selectionmap-leaflet-container"
|
||||||
|
onViewportChanged={this.onViewportChanged}
|
||||||
|
animate
|
||||||
sleep={window.location.pathname === '/'}
|
sleep={window.location.pathname === '/'}
|
||||||
sleepTime={10750}
|
sleepTime={10750}
|
||||||
wakeTime={750}
|
wakeTime={750}
|
||||||
onViewportChanged={this.onViewportChanged}
|
|
||||||
sleepNote
|
sleepNote
|
||||||
hoverToWake={false}
|
hoverToWake={false}
|
||||||
wakeMessage={t('Pulsa para activar')}
|
wakeMessage={t('Pulsa para activar')}
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
.selectionmap-leaflet-container {
|
.selectionmap-leaflet-container {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 60vh;
|
min-height: 65vh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
/* min-width: 75vw; */
|
/* min-width: 75vw; */
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,7 @@ class FireSubscription extends React.Component {
|
||||||
}
|
}
|
||||||
</Col>
|
</Col>
|
||||||
</Row>
|
</Row>
|
||||||
<Row className="align-items-center justify-content-center">
|
<SelectionMap
|
||||||
<SelectionMap
|
|
||||||
center={this.state.center}
|
center={this.state.center}
|
||||||
zoom={this.state.zoom}
|
zoom={this.state.zoom}
|
||||||
distance={this.state.distance}
|
distance={this.state.distance}
|
||||||
|
|
@ -100,8 +99,7 @@ class FireSubscription extends React.Component {
|
||||||
onFstBtn={state => this.onSubs(state)}
|
onFstBtn={state => this.onSubs(state)}
|
||||||
onSelection={state => this.onSelection(state)}
|
onSelection={state => this.onSelection(state)}
|
||||||
action={action.add}
|
action={action.add}
|
||||||
/>
|
/>
|
||||||
</Row>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,12 +4,13 @@
|
||||||
/* eslint-disable react/jsx-indent */
|
/* eslint-disable react/jsx-indent */
|
||||||
import React, { Fragment } from 'react';
|
import React, { Fragment } from 'react';
|
||||||
import PropTypes from 'prop-types';
|
import PropTypes from 'prop-types';
|
||||||
import { Row, Col, Checkbox } from 'react-bootstrap';
|
import { ButtonGroup, Row, Col, Checkbox } from 'react-bootstrap';
|
||||||
import { Meteor } from 'meteor/meteor';
|
import { Meteor } from 'meteor/meteor';
|
||||||
import { ReactiveVar } from 'meteor/reactive-var';
|
import { ReactiveVar } from 'meteor/reactive-var';
|
||||||
import { withTracker } from 'meteor/react-meteor-data';
|
import { withTracker } from 'meteor/react-meteor-data';
|
||||||
import { Trans, translate } from 'react-i18next';
|
import { Trans, translate } from 'react-i18next';
|
||||||
import { Map } from 'react-leaflet';
|
import { Map } from 'react-leaflet';
|
||||||
|
import Control from 'react-leaflet-control';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import 'leaflet/dist/leaflet.css';
|
import 'leaflet/dist/leaflet.css';
|
||||||
import 'leaflet-graphicscale/dist/Leaflet.GraphicScale.min.css';
|
import 'leaflet-graphicscale/dist/Leaflet.GraphicScale.min.css';
|
||||||
|
|
@ -156,7 +157,6 @@ class FiresMap extends React.Component {
|
||||||
<Checkbox inline={false} onClick={e => this.useMarkers(e.target.checked)}>
|
<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)} />
|
|
||||||
</Fragment>}
|
</Fragment>}
|
||||||
<p className="firesmap-note">
|
<p className="firesmap-note">
|
||||||
<em>{ this.state.viewport.zoom >= MAXZOOMREACTIVE ?
|
<em>{ this.state.viewport.zoom >= MAXZOOMREACTIVE ?
|
||||||
|
|
@ -206,6 +206,11 @@ class FiresMap extends React.Component {
|
||||||
/>
|
/>
|
||||||
</Fragment> }
|
</Fragment> }
|
||||||
<DefMapLayers />
|
<DefMapLayers />
|
||||||
|
<Control position="topright" >
|
||||||
|
<ButtonGroup>
|
||||||
|
<CenterInMyPosition onClick={viewport => this.centerOnUserLocation(viewport)} onlyIcon {... this.props} />
|
||||||
|
</ButtonGroup>
|
||||||
|
</Control>
|
||||||
</Map>
|
</Map>
|
||||||
<Row>
|
<Row>
|
||||||
<Col xs={12} sm={12} md={12} lg={12}>
|
<Col xs={12} sm={12} md={12} lg={12}>
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
.firesmap-leaflet-container {
|
.firesmap-leaflet-container {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
min-height: 60vh;
|
min-height: 55vh;
|
||||||
width: 100%;
|
width: 100%;
|
||||||
/* min-width: 75vw; */
|
/* min-width: 75vw; */
|
||||||
display: flex;
|
display: flex;
|
||||||
|
|
@ -14,7 +14,7 @@
|
||||||
|
|
||||||
@include breakpoint(mobile) {
|
@include breakpoint(mobile) {
|
||||||
.firesmap-leaflet-container {
|
.firesmap-leaflet-container {
|
||||||
height: 80%;
|
height: 70%;
|
||||||
min-width: 85vw;
|
min-width: 85vw;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -172,8 +172,7 @@
|
||||||
position: relative;
|
position: relative;
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
margin-left: calc(-50vw + 50%);
|
margin-left: calc(-50vw + 50%);
|
||||||
margin-top: -21px;
|
/* margin-top: -21px; full pagen */
|
||||||
position: relative;
|
|
||||||
/*
|
/*
|
||||||
width: 100vw;
|
width: 100vw;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|
@ -222,7 +221,7 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
.full-width .page-header { // section titles
|
.full-width .page-header { // section titles
|
||||||
margin-top: 20px;
|
padding-top: 30px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sect1 {
|
.sect1 {
|
||||||
|
|
@ -249,4 +248,18 @@
|
||||||
|
|
||||||
.sect3, sect4, sect5, sect6 {
|
.sect3, sect4, sect5, sect6 {
|
||||||
overflow: visible !important;
|
overflow: visible !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.crowd-footer {
|
||||||
|
position: relative;
|
||||||
|
bottom: -150px;
|
||||||
|
left: 0px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.crowd-footer > p {
|
||||||
|
font-size: 13px;
|
||||||
|
margin-left: 10px;
|
||||||
|
margin-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
@ -10,7 +10,6 @@ import PropTypes from 'prop-types';
|
||||||
// https://www.npmjs.com/package/react-resize-detector
|
// https://www.npmjs.com/package/react-resize-detector
|
||||||
import ReactResizeDetector from 'react-resize-detector';
|
import ReactResizeDetector from 'react-resize-detector';
|
||||||
import _ from 'lodash';
|
import _ from 'lodash';
|
||||||
import { ScrollToTopOnMount, SectionsContainer, Section } from 'react-fullpage';
|
|
||||||
import 'html5-device-mockups/dist/device-mockups.min.css';
|
import 'html5-device-mockups/dist/device-mockups.min.css';
|
||||||
import { isAnyMobile } from '/imports/ui/components/Utils/isMobile';
|
import { isAnyMobile } from '/imports/ui/components/Utils/isMobile';
|
||||||
import SubscriptionEditor from '/imports/ui/components/SubscriptionEditor/SubscriptionEditor';
|
import SubscriptionEditor from '/imports/ui/components/SubscriptionEditor/SubscriptionEditor';
|
||||||
|
|
@ -44,11 +43,11 @@ class Index extends Component {
|
||||||
getMap(isMobile) {
|
getMap(isMobile) {
|
||||||
if (!isMobile) {
|
if (!isMobile) {
|
||||||
return (
|
return (
|
||||||
<Section className="sect5">
|
<section className="sect5">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<FiresMap />
|
<FiresMap />
|
||||||
</div>
|
</div>
|
||||||
</Section>);
|
</section>);
|
||||||
}
|
}
|
||||||
return (<Fragment />);
|
return (<Fragment />);
|
||||||
}
|
}
|
||||||
|
|
@ -70,27 +69,25 @@ class Index extends Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
// https://github.com/subtirelumihail/react-fullpage
|
// https://github.com/subtirelumihail/react-fullpage
|
||||||
const fullPageOptions = {
|
/* const fullPageOptions = {
|
||||||
anchors: isAnyMobile ? ['home', 'crowdsourcing', 'users', 'participe', 'platforms'] : ['home', 'crowdsourcing', 'users', 'participe', 'fires', 'platforms'], // the anchors for each sections
|
* anchors: isAnyMobile ? ['home', 'crowdsourcing', 'users', 'participe', 'platforms'] : ['home', 'crowdsourcing', 'users', 'participe', 'fires', 'platforms'], // the anchors for each sections
|
||||||
activeClass: 'active', // the class that is appended to the sections links
|
* activeClass: 'active', // the class that is appended to the sections links
|
||||||
arrowNavigation: true, // use arrow keys (true after development)
|
* arrowNavigation: true, // use arrow keys (true after development)
|
||||||
className: 'section-container', // the class name for the section container
|
* className: 'section-container', // the class name for the section container
|
||||||
delay: 1000, // the scroll animation speed
|
* delay: 1000, // the scroll animation speed
|
||||||
navigation: true, // !isMobile, // use dots navigation
|
* navigation: true, // !isMobile, // use dots navigation
|
||||||
scrollBar: isAnyMobile, // use the browser default scrollbar
|
* scrollBar: isAnyMobile, // use the browser default scrollbar
|
||||||
sectionClassName: 'section', // the section class name
|
* sectionClassName: 'section', // the section class name
|
||||||
sectionPaddingTop: '0', // the section top padding
|
* sectionPaddingTop: '20', // the section top padding
|
||||||
sectionPaddingBottom: '0', // the section bottom padding
|
* sectionPaddingBottom: '0', // the section bottom padding
|
||||||
verticalAlign: false // align the content of each section vertical
|
* verticalAlign: false // align the content of each section vertical
|
||||||
};
|
* }; */
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className="IndexDisabled full-width">
|
<div className="IndexDisabled full-width">
|
||||||
{/* https://v4-alpha.getbootstrap.com/components/carousel/ */}
|
{/* https://v4-alpha.getbootstrap.com/components/carousel/ */}
|
||||||
|
<Fragment>
|
||||||
<ScrollToTopOnMount />
|
<section className="sect1">
|
||||||
<SectionsContainer className="container" {...fullPageOptions}>
|
|
||||||
<Section className="sect1">
|
|
||||||
<header>
|
<header>
|
||||||
<ReactResizeDetector handleWidth handleHeight onResize={this.onResize} />
|
<ReactResizeDetector handleWidth handleHeight onResize={this.onResize} />
|
||||||
<div
|
<div
|
||||||
|
|
@ -158,26 +155,29 @@ class Index extends Component {
|
||||||
{/* <Link className="participe-btn btn btn-lg btn-warning" role="button" to="/#platforms">{this.props.t('Participa')}</Link> */}
|
{/* <Link className="participe-btn btn btn-lg btn-warning" role="button" to="/#platforms">{this.props.t('Participa')}</Link> */}
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</Section>
|
</section>
|
||||||
|
|
||||||
<Section className="crowd text-center bg-image-full sect2">
|
<section className="crowd text-center bg-image-full sect2">
|
||||||
<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"><Trans>Colaboración masiva contra los incendios</Trans></h2>
|
<h2 className="section-heading"><Trans>Colaboración masiva contra los incendios</Trans></h2>
|
||||||
<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>
|
<p><Trans>Usamos diferentes fuentes de datos para notificarte de fuegos activos en tus zonas de interés</Trans></p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<div className="row crowd-footer">
|
||||||
|
<p className="text-muted"><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>
|
||||||
</div>
|
</div>
|
||||||
</Section>
|
</section>
|
||||||
|
|
||||||
<Section className="sect3">
|
<section className="sect3">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<SubscriptionsMap />
|
<SubscriptionsMap />
|
||||||
</div>
|
</div>
|
||||||
</Section>
|
</section>
|
||||||
|
|
||||||
<Section className="sect4">
|
<section className="sect4">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<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>
|
||||||
<SubscriptionEditor
|
<SubscriptionEditor
|
||||||
|
|
@ -185,16 +185,14 @@ class Index extends Component {
|
||||||
history={this.props.history}
|
history={this.props.history}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Section>
|
</section>
|
||||||
|
|
||||||
{this.getMap(isAnyMobile)}
|
{this.getMap(isAnyMobile)}
|
||||||
|
|
||||||
<Section className="platf sect6">
|
<section className="platf sect6">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
<div className="section-heading text-center">
|
<div className="section-heading text-center">
|
||||||
<h2><Trans>Somos muchos ojos</Trans></h2>
|
<h2><Trans>Somos muchos ojos</Trans></h2>
|
||||||
<p className="text-muted"><Trans>Usamos diferentes fuentes de datos para notificarte de fuegos activos en tus zonas de interés</Trans></p>
|
|
||||||
<hr />
|
|
||||||
</div>
|
</div>
|
||||||
<div className="row">
|
<div className="row">
|
||||||
<div className="col-lg-4 my-auto">
|
<div className="col-lg-4 my-auto">
|
||||||
|
|
@ -248,9 +246,8 @@ class Index extends Component {
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</Section>
|
</section>
|
||||||
|
</Fragment>
|
||||||
</SectionsContainer>
|
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -118,7 +118,7 @@ class Signup extends React.Component {
|
||||||
services={['telegram', 'google']}
|
services={['telegram', 'google']}
|
||||||
emailMessage={{
|
emailMessage={{
|
||||||
offset: 97,
|
offset: 97,
|
||||||
text: t('o regístrate con un correo')
|
text: t('o con un correo')
|
||||||
}}
|
}}
|
||||||
/>
|
/>
|
||||||
</Col>
|
</Col>
|
||||||
|
|
|
||||||
|
|
@ -84,10 +84,7 @@ class Subscriptions extends Component {
|
||||||
const firstBtnTitle = ['Añadir zona', '', 'Terminar']; // view, add, edit
|
const firstBtnTitle = ['Añadir zona', '', 'Terminar']; // view, add, edit
|
||||||
return (!loading ? (
|
return (!loading ? (
|
||||||
<div className="Subscriptions">
|
<div className="Subscriptions">
|
||||||
<div className="page-header clearfix">
|
<h4 className="page-header"><Trans>Suscripciones a alertas de fuegos en zonas de mi interés</Trans></h4>
|
||||||
<h4 className="pull-left"><Trans>Suscripciones a alertas de fuegos en zonas de mi interés</Trans></h4>
|
|
||||||
</div>
|
|
||||||
<br />
|
|
||||||
{ subscriptions.length === 0 ?
|
{ subscriptions.length === 0 ?
|
||||||
<Alert bsStyle="warning"><Trans>No estás suscrito a fuegos en ninguna zona</Trans></Alert> :
|
<Alert bsStyle="warning"><Trans>No estás suscrito a fuegos en ninguna zona</Trans></Alert> :
|
||||||
<Alert bsStyle="success"><Trans>En verde, áreas de las que recibirás alertas de fuegos</Trans></Alert>
|
<Alert bsStyle="success"><Trans>En verde, áreas de las que recibirás alertas de fuegos</Trans></Alert>
|
||||||
|
|
|
||||||
|
|
@ -109,7 +109,7 @@ class SubscriptionsMap extends React.Component {
|
||||||
<DefMapLayers />
|
<DefMapLayers />
|
||||||
<Control position="topright" >
|
<Control position="topright" >
|
||||||
<ButtonGroup>
|
<ButtonGroup>
|
||||||
<CenterInMyPosition onClick={viewport => this.centerOnUserLocation(viewport)} {... this.props} />
|
<CenterInMyPosition onClick={viewport => this.centerOnUserLocation(viewport)} onlyIcon {... this.props} />
|
||||||
</ButtonGroup>
|
</ButtonGroup>
|
||||||
</Control>
|
</Control>
|
||||||
</Map>
|
</Map>
|
||||||
|
|
|
||||||
12
imports/ui/stylesheets/bootstrap-overrides.scss
vendored
12
imports/ui/stylesheets/bootstrap-overrides.scss
vendored
|
|
@ -1,19 +1,9 @@
|
||||||
@import './mixins';
|
@import './mixins';
|
||||||
|
|
||||||
.page-header {
|
|
||||||
margin-top: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
@include breakpoint(tablet) {
|
|
||||||
.page-header {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background-color: lighten($todos-palette5, 70%);
|
background-color: lighten($todos-palette5, 70%);
|
||||||
/* for fixed header */
|
/* for fixed header */
|
||||||
padding-top: 50px;
|
/* padding-top: 50px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-nav .nav-link {
|
.navbar-nav .nav-link {
|
||||||
|
|
|
||||||
|
|
@ -20,9 +20,19 @@ h4.page-header {
|
||||||
}
|
}
|
||||||
|
|
||||||
.App > .container { // Because of fixed header, previously page-header {
|
.App > .container { // Because of fixed header, previously page-header {
|
||||||
margin-top: 30px;
|
/* margin-top: 30px; */
|
||||||
}
|
}
|
||||||
|
|
||||||
h4.page-header {
|
h4.page-header {
|
||||||
font-size: 2em;
|
font-size: 2em;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.page-header {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@include breakpoint(tablet) {
|
||||||
|
.page-header {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -48,50 +48,50 @@ p {
|
||||||
line-height: 1.5;
|
line-height: 1.5;
|
||||||
margin-bottom: 20px; }
|
margin-bottom: 20px; }
|
||||||
|
|
||||||
div.section.platf > div.container {
|
section.platf > div.container {
|
||||||
padding: 30px 0; }
|
padding: 30px 0; }
|
||||||
div.section h2 {
|
section h2 {
|
||||||
font-size: 50px; }
|
font-size: 50px; }
|
||||||
|
|
||||||
@include breakpoint(mobile) {
|
@include breakpoint(mobile) {
|
||||||
div.section h2 {
|
section h2 {
|
||||||
font-size: 40px; }
|
font-size: 40px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
div.section.crowd > div.container {
|
section.crowd > div.container {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 120px 0; }
|
padding: 150px 0; }
|
||||||
div.section.crowd h2 {
|
section.crowd h2 {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
margin-top: 20px; }
|
margin-top: 20px; }
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
div.section.crowd h2 {
|
section.crowd h2 {
|
||||||
font-size: 70px; } }
|
font-size: 70px; } }
|
||||||
|
|
||||||
@include breakpoint(mobile) {
|
@include breakpoint(mobile) {
|
||||||
div.section.crowd p {
|
section.crowd p {
|
||||||
padding-left: 10px;
|
padding-left: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
}
|
}
|
||||||
|
|
||||||
div.section.crowd h2 {
|
section.crowd h2 {
|
||||||
font-size: 35px; } }
|
font-size: 35px; } }
|
||||||
|
|
||||||
div.section.platf .div.section-heading {
|
section.platf .section-heading {
|
||||||
margin-bottom: 100px; }
|
margin-bottom: 30px; }
|
||||||
div.section.platf .div.section-heading h2 {
|
section.platf .section-heading h2 {
|
||||||
margin-top: 0; }
|
margin-top: 0; }
|
||||||
div.section.platf .div.section-heading p {
|
section.platf .section-heading p {
|
||||||
margin-bottom: 0; }
|
margin-bottom: 0; }
|
||||||
|
|
||||||
div.section.platf .device-container,
|
section.platf .device-container,
|
||||||
div.section.platf .feature-item {
|
section.platf .feature-item {
|
||||||
max-width: 325px;
|
max-width: 325px;
|
||||||
margin: 0 auto; }
|
margin: 0 auto; }
|
||||||
|
|
||||||
@include breakpoint(mobile) {
|
@include breakpoint(mobile) {
|
||||||
div.section.platf .device-container,
|
section.platf .device-container,
|
||||||
div.section.platf .feature-item {
|
section.platf .feature-item {
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -100,26 +100,26 @@ div.section.platf .feature-item {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
div.section.platf .device-container {
|
section.platf .device-container {
|
||||||
margin-bottom: 100px; }
|
margin-bottom: 100px; }
|
||||||
@media (min-width: 992px) {
|
@media (min-width: 992px) {
|
||||||
div.section.platf .device-container {
|
section.platf .device-container {
|
||||||
margin-bottom: 0; } }
|
margin-bottom: 0; } }
|
||||||
|
|
||||||
div.section.platf .feature-item {
|
section.platf .feature-item {
|
||||||
padding-top: 50px;
|
padding-top: 50px;
|
||||||
padding-bottom: 50px;
|
padding-bottom: 50px;
|
||||||
text-align: center; }
|
text-align: center; }
|
||||||
|
|
||||||
@include breakpoint(mobile) {
|
@include breakpoint(mobile) {
|
||||||
div.section.platf .feature-item {
|
section.platf .feature-item {
|
||||||
padding-top: 15px;
|
padding-top: 15px;
|
||||||
padding-bottom: 15px; }
|
padding-bottom: 15px; }
|
||||||
}
|
}
|
||||||
|
|
||||||
div.section.platf .feature-item h3 {
|
section.platf .feature-item h3 {
|
||||||
font-size: 30px; }
|
font-size: 30px; }
|
||||||
div.section.platf .feature-item i {
|
section.platf .feature-item i {
|
||||||
font-size: 82px;
|
font-size: 82px;
|
||||||
display: block;
|
display: block;
|
||||||
margin-bottom: 15px;
|
margin-bottom: 15px;
|
||||||
|
|
@ -128,7 +128,7 @@ div.section.platf .feature-item i {
|
||||||
-webkit-background-clip: text;
|
-webkit-background-clip: text;
|
||||||
-webkit-text-fill-color: transparent; }
|
-webkit-text-fill-color: transparent; }
|
||||||
|
|
||||||
div.section.cta {
|
section.cta {
|
||||||
position: relative;
|
position: relative;
|
||||||
padding: 250px 0;
|
padding: 250px 0;
|
||||||
background-image: url("../img/bg-cta.jpg");
|
background-image: url("../img/bg-cta.jpg");
|
||||||
|
|
@ -137,19 +137,19 @@ div.section.cta {
|
||||||
-moz-background-size: cover;
|
-moz-background-size: cover;
|
||||||
-o-background-size: cover;
|
-o-background-size: cover;
|
||||||
background-size: cover; }
|
background-size: cover; }
|
||||||
div.section.cta .cta-content {
|
section.cta .cta-content {
|
||||||
position: relative;
|
position: relative;
|
||||||
z-index: 1; }
|
z-index: 1; }
|
||||||
div.section.cta .cta-content h2 {
|
section.cta .cta-content h2 {
|
||||||
font-size: 50px;
|
font-size: 50px;
|
||||||
max-width: 450px;
|
max-width: 450px;
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 25px;
|
margin-bottom: 25px;
|
||||||
color: white; }
|
color: white; }
|
||||||
@media (min-width: 768px) {
|
@media (min-width: 768px) {
|
||||||
div.section.cta .cta-content h2 {
|
section.cta .cta-content h2 {
|
||||||
font-size: 80px; } }
|
font-size: 80px; } }
|
||||||
div.section.cta .overlay {
|
section.cta .overlay {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0;
|
top: 0;
|
||||||
left: 0;
|
left: 0;
|
||||||
|
|
@ -157,16 +157,16 @@ div.section.cta .overlay {
|
||||||
height: 100%;
|
height: 100%;
|
||||||
background-color: rgba(0, 0, 0, 0.5); }
|
background-color: rgba(0, 0, 0, 0.5); }
|
||||||
|
|
||||||
div.section.contact {
|
section.contact {
|
||||||
text-align: center; }
|
text-align: center; }
|
||||||
div.section.contact h2 {
|
section.contact h2 {
|
||||||
margin-top: 0;
|
margin-top: 0;
|
||||||
margin-bottom: 25px; }
|
margin-bottom: 25px; }
|
||||||
div.section.contact h2 i {
|
section.contact h2 i {
|
||||||
color: #dd4b39; }
|
color: #dd4b39; }
|
||||||
div.section.contact ul.list-social {
|
section.contact ul.list-social {
|
||||||
margin-bottom: 0; }
|
margin-bottom: 0; }
|
||||||
div.section.contact ul.list-social li a {
|
section.contact ul.list-social li a {
|
||||||
font-size: 40px;
|
font-size: 40px;
|
||||||
line-height: 80px;
|
line-height: 80px;
|
||||||
display: block;
|
display: block;
|
||||||
|
|
@ -174,17 +174,17 @@ div.section.contact ul.list-social li a {
|
||||||
height: 80px;
|
height: 80px;
|
||||||
color: white;
|
color: white;
|
||||||
border-radius: 100%; }
|
border-radius: 100%; }
|
||||||
div.section.contact ul.list-social li.social-twitter a {
|
section.contact ul.list-social li.social-twitter a {
|
||||||
background-color: #1da1f2; }
|
background-color: #1da1f2; }
|
||||||
div.section.contact ul.list-social li.social-twitter a:hover {
|
section.contact ul.list-social li.social-twitter a:hover {
|
||||||
background-color: #0d95e8; }
|
background-color: #0d95e8; }
|
||||||
div.section.contact ul.list-social li.social-facebook a {
|
section.contact ul.list-social li.social-facebook a {
|
||||||
background-color: #3b5998; }
|
background-color: #3b5998; }
|
||||||
div.section.contact ul.list-social li.social-facebook a:hover {
|
section.contact ul.list-social li.social-facebook a:hover {
|
||||||
background-color: #344e86; }
|
background-color: #344e86; }
|
||||||
div.section.contact ul.list-social li.social-google-plus a {
|
section.contact ul.list-social li.social-google-plus a {
|
||||||
background-color: #dd4b39; }
|
background-color: #dd4b39; }
|
||||||
div.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; }
|
||||||
|
|
||||||
.bg-primary {
|
.bg-primary {
|
||||||
|
|
|
||||||
BIN
public/favicon-200.png
Normal file
BIN
public/favicon-200.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6 KiB |
Loading…
Add table
Add a link
Reference in a new issue