diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 1f1c564..f27af55 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -105,7 +105,7 @@
"Otros dispositivos": "Other Devices",
"support-us-home": "We are developing our tools for other devices. You can <1>help make it possible.1>",
"Software Libre": "Free/Open/Libre Software",
- "dev-with-us-home": "All of our work is free/open software. <1>Translators and developers always welcome1>.",
+ "dev-with-us-home": "All of our work is <1>free/open software1>. <3>Translators3> and <5>developers always welcome5>.",
"Suscríbete a alertas de fuegos": "Subscribe to fire alerts",
"Gracias por Participar": "Thanks for participating",
"También puedes seguirnos en la web": "You can also follow us on the web",
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 15763d8..38d75b8 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -165,7 +165,6 @@
"Otros dispositivos": "Otros dispositivos",
"support-us-home": "Estamos desarrollando nuestras herramientas para otros dispositivos. Puedes <1>contribuir a hacerlo posible.1>",
"Software Libre": "Software Libre",
- "dev-with-us-home": "Todo nuestro trabajo es sofware libre. <1>Traductoræs y desarrolladoræs siempre bienvenid@s1>.",
"Suscríbete a alertas de fuegos": "Suscríbete a alertas de fuegos",
"Gracias por Participar": "Gracias por Participar",
"También puedes seguirnos en la web": "También puedes seguirnos en la web",
@@ -174,6 +173,7 @@
"Sí": "Sí",
"No": "No",
"Sobre los datos y imágenes usados": "Sobre los datos y imágenes usados",
+ "dev-with-us-home": "Todo nuestro trabajo es <1>sofware libre1>. <3>Traductoræs3> y <5>desarrolladoræs siempre bienvenid@s5>.",
"Términos de Servicio": "Términos de Servicio",
"Política de Privacidad": "Política de Privacidad",
"No estás suscrito a fuegos en ninguna zona": "No estás suscrito a fuegos en ninguna zona",
From 26d668b68cbaaeaf94751b79d2e44094507e0e55 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 13 Feb 2018 09:39:23 +0100
Subject: [PATCH 012/313] Send missing in dev
---
imports/startup/client/i18n.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/imports/startup/client/i18n.js b/imports/startup/client/i18n.js
index 42c0ab3..63abf76 100644
--- a/imports/startup/client/i18n.js
+++ b/imports/startup/client/i18n.js
@@ -53,7 +53,7 @@ i18nOpts.react = {
nsMode: 'default' */
};
-const sendMissing = false; // Meteor.isDevelopment;
+const sendMissing = true; // Meteor.isDevelopment;
if (sendMissing && Meteor.isDevelopment) {
i18nOpts.sendMissing = true;
i18nOpts.missingKeyHandler = function miss(lng, ns, key, defaultValue) {
From 0bb1df35842e06bc746e814e3868e1c8c584cbb4 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 13 Feb 2018 08:49:25 +0000
Subject: [PATCH 013/313] Translated using Weblate (English)
Currently translated at 100.0% (187 of 187 strings)
---
public/locales/en/common.json | 365 +++++++++++++++++-----------------
1 file changed, 187 insertions(+), 178 deletions(-)
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 1f1c564..d9e5177 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -1,180 +1,189 @@
{
- "AppName": "All Against Fire",
- "AppNameFull": "All Against Fire!",
- "AppDescrip": "Crowdsourcing against wildfires",
- "AppDescripLong": "We use different sources of data to notify you of active fires in your areas of interest",
- "OrgName": "Comunes",
- "OrgNameFull": "Comunes Association",
- "Términos": "Terms",
- "Términos de Servicio": "Terms of Service",
- "Privacidad": "Privacy",
- "Inicio": "Home",
- "Licencia": "License",
- "Cerrar sesión": "Logout",
- "Registrarse": "Sign Up",
- "Regístrate": "Sign Up",
- "Iniciar sesión": "Login",
- "o regístrate con un correo": "or Sign Up with an Email Address",
- "o con un correo": "or with an Email Address",
- "Nombre": "First Name",
- "Apellidos": "Last Name",
- "Correo electrónico": "Email Address",
- "Contraseña": "Password",
- "¿Ya tienes un cuenta?": "Already have an account?",
- "Usa al menos seis caracteres.": "Use at least six characters.",
- "Iniciar sesión con Google": "Log In with Google",
- "¿Olvidaste tu contraseña?": "Forgot password?",
- "¿No tienes una cuenta?": "Don't have an account?",
- "Introduce tu correo abajo para recibir un enlace para resetear tu contraseña.": "Enter your email address below to receive a link to reset your password.",
- "Recupera tu contraseña": "Recover Password",
- "¿Recuerdas tu contraseña?": "Remember your password?",
- "Necesitamos un correo aquí.": "Need an email address here.",
- "¿Es este correo correcto?": "Is this email address correct?",
- "Necesitamos una contraseña aquí.": "Need a password here.",
- "Bienvenid@ de nuevo": "Welcome back",
- "Guardar perfíl": "Save profile",
- "Contraseña actual": "Current Password",
- "Nueva contraseña": "New Password",
- "Editar perfíl": "Edit Profile",
- "Editar perfíl en": "Edit Profile on",
- "¡Perfíl actualizado!": "Profile updated!",
- "¿Cuál es tu nombre?": "What's your first name?",
- "¿Cuál es tu apellido?": "What's your lastName name?",
- "Necesito tu contraseña si la quieres cambiar.": "Need your current password if changing.",
- "Necesito tu nueva contraseña si la quieres cambiar.": "Need your new password if changing.",
- "¿Es correcto este correo?": "Is this email address correct?",
- "verifyEmail": "Hey friend! Can you verify your email address ({{email}}) for us?",
- "Reenviar email de verificación": "Re-send verification email",
- "checkVerificationEmail": "Check {{email}} for a verification link!",
- "checkResetEmail": "Check ${email} for a reset link!",
- "¡Listo, gracias!": "All set, thanks!",
- "Por favor, inténtalo otra vez.": "Please try again.",
- "Verificando...": "Verifying...",
- "Introduce una nueva contraseña, por favor.": "Enter a new password, please.",
- "Repite tu nueva contraseña, por favor.": "Repeat your new password, please.",
- "Mmmm, tus contraseñas no coinciden. Inténtalo otra vez": "Hmm, your passwords don't match. Try again",
- "Para resetear tu contraseña, introduce una nueva debajo. Iniciarás la sesión con la nueva contraseña.": "To reset your password, enter a new one below. You will be logged in with your new password.",
- "Resetea tu contraseña": "Reset your Password",
- "Repite la nueva contraseña": "Repeat New Password",
- "Resetea la contraseña y entra": "Reset Password & 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.",
- "Todavía sin subscriptiones": "No subscriptions yet",
- "Suscripción añadida": "Subscription added",
- "Suscripción actualizada": "Subscription updated",
- "Última actualización, {{when}}": "Last updated, {{when}}",
- "Has iniciado sesión con {{service}} usando la dirección de correo {{email}}.": "You're logged in with {{service}} using the email address {{email}}.",
- "Uso de Cookies": "Use of Cookies",
- "Utilizamos cookies para asegurar un mejor uso de nuestra web. Si continúas navegando, consideramos que aceptas su uso": "We use cookies to ensure a better use of our website. If you continue browsing, we consider that you accept their use",
- "Participa": "Get Involved",
- "activeFires": "Active Fires",
- "Fuegos activos": "Active Fires",
- "noActiveFireInMapCount": "There are no active fires in this area of the map. There is a total of <1><0>{{countTotal}}0>1> active fires detected worldwide.",
- "activeFireInMapCount": "On the map marked in red <1><0>{{count,number}}0>1> active fires. There is a total of <3><0>{{countTotal,number}} 0>3> active fires detected worldwide by NASA.",
- "activeNeigFireInMapCount": "In Orange, the fires recently reported by our users.",
- "Centrar en tu ubicación": "Center on your location",
- "Resaltar en verde el área vigilada por nuestros usuarios/as": "The area monitored by our users is highlighted in green",
- "Resaltar los fuegos con un marcador": "Highlight the fires with a marker",
- "mapPrivacy": "<0>In order to preserve the privacy of our users, the reflected data are randomly altered and are only indicative.0>",
- "Nuevas notificaciones de {{app}}": "New notifications of {{app}}",
- "Mis zonas": "My areas",
- "Nueva zona": "New area",
- "Subscribirme a fuegos en este rádio": "Subscribe to fires in this radio",
- "Créditos": "Credits",
- "Escribe aquí un lugar": "Write here a place",
- "Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):": "Tell us the position of the area to be monitored (eg your town, a street, etc.):",
- "También puedes seleccionar la zona en el mapa arrastrando el puntero naranja.": "You can also select the area on the map by dragging the orange pointer.",
- "¿A que distancia a la redonda quieres recibir notificaciones?": "At what distance around you want to receive notifications?",
- "Pulsa para activar": "Click to activate",
- "Arrastrar para seleccionar otro punto": "Drag to select another point",
- "Mapa gris de OpenStreetMap": "Grey map from OpenStreetMap",
- "Mapa color de OpenStreetMap": "Color OpenStreetMap",
- "Mapa de carreteras de Google": "Google road map",
- "Mapa de terreno de Google": "Google terrain map",
- "Mapa de satélite de Google": "Google satellite map",
- "Zona añadida": "Zone added",
- "Añadir zona": "Add zone",
- "Editar": "Edit",
- "Suscripciones a alertas de fuegos en zonas de mi interés": "Subscriptions to alerts for fires in areas of my interest",
- "En verde, áreas de las que recibirás alertas de fuegos": "In green, areas from which you will receive fire alerts",
- "Terminar": "Finish",
- "Pulsa para borrar": "Click to delete",
- "Pulsa aquí para borrar la zona": "Click here to remove the area",
- "Los fuegos activos se actualizan en tiempo real.": "Fires are updated in real-time.",
- "Somos muchos ojos": "We are many eyes",
- "Usa nuestro bot de Telegram para estar al tanto de los fuegos en tus área": "Use our Telegram bot to be aware of the fires in your area",
- "Otros dispositivos": "Other Devices",
- "support-us-home": "We are developing our tools for other devices. You can <1>help make it possible.1>",
- "Software Libre": "Free/Open/Libre Software",
- "dev-with-us-home": "All of our work is free/open software. <1>Translators and developers always welcome1>.",
- "Suscríbete a alertas de fuegos": "Subscribe to fire alerts",
- "Gracias por Participar": "Thanks for participating",
- "También puedes seguirnos en la web": "You can also follow us on the web",
- "Participar": "Participate",
- "Dejarás de recibir notificaciones de fuegos en esa área ¿Estás seguro/a? ": "Are you sure you want to stop getting notifications of fires in this area? ",
- "Sí": "Yes",
- "No": "No",
- "Sobre los datos y imágenes usados": "About the data and images used",
- "Política de Privacidad": "Privacy Policy",
- "No estás suscrito a fuegos en ninguna zona": "You are not subscribed to fires in any area",
- "Iniciar sesión con Telegram": "Login with Telegram",
- "Idioma": "Language",
- "fireDetected": "fire detected {{when}}",
- "fireDetectedAt": "fire detected on {{when}}",
- "Comentarios": "Comments",
- "Guardar": "Save",
- "Responder": "Reply",
- "Borrar": "Delete",
- "Añadir un comentario": "Add a comment",
- "Añadir una respuesta": "Add a Reply",
- "Añadir comentario": "Add a comment",
- "Necesitas iniciar sesión para": "You need to login to",
- "añadir comentarios": "add comments",
- "puntuar comentarios": "rate it comments",
- "responder": "reply",
- "Más comentarios": "More Comments",
- "Elige un lugar": "Choose a place",
- "Elige un radio de vigilancia": "Choose a watch radio",
- "Recibe alertas de fuegos en esa zona": "Get alerts of fires in that area",
- "Alerta cuando hay un fuego": "Alert when there is a fire",
- "Anterior": "Previous",
- "Siguiente": "Next",
- "Siempre alerta a los fuegos en nuestro vecindario": "Always alert to the fires in our neighborhood",
- "Información adicional sobre fuego detectado en {{where}} el {{when}}": "Additional information about fire detected in {{where}} on {{when}}",
- "Información adicional sobre fuego detectado el {{when}}": "Additional information about fire detected on {{when}}",
- "Coordenadas:": "Coordinates:",
- "Fuego detectado por satélites de la NASA <1>1>": "Fire detected by NASA satellites <1>1>",
- "Puedes añadir un comentario si tienes información adicional sobre este fuego.": "You can add a comment if you have additional information about this fire.",
- "Por ejemplo:": "For example:",
- "si conoces esta zona y cómo acceder al fuego (esto puede de ser de ayuda para apagarlo si sigue activo o para investigarlo en un futuro)": "If you know the area and how to access the fire (this can be helpful to turn off if still active or to investigate in the future)",
- "si conoces el motivo por el que comenzó el fuego": "if you know the reason why the fire started",
- "si quieres denunciar algún tipo de ilegalidad, incluso anónimamente": "if you want to denounce some kind of illegality, even anonymously",
- "o cualquier otra información": "or any other information",
- "Haga zoom en una zona de su interés si quiere que los fuegos se actualicen en tiempo real.": "Zoom into an area of your interest if you want that fires to be updated in real time.",
- "Notificaciones": "Notifications",
- "Recibe nuestras notificaciones de fuegos por correo o en tu navegador": "Receive our fire notifications by mail or in your browser",
- "Fuego notificado por uno de nuestros usuarios/as <1>1>": "Fire reported by one of our users <1>1>",
- "No recibirás notificaciones de fuegos en este equipo, solo por correo": "You will not receive notifications of fires in this device, only by email",
- "not-found": "Oops: This page doesn't exist",
- "Más información sobre este fuego": "More information about this fire",
- "termsAccept": "I accept the <1>conditions of service1> of this site",
- "Bienvenid@!": "Welcome!",
- "welcome": "Welcome",
- "Verifica tu dirección de correo": "Verify Your Email Address",
- "Zonas vigiladas": "Monitored areas",
- "En verde, las zonas vigiladas por nuestros usuari@s actualmente": "In green, the areas monitored by our users currently",
- "Datos actualizados <1>1>.": "Data updated <1>1>.",
- "Información adicional sobre fuego": "Additional information about fire",
- "CO2emisions":
- "Did you know that wildfires <1>produce as much CO² as cars1> and <3>about ⅕ of all our carbon emissions3>?",
- "Ayúdanos a combatir el cambio climático y a proteger el medioambiente": "Help us fight climate change and protect the environment",
- "Fuego en La Tuna, Los Ángeles, Estados Unidos, septiembre de 2017":
- "La Tuna fire, LA, United States, September 2017",
- "Polución en la ciudad de Almaty, Kazakhstan, enero de 2014":
- "Smog over Almaty city, Kazakhstan, January 2014",
- "Fuente": "Source",
- "NASA": "NASA",
- "nuestros usuarios/as": "our users",
- "Pulsa para más información": "Click for more information",
- "Detectado":
- "Detected"
+ "AppName": "All Against Fire",
+ "AppNameFull": "All Against Fire!",
+ "AppDescrip": "Crowdsourcing against wildfires",
+ "AppDescripLong": "We use different sources of data to notify you of active fires in your areas of interest",
+ "OrgName": "Comunes",
+ "OrgNameFull": "Comunes Association",
+ "Términos": "Terms",
+ "Términos de Servicio": "Terms of Service",
+ "Privacidad": "Privacy",
+ "Inicio": "Home",
+ "Licencia": "License",
+ "Cerrar sesión": "Logout",
+ "Registrarse": "Sign Up",
+ "Regístrate": "Sign Up",
+ "Iniciar sesión": "Login",
+ "o regístrate con un correo": "or Sign Up with an Email Address",
+ "o con un correo": "or with an Email Address",
+ "Nombre": "First Name",
+ "Apellidos": "Last Name",
+ "Correo electrónico": "Email Address",
+ "Contraseña": "Password",
+ "¿Ya tienes un cuenta?": "Already have an account?",
+ "Usa al menos seis caracteres.": "Use at least six characters.",
+ "Iniciar sesión con Google": "Log In with Google",
+ "¿Olvidaste tu contraseña?": "Forgot password?",
+ "¿No tienes una cuenta?": "Don't have an account?",
+ "Introduce tu correo abajo para recibir un enlace para resetear tu contraseña.": "Enter your email address below to receive a link to reset your password.",
+ "Recupera tu contraseña": "Recover Password",
+ "¿Recuerdas tu contraseña?": "Remember your password?",
+ "Necesitamos un correo aquí.": "Need an email address here.",
+ "¿Es este correo correcto?": "Is this email address correct?",
+ "Necesitamos una contraseña aquí.": "Need a password here.",
+ "Bienvenid@ de nuevo": "Welcome back",
+ "Guardar perfíl": "Save profile",
+ "Contraseña actual": "Current Password",
+ "Nueva contraseña": "New Password",
+ "Editar perfíl": "Edit Profile",
+ "Editar perfíl en": "Edit Profile on",
+ "¡Perfíl actualizado!": "Profile updated!",
+ "¿Cuál es tu nombre?": "What's your first name?",
+ "¿Cuál es tu apellido?": "What's your lastName name?",
+ "Necesito tu contraseña si la quieres cambiar.": "Need your current password if changing.",
+ "Necesito tu nueva contraseña si la quieres cambiar.": "Need your new password if changing.",
+ "¿Es correcto este correo?": "Is this email address correct?",
+ "verifyEmail": "Hey friend! Can you verify your email address ({{email}}) for us?",
+ "Reenviar email de verificación": "Re-send verification email",
+ "checkVerificationEmail": "Check {{email}} for a verification link!",
+ "checkResetEmail": "Check ${email} for a reset link!",
+ "¡Listo, gracias!": "All set, thanks!",
+ "Por favor, inténtalo otra vez.": "Please try again.",
+ "Verificando...": "Verifying...",
+ "Introduce una nueva contraseña, por favor.": "Enter a new password, please.",
+ "Repite tu nueva contraseña, por favor.": "Repeat your new password, please.",
+ "Mmmm, tus contraseñas no coinciden. Inténtalo otra vez": "Hmm, your passwords don't match. Try again",
+ "Para resetear tu contraseña, introduce una nueva debajo. Iniciarás la sesión con la nueva contraseña.": "To reset your password, enter a new one below. You will be logged in with your new password.",
+ "Resetea tu contraseña": "Reset your Password",
+ "Repite la nueva contraseña": "Repeat New Password",
+ "Resetea la contraseña y entra": "Reset Password & 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.",
+ "Todavía sin subscriptiones": "No subscriptions yet",
+ "Suscripción añadida": "Subscription added",
+ "Suscripción actualizada": "Subscription updated",
+ "Última actualización, {{when}}": "Last updated, {{when}}",
+ "Has iniciado sesión con {{service}} usando la dirección de correo {{email}}.": "You're logged in with {{service}} using the email address {{email}}.",
+ "Uso de Cookies": "Use of Cookies",
+ "Utilizamos cookies para asegurar un mejor uso de nuestra web. Si continúas navegando, consideramos que aceptas su uso": "We use cookies to ensure a better use of our website. If you continue browsing, we consider that you accept their use",
+ "Participa": "Get Involved",
+ "activeFires": "Active Fires",
+ "Fuegos activos": "Active Fires",
+ "noActiveFireInMapCount": "There are no active fires in this area of the map. There is a total of <1><0>{{countTotal}}0>1> active fires detected worldwide.",
+ "activeFireInMapCount": "On the map marked in red <1><0>{{count,number}}0>1> active fires. There is a total of <3><0>{{countTotal,number}} 0>3> active fires detected worldwide by NASA.",
+ "activeNeigFireInMapCount": "In Orange, the fires recently reported by our users.",
+ "Centrar en tu ubicación": "Center on your location",
+ "Resaltar en verde el área vigilada por nuestros usuarios/as": "The area monitored by our users is highlighted in green",
+ "Resaltar los fuegos con un marcador": "Highlight the fires with a marker",
+ "mapPrivacy": "<0>In order to preserve the privacy of our users, the reflected data are randomly altered and are only indicative.0>",
+ "Nuevas notificaciones de {{app}}": "New notifications of {{app}}",
+ "Mis zonas": "My areas",
+ "Nueva zona": "New area",
+ "Subscribirme a fuegos en este rádio": "Subscribe to fires in this radio",
+ "Créditos": "Credits",
+ "Escribe aquí un lugar": "Write here a place",
+ "Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):": "Tell us the position of the area to be monitored (eg your town, a street, etc.):",
+ "También puedes seleccionar la zona en el mapa arrastrando el puntero naranja.": "You can also select the area on the map by dragging the orange pointer.",
+ "¿A que distancia a la redonda quieres recibir notificaciones?": "At what distance around you want to receive notifications?",
+ "Pulsa para activar": "Click to activate",
+ "Arrastrar para seleccionar otro punto": "Drag to select another point",
+ "Mapa gris de OpenStreetMap": "Grey map from OpenStreetMap",
+ "Mapa color de OpenStreetMap": "Color OpenStreetMap",
+ "Mapa de carreteras de Google": "Google road map",
+ "Mapa de terreno de Google": "Google terrain map",
+ "Mapa de satélite de Google": "Google satellite map",
+ "Zona añadida": "Zone added",
+ "Añadir zona": "Add zone",
+ "Editar": "Edit",
+ "Suscripciones a alertas de fuegos en zonas de mi interés": "Subscriptions to alerts for fires in areas of my interest",
+ "En verde, áreas de las que recibirás alertas de fuegos": "In green, areas from which you will receive fire alerts",
+ "Terminar": "Finish",
+ "Pulsa para borrar": "Click to delete",
+ "Pulsa aquí para borrar la zona": "Click here to remove the area",
+ "Los fuegos activos se actualizan en tiempo real.": "Fires are updated in real-time.",
+ "Somos muchos ojos": "We are many eyes",
+ "Usa nuestro bot de Telegram para estar al tanto de los fuegos en tus área": "Use our Telegram bot to be aware of the fires in your area",
+ "Otros dispositivos": "Other Devices",
+ "support-us-home": "We are developing our tools for other devices. You can <1>help make it possible.1>",
+ "Software Libre": "Free/Open/Libre Software",
+ "dev-with-us-home": "All of our work is free/open software. <1>Translators and developers always welcome1>.",
+ "Suscríbete a alertas de fuegos": "Subscribe to fire alerts",
+ "Gracias por Participar": "Thanks for participating",
+ "También puedes seguirnos en la web": "You can also follow us on the web",
+ "Participar": "Participate",
+ "Dejarás de recibir notificaciones de fuegos en esa área ¿Estás seguro/a? ": "Are you sure you want to stop getting notifications of fires in this area? ",
+ "Sí": "Yes",
+ "No": "No",
+ "Sobre los datos y imágenes usados": "About the data and images used",
+ "Política de Privacidad": "Privacy Policy",
+ "No estás suscrito a fuegos en ninguna zona": "You are not subscribed to fires in any area",
+ "Iniciar sesión con Telegram": "Login with Telegram",
+ "Idioma": "Language",
+ "fireDetected": "fire detected {{when}}",
+ "fireDetectedAt": "fire detected on {{when}}",
+ "Comentarios": "Comments",
+ "Guardar": "Save",
+ "Responder": "Reply",
+ "Borrar": "Delete",
+ "Añadir un comentario": "Add a comment",
+ "Añadir una respuesta": "Add a Reply",
+ "Añadir comentario": "Add a comment",
+ "Necesitas iniciar sesión para": "You need to login to",
+ "añadir comentarios": "add comments",
+ "puntuar comentarios": "rate it comments",
+ "responder": "reply",
+ "Más comentarios": "More Comments",
+ "Elige un lugar": "Choose a place",
+ "Elige un radio de vigilancia": "Choose a watch radio",
+ "Recibe alertas de fuegos en esa zona": "Get alerts of fires in that area",
+ "Alerta cuando hay un fuego": "Alert when there is a fire",
+ "Anterior": "Previous",
+ "Siguiente": "Next",
+ "Siempre alerta a los fuegos en nuestro vecindario": "Always alert to the fires in our neighborhood",
+ "Información adicional sobre fuego detectado en {{where}} el {{when}}": "Additional information about fire detected in {{where}} on {{when}}",
+ "Información adicional sobre fuego detectado el {{when}}": "Additional information about fire detected on {{when}}",
+ "Coordenadas:": "Coordinates:",
+ "Fuego detectado por satélites de la NASA <1>1>": "Fire detected by NASA satellites <1>1>",
+ "Puedes añadir un comentario si tienes información adicional sobre este fuego.": "You can add a comment if you have additional information about this fire.",
+ "Por ejemplo:": "For example:",
+ "si conoces esta zona y cómo acceder al fuego (esto puede de ser de ayuda para apagarlo si sigue activo o para investigarlo en un futuro)": "If you know the area and how to access the fire (this can be helpful to turn off if still active or to investigate in the future)",
+ "si conoces el motivo por el que comenzó el fuego": "if you know the reason why the fire started",
+ "si quieres denunciar algún tipo de ilegalidad, incluso anónimamente": "if you want to denounce some kind of illegality, even anonymously",
+ "o cualquier otra información": "or any other information",
+ "Haga zoom en una zona de su interés si quiere que los fuegos se actualicen en tiempo real.": "Zoom into an area of your interest if you want that fires to be updated in real time.",
+ "Notificaciones": "Notifications",
+ "Recibe nuestras notificaciones de fuegos por correo o en tu navegador": "Receive our fire notifications by mail or in your browser",
+ "Fuego notificado por uno de nuestros usuarios/as <1>1>": "Fire reported by one of our users <1>1>",
+ "No recibirás notificaciones de fuegos en este equipo, solo por correo": "You will not receive notifications of fires in this device, only by email",
+ "not-found": "Oops: This page doesn't exist",
+ "Más información sobre este fuego": "More information about this fire",
+ "termsAccept": "I accept the <1>conditions of service1> of this site",
+ "Bienvenid@!": "Welcome!",
+ "welcome": "Welcome",
+ "Verifica tu dirección de correo": "Verify Your Email Address",
+ "Zonas vigiladas": "Monitored areas",
+ "En verde, las zonas vigiladas por nuestros usuari@s actualmente": "In green, the areas monitored by our users currently",
+ "Datos actualizados <1>1>.": "Data updated <1>1>.",
+ "Información adicional sobre fuego": "Additional information about fire",
+ "CO2emisions": "Did you know that wildfires <1>produce as much CO² as cars1> and <3>about ⅕ of all our carbon emissions3>?",
+ "Ayúdanos a combatir el cambio climático y a proteger el medioambiente": "Help us fight climate change and protect the environment",
+ "Fuego en La Tuna, Los Ángeles, Estados Unidos, septiembre de 2017": "La Tuna fire, LA, United States, September 2017",
+ "Polución en la ciudad de Almaty, Kazakhstan, enero de 2014": "Smog over Almaty city, Kazakhstan, January 2014",
+ "Fuente": "Source",
+ "NASA": "NASA",
+ "nuestros usuarios/as": "our users",
+ "Pulsa para más información": "Click for more information",
+ "Detectado": "Detected",
+ "general-error-title": "Upppps: Something has gone wrong",
+ "general-error-description": "We are investigating the problem, try again in a while",
+ "Tomamos nota, ¡gracias por colaborar!": "We take note, thanks for collaborating!",
+ "Indícanos de que tipo de fuego se trata y ayúdanos así a mejorar nuestras notificaciones:": "Tell us what kind of fire it is and help us improve our notifications:",
+ "¿No es un fuego forestal?": "Isn't that a forest fire?",
+ "Regístrate o inicia sesión para aportar información sobre este fuego": "Sign up or login to provide information about this fire",
+ "Fuego no encontrado": "Fire not found",
+ "Es una industria": "It's an industry",
+ "Es una quema controlada": "It's a controlled burning",
+ "Parece una falsa alarma": "It seems a false alarm",
+ "Fuegos activos en el mundo actualizados en tiempo real": "Active fires in the world updated in real time",
+ "Zonas vigiladas por nuestros usuari@s actualmente": "Areas currently monitored by our users",
+ "Iniciar sesión con Facebook": "Login With Facebook"
}
From 3fc0fca23bf938a33f643a4a8b56074ca56fa848 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 13 Feb 2018 10:43:41 +0100
Subject: [PATCH 014/313] Added untranslated message
---
imports/ui/pages/Fires/Fires.js | 2 +-
public/locales/en/common.json | 4 +++-
public/locales/es/common.json | 4 +++-
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/imports/ui/pages/Fires/Fires.js b/imports/ui/pages/Fires/Fires.js
index 7b7f425..fe423a5 100644
--- a/imports/ui/pages/Fires/Fires.js
+++ b/imports/ui/pages/Fires/Fires.js
@@ -125,7 +125,7 @@ class Fire extends React.Component {
{Object.keys(FalsePositiveTypes).map(key => (
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index c46033e..dffcc24 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -185,5 +185,7 @@
"Parece una falsa alarma": "It seems a false alarm",
"Fuegos activos en el mundo actualizados en tiempo real": "Active fires in the world updated in real time",
"Zonas vigiladas por nuestros usuari@s actualmente": "Areas currently monitored by our users",
- "Iniciar sesión con Facebook": "Login With Facebook"
+ "Iniciar sesión con Facebook": "Login With Facebook",
+ "Elige un tipo":
+ "Choose a type"
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 38d75b8..d4304e7 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -272,5 +272,7 @@
"Zonas vigiladas por nuestros usuari@s actualmente":
"Zonas vigiladas por nuestros usuari@s actualmente",
"Iniciar sesión con Facebook":
- "Iniciar sesión con Facebook"
+ "Iniciar sesión con Facebook",
+ "Elige un tipo":
+ "Elige un tipo"
}
From b5e9e301b93d0da7f6f4af97c05e0448268f22d7 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Wed, 14 Feb 2018 09:57:06 +0100
Subject: [PATCH 015/313] Test docs
---
README.md | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/README.md b/README.md
index 29a6a62..56a40d5 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,15 @@ More platforms and services in the future...
We do tests via:
```
TEST_WATCH=1 MONGO_URL=mongodb://localhost:27017/fuegos meteor --settings settings-development.json test --driver-package meteortesting:mocha --port 3010
+
+# and
+
+chimp --watch --ddp=http://localhost:3000 --path=cucumber
+
+# and
+
+chimp --ddp=http://localhost:3000 --path=cucumber
+
```
## Data source acknowledgements
From fc4155ea49efc8eac97b9dd7da2fdeefbee8600a Mon Sep 17 00:00:00 2001
From: vjrj
Date: Wed, 14 Feb 2018 09:57:37 +0100
Subject: [PATCH 016/313] Prevent QT error in phantom
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 68b572a..3fd1c7b 100644
--- a/package.json
+++ b/package.json
@@ -2,7 +2,7 @@
"name": "tcef",
"private": true,
"scripts": {
- "start": "MONGO_URL=mongodb://localhost:27017/fuegos meteor --settings settings-development.json",
+ "start": "QT_QPA_PLATFORM='' MONGO_URL=mongodb://localhost:27017/fuegos meteor --settings settings-development.json",
"test": "jest"
},
"dependencies": {
From 8809a3e3c8351d47b3fa7437322360a2471cf092 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Wed, 14 Feb 2018 10:26:22 +0100
Subject: [PATCH 017/313] Some work with spiderable
---
cucumber/features/general.feature | 1 -
cucumber/features/pages.feature | 2 ++
cucumber/features/steps_definitions/pages.js | 9 ++++++
imports/ui/components/History/History.js | 7 -----
imports/ui/layouts/App/App.js | 32 +++++++++++++++++++-
5 files changed, 42 insertions(+), 9 deletions(-)
diff --git a/cucumber/features/general.feature b/cucumber/features/general.feature
index c3ea6a8..3cf078d 100644
--- a/cucumber/features/general.feature
+++ b/cucumber/features/general.feature
@@ -11,4 +11,3 @@ Feature: This app should generate a correct sitemap, etc
| fires | Active Fires |
| login | Login |
| signup | Signup |
- # And should be spiderables
diff --git a/cucumber/features/pages.feature b/cucumber/features/pages.feature
index 9814434..ed3f4fe 100644
--- a/cucumber/features/pages.feature
+++ b/cucumber/features/pages.feature
@@ -9,6 +9,7 @@ Feature: Test all secundary pages
| activeFires | Active Fires |
Then I check that all pages works properly
+ @watch
Scenario: Check that all secondary pages work well
Given a list of page urls and contents
| login | Login | true |
@@ -20,6 +21,7 @@ Feature: Test all secundary pages
| fire/inexistent | This page doesn't exist | false |
| fire/Fe26.2**1a0361ed0384f741403682e26b4bbc3850bee24e775da13c9782b22365ea895f*r_3gmVad5vzkeyqPpo6UcA*1s5fFz3iDGKTYP2RCvXMshof00QCHf4ErDl9K2dxoX0u-J-t6scyOWG8pGp3ehg_FfEtyR_kYcEKU3rE0jaSlZbD09TIvhiIJeS3C6Uc8YD-rit0XBrgsVKfYSxKzTRoOYiYFJ8JYd298hMtfiASePjS05Z58hhicyCcJYYRlarqDScG3LiVY3lL5y2nfcdIMNuSjCiKOJWuMkxwd9nR1UHMudLl0hEoy56mPdnHpDYtP9IYUlIOk1LlWBxcmHKifbXeqHu94p8j13Kk20dh2R49Hw3KsSoE9UbWmGQA9wAZXT82301i3rGF5GPAKjlTlRYcWisQurnPwHSVmx3DhUdiYwKGxt4KeaM5QVI4BE9octvE41OOprB_-Il105diQEh2Y9vdvX51ZVWIRfCboICPM6rJb0Oin7U7F1iM-oD_5s3DGnelfM5LGBcKwiB5paMo5M5vdBMaO-zR216cW9yGVXw9IZqHx8xDQWnoHAZjt8NLHeiGF2QOmIGtEUH7qnwhGpkcvszajmAZzR8saZgoH1qfBfvpVA41YfV14gU**4d030f05e23ad75409cebc609107467fc60be5077d52cf041087cd024fc4dc45*GY97aGFc1MyAsoO3Qxqtgwk9j-MbAPdEGBmEHq6r8VU | Additional information | false |
Then I check that all page urls works properly
+ # And they are spiderable
Scenario: Check that other non visible pages work well
Given a list of non visible pages ids and contents
diff --git a/cucumber/features/steps_definitions/pages.js b/cucumber/features/steps_definitions/pages.js
index 1ce3c8c..5074d52 100644
--- a/cucumber/features/steps_definitions/pages.js
+++ b/cucumber/features/steps_definitions/pages.js
@@ -71,4 +71,13 @@ module.exports = function () {
}
callback();
});
+
+ this.Then(/^they are spiderable$/, (callback) => {
+ // Write code here that turns the phrase above into concrete actions
+ for (let i = 0; i < pages.length; i += 1) {
+ client.url(`${process.env.ROOT_URL}/${pages[i][0]}?_escaped_fragment_=`);
+ client.waitForText('#react-root', pages[i][1]);
+ }
+ callback();
+ });
};
diff --git a/imports/ui/components/History/History.js b/imports/ui/components/History/History.js
index f72523c..a33464f 100644
--- a/imports/ui/components/History/History.js
+++ b/imports/ui/components/History/History.js
@@ -1,12 +1,5 @@
-import { Meteor } from 'meteor/meteor';
import createHistory from 'history/createBrowserHistory';
const history = createHistory();
-history.listen((location) => { // , action ) => {
- // console.log(location.pathname);
- // console.log(action); // PUSH, etc
- Meteor.Piwik.trackPage(location.pathname);
-});
-
export default history;
diff --git a/imports/ui/layouts/App/App.js b/imports/ui/layouts/App/App.js
index 9a11c69..f4cfc36 100644
--- a/imports/ui/layouts/App/App.js
+++ b/imports/ui/layouts/App/App.js
@@ -1,7 +1,7 @@
/* eslint-disable jsx-a11y/no-href */
/* eslint import/no-absolute-path: [2, { esmodule: false, commonjs: false, amd: false }] */
-import React from 'react';
+import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Router, Switch, Route } from 'react-router-dom';
import { Grid } from 'react-bootstrap';
@@ -54,11 +54,40 @@ import history from '../../components/History/History';
import '../../components/NotificationsObserver/NotificationsObserver';
import './App.scss';
+class LocationListener extends Component {
+ // https://stackoverflow.com/questions/43512450/react-router-v4-route-onchange-event
+ static contextTypes = {
+ router: PropTypes.object
+ };
+
+ componentDidMount() {
+ this.handleLocationChange(this.context.router.history.location);
+ this.unlisten =
+ this.context.router.history.listen(this.handleLocationChange);
+ }
+
+ componentWillUnmount() {
+ this.unlisten();
+ }
+
+ handleLocationChange(location) {
+ // your staff here
+ console.log(`----- location: '${location.pathname}'`);
+ Meteor.Piwik.trackPage(location.pathname);
+ // Meteor.isReadyForSpiderable = true;
+ }
+
+ render() {
+ return this.props.children;
+ }
+}
+
const App = props => (
/* https://react.i18next.com/components/i18nextprovider.html */
+
{ !props.loading ?
+ );
+ }
+}
+
+Feedback.propTypes = {
+ t: PropTypes.func.isRequired
+};
+
+export default translate([], { wait: true })(Feedback);
diff --git a/imports/ui/components/Feedback/Feedback.scss b/imports/ui/components/Feedback/Feedback.scss
new file mode 100644
index 0000000..5e7b5fb
--- /dev/null
+++ b/imports/ui/components/Feedback/Feedback.scss
@@ -0,0 +1,71 @@
+/* From: https://github.com/spektom/bootstrap-feedback-form */
+@import '../../stylesheets/mixins';
+
+#feedback {
+ position: fixed;
+ z-index: 1000;
+ left: 0;
+ bottom: 0;
+ height: 350px;
+ margin-left: -3px;
+ margin-bottom: 10px;
+ font-size: 12px;
+}
+
+@include breakpoint(tablet) {
+ #feedback {
+ height: 400px;
+ }
+}
+
+#feedback-form {
+ float: left;
+ width: 400px;
+ height: 100%;
+ z-index: 1000;
+ padding-left: 5px;
+ padding-right: 10px;
+ background-clip: padding-box;
+ border: 1px solid rgba(0,0,0,.2);
+ border-radius: 0px;
+ box-shadow: 0 5px 10px rgba(0,0,0,.2);
+}
+
+@include breakpoint(mobile) {
+ #feedback-form {
+ width: 270px;
+ }
+}
+
+#feedback-tab {
+ float: right;
+ color: #fff;
+ font-size: 12px;
+ cursor: pointer;
+ text-align: center;
+ width: 80px;
+ height: 24px;
+ background-color: rgba(0,0,0,0.5);
+ margin-top: 60px;
+ margin-left: -28px;
+ padding-top: 3px;
+ -webkit-border-top-left-radius: 3px;
+ -webkit-border-top-right-radius: 3px;
+ -moz-border-radius-topleft: 3px;
+ -moz-border-radius-topright: 3px;
+ border-top-left-radius: 3px;
+ border-top-right-radius: 3px;
+ -webkit-transform: rotate(90deg);
+ -moz-transform: rotate(90deg);
+ -ms-transform: rotate(90deg);
+ -o-transform: rotate(90deg);
+ transform: rotate(90deg);
+}
+
+#feedback-tab:hover {
+ background-color: rgba(0,0,0,0.4);
+}
+
+#feedback-form textarea {
+ resize: none;
+}
diff --git a/imports/ui/layouts/App/App.js b/imports/ui/layouts/App/App.js
index e80d8cc..ae72672 100644
--- a/imports/ui/layouts/App/App.js
+++ b/imports/ui/layouts/App/App.js
@@ -42,12 +42,13 @@ import NotFound from '../../pages/NotFound/NotFound';
import FiresMap from '../../pages/FiresMap/FiresMap';
import Fires from '../../pages/Fires/Fires';
import Sandbox from '../../pages/Sandbox/Sandbox';
-import Footer from '../../components/Footer/Footer';
import Terms from '../../pages/Terms/Terms';
import Privacy from '../../pages/Privacy/Privacy';
import License from '../../pages/License/License';
import Credits from '../../pages/Credits/Credits';
import ZonesMap from '../../pages/ZonesMap/ZonesMap';
+import Footer from '../../components/Footer/Footer';
+import Feedback from '../../components/Feedback/Feedback';
import ReSendEmail from '../../components/ReSendEmail/ReSendEmail';
import ErrorBoundary from '../../components/ErrorBoundary/ErrorBoundary';
import history from '../../components/History/History';
@@ -138,6 +139,7 @@ const App = props => (
+
{props.i18nReady.get() &&
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index fd4fcd3..0ea5af5 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -190,5 +190,13 @@
"Choose a type",
"Puedes participar en las traducciones":
"You can help with the translations",
- "Aceptar": "Accept"
+ "Aceptar": "Accept",
+ "Por favor, escribe aquí tu feedback...":
+ "Please write your feedback here...",
+ "Feedback":
+ "Feedback",
+ "Enviar":
+ "Send",
+ "Tu correo":
+ "Your e-mail"
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index 49ae9e0..c1beda9 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -277,5 +277,13 @@
"Elige un tipo",
"Puedes participar en las traducciones":
"Puedes participar en las traducciones",
- "Aceptar": "Aceptar"
+ "Aceptar": "Aceptar",
+ "Por favor, escribe aquí tu feedback...":
+ "Por favor, escribe aquí tu feedback...",
+ "Feedback":
+ "Feedback",
+ "Enviar":
+ "Enviar",
+ "Tu correo":
+ "Tu correo"
}
From 169a955b0bb76d696f092264cc8af9afc4a77320 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Sun, 18 Feb 2018 17:33:46 +0100
Subject: [PATCH 042/313] Simple font update
---
fonts.json | 7 +++----
1 file changed, 3 insertions(+), 4 deletions(-)
diff --git a/fonts.json b/fonts.json
index ba2e995..f543f21 100644
--- a/fonts.json
+++ b/fonts.json
@@ -1,10 +1,9 @@
{
"extensions": [ "ttf", "woff", "woff2" ],
"map": {
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff": "fonts/Simple-Line-Icons.woff",
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff": "fonts/Simple-Line-Icons.woff?v=2.4.0",
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff2": "fonts/Simple-Line-Icons.woff2?v=2.4.0",
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.ttf": "fonts/Simple-Line-Icons.ttf?v=2.4.0"
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff": "fonts/Simple-Line-Icons.woff?v=2.4.1",
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff2": "fonts/Simple-Line-Icons.woff2?v=2.4.1",
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.ttf": "fonts/Simple-Line-Icons.ttf?v=2.4.1"
},
"verbose": false
}
From 9115063cdd4f333168e777c0f59160ea5d09c680 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Sun, 18 Feb 2018 17:34:13 +0100
Subject: [PATCH 043/313] Update carousel swipe
---
imports/ui/pages/Index/Index.js | 8 +++-----
package-lock.json | 8 ++++----
package.json | 2 +-
3 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/imports/ui/pages/Index/Index.js b/imports/ui/pages/Index/Index.js
index d353423..27c107a 100644
--- a/imports/ui/pages/Index/Index.js
+++ b/imports/ui/pages/Index/Index.js
@@ -12,7 +12,7 @@ import PropTypes from 'prop-types';
import ReactResizeDetector from 'react-resize-detector';
import _ from 'lodash';
import 'html5-device-mockups/dist/device-mockups.min.css';
-import 'bootstrap-carousel-swipe-haven/carousel-swipe';
+import 'bootstrap-carousel-swipe/carousel-swipe';
import { isAnyMobile } from '/imports/ui/components/Utils/isMobile';
import SubscriptionEditor from '/imports/ui/components/SubscriptionEditor/SubscriptionEditor';
import SubscriptionsMap from '/imports/ui/pages/Subscriptions/SubscriptionsMap';
@@ -36,10 +36,8 @@ class Index extends Component {
}
componentDidMount() {
- const c = $('.carousel');
- if (c.carousel) {
- c.carousel();
- }
+ $('#carouselMainIndicators').carousel();
+ $('#carouselSndIndicators').carousel();
}
onResize() {
diff --git a/package-lock.json b/package-lock.json
index 7aeb4b8..44d1d4c 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -2153,10 +2153,10 @@
"hoek": "4.2.0"
}
},
- "bootstrap-carousel-swipe-haven": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/bootstrap-carousel-swipe-haven/-/bootstrap-carousel-swipe-haven-0.0.7.tgz",
- "integrity": "sha512-Dd033dpeHuW35RQ/8v176aGaJZdr7VvzsGDb878ebU18D0J+v1aDj5MkDYurCEHGIBopbJUBxgO3SKt/jwL6lA=="
+ "bootstrap-carousel-swipe": {
+ "version": "0.0.6",
+ "resolved": "https://registry.npmjs.org/bootstrap-carousel-swipe/-/bootstrap-carousel-swipe-0.0.6.tgz",
+ "integrity": "sha1-FTn+656kduHRDRwwnWWb0WJZ/wo="
},
"brace-expansion": {
"version": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
diff --git a/package.json b/package.json
index 32d4fbb..26191ba 100644
--- a/package.json
+++ b/package.json
@@ -12,7 +12,7 @@
"@turf/union": "^5.1.5",
"babel-runtime": "^6.26.0",
"bcrypt": "^1.0.3",
- "bootstrap-carousel-swipe-haven": "0.0.7",
+ "bootstrap-carousel-swipe": "0.0.6",
"commonmark": "^0.28.1",
"core-js": "^2.5.1",
"crypto-random-hex": "^1.0.0",
From 2c53428f8dffe3725f261d79dc418d58ee3d78e3 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Sun, 18 Feb 2018 17:37:39 +0100
Subject: [PATCH 044/313] Feedback only for auth users
---
imports/ui/layouts/App/App.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/imports/ui/layouts/App/App.js b/imports/ui/layouts/App/App.js
index ae72672..ba9d649 100644
--- a/imports/ui/layouts/App/App.js
+++ b/imports/ui/layouts/App/App.js
@@ -139,7 +139,7 @@ const App = props => (
-
+ { props.authenticated && }
{props.i18nReady.get() &&
From 458627f520fe64b1a2c09ddb7afa05fd321ad14f Mon Sep 17 00:00:00 2001
From: vjrj
Date: Sun, 18 Feb 2018 18:43:40 +0100
Subject: [PATCH 045/313] Fix reconnect translation issues
---
imports/ui/components/Reconnect/Reconnect.js | 29 +++++++++++++++++---
public/locales/en/common.json | 8 +++++-
public/locales/es/common.json | 8 +++++-
3 files changed, 39 insertions(+), 6 deletions(-)
diff --git a/imports/ui/components/Reconnect/Reconnect.js b/imports/ui/components/Reconnect/Reconnect.js
index 3fa35b4..c2fdb04 100644
--- a/imports/ui/components/Reconnect/Reconnect.js
+++ b/imports/ui/components/Reconnect/Reconnect.js
@@ -1,12 +1,33 @@
-import React from 'react';
+/* eslint-disable react/jsx-indent-props */
+/* eslint-disable import/no-absolute-path */
+
+import React, { Component } from 'react';
+import PropTypes from 'prop-types';
import { translate } from 'react-i18next';
import { Meteor } from 'meteor/meteor';
import { Tracker } from 'meteor/tracker';
import Blaze from 'meteor/gadicc:blaze-react-component';
-const Reconnect = props => (
-
-);
+class Reconnect extends Component {
+ render() {
+ const { t } = this.props;
+ return (
+
+ );
+ }
+}
+
+Reconnect.propTypes = {
+ t: PropTypes.func.isRequired
+};
+
+Reconnect.defaultProps = {
+};
export default translate([], { wait: true })(Reconnect);
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index 0ea5af5..fabdf90 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -198,5 +198,11 @@
"Enviar":
"Send",
"Tu correo":
- "Your e-mail"
+ "Your e-mail",
+ "Desconectado del servidor, reconectando en %delay% segundos.":
+ "Disconnected from server, trying to reconnect in %delay%s.",
+ "Desconectado del servidor, reconectando...":
+ "Disconnected from server, trying to reconnect...",
+ "Reintentar ahora":
+ "Retry now"
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index c1beda9..c05ab2f 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -285,5 +285,11 @@
"Enviar":
"Enviar",
"Tu correo":
- "Tu correo"
+ "Tu correo",
+ "Desconectado del servidor, reconectando en %delay% segundos.":
+ "Desconectado del servidor, reconectando en %delay% segundos.",
+ "Desconectado del servidor, reconectando...":
+ "Desconectado del servidor, reconectando...",
+ "Reintentar ahora":
+ "Reintentar ahora"
}
From 719ea435d41bea871db83c9cd4e21d1327513ed0 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Sun, 18 Feb 2018 20:21:26 +0100
Subject: [PATCH 046/313] Feedback not in home and email for non auth users
---
imports/ui/components/Feedback/Feedback.js | 11 ++++++++---
imports/ui/components/Utils/isMobile.js | 3 ++-
imports/ui/layouts/App/App.js | 3 ++-
public/locales/en/common.json | 4 +++-
public/locales/es/common.json | 4 +++-
5 files changed, 18 insertions(+), 7 deletions(-)
diff --git a/imports/ui/components/Feedback/Feedback.js b/imports/ui/components/Feedback/Feedback.js
index af2f845..43277e1 100644
--- a/imports/ui/components/Feedback/Feedback.js
+++ b/imports/ui/components/Feedback/Feedback.js
@@ -8,6 +8,7 @@ import { Meteor } from 'meteor/meteor';
import { translate } from 'react-i18next';
import { FormGroup, Button, FormControl } from 'react-bootstrap';
import { Bert } from 'meteor/themeteorchef:bert';
+import { withTracker } from 'meteor/react-meteor-data';
import validate from '../../../modules/validate';
import './Feedback.scss';
@@ -78,10 +79,11 @@ class Feedback extends Component {
(this.email = email)}
placeholder={this.t('Tu correo')}
+ disabled={this.props.authenticated}
+ defaultValue={this.props.authenticated ? Meteor.user().emails[0].address : ''}
type="email"
/>
@@ -114,7 +116,10 @@ class Feedback extends Component {
}
Feedback.propTypes = {
- t: PropTypes.func.isRequired
+ t: PropTypes.func.isRequired,
+ authenticated: PropTypes.bool.isRequired
};
-export default translate([], { wait: true })(Feedback);
+export default translate([], { wait: true })(withTracker(() => ({
+ authenticated: !!Meteor.userId()
+}))(Feedback));
diff --git a/imports/ui/components/Utils/isMobile.js b/imports/ui/components/Utils/isMobile.js
index 868ba97..4328a3d 100644
--- a/imports/ui/components/Utils/isMobile.js
+++ b/imports/ui/components/Utils/isMobile.js
@@ -1,7 +1,8 @@
import isMobile from 'ismobilejs';
+import { isHome } from './location';
// https://github.com/ReactTraining/react-router/issues/184
-export const isHomeAndMobile = (window.location.pathname === '/' && isMobile.any);
+export const isHomeAndMobile = isHome() && isMobile.any;
export const isNotHomeAndMobile = !isHomeAndMobile;
export const isAnyMobile = isMobile.any;
// https://stackoverflow.com/questions/18625321/detect-webkit-browser-in-javascript
diff --git a/imports/ui/layouts/App/App.js b/imports/ui/layouts/App/App.js
index ba9d649..89d427e 100644
--- a/imports/ui/layouts/App/App.js
+++ b/imports/ui/layouts/App/App.js
@@ -19,6 +19,7 @@ import '/imports/startup/client/ravenLogger';
import '/imports/startup/client/geolocation';
import '/imports/startup/client/piwik-start.js';
import 'simple-line-icons/css/simple-line-icons.css';
+import { isHome } from '/imports/ui/components/Utils/location';
import Reconnect from '../../components/Reconnect/Reconnect';
import Navigation from '../../components/Navigation/Navigation';
import Authenticated from '../../components/Authenticated/Authenticated';
@@ -139,7 +140,7 @@ const App = props => (
- { props.authenticated && }
+ { !isHome() && }
{props.i18nReady.get() &&
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index fabdf90..e51404e 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -204,5 +204,7 @@
"Desconectado del servidor, reconectando...":
"Disconnected from server, trying to reconnect...",
"Reintentar ahora":
- "Retry now"
+ "Retry now",
+ "Feedback recibido, gracias...":
+ "Feedback received, thanks..."
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index c05ab2f..dafe892 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -291,5 +291,7 @@
"Desconectado del servidor, reconectando...":
"Desconectado del servidor, reconectando...",
"Reintentar ahora":
- "Reintentar ahora"
+ "Reintentar ahora",
+ "Feedback recibido, gracias...":
+ "Feedback recibido, gracias..."
}
From 151c792fc6f4e3747b58f1d9102fae6e15b029c2 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Mon, 19 Feb 2018 09:40:40 +0100
Subject: [PATCH 047/313] Disabled feedback in production
---
imports/ui/components/Feedback/Feedback.js | 13 +++++++------
imports/ui/layouts/App/App.js | 9 ++++++---
2 files changed, 13 insertions(+), 9 deletions(-)
diff --git a/imports/ui/components/Feedback/Feedback.js b/imports/ui/components/Feedback/Feedback.js
index 43277e1..c6b8919 100644
--- a/imports/ui/components/Feedback/Feedback.js
+++ b/imports/ui/components/Feedback/Feedback.js
@@ -82,8 +82,8 @@ class Feedback extends Component {
className="form-control"
ref={email => (this.email = email)}
placeholder={this.t('Tu correo')}
- disabled={this.props.authenticated}
- defaultValue={this.props.authenticated ? Meteor.user().emails[0].address : ''}
+ disabled={this.props.emailVerified}
+ defaultValue={this.props.emailVerified ? this.props.emailAddress : ''}
type="email"
/>
@@ -117,9 +117,10 @@ class Feedback extends Component {
Feedback.propTypes = {
t: PropTypes.func.isRequired,
- authenticated: PropTypes.bool.isRequired
+ emailAddress: PropTypes.string,
+ emailVerified: PropTypes.bool.isRequired
};
-
-export default translate([], { wait: true })(withTracker(() => ({
- authenticated: !!Meteor.userId()
+export default translate([], { wait: true })(withTracker(props => ({
+ emailAddress: props.emailAddress,
+ emailVerified: props.emailVerified
}))(Feedback));
diff --git a/imports/ui/layouts/App/App.js b/imports/ui/layouts/App/App.js
index 89d427e..4089c65 100644
--- a/imports/ui/layouts/App/App.js
+++ b/imports/ui/layouts/App/App.js
@@ -140,8 +140,8 @@ const App = props => (
- { !isHome() && }
-
+ { Meteor.isDevelopment && !props.isHome && }
+
{props.i18nReady.get() &&
}
@@ -162,7 +162,8 @@ App.propTypes = {
i18nReady: PropTypes.object.isRequired,
userId: PropTypes.string,
emailAddress: PropTypes.string,
- emailVerified: PropTypes.bool.isRequired
+ emailVerified: PropTypes.bool.isRequired,
+ isHome: PropTypes.bool.isRequired
};
const getUserName = name => ({
@@ -178,6 +179,7 @@ export default withTracker(() => {
const name = user && user.profile && user.profile.name && getUserName(user.profile.name);
const emailAddress = user && user.emails && user.emails[0].address;
// console.log(`i18n ready?: ${i18nReady.get()}`);
+ console.log(`isHome?: ${isHome()}`);
return {
loading,
loggingIn,
@@ -187,6 +189,7 @@ export default withTracker(() => {
roles: !loading && Roles.getRolesForUser(userId),
userId,
emailAddress,
+ isHome: isHome(),
emailVerified: user && user.emails ? user && user.emails && user.emails[0].verified : true
};
})(App);
From 4b9d742b9b6e920ca7e767916dc6541f687c7050 Mon Sep 17 00:00:00 2001
From: marcos
Date: Mon, 19 Feb 2018 16:01:43 +0100
Subject: [PATCH 048/313] errata en radio
---
imports/ui/components/SubscriptionEditor/SubscriptionEditor.js | 2 +-
public/locales/en/common.json | 2 +-
public/locales/es/common.json | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/imports/ui/components/SubscriptionEditor/SubscriptionEditor.js b/imports/ui/components/SubscriptionEditor/SubscriptionEditor.js
index f391402..f846aca 100644
--- a/imports/ui/components/SubscriptionEditor/SubscriptionEditor.js
+++ b/imports/ui/components/SubscriptionEditor/SubscriptionEditor.js
@@ -58,7 +58,7 @@ class SubscriptionEditor extends React.Component {
zoom={this.state.zoom}
distance={doc.distance}
focusInput={focus}
- subsBtn={isEdit ? t('Actualizar') : t('Subscribirme a fuegos en este rádio')}
+ subsBtn={isEdit ? t('Actualizar') : t('Subscribirme a fuegos en este radio')}
onSubs={state => this.onSubs(state)}
/>
);
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index e51404e..def8ec6 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -78,7 +78,7 @@
"Nuevas notificaciones de {{app}}": "New notifications of {{app}}",
"Mis zonas": "My areas",
"Nueva zona": "New area",
- "Subscribirme a fuegos en este rádio": "Subscribe to fires in this radio",
+ "Subscribirme a fuegos en este radio": "Subscribe to fires in this radio",
"Créditos": "Credits",
"Escribe aquí un lugar": "Write here a place",
"Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):": "Tell us the position of the area to be monitored (eg your town, a street, etc.):",
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index dafe892..c5e1efa 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -138,7 +138,7 @@
"Suscripción actualizada",
"Mis zonas": "Mis zonas",
"Nueva zona": "Nueva zona",
- "Subscribirme a fuegos en este rádio": "Subscribirme a fuegos en este rádio",
+ "Subscribirme a fuegos en este radio": "Subscribirme a fuegos en este radio",
"Créditos": "Créditos",
"Escribe aquí un lugar": "Escribe aquí un lugar",
"Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):": "Indícanos la posición de la zona a vigilar (por ej. tu pueblo, una calle, etc):",
From 8b26accb788fdbeb88cefd43c7097e14c38e4201 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Mon, 19 Feb 2018 16:12:09 +0100
Subject: [PATCH 049/313] Minor changes in individual Fire map style/usability
---
imports/ui/pages/Fires/Fires.js | 3 ++-
imports/ui/pages/Fires/Fires.scss | 7 ++++---
2 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/imports/ui/pages/Fires/Fires.js b/imports/ui/pages/Fires/Fires.js
index a892181..662b234 100644
--- a/imports/ui/pages/Fires/Fires.js
+++ b/imports/ui/pages/Fires/Fires.js
@@ -100,7 +100,8 @@ class Fire extends React.Component {
center={[fire.lat, fire.lon]}
color="red"
fillColor="red"
- fillOpacity={0.1}
+ fillOpacity={0.0}
+ interactive={false}
radius={fire.scan ? fire.scan * 1000 : 300}
/>
diff --git a/imports/ui/pages/Fires/Fires.scss b/imports/ui/pages/Fires/Fires.scss
index a2577ec..213d9e8 100644
--- a/imports/ui/pages/Fires/Fires.scss
+++ b/imports/ui/pages/Fires/Fires.scss
@@ -2,7 +2,7 @@
@import '../../stylesheets/mixins';
.fire-leaflet-container {
- min-height: 30vh;
+ min-height: 40vh;
min-width: 40vw;
width: 50%;
margin: 0 0 10px 10px !important;
@@ -11,7 +11,8 @@
}
.ViewFire > h4.page-header {
- line-height: 1.3em;
+ line-height: 1.3em;
+ font-size: 1.5em;
}
@media (max-width: 768px) {
@@ -28,4 +29,4 @@
border-color: #fdfdfe;
padding: 10px;
border-radius: 3px; */
-}
\ No newline at end of file
+}
From 8af9bec79c9339f68eeed9f558f0cb9154af0a28 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Mon, 19 Feb 2018 16:31:05 +0100
Subject: [PATCH 050/313] Trying to fix fonts issue 'Failed to decode
downloaded' because of wrong path
---
fonts.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/fonts.json b/fonts.json
index f543f21..81a6ae1 100644
--- a/fonts.json
+++ b/fonts.json
@@ -1,9 +1,9 @@
{
"extensions": [ "ttf", "woff", "woff2" ],
"map": {
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff": "fonts/Simple-Line-Icons.woff?v=2.4.1",
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff2": "fonts/Simple-Line-Icons.woff2?v=2.4.1",
- "node_modules/simple-line-icons/fonts/Simple-Line-Icons.ttf": "fonts/Simple-Line-Icons.ttf?v=2.4.1"
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff": "/fonts/Simple-Line-Icons.woff?v=2.4.1",
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.woff2": "/fonts/Simple-Line-Icons.woff2?v=2.4.1",
+ "node_modules/simple-line-icons/fonts/Simple-Line-Icons.ttf": "/fonts/Simple-Line-Icons.ttf?v=2.4.1"
},
"verbose": false
}
From 34e0132c4673e524d1035470eea926c9a88ee599 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Mon, 19 Feb 2018 21:20:20 +0100
Subject: [PATCH 051/313] Doble check state in subscriptions
---
imports/ui/pages/Subscriptions/Subscriptions.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/imports/ui/pages/Subscriptions/Subscriptions.js b/imports/ui/pages/Subscriptions/Subscriptions.js
index f9b3cc6..78fbcad 100644
--- a/imports/ui/pages/Subscriptions/Subscriptions.js
+++ b/imports/ui/pages/Subscriptions/Subscriptions.js
@@ -20,8 +20,8 @@ class Subscriptions extends Component {
constructor(props) {
super(props);
this.t = props.t;
- if (props.location.state) {
- const received = props.location.state;
+ const received = props.location.state;
+ if (received && received.location && received.location.lat && received.location.lon && received.distance) {
props.history.push(`${this.props.match.url}/new`, {
location: received.location,
distance: received.distance,
From c962d12374b85c5ca273eb74e93463f6c199ef12 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Mon, 19 Feb 2018 21:20:34 +0100
Subject: [PATCH 052/313] Better notifications
---
private/email-templates/new-fire-en.html | 7 +++++++
private/email-templates/new-fire-en.txt | 4 ++++
private/email-templates/new-fire-es.html | 7 +++++++
private/email-templates/new-fire-es.txt | 4 ++++
4 files changed, 22 insertions(+)
diff --git a/private/email-templates/new-fire-en.html b/private/email-templates/new-fire-en.html
index 18b97a9..b0f7fcb 100644
--- a/private/email-templates/new-fire-en.html
+++ b/private/email-templates/new-fire-en.html
@@ -298,6 +298,13 @@
+ Is not it a forest fire? In the previous link you can tell us what kind of fire it is and help us improve our notifications.
+
+ You can also add comments on that link if you have additional information about this fire (how to access that area, if you know how the fire originated, etc).
+
+
+
+
Thanks!
{{applicationName}} Team
diff --git a/private/email-templates/new-fire-en.txt b/private/email-templates/new-fire-en.txt
index 61c9eb6..1b00d23 100644
--- a/private/email-templates/new-fire-en.txt
+++ b/private/email-templates/new-fire-en.txt
@@ -4,6 +4,10 @@ Hey, {{firstName}}!
[More information about this fire]({{fireUrl}})
+Isn't it a forest fire? In the previous link you can tell us what kind of fire it is and help us improve our notifications.
+
+You can also add comments on that link if you have additional information about this fire (how to access that area, if you know how the fire originated, etc).
+
Thanks!
{{applicationName}} Team
diff --git a/private/email-templates/new-fire-es.html b/private/email-templates/new-fire-es.html
index b4eafe5..e254a8a 100644
--- a/private/email-templates/new-fire-es.html
+++ b/private/email-templates/new-fire-es.html
@@ -298,6 +298,13 @@
+ ¿No es un fuego forestal? En el enlace anterior puedes indicarnos de que tipo de fuego se trata y ayudarnos así a mejorar nuestras notificaciones.
+
+ También puedes añadir comentarios en ese enlace si tienes información adicional sobre este fuego (cómo acceder a esa zona, si conoces cómo se originó el fuego, etc).
+
+
+
+
Gracias!
El equipo de {{applicationName}}
diff --git a/private/email-templates/new-fire-es.txt b/private/email-templates/new-fire-es.txt
index 15a4392..36bb3b9 100644
--- a/private/email-templates/new-fire-es.txt
+++ b/private/email-templates/new-fire-es.txt
@@ -4,6 +4,10 @@ Hola, {{firstName}}!
[Más información sobre este fuego]({{fireUrl}})
+¿No es un fuego forestal? En el enlace anterior puedes indicarnos de que tipo de fuego se trata y ayudarnos así a mejorar nuestras notificaciones.
+
+También puedes añadir comentarios en ese enlace si tienes información adicional sobre este fuego (cómo acceder a esa zona, si conoces cómo se originó el fuego, etc).
+
Gracias!
El equipo de {{applicationName}}
From f0bf995584ae1e2cb6fb191f55791e8282a34f91 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 20 Feb 2018 07:55:26 +0100
Subject: [PATCH 053/313] Fire page now shows also false positives
---
.../api/ActiveFires/server/publications.js | 32 ++-----------------
imports/api/FalsePositives/FalsePositives.js | 11 +++++++
.../api/FalsePositives/server/publications.js | 29 +++++++++++++++++
imports/api/Fires/server/publications.js | 6 ++--
imports/ui/pages/Fires/Fires.js | 22 ++++++++++++-
imports/ui/pages/FiresMap/FiresMap.js | 18 +++--------
public/locales/en/common.json | 4 ++-
public/locales/es/common.json | 4 ++-
8 files changed, 77 insertions(+), 49 deletions(-)
diff --git a/imports/api/ActiveFires/server/publications.js b/imports/api/ActiveFires/server/publications.js
index b0b2329..6fd66eb 100644
--- a/imports/api/ActiveFires/server/publications.js
+++ b/imports/api/ActiveFires/server/publications.js
@@ -4,10 +4,8 @@
import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';
-import L from 'leaflet-headless';
import { NumberBetween } from '/imports/modules/server/other-checks';
-import FalsePositives from '/imports/api/FalsePositives/FalsePositives';
-import calcUnion from '/imports/ui/components/Maps/SubsUnion/Unify';
+import { whichAreFalsePositives } from '/imports/api/FalsePositives/server/publications';
import ActiveFires from '../ActiveFires';
const counter = new Counter('countActiveFires', ActiveFires.find({}));
@@ -16,27 +14,6 @@ Meteor.publish('activefirestotal', function total() {
return counter;
});
-const falsePositives = (fires) => {
- const falsePos = FalsePositives.find({
- geo: {
- $geoWithin: {
- $geometry: fires.geometry
- }
- }
- }, {
- fields: {
- geo: 1,
- // type: 1,
- // when: 1,
- fireId: 1
- }
- });
-
- /* console.log(`False positive total: ${falsePos.count()}`);
- console.log(`False positives: ${JSON.stringify(falsePos.fetch())}`); */
- return falsePos;
-};
-
const activefires = (northEastLng, northEastLat, southWestLng, southWestLat, withMarks) => {
const fires = ActiveFires.find({
ourid: {
@@ -60,12 +37,7 @@ const activefires = (northEastLng, northEastLat, southWestLng, southWestLat, wit
// console.log(`Fires total: ${fires.count()}`);
if (withMarks && fires.fetch().length > 0) {
- const group = new L.FeatureGroup();
- const remap = fires.fetch().map(function remap(doc) {
- return { location: { lat: doc.lat, lon: doc.lon }, distance: doc.scan };
- });
- const result = calcUnion(remap, group, sub => sub);
- const falsePos = falsePositives(result[0]);
+ const falsePos = whichAreFalsePositives(fires);
return [fires, falsePos];
}
diff --git a/imports/api/FalsePositives/FalsePositives.js b/imports/api/FalsePositives/FalsePositives.js
index 592fe12..eead435 100644
--- a/imports/api/FalsePositives/FalsePositives.js
+++ b/imports/api/FalsePositives/FalsePositives.js
@@ -34,4 +34,15 @@ FalsePositives.schema = new SimpleSchema({
FalsePositives.attachSchema(FalsePositives.schema);
+export const falsePositivesRemap = (odoc) => {
+ const doc = odoc;
+ const geo = doc.geo;
+ doc.lat = geo.coordinates[1];
+ doc.lon = geo.coordinates[0];
+ doc._id = doc.fireId;
+ doc.id = doc.fireId;
+ delete doc.geo;
+ return doc;
+};
+
export default FalsePositives;
diff --git a/imports/api/FalsePositives/server/publications.js b/imports/api/FalsePositives/server/publications.js
index 9585907..18305c4 100644
--- a/imports/api/FalsePositives/server/publications.js
+++ b/imports/api/FalsePositives/server/publications.js
@@ -5,6 +5,8 @@
import { Meteor } from 'meteor/meteor';
import { check } from 'meteor/check';
import { NumberBetween } from '/imports/modules/server/other-checks';
+import L from 'leaflet-headless';
+import calcUnion from '/imports/ui/components/Maps/SubsUnion/Unify';
import FalsePositives from '../FalsePositives';
const counter = new Counter('countFalsePositives', FalsePositives.find({}));
@@ -13,6 +15,33 @@ Meteor.publish('falsePositivesTotal', function total() {
return counter;
});
+export const whichAreFalsePositives = (fires) => {
+ const group = new L.FeatureGroup();
+ const remap = fires.fetch().map(function remap(doc) {
+ return { location: { lat: doc.lat, lon: doc.lon }, distance: doc.scan };
+ });
+ const result = calcUnion(remap, group, sub => sub);
+
+ const falsePos = FalsePositives.find({
+ geo: {
+ $geoWithin: {
+ $geometry: result[0].geometry
+ }
+ }
+ }, {
+ fields: {
+ geo: 1,
+ // type: 1,
+ // when: 1,
+ fireId: 1
+ }
+ });
+
+ /* console.log(`False positive total: ${falsePos.count()}`);
+ console.log(`False positives: ${JSON.stringify(falsePos.fetch())}`); */
+ return falsePos;
+};
+
const falsePositives = (northEastLng, northEastLat, southWestLng, southWestLat) => {
const fires = FalsePositives.find({
geo: {
diff --git a/imports/api/Fires/server/publications.js b/imports/api/Fires/server/publications.js
index 0f0b80c..1dba8dc 100644
--- a/imports/api/Fires/server/publications.js
+++ b/imports/api/Fires/server/publications.js
@@ -9,6 +9,7 @@ import NodeGeocoder from 'node-geocoder';
import { gmapServerKey } from '/imports/startup/server/IPGeocoder';
import ActiveFiresCollection from '/imports/api/ActiveFires/ActiveFires';
import FireAlertsCollection from '/imports/api/FireAlerts/FireAlerts';
+import { whichAreFalsePositives } from '/imports/api/FalsePositives/server/publications';
import FiresCollection from '../Fires';
function findFire(unsealed) {
@@ -114,13 +115,14 @@ Meteor.publish('fireFromId', function fireFromId(_id) {
const fire = FiresCollection.find(new Meteor.Collection.ObjectID(_id));
if (fire.count() !== 0) {
// console.info(`Archive fire found: ${_id}`);
- return fire;
+ const falsePos = whichAreFalsePositives(fire);
+ return [fire, falsePos];
}
console.info(`Fire not found: ${_id}`);
// Not found in active fires!
return this.ready();
} catch (e) {
- console.info(`Active fire not found (with error): ${_id}`);
+ console.info(`Archive fire not found (with error): ${_id}`);
return this.ready();
}
});
diff --git a/imports/ui/pages/Fires/Fires.js b/imports/ui/pages/Fires/Fires.js
index 662b234..528e476 100644
--- a/imports/ui/pages/Fires/Fires.js
+++ b/imports/ui/pages/Fires/Fires.js
@@ -6,7 +6,7 @@ import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { withTracker } from 'meteor/react-meteor-data';
import { translate, Trans } from 'react-i18next';
-import { FormGroup } from 'react-bootstrap';
+import { Row, Col, Alert, FormGroup } from 'react-bootstrap';
import { Meteor } from 'meteor/meteor';
import { Bert } from 'meteor/themeteorchef:bert';
import { Helmet } from 'react-helmet';
@@ -15,10 +15,12 @@ import Blaze from 'meteor/gadicc:blaze-react-component';
import DefMapLayers from '/imports/ui/components/Maps/DefMapLayers';
import NotFound from '/imports/ui/pages/NotFound/NotFound';
import FiresCollection from '/imports/api/Fires/Fires';
+import FireList from '/imports/ui/components/Maps/FireList';
import FromNow from '/imports/ui/components/FromNow/FromNow';
import { dateLongFormat } from '/imports/api/Common/dates';
import '/imports/startup/client/comments';
import FalsePositiveTypes from '/imports/api/FalsePositives/FalsePositiveTypes';
+import FalsePositivesCollection, { falsePositivesRemap } from '/imports/api/FalsePositives/FalsePositives';
import ShareIt from '/imports/ui/components/ShareIt/ShareIt';
import './Fires.scss';
@@ -67,6 +69,7 @@ class Fire extends React.Component {
const {
notfound, loading, fire, t
} = this.props;
+ if (Meteor.isDevelopment) console.log(`False positives total: ${this.props.falsePositives.length}`);
/* console.log(`loading fire: ${loading}`);
* console.log(`Not found fire: ${notfound}`); */
if (fire && fire.when) {
@@ -105,6 +108,15 @@ class Fire extends React.Component {
radius={fire.scan ? fire.scan * 1000 : 300}
/>
+
{t('Coordenadas:')} {fire.lat}, {fire.lon}
@@ -119,6 +131,11 @@ class Fire extends React.Component {
{(fire.type !== 'vecinal') &&
+
+
+ Parece que este fuego no es un fuego forestal.
+
+
{t('¿No es un fuego forestal?')}
Indícanos de que tipo de fuego se trata y ayúdanos así a mejorar nuestras notificaciones:
@@ -172,6 +189,7 @@ Fire.propTypes = {
history: PropTypes.object.isRequired,
loading: PropTypes.bool.isRequired,
notfound: PropTypes.bool.isRequired,
+ falsePositives: PropTypes.arrayOf(PropTypes.object).isRequired,
fromHash: PropTypes.bool.isRequired,
active: PropTypes.bool.isRequired,
alert: PropTypes.bool.isRequired,
@@ -211,11 +229,13 @@ const FireContainer = withTracker(({ match }) => {
const notfound = !loading && FiresCollection.find().count() === 0;
/* console.log(`loading fire: ${loading}`);
* console.log(`Not found fire: ${notfound}`); */
+ const falsePositives = FalsePositivesCollection.find().fetch().map(falsePositivesRemap);
return {
loading,
active,
alert,
fromHash,
+ falsePositives,
fire: FiresCollection.findOne(),
notfound,
when: subscription.ready() && FiresCollection.findOne() ? FiresCollection.findOne().when : null
diff --git a/imports/ui/pages/FiresMap/FiresMap.js b/imports/ui/pages/FiresMap/FiresMap.js
index afd5dcd..da3605a 100644
--- a/imports/ui/pages/FiresMap/FiresMap.js
+++ b/imports/ui/pages/FiresMap/FiresMap.js
@@ -27,7 +27,7 @@ import DefMapLayers from '/imports/ui/components/Maps/DefMapLayers';
import FromNow from '/imports/ui/components/FromNow/FromNow';
import ActiveFiresCollection from '/imports/api/ActiveFires/ActiveFires';
import FireAlertsCollection from '/imports/api/FireAlerts/FireAlerts';
-import FalsePositivesCollection from '/imports/api/FalsePositives/FalsePositives';
+import FalsePositivesCollection, { falsePositivesRemap } from '/imports/api/FalsePositives/FalsePositives';
import SiteSettings from '/imports/api/SiteSettings/SiteSettings';
import { isNotHomeAndMobile, isChrome } from '/imports/ui/components/Utils/isMobile';
import { isHome } from '/imports/ui/components/Utils/location';
@@ -185,9 +185,8 @@ class FiresMap extends React.Component {
console.log(`Rendering ${this.props.loading ? 'loading' : 'LOADED'}, zoom ${this.state.viewport.zoom}, map ${this.props.activefires.length + this.props.firealerts.length} of ${this.props.activefirestotal} total. False positives: ${this.props.falsePositives.length}. Reactive ${this.state.viewport.zoom >= MAXZOOMREACTIVE}`);
const title = `${t('AppName')}: ${t('Fuegos activos')}`;
- if (Meteor.isDevelopment) {
- console.log(`False positives total: ${this.props.falsePositives.length}`);
- }
+ if (Meteor.isDevelopment) console.log(`False positives total: ${this.props.falsePositives.length}`);
+
return (
/* Large number of markers:
https://stackoverflow.com/questions/43015854/large-dataset-of-markers-or-dots-in-leaflet/43019740#43019740 */
@@ -375,16 +374,7 @@ export default translate([], { wait: true })(withTracker(() => {
const userSubs = SiteSettings.findOne({ name: 'subs-public-union' });
const userSubsBounds = SiteSettings.findOne({ name: 'subs-public-union-bounds' });
const fireAlerts = FireAlertsCollection.find().fetch();
- const falsePositives = FalsePositivesCollection.find().fetch().map((odoc) => {
- const doc = odoc;
- const geo = doc.geo;
- doc.lat = geo.coordinates[1];
- doc.lon = geo.coordinates[0];
- doc._id = doc.fireId;
- doc.id = doc.fireId;
- delete doc.geo;
- return doc;
- });
+ const falsePositives = FalsePositivesCollection.find().fetch().map(falsePositivesRemap);
return {
loading: !subscription ? true : !(subscription.ready() && settingsSubs.ready() && alertSubscription.ready()),
userSubs: userSubs ? userSubs.value : null,
diff --git a/public/locales/en/common.json b/public/locales/en/common.json
index def8ec6..1503c3f 100644
--- a/public/locales/en/common.json
+++ b/public/locales/en/common.json
@@ -206,5 +206,7 @@
"Reintentar ahora":
"Retry now",
"Feedback recibido, gracias...":
- "Feedback received, thanks..."
+ "Feedback received, thanks...",
+ "Parece que este fuego no es un fuego forestal.":
+ "It seems that this is not a forest fire."
}
diff --git a/public/locales/es/common.json b/public/locales/es/common.json
index c5e1efa..c36bc8b 100644
--- a/public/locales/es/common.json
+++ b/public/locales/es/common.json
@@ -293,5 +293,7 @@
"Reintentar ahora":
"Reintentar ahora",
"Feedback recibido, gracias...":
- "Feedback recibido, gracias..."
+ "Feedback recibido, gracias...",
+ "Parece que este fuego no es un fuego forestal.":
+ "Parece que este fuego no es un fuego forestal."
}
From 4d52b6c8e09a6cd38d61055bd122185dfb8dfe4f Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 20 Feb 2018 09:10:44 +0100
Subject: [PATCH 054/313] Fire page now shows also false positives
---
imports/ui/pages/Fires/Fires.js | 11 ++++++-----
1 file changed, 6 insertions(+), 5 deletions(-)
diff --git a/imports/ui/pages/Fires/Fires.js b/imports/ui/pages/Fires/Fires.js
index 528e476..9ce3e44 100644
--- a/imports/ui/pages/Fires/Fires.js
+++ b/imports/ui/pages/Fires/Fires.js
@@ -131,11 +131,12 @@ class Fire extends React.Component {
{(fire.type !== 'vecinal') &&
-
-
- Parece que este fuego no es un fuego forestal.
-
-
+ { this.props.falsePositives.length > 0 &&
+
+
+ Parece que este fuego no es un fuego forestal.
+
+ }
{t('¿No es un fuego forestal?')}
Indícanos de que tipo de fuego se trata y ayúdanos así a mejorar nuestras notificaciones:
From e980bbdb2477d53f6db675768790e3925ffb7178 Mon Sep 17 00:00:00 2001
From: vjrj
Date: Tue, 20 Feb 2018 09:11:07 +0100
Subject: [PATCH 055/313] Less clicks to show fire info
---
imports/ui/components/Maps/FireIconMark.js | 72 +++++++++++++---------
imports/ui/components/Maps/FirePopup.js | 14 +----
2 files changed, 45 insertions(+), 41 deletions(-)
diff --git a/imports/ui/components/Maps/FireIconMark.js b/imports/ui/components/Maps/FireIconMark.js
index 5e8af68..9817666 100644
--- a/imports/ui/components/Maps/FireIconMark.js
+++ b/imports/ui/components/Maps/FireIconMark.js
@@ -1,38 +1,54 @@
/* eslint-disable import/no-absolute-path */
-import React, { Fragment } from 'react';
+import React, { Component, Fragment } from 'react';
import { CircleMarker, Marker, Tooltip } from 'react-leaflet';
import PropTypes from 'prop-types';
import { fireIcon, nFireIcon, industryIcon } from '/imports/ui/components/Maps/Icons';
import { translate } from 'react-i18next';
import FirePopup from './FirePopup';
-const FireIconMark = ({
- lat,
- lon,
- nasa,
- id,
- history,
- falsePositives,
- when,
- t
-}) => (
-
- { !falsePositives &&
-
-
- }
- { falsePositives &&
-
- {t('Es una industria')}
- { /* disabled because was a past fire (and can be marked multiple times) */ false && }
-
- }
- { !falsePositives &&
-
-
- }
-