diff --git a/scss/ionic.app.scss b/scss/ionic.app.scss index 43045ee2c70a82f2cc1c59c3880b50da9adb1a19..a3a914f7940223cfdc749486cd605734ee684222 100644 --- a/scss/ionic.app.scss +++ b/scss/ionic.app.scss @@ -1050,6 +1050,13 @@ html, body { } } +.popup-container.large { + .popup { + min-width: 250px !important; + width: 350px !important; + } +} + /****** * 'ion-refresher' *******/ @@ -1679,6 +1686,10 @@ a.underline:hover, } } +.item.item-no-border { + border-width: 0; +} + .list .item.item-border { border-bottom: solid 1px #ccc !important; margin-bottom: 1px; @@ -2026,7 +2037,27 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0"; border: solid 1px #D9D9D9; } +/********** + Demo +**********/ +#menu .badge-demo { + font-size: 12px; + font-weight: bold; + color: whitesmoke !important; + position: absolute; + top: 10px; + left: 1px; + padding: 0 4px; + text-transform: uppercase; + transform-origin: 26px 5px; + transform: rotate(-10deg); +} +#menu .badge-demo:hover { + font-size: 13px; + padding: 1px 4px; + transform: rotate(-15deg); +} /********** Help **********/ @@ -2058,6 +2089,14 @@ $ionicon-var-badge-editable: $ionicon-var-edit + "\00a0"; top: 8px; z-index: 99; } +#menu .footer .icon-help:hover { + @extend .ion-ios-help; + color: $positive !important; + font-size: 31px !important; + top: 6px; + left: 11px; + transform: rotate(10deg); +} /********** Help Tip diff --git a/www/css/style.css b/www/css/style.css index 2f51cd6b878ccd899b51fb7d38300b2daf68021a..6ec81672f35e1d73d8bfd67fca887f8ded98a225 100644 --- a/www/css/style.css +++ b/www/css/style.css @@ -80,7 +80,6 @@ text-align: center; } - .col-pubkey { min-width: 130px !important; } diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json index a3a0ca536e964c01710ee53c2845f123154d47e2..ccfcf0069a38431fe8ec257ec26bd10df32b4fbb 100644 --- a/www/i18n/locale-en-GB.json +++ b/www/i18n/locale-en-GB.json @@ -796,7 +796,6 @@ "REVOCATION_SENT": "Revocation sent successfully", "REVOCATION_SENT_WAITING_PROCESS": "Revocation <b>has been sent successfully</b>. It is awaiting processing.", "FEATURES_NOT_IMPLEMENTED": "This features is not implemented yet.<br/><br/>Why not to contribute to get it faster? ;)", - "FEATURE_NOT_AVAILABLE_ON_DEMO": "Functionality not available on this demonstration site.<br/>For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help.", "EMPTY_TX_HISTORY": "No operations to export" }, "CONFIRM": { @@ -826,6 +825,13 @@ "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?", "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>" }, + "DEMO": { + "BADGE": "Demo", + "MODE": "Mode demonstration", + "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.", + "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation is on account is available, but no account operation can be performed.", + "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help." + }, "DOWNLOAD": { "POPUP_TITLE": "<b>Revocation file</b>", "POPUP_REVOKE_MESSAGE": "To safeguard your account, please download the <b>account revocation document</b>. It will allow you to cancel your account (in case of account theft, ID, an incorrectly created account, etc.).<br/><br/><b>Please store it in a safe place.</b>" diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json index e8caad172f8d0e74b387cd108f22bb869f7cfb14..b2e4e80f8a2a902078d0d1bdd2b62ce0eed8bc16 100644 --- a/www/i18n/locale-en.json +++ b/www/i18n/locale-en.json @@ -796,7 +796,6 @@ "REVOCATION_SENT": "Revocation sent successfully", "REVOCATION_SENT_WAITING_PROCESS": "Revocation <b>has been sent successfully</b>. It is awaiting processing.", "FEATURES_NOT_IMPLEMENTED": "This features is not implemented yet.<br/><br/>Why not to contribute to get it faster? ;)", - "FEATURE_NOT_AVAILABLE_ON_DEMO": "Functionality not available on this demonstration site.<br/>For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help.", "EMPTY_TX_HISTORY": "No operations to export" }, "CONFIRM": { @@ -826,6 +825,13 @@ "USE_FALLBACK_NODE": "Peer <b>{{old}}</b> unreachable or invalid address.<br/><br/>Do you want to temporarily use the <b>{{new}}</b> node?", "ISSUE_524_SEND_LOG": "The transaction was rejected because of a known problem (issue #524) but not reproduced.<br/><br/>To help developers correct this error, do you accept <b>the transmission of your logs</b> per message?<br/><small>(No confidential data is sent)</small>" }, + "DEMO": { + "BADGE": "Demo", + "MODE": "Mode demonstration", + "FEATURE_NOT_AVAILABLE": "Functionality <b>not available</b> on this demonstration site.", + "MODE_HELP": "Cesium works in <b>demonstration mode</b>: consultation is on account is available, but no account operation can be performed.", + "INSTALL_HELP": "For <b>security reasons</b> we recommend <b>installing</b> your copy of the software.<br/> Visit the site <a href='https://cesium.app'>www.cesium.app</a> for help." + }, "DOWNLOAD": { "POPUP_TITLE": "<b>Revocation file</b>", "POPUP_REVOKE_MESSAGE": "To safeguard your account, please download the <b>account revocation document</b>. It will allow you to cancel your account (in case of account theft, ID, an incorrectly created account, etc.).<br/><br/><b>Please store it in a safe place.</b>" diff --git a/www/i18n/locale-es-ES.json b/www/i18n/locale-es-ES.json index 0ea2c77f7230ee17e304071d94d84cae21bbd6d3..8d1f453e0e4269b77760f9effca364f65d6ff7b6 100644 --- a/www/i18n/locale-es-ES.json +++ b/www/i18n/locale-es-ES.json @@ -887,17 +887,16 @@ "REVOCATION_SENT": "Revocación enviada", "REVOCATION_SENT_WAITING_PROCESS": "La <b>revocación de esta identidad</b> fue solicitada y está en espera de ser procesada.", "FEATURES_NOT_IMPLEMENTED": "Esta funcionalidad todavÃa está en proceso de desarrollo.<br/><br/>¿Por qué no <b>contribuir a Cesium</b>, para obtenerla más rápido? ;)", - "FEATURE_NOT_AVAILABLE_ON_DEMO": "Funcionalidad no disponible en este sitio de demostración.<br/>Por <b>razones de seguridad</b> recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda.", "EMPTY_TX_HISTORY": "Ninguna operación a exportar" }, "CONFIRM": { - "EXIT_APP": "¿ Cerrar la aplicación ?", - "FULLSCREEN": "¿ Mostrar la aplicación en pantalla completa ?", - "ISSUE_524_SEND_LOG": "La transacción ha sido rechazada a causa de una anomalÃa conocida (ticket #524) pero todavÃa <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envÃo de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>.", "POPUP_TITLE": "<b>Confirmación</b>", "POPUP_WARNING_TITLE": "<b>Advertencia</b>", "POPUP_SECURITY_WARNING_TITLE": "<i class=\"icon ion-alert-circled\"></i> <b>Advertencia de seguridad</b>", - "CERTIFY_RULES_TITLE_UID": "Certificar {{uid}}", "CERTIFY_RULES": "<b class=\"assertive\">NO CERTIFICAR</b> una cuenta si piensa que :<br/><br/><ul><li>1.) no corresponde a una persona <b>fÃsica y viva</b>.<li>2.) su propietario <b>posee otra cuenta</b> ya certificada.<li>3.) su propietario viola (voluntariamente o no) la regla 1 o 2 (por ejemplo certificando cuentas falsas o duplicadas).</ul><br/><b>¿Desea</b> todavÃa certificar esta identidad?", + "CERTIFY_RULES_TITLE_UID": "Certificar {{uid}}", + "CERTIFY_RULES": "<b class=\"assertive\">NO CERTIFICAR</b> una cuenta si piensa que :<br/><br/><ul><li>1.) no corresponde a una persona <b>fÃsica y viva</b>.<li>2.) su propietario <b>posee otra cuenta</b> ya certificada.<li>3.) su propietario viola (voluntariamente o no) la regla 1 o 2 (por ejemplo certificando cuentas falsas o duplicadas).</ul><br/><b>¿Desea</b> todavÃa certificar esta identidad?", + "FULLSCREEN": "¿ Mostrar la aplicación en pantalla completa ?", + "EXIT_APP": "¿ Cerrar la aplicación ?", "TRANSFER": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li></ul><br/><b>Desea realizar esta transferencia?</b>", "TRANSFER_ALL": "<b>Resumen de la transferencia</b>:<br/><br/><ul><li> - De: {{from}}</li><li> - A: <b>{{to}}</b></li><li> - Importe: <b>{{amount}} {{unit}}</b></li><li> - Comentario: <i>{{comment}}</i></li><br/><li> - Resto: <b>{{restAmount}} {{unit}}</b> para <b>{{restTo}}</b></li></ul><br/><b>¿Desea realizar esta transferencia?</b>", "MEMBERSHIP_OUT": "Esta operación es <b>irreversible</b>.<br/></br/>¿Desea <b>anular su cuenta miembro</b>?", @@ -914,7 +913,15 @@ "SAVE_BEFORE_LEAVE": "¿Desea <b>guardar sus cambios</b> antes de abandonar la página?", "SAVE_BEFORE_LEAVE_TITLE": "Cambios no registrados", "LOGOUT": "¿Desea desconectarse?", - "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> inalcanzable o dirección inválida.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{new}}</b>?" + "USE_FALLBACK_NODE": "Nodo <b>{{old}}</b> inalcanzable o dirección inválida.<br/><br/>¿Desea utilizar temporalmente el nodo <b>{{new}}</b>?", + "ISSUE_524_SEND_LOG": "La transacción ha sido rechazada a causa de una anomalÃa conocida (ticket #524) pero todavÃa <b>no replicable</b>.<br/><br/>Para ayudar a los/as desarrolladores/as a corregir este error, ¿ <b>acepta el envÃo de los logs(trazas del programa)</b> ?<br/><small>(ningún dato confidencia será enviado)</small>." + }, + "DEMO": { + "BADGE": "Demo", + "MODE": "Modo de demostración", + "FEATURE_NOT_AVAILABLE": "Funcionalidad <b>no disponible</b> en este sitio de demostración.", + "MODE_HELP": "El cesio funciona en <b> modo de demostración </b>: la consulta está disponible, pero no se puede realizar ninguna operación.", + "INSTALL_HELP": "Por <b>razones de seguridad</b> recomendamos <b>instalar</b> su copia del software.<br/>Visite el sitio de Internet <a href='https://cesium.app'> www.cesium.app </a> para obtener ayuda." }, "DOWNLOAD": { "POPUP_TITLE": "<b>Revocación del archivo</b>", @@ -936,10 +943,6 @@ "METHOD_DEF": "Diversas opciones están disponibles para conectar a las cuentas: <br/> - La conexión <b>con aleatoriedad (estándar o avanzada)</b> mezcla su contraseña con su identificador secreto, para limitar los intentos de ataque<br/> - La conexión <b>usando llave pública</b> le permite entrar sin credenciales, las cuales solo se le pedirán cuando alguna operación lo necesite.<br/> - La conexión <b>usando archivo de llaves</b> leerá las llave pública y privada de la cuenta desde un archivo sin necesitar sus credenciales. Varios formatos son posibles." }, "GLOSSARY": { - "DISTANCE_RULE": "Regla de distancia", - "DISTANCE_RULE_DEF": "La regle de distancia de la Red de Confianza define <b>una distancia máxima a respetar</b> entre una candidatura y número mÃnimo miembros referentes (aquellos más conectados). Esta distancia es calculada utilizando los enlaces de certificación.", - "WOT": "Red de Confianza (RdC)", - "WOT_DEF": "La Red de Confianza se compone del conjunto de miembros de la moneda, y de los enlaces de certificaciones que los conectan.", "SECTION": "Glosario", "PUBKEY_DEF": "Una llave pública identifica un monedero, que puede estar asociado a un miembro o ser un monedero anónimo. En Cesium se calcula a partir del identificador secreto y la contraseña.", "MEMBER": "Miembro", @@ -948,7 +951,11 @@ "CURRENCY_RULES_DEF": "Las reglas de la moneda se han definido una vez y para siempre. Establecen el funcionamiento de la moneda: el cálculo del dividendo universal, la cantidad de certificaciones necesarias para ser miembro, la cantidad máxima de certificaciones que cada miembro puede emitir, etc. <a href=\"#/app/currency\">Ver las reglas actuales</a>.<br/> Sus parámetros no pueden alterarse gracias a una <span class=\"text-italic\">Cadena de Bloques</span> que soporta, implementa y verifica la buena aplicación de estas reglas.", "BLOCKCHAIN": "Cadena de bloques (<span class=\"text-italic\">Blockchain</span>)", "BLOCKCHAIN_DEF": "La cadena de bloques es un sistema descentralizado, que en el caso de Duniter, sirve para mantener e implementar las <span class=\"text-italic\">reglas de la moneda</span>.<br/><a href=\"http://duniter.org\" target=\"_system\">Más información</a> acerca de Duniter y el funcionamiento de su cadena de bloques.", - "UNIVERSAL_DIVIDEND_DEF": "El Dividendo Universal (DU) es la cantidad de moneda co-creada por cada miembro, dependiendo del periodo y del cálculo definidos en las <span class=\"text-italic\">reglas de la moneda</span>.<br/>En cada periodo, los miembros reciben en sus cuentas la misma cantidad de moneda.<br/><br/>El DU crece regularmente, para ser justo entre cada miembro (actualmente y en el futuro), y calculado en función de la esperanza de vida media, como se demuestra en la <span class=\"text-italic\">TeorÃa Relativa de la Moneda</span> (TRM, de Stéphane Laborde).<br/><a href=\"http://trm.creationmonetaire.info\">Más información</a> sobre la TRM y las monedas libres." + "UNIVERSAL_DIVIDEND_DEF": "El Dividendo Universal (DU) es la cantidad de moneda co-creada por cada miembro, dependiendo del periodo y del cálculo definidos en las <span class=\"text-italic\">reglas de la moneda</span>.<br/>En cada periodo, los miembros reciben en sus cuentas la misma cantidad de moneda.<br/><br/>El DU crece regularmente, para ser justo entre cada miembro (actualmente y en el futuro), y calculado en función de la esperanza de vida media, como se demuestra en la <span class=\"text-italic\">TeorÃa Relativa de la Moneda</span> (TRM, de Stéphane Laborde).<br/><a href=\"http://trm.creationmonetaire.info\">Más información</a> sobre la TRM y las monedas libres.", + "WOT": "Red de Confianza (RdC)", + "WOT_DEF": "La Red de Confianza se compone del conjunto de miembros de la moneda, y de los enlaces de certificaciones que los conectan.", + "DISTANCE_RULE": "Regla de distancia", + "DISTANCE_RULE_DEF": "La regle de distancia de la Red de Confianza define <b>una distancia máxima a respetar</b> entre una candidatura y número mÃnimo miembros referentes (aquellos más conectados). Esta distancia es calculada utilizando los enlaces de certificación." }, "TIP": { "MENU_BTN_CURRENCY": "El menú <b>{{'MENU.CURRENCY'|translate}}</b> permite consultar las <b>reglas de la moneda</b> y su estado.", @@ -997,4 +1004,4 @@ "END_NOT_LOGIN": "¡La visita guiada ha <b>terminado</b>!<br/><br/>Si quiere utilizar la moneda {{currency|capitalize}}, tiene que hacer un clic en <b>{{'LOGIN.CREATE_ACCOUNT'|translate}}</b> más abajo." } } -} +}, diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index a95b73ae72573c2d110699b5ad292ca1bf39960f..0bd80c44e4a3fead24f6f96e2370f3ba526a7782 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -796,7 +796,6 @@ "REVOCATION_SENT": "Révocation envoyée", "REVOCATION_SENT_WAITING_PROCESS": "La <b>révocation de cette identité</b> a été demandée et est en attente de traitement.", "FEATURES_NOT_IMPLEMENTED": "Cette fonctionnalité est encore en cours de développement.<br/>Pourquoi ne pas <b>contribuer à Cesium</b>, pour l'obtenir plus rapidement ? ;)", - "FEATURE_NOT_AVAILABLE_ON_DEMO": "Fonctionnalité non disponible sur ce site de démonstration.<br/>Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie du logiciel.<br/>Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide.", "EMPTY_TX_HISTORY": "Aucune opération à exporter" }, "CONFIRM": { @@ -826,6 +825,13 @@ "USE_FALLBACK_NODE": "NÅ“ud <b>{{old}}</b> injoignable ou adresse invalide.<br/><br/>Voulez-vous temporairement utiliser le nÅ“ud <b>{{new}}</b> ?", "ISSUE_524_SEND_LOG": "La transaction a été rejetée, à cause d'une anomalie connue (ticket #524) mais <b>non reproduite</b>.<br/><br/>Pour aider les développeurs à corriger cette erreur, <b>acceptez-vous la transmission de vos logs</b> par message ?<br/><small>(aucune donnée confidentielle n'est envoyée)</small>." }, + "DEMO": { + "BADGE": "Démo", + "MODE": "Mode démonstration", + "FEATURE_NOT_AVAILABLE": "Fonctionnalité <b>non disponible</b> sur ce site de démonstration.", + "MODE_HELP": "Cesium fonctionne en <b>mode démonstration</b> : la consultation est de compte est disponible, mais aucune opération de compte ne peut être réalisée.", + "INSTALL_HELP": "Pour des <b>raisons de sécurité</b> nous vous recommandons <b>d'installer</b> votre copie du logiciel. Visitez le site <a href='https://cesium.app'>www.cesium.app</a> pour obtenir de l'aide." + }, "DOWNLOAD": { "POPUP_TITLE": "<b>Fichier de révocation</b>", "POPUP_REVOKE_MESSAGE": "Pour sécuriser votre compte, veuillez télécharger le <b>document de révocation de compte</b>. Il vous permettra le cas échéant d'annuler votre compte (en cas d'un vol de compte, d'un changement d'identifiant, d'un compte créé à tort, etc.).<br/><br/><b>Veuillez le stocker en lieu sûr.</b>" diff --git a/www/i18n/locale-it-IT.json b/www/i18n/locale-it-IT.json index 9b016290845c71dee5b6c8a80879cad2c37b7005..91e4982b6e5359fce3713870f1cbc0d937560f0d 100644 --- a/www/i18n/locale-it-IT.json +++ b/www/i18n/locale-it-IT.json @@ -20,6 +20,7 @@ "BTN_RELATIVE_UNIT": "Mostra importi in DU?", "BTN_BACK": "Indietro", "BTN_NEXT": "Avanti", + "BTN_IMPORT": "Importazione", "BTN_CANCEL": "Cancellare", "BTN_CLOSE": "Chiudere", "BTN_LATER": "Più tardi", @@ -48,6 +49,7 @@ "NO_ACCOUNT_QUESTION": "Non sei ancora membro? Registrati subito!", "SEARCH_NO_RESULT": "Nessun risultato trovato", "LOADING": "Caricando...", + "LOADING_WAIT": "Caricando...<br/><small>(Cesium interroga dal nodo peer Duniter)</small>", "SEARCHING": "Cercando...", "FROM": "Da", "TO": "A", @@ -104,11 +106,10 @@ "TITLE": "A proposito", "LICENSE": "<b>Free/libre software</b> (License GNU AGPLv3).", "CODE": "Codice sorgente:", + "OFFICIAL_WEB_SITE": "Sito ufficiale:", "DEVELOPERS": "Sviluppatori:", "FORUM": "Forum:", - "DEV_WARNING": "Attenzione!", - "DEV_WARNING_MESSAGE": "Questa app è ancora in sviluppo attivo.<br/>Facci sapere se trovi dei bugs!", - "DEV_WARNING_MESSAGE_SHORT": "Questa app è tutt'ora instabile (in sviluppo)", + "PLEASE_REPORT_ISSUE": "Non esitate a parlarci delle anomalie riscontrate", "REPORT_ISSUE": "Segnalare un bug" }, "HOME": { @@ -606,6 +607,7 @@ } }, "ERROR": { + "UNKNOWN_URI_FORMAT": "Formato URI sconosciuto", "POPUP_TITLE": "Errore", "UNKNOWN_ERROR": "Errore", "CRYPTO_UNKNOWN_ERROR": "Suo navigatore non sembra compatibile con le funzionalità di cryptografia.", @@ -657,6 +659,7 @@ "INVALID_USER_ID": "Il campo del 'pseudonimo' non deve avere spazi vuoti o caratteri speciali.", "INVALID_COMMENT": "Il formato del campo 'reference' è errato.", "INVALID_PUBKEY": "If formato della chiave pubblica è errato.", + "INVALID_PUBKEY_CHECKSUM": "Checkum non valido.", "IDENTITY_REVOKED": "Questa identità <b>è stata revocata</b>. Non puo più diventare membro.", "IDENTITY_REVOKED_WITH_TIME": "Questa identità <b>è stata revocata {{revocationTime|medianFromNow}}</b> ({{revocationTime|medianDate}}). Non puo più diventare membro.", "IDENTITY_PENDING_REVOCATION": "L'<b>annulamento di questa identità </b> è stata richiesta ed è in corso di evaluazione. Capacità ad inviare certificazioni disabilitata", @@ -681,6 +684,7 @@ "LOAD_NEWCOMERS_FAILED": "Impossibile caricare i nuovi membri.", "LOAD_PENDING_FAILED": "Impossibile caricare le certificazioni pendenti.", "ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION": "Devi <b>essere membro</b> per poter fare questo.", + "ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION": "Devi <b>essere membro</b> (o era un membro) per poter fare questo.", "ONLY_SELF_CAN_EXECUTE_THIS_ACTION": "Devi aver <b>publiccato tua identità </b> per poter fare questo.", "GET_BLOCK_FAILED": "Impossibile caricare il blocco", "INVALID_BLOCK_HASH": "Blocco non trovato (hash errato)", @@ -710,7 +714,6 @@ "REVOCATION_SENT": "Revoca dell'identità inviata", "REVOCATION_SENT_WAITING_PROCESS": "Cancellazione dell'identità <b>inviata con successo</b>. In attesa di validazione.", "FEATURES_NOT_IMPLEMENTED": "Questa funzionalità non è ancora disponibile.<br/><br/>Vuoi contribuire per velocizzarne la disponibilità ? ;)", - "FEATURE_NOT_AVAILABLE_ON_DEMO": "Funzionalità non disponibile su questo sito dimostrativo.<br/>Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza.", "EMPTY_TX_HISTORY": "Nessuna operazione da esportare" }, "CONFIRM": { @@ -738,6 +741,13 @@ "INVALID_FILE_FORMAT": "Formato file non valido.", "SAME_TX_RECIPIENT": "Il destinatario deve essere diverso dall'emittente." }, + "DEMO": { + "BADGE": "Demo", + "MODE": "Modalità dimostrativa", + "FEATURE_NOT_AVAILABLE": "Funzionalità <b>non disponibile</b> su questo sito dimostrativo.", + "MODE_HELP": "Il cesio funziona in <b>modalità dimostrativa</b>: è disponibile la consultazione per conto, ma non è possibile eseguire alcuna operazione per conto.", + "INSTALL_HELP": "Per <b>motivi di sicurezza</b> ti consigliamo di <b>installare</b> la tua copia del software.<br/>Visita il sito <a href='https://cesium.app'>www.cesium.app</a> per assistenza." + }, "DOWNLOAD": { "POPUP_TITLE": "<b>File di cancellazione dell'identità /b>", "POPUP_REVOKE_MESSAGE": "Per migliorare la sicurezza del tuo conto, scarica <b>il documento di revoca del conto</b>. Ti consentirà di revocare tuo conto (nel caso di violazione del conto, della tua identità , conto creato con errori, etc.).<br/><br/><b>Tiene questo document al sicuro.</b>" diff --git a/www/js/config.js b/www/js/config.js index ec820430ce3396629610655585cb92129f99f958..934e0f1a6288a45e722daa16b7aa7459ec883bb4 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -10,6 +10,7 @@ angular.module("cesium.config", []) .constant("csConfig", { "cacheTimeMs": 300000, + "demo": true, "fallbackLanguage": "en", "rememberMe": true, "showUDHistory": true, @@ -23,7 +24,6 @@ angular.module("cesium.config", []) "decimalCount": 2, "httpsMode": false, "shareBaseUrl": "https://g1.duniter.fr", - "demo": true, "helptip": { "enable": true, "installDocUrl": { diff --git a/www/js/controllers/join-controllers.js b/www/js/controllers/join-controllers.js index 0cfa56f3c7e8d218b8048512d315e6baacf34269..44cb09da657a7a4d49c913c841a19fd5791ce7aa 100644 --- a/www/js/controllers/join-controllers.js +++ b/www/js/controllers/join-controllers.js @@ -40,7 +40,7 @@ function JoinController($scope, $timeout, $controller, Modals, csWallet) { } -function JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, csCurrency) { +function JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, csConfig, csCurrency) { 'ngInject'; $scope.formData = {}; @@ -86,6 +86,9 @@ function JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, c }; $scope.selectAccountTypeAndClose = function(type) { + if (csConfig.demo === true || csConfig.demo === "true") { + return UIUtils.alert.demo(); + } $scope.formData.accountType = type; $scope.closeModal($scope.formData); }; diff --git a/www/js/controllers/login-controllers.js b/www/js/controllers/login-controllers.js index b6a6c3e91235de1dbfa71de09b0bddb59aca231d..fd671bee0a5eed7749336e11d133e0317e3173d2 100644 --- a/www/js/controllers/login-controllers.js +++ b/www/js/controllers/login-controllers.js @@ -49,10 +49,9 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp parameters = parameters || {}; - // Demo mode (=readonly) + // Demo mode: force PUBKEY method if (csConfig.demo === true || csConfig.demo === "true") { parameters.method = 'PUBKEY'; - parameters.showMethods = false; } $scope.computing = false; @@ -425,6 +424,10 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp $scope.changeMethod = function(method, params){ $scope.hideMethodsPopover(); + if (method !== 'PUBKEY' && (csConfig.demo === true || csConfig.demo === "true")) { + return UIUtils.alert.demo(); + } + if (!method || method === $scope.formData.method) return; // same method console.debug("[login] method is: " + method); diff --git a/www/js/controllers/wallet-controllers.js b/www/js/controllers/wallet-controllers.js index 27e48324b5aa35170092a93abcfda48ecd447cf2..e6d338e4e4865357280d778aa45ca3c15facc2f1 100644 --- a/www/js/controllers/wallet-controllers.js +++ b/www/js/controllers/wallet-controllers.js @@ -1109,7 +1109,7 @@ function WalletTxErrorController($scope, UIUtils, csSettings, csWallet) { } -function WalletSecurityModalController($scope, UIUtils, csWallet, $translate, parameters){ +function WalletSecurityModalController($scope, UIUtils, csConfig, csWallet, $translate, parameters){ var wallet = parameters && parameters.wallet || csWallet; @@ -1151,6 +1151,10 @@ function WalletSecurityModalController($scope, UIUtils, csWallet, $translate, pa }); }); + $scope.$on("$ionicSlides.sliderInitialized", function(event, data){ + // Disable swipe + data.slider.lockSwipes(); + }); $scope.slidePrev = function() { $scope.slides.slider.unlockSwipes(); @@ -1220,7 +1224,10 @@ function WalletSecurityModalController($scope, UIUtils, csWallet, $translate, pa } }; - $scope.selectOption = function(option){ + $scope.selectOption = function(option, enableOnDemo){ + if (!enableOnDemo && (csConfig.demo === true || csConfig.demo === "true")) { + return UIUtils.alert.demo(); + } $scope.option = option; $scope.slideNext(); }; diff --git a/www/js/controllers/wallets-controllers.js b/www/js/controllers/wallets-controllers.js index 41bf2b9bad902c4f816afa442d1c487b4a671c33..a7526041b32b8fbbaaa13beccda2d8853c196b4b 100644 --- a/www/js/controllers/wallets-controllers.js +++ b/www/js/controllers/wallets-controllers.js @@ -541,6 +541,7 @@ function WalletListViewController($scope, $controller, $state, $timeout, $q, $tr 'WalletListImportModalCtrl' ) .then(function(items){ + if (!items || !items.length) return; // User cancel UIUtils.loading.show(); diff --git a/www/js/services/utils-services.js b/www/js/services/utils-services.js index 81494697c792e8934eb1c6bf117745f5a3951200..2b0bd5950e37d0200c828af26076e28ac4c8e41a 100644 --- a/www/js/services/utils-services.js +++ b/www/js/services/utils-services.js @@ -68,18 +68,23 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) }); } - function alertInfo(message, subtitle) { + function alertInfo(message, subtitle, options) { if (!message) return $q.reject("Missing 'message' argument"); + options = options || {}; + options.cssClass = options.cssClass || 'info'; + options.okText = options.okText || 'COMMON.BTN_OK'; + return $q(function(resolve) { - $translate([message, 'INFO.POPUP_TITLE', 'COMMON.BTN_OK'].concat(subtitle ? [subtitle] : [])) + $translate([message, 'INFO.POPUP_TITLE', options.okText].concat(subtitle ? [subtitle] : [])) .then(function (translations) { $ionicPopup.show({ template: '<p>' + translations[message] + '</p>', title: translations['INFO.POPUP_TITLE'], subTitle: subtitle && translations[subtitle] || undefined, + cssClass: options.cssClass, buttons: [ { - text: translations['COMMON.BTN_OK'], + text: translations[options.okText], type: 'button-positive', onTap: function(e) { resolve(e); @@ -95,6 +100,15 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) return alertInfo('INFO.FEATURES_NOT_IMPLEMENTED'); } + function alertDemo() { + return $translate(["DEMO.FEATURE_NOT_AVAILABLE", "DEMO.INSTALL_HELP"]) + .then(function(translations) { + var message = translations["DEMO.FEATURE_NOT_AVAILABLE"] + "<br/><br/>" + translations["DEMO.INSTALL_HELP"]; + return alertInfo(message, undefined, {cssClass: 'large'}); + }) + + } + function askConfirm(message, title, options) { title = title || 'CONFIRM.POPUP_TITLE'; @@ -842,7 +856,8 @@ angular.module('cesium.utils.services', ['angular-fullscreen-toggle']) error: alertError, info: alertInfo, confirm: askConfirm, - notImplemented: alertNotImplemented + notImplemented: alertNotImplemented, + demo: alertDemo }, loading: { show: showLoading, diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js index de235988fde9b724251d176836872e7c5a9f15e5..79e9549171104d83ba8c44c2a1f8c5e129fea080 100644 --- a/www/js/services/wallet-services.js +++ b/www/js/services/wallet-services.js @@ -291,7 +291,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se // Disable auth, if demo if (csConfig.demo === true || csConfig.demo === "true") { - return UIUtils.alert.info('INFO.FEATURE_NOT_AVAILABLE_ON_DEMO') + return UIUtils.alert.demo() .then(function() { throw 'CANCELLED'; }); diff --git a/www/plugins/es/js/controllers/like-controllers.js b/www/plugins/es/js/controllers/like-controllers.js index 21bd2d1a698b450aacacddea592f2c5c8325200e..b67a1f358bb8c8c88df5eb13d83aaacafe841ea7 100644 --- a/www/plugins/es/js/controllers/like-controllers.js +++ b/www/plugins/es/js/controllers/like-controllers.js @@ -186,7 +186,7 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil }) .catch(function(err) { $scope.likeData[key].loading = false; - if (err === 'CANCELLED') return; // User cancelled + if (err === 'CANCELLED') throw 'CANCELLED'; // User cancelled console.error(err); UIUtils.onError('LIKE.ERROR.FAILED_TOGGLE_LIKE')(err); event.preventDefault(); @@ -297,6 +297,7 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil options.kind = 'ABUSE'; return $scope.toggleLike(event, options) .then(function() { + console.log('BEFORE display toast'); UIUtils.toast.show('COMMON.REPORT_ABUSE.CONFIRM.SENT'); }); }; diff --git a/www/templates/common/note_feature_not_available.html b/www/templates/common/note_feature_not_available.html new file mode 100644 index 0000000000000000000000000000000000000000..96cdf71c795b979ec3f29574c2804edeed948558 --- /dev/null +++ b/www/templates/common/note_feature_not_available.html @@ -0,0 +1,5 @@ + +<h4 ng-if="::$root.config.demo" style="color: red !important;"> + <b class="ion-android-close"></b> + <span translate>DEMO.FEATURE_NOT_AVAILABLE</span> +</h4> diff --git a/www/templates/help/help.html b/www/templates/help/help.html index 5571b0c80c988bf11bfb3fd836450539a03eb15b..7cc999ae18d48ee97c6419c525fc1d2bc1a27308 100644 --- a/www/templates/help/help.html +++ b/www/templates/help/help.html @@ -1,5 +1,14 @@ +<a name="demo"></a> +<div class="row responsive-sm" + ng-class="itemsClass['demo']"> + <div class="col col-20" translate>DEMO.MODE</div> + <div class="col"> + <span translate>DEMO.MODE_HELP</span><br/> + <span translate>DEMO.INSTALL_HELP</span> + </div> +</div> - <a name="join"></a> +<a name="join"></a> <h2 translate>HELP.JOIN.SECTION</h2> <a name="join-salt"></a> diff --git a/www/templates/join/modal_choose_account_type.html b/www/templates/join/modal_choose_account_type.html index c51d27a81b2b89daf0db421d6c1d77cab380681c..8e49160c7b8c36994d0e3e064ef9d952992373a1 100644 --- a/www/templates/join/modal_choose_account_type.html +++ b/www/templates/join/modal_choose_account_type.html @@ -82,28 +82,25 @@ <div class="list"> <!-- simple wallet --> <button class="item item-complex card stable-bg item-icon-left item-icon-right ink" - ng-click="selectAccountTypeAndClose('wallet')"> + ng-click="selectAccountTypeAndClose('wallet')"> <div class="item-content item-text-wrap"> <i class="item-image icon dark ion-card"></i> <h2 translate>ACCOUNT.NEW.WALLET_ACCOUNT</h2> <h4 class="gray" translate>ACCOUNT.NEW.WALLET_ACCOUNT_HELP</h4> - - <h4 ng-if="$root.config.demo" style="color: red !important;"><b class="ion-android-warning"></b> <span translate>INFO.FEATURE_NOT_AVAILABLE_ON_DEMO</span></h4> - <i class="icon dark ion-ios-arrow-right" ng-if="!$root.config.demo"></i> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> + <i class="icon dark ion-ios-arrow-right"></i> </div> </button> <!-- member account --> <button class="item item-complex card stable-100-bg item-icon-left item-icon-right ink" - ng-click="selectAccountTypeAndClose('member')" - ng-disabled="$root.config.demo"> + ng-click="selectAccountTypeAndClose('member')"> <div class="item-content item-text-wrap"> <i class="item-image icon dark ion-person"></i> <h2 translate>ACCOUNT.NEW.MEMBER_ACCOUNT</h2> <h4 class="gray" ng-bind-html="'ACCOUNT.NEW.MEMBER_ACCOUNT_HELP'|translate:currency"></h4> - - <h4 ng-if="$root.config.demo" style="color: red !important;"><b class="ion-android-warning"></b> <span translate>INFO.FEATURE_NOT_AVAILABLE_ON_DEMO</span></h4> - <i class="icon dark ion-ios-arrow-right" ng-if="!$root.config.demo"></i> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> + <i class="icon dark ion-ios-arrow-right"></i> </div> </button> diff --git a/www/templates/menu.html b/www/templates/menu.html index 122e04c5b0f10673a3f37febabbdbe8e4fbb01cb..68b69347a26927adecfae7c7e722745729e63fce 100644 --- a/www/templates/menu.html +++ b/www/templates/menu.html @@ -61,6 +61,7 @@ <span class="animate-fade-in animate-show-hide ng-hide" ng-show="$root.currency.name"> {{:locale:'COMMON.APP_NAME'|translate}} {{$root.currency.name|abbreviate}} </span> + <a class="badge badge-demo badge-assertive" ng-if="::$root.config.demo" ng-click="showHelpModal('demo')()" translate>DEMO.BADGE</a> </h1> <div class="visible-sm visible-xs hero"> @@ -260,6 +261,16 @@ <div class="item item-divider visible-xs visible-sm"></div> + + <a menu-close + class="item item-icon-left visible-xs visible-sm" + active-link="active" + active-link-path-prefix="#/app/help" + ui-sref="app.help"> + <i class="icon ion-ios-help-outline"></i> + {{:locale:'HOME.BTN_HELP'|translate}} + </a> + <a menu-close class="item item-icon-left visible-xs visible-sm" active-link="active" @@ -270,7 +281,6 @@ </a> <a id="helptip-menu-btn-settings"></a> - <!-- logout --> <div class="item item-divider visible-xs visible-sm margin-top" ng-if="login"></div> <a menu-close diff --git a/www/templates/wallet/modal_security.html b/www/templates/wallet/modal_security.html index 8632da1bad6504e72033cb9c3b8140a37d518482..b60e7ccb22f891a520ec33db9f044ed16d21f86d 100644 --- a/www/templates/wallet/modal_security.html +++ b/www/templates/wallet/modal_security.html @@ -41,12 +41,14 @@ <b class="ion-ios-undo icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.RECOVER_ID</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.RECOVER_ID_HELP</h4> - <i class="icon dark ion-ios-arrow-right"></i> + + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> + <i class="icon dark ion-ios-arrow-right" ng-if="::!$root.config.demo"></i> </div> </div> <div class="item item-complex card stable-bg item-icon-left item-icon-right ink" - ng-click="selectOption('revocation')" ng-if="!login"> + ng-click="selectOption('revocation', true)" ng-if="!login"> <div class="item-content item-text-wrap"> <i class="item-image dark icon ion-person"></i> <b class="ion-close icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> @@ -64,6 +66,7 @@ <b class="ion-locked icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b> <h2 translate>ACCOUNT.SECURITY.SAVE_ID</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.SAVE_ID_HELP</h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> <i class="icon dark ion-ios-arrow-right"></i> </div> </div> @@ -76,6 +79,7 @@ <b class="ion-key icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.GENERATE_KEYFILE</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.GENERATE_KEYFILE_HELP</h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> <i class="icon dark ion-ios-arrow-right"></i> </div> </div> @@ -88,6 +92,7 @@ <b class="ion-close icon-secondary dark" style="top: 0px; left: 40px; font-size: 8px;"></b> <h2 translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.DOWNLOAD_REVOKE_HELP</h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> <i class="icon dark ion-android-archive"></i> </div> </div> @@ -99,6 +104,7 @@ <b class="ion-flag icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.SEND_IDENTITY</h2> <h4 class="gray" ng-bind-html="::'ACCOUNT.SECURITY.SEND_IDENTITY_HELP' | translate"></h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> </div> </div> @@ -109,6 +115,7 @@ <b class="ion-plus icon-secondary dark" style="top: -8px; left: 39px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.MEMBERSHIP_IN</h2> <h4 class="gray" ng-bind-html="::'ACCOUNT.SECURITY.MEMBERSHIP_IN_HELP' | translate"></h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> </div> </div> @@ -119,6 +126,7 @@ <b class="ion-close icon-secondary assertive-900" style="top: -8px; left: 39px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.REVOCATION_WALLET</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.REVOCATION_WALLET_HELP</h4> + <ng-include src="::'templates/common/note_feature_not_available.html'"></ng-include> </div> </div> </div> diff --git a/www/templates/wallet/slides/slides_generate_keyfile.html b/www/templates/wallet/slides/slides_generate_keyfile.html index f05c29f4a6def14ff2e8a2f18889c1fce0365894..3a2bfe6101041155cb146ac400532aa3bc3633e2 100644 --- a/www/templates/wallet/slides/slides_generate_keyfile.html +++ b/www/templates/wallet/slides/slides_generate_keyfile.html @@ -12,6 +12,7 @@ <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT_HELP</h4> + <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4> <i class="icon dark ion-ios-arrow-right"></i> </div> </div> @@ -23,6 +24,7 @@ <b class="ion-ios-redo icon-secondary dark" style="top: -8px; left: 42px; font-size: 12px;"></b> <h2 translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT_HELP</h4> + <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4> <i class="icon dark ion-ios-arrow-right"></i> </div> </div> @@ -35,6 +37,7 @@ <b class="ion-locked icon-secondary dark" style="top: 0px; left: 43px; font-size: 8px;"></b> <h2 translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT</h2> <h4 class="gray" translate>ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT_HELP</h4> + <h4 ng-if="::$root.config.demo" style="color: red !important;"><b class="ion-android-close"></b> <span translate>DEMO.FEATURE_NOT_AVAILABLE</span></h4> <i class="icon dark ion-ios-arrow-right"></i> </div> </div>