diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json index efb266cd32a41239d4ea3befcda63ff4d2718a8c..8c8a77c38250e80c1d071f163e3ab2a26361a3ff 100644 --- a/www/i18n/locale-en-GB.json +++ b/www/i18n/locale-en-GB.json @@ -502,15 +502,20 @@ "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> allows access to your account balance and transaction history.", "MENU_BTN_ACCOUNT_MEMBER": "Here you can consult your account status, transaction history and your certifications.", "WALLET_CERTIFICATIONS": "Click here to reveiw the details of your certifications (given and received).", + "WALLET_RECEIVED_CERTIFICATIONS": "Click here to reveiw the details of your <b>received</b> certifications.", + "WALLET_GIVEN_CERTIFICATIONS": "Click here to reveiw the details of your <b>given</b> certifications.", "WALLET_BALANCE": "Your account <b>balance</b> is shown here.", "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>The used unit (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) signifies that the amount in {{currency|capitalize}} has been divided by the <b>Universal Dividend</b> (UD) co-created by each member.<br/>At this moment, 1 UD equals {{currentUD}} {{currency|capitalize}}.", "WALLET_BALANCE_CHANGE_UNIT": "You can <b>change the unit</b> in which amounts are shown in <b><i class=\"icon ion-android-settings\"></i> {{'MENU.SETTINGS'|translate}}</b>.<br/><br/>For example, to display amounts <b>directly in {{currency|capitalize}}</b> instead of relative amounts.", + "WALLET_PUBKEY": "This is your account public key. You can communicate it to a third party so that it more easily identifies your account.", "WALLET_SEND": "Issue a payment in just a few clicks.", "WALLET_SEND_NO_MONEY": "Issue a payment in just a few clicks.<br/>(Your balance does not allow this yet)", "WALLET_OPTIONS": "Please note that this button allows access to <b>other, less used actions</b>.<br/><br/>Don't forget to take a quick look, when you have a moment!", "WALLET_RECEIVED_CERTS": "This shows the list of persons that certified you.", "WALLET_CERTIFY": "The button <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> allows selecting an identity and certifying it.<br/><br/>Only users that are <b>already member</b> may certify others.", "WALLET_CERT_STOCK": "Your supply of certifications (to send) is limited to <b>{{sigStock}} certifications</b>.<br/><br/>This supply will replete itself over time, as and when earlier certifications expire.", + "MENU_BTN_TX_MEMBER": "<b>{{'MENU.TRANSACTIONS'|translate}}</b> allow access to transactions history, and send new payments.", + "MENU_BTN_TX": "Consultez ici l'historique vos transactions et envoyez de nouveaux paiements.", "MENU_BTN_WOT": "The menu <b>{{'MENU.WOT'|translate}}</b> allows searching <b>users</b> of the currency (member or not).", "WOT_SEARCH_TEXT_XS": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>The search will start automatically.", "WOT_SEARCH_TEXT": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>Then hit <b>Enter</b> to start the search.", diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json index d619b5ed38f942e09e1ad9e7265002de65fd1699..21cc97f815bc275cfa39c7c2fa556ac9e996e132 100644 --- a/www/i18n/locale-en.json +++ b/www/i18n/locale-en.json @@ -502,15 +502,20 @@ "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> allows access to your account balance and transaction history.", "MENU_BTN_ACCOUNT_MEMBER": "Here you can consult your account status, transaction history and your certifications.", "WALLET_CERTIFICATIONS": "Click here to reveiw the details of your certifications (given and received).", + "WALLET_RECEIVED_CERTIFICATIONS": "Click here to reveiw the details of your <b>received certifications</b>.", + "WALLET_GIVEN_CERTIFICATIONS": "Click here to reveiw the details of your <b>given certifications</b>.", "WALLET_BALANCE": "Your account <b>balance</b> is shown here.", "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>The used unit (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) signifies that the amount in {{currency|capitalize}} has been divided by the <b>Universal Dividend</b> (UD) co-created by each member.<br/>At this moment, 1 UD equals {{currentUD}} {{currency|capitalize}}.", "WALLET_BALANCE_CHANGE_UNIT": "You can <b>change the unit</b> in which amounts are shown in <b><i class=\"icon ion-android-settings\"></i> {{'MENU.SETTINGS'|translate}}</b>.<br/><br/>For example, to display amounts <b>directly in {{currency|capitalize}}</b> instead of relative amounts.", + "WALLET_PUBKEY": "This is your account public key. You can communicate it to a third party so that it more easily identifies your account.", "WALLET_SEND": "Issue a payment in just a few clicks.", "WALLET_SEND_NO_MONEY": "Issue a payment in just a few clicks.<br/>(Your balance does not allow this yet)", "WALLET_OPTIONS": "Please note that this button allows access to <b>other, less used actions</b>.<br/><br/>Don't forget to take a quick look, when you have a moment!", "WALLET_RECEIVED_CERTS": "This shows the list of persons that certified you.", "WALLET_CERTIFY": "The button <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> allows selecting an identity and certifying it.<br/><br/>Only users that are <b>already member</b> may certify others.", "WALLET_CERT_STOCK": "Your supply of certifications (to send) is limited to <b>{{sigStock}} certifications</b>.<br/><br/>This supply will replete itself over time, as and when earlier certifications expire.", + "MENU_BTN_TX_MEMBER": "<b>{{'MENU.TRANSACTIONS'|translate}}</b> allow access to transactions history, and send new payments.", + "MENU_BTN_TX": "Consultez ici l'historique vos transactions et envoyez de nouveaux paiements.", "MENU_BTN_WOT": "The menu <b>{{'MENU.WOT'|translate}}</b> allows searching <b>users</b> of the currency (member or not).", "WOT_SEARCH_TEXT_XS": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>The search will start automatically.", "WOT_SEARCH_TEXT": "To search in the registry, type the <b>first letters of a users pseudonym or public key</b>.<br/><br/>Then hit <b>Enter</b> to start the search.", diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index a7f453e3bc7fa6451e62c57b397cb43feee15395..2b4323f67d8e1053c4c65d5d972eb6d3e16dd730 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -499,18 +499,23 @@ "NETWORK_PEERS": "Les <b>nœuds</b> visibles ici correspondent aux <b>ordinateurs qui actualisent et contrôlent</b> la chaine de blocs.<br/><br/>Plus il y a de nœuds, plus la monnaie à une gestion <b>décentralisée</b> et digne de confiance.", "NETWORK_PEERS_BLOCK_NUMBER": "Ce <b>numéro</b> (en vert) indique le <b>dernier bloc validé</b> pour ce nœud (dernière page écrite dans le grand livre de comptes).<br/><br/>La couleur verte indique que ce bloc est également validé par <b>la plupart des autres nœuds</b>.", "NETWORK_PEERS_PARTICIPATE": "<b>Chaque membre</b>, équipé d'un ordinateur avec Internet, <b>peut participer en ajoutant un nœud</b>. Il suffit d'<b>installer le logiciel Duniter</b> (libre et gratuit). <a target=\"_new\" href=\"{{installDocUrl}}\">Voir le manuel d'installation >></a>.", - "MENU_BTN_ACCOUNT": "<b>{{'ACCOUNT.TITLE'|translate}}</b> permet l'accès au solde de votre compte et à l'historique de vos transactions.", - "MENU_BTN_ACCOUNT_MEMBER": "Consultez ici l'état de votre compte, l'historique de vos transactions et vos certifications.", - "WALLET_CERTIFICATIONS": "En cliquant ici, consultez le détail de vos certifications (reçues et émises).", + "MENU_BTN_ACCOUNT": "Le menu <b>{{'ACCOUNT.TITLE'|translate}}</b> permet d'accéder à la gestion de votre compte.", + "MENU_BTN_ACCOUNT_MEMBER": "Consultez ici l'état de votre compte et les informations sur vos certifications.", + "WALLET_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos certifications (reçues et émises).", + "WALLET_RECEIVED_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications reçues</b>.", + "WALLET_GIVEN_CERTIFICATIONS": "Cliquez ici pour consulter le détail de vos <b>certifications émises</b>.", "WALLET_BALANCE": "Le <b>solde</b> de votre compte s'affiche ici.", "WALLET_BALANCE_RELATIVE": "{{'HELP.TIP.WALLET_BALANCE'|translate}}<br/><br/>L'unité utilisée (“<b>{{'COMMON.UD'|translate}}<sub>{{currency|abbreviate}}</sub></b>”) signifie que le montant en {{currency|capitalize}} a été divisé par le <b>Dividende Universel</b> (DU) co-créé par chaque membre.<br/><br/>Actuellement 1 DU vaut {{currentUD|formatInteger}} {{currency|capitalize}}s.", "WALLET_BALANCE_CHANGE_UNIT": "Vous pourrez <b>changer l'unité</b> d'affichage des montants dans les <b><i class=\"icon ion-android-settings\"></i> {{'MENU.SETTINGS'|translate}}</b>.<br/><br/>Par exemple pour visualiser les montants <b>directement en {{currency|capitalize}}</b>, plutôt qu'en unité relative.", + "WALLET_PUBKEY": "Voici la clé publique de votre compte. Vous pouvez la communiquer à un tiers afin qu'il identifie plus simplement votre compte.", "WALLET_SEND": "Effectuer un paiement en quelques clics", "WALLET_SEND_NO_MONEY": "Effectuer un paiement en quelques clics.<br/>(Votre solde ne le permet pas encore)", - "WALLET_OPTIONS": "Veuillez noter que ce bouton permet l'accès à <b>d'autres actions</b>, moins usuelles.<br/><br/>N'oubliez pas d'y jeter un oeil, quand vous aurez un moment !", + "WALLET_OPTIONS": "Ce bouton permet l'accès aux <b>actions d'adhésion</b> et de sécurité.<br/><br/>N'oubliez pas d'y jeter un oeil !", "WALLET_RECEIVED_CERTS": "S'affichera ici la liste des personnes qui vous ont certifié.", "WALLET_CERTIFY": "Le bouton <b>{{'WOT.BTN_SELECT_AND_CERTIFY'|translate}}</b> permet de sélectionner une identitié et de la certifier.<br/><br/>Seuls des utilisateurs <b>déjà membre</b> peuvent en certifier d'autres.", "WALLET_CERT_STOCK": "Votre stock de certification (émises) est limité à <b>{{sigStock}} certifications</b>.<br/><br/>Ce stock se renouvelle avec le temps, au fur et à mesure que les certifications s'invalident.", + "MENU_BTN_TX_MEMBER": "Le menu <b>{{'MENU.TRANSACTIONS'|translate}}</b> permet de consulter votre solde, l'historique vos transactions et d'envoyer un paiement.", + "MENU_BTN_TX": "Consultez ici l'historique vos transactions et envoyez de nouveaux paiements.", "MENU_BTN_WOT": "Le menu <b>{{'MENU.WOT'|translate}}</b> permet de rechercher parmi les <b>utilisateurs</b> de la monnaie (membre ou non).", "WOT_SEARCH_TEXT_XS": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique).<br/><br/>La recherche se lancera automatiquement.", "WOT_SEARCH_TEXT": "Pour rechercher dans l'annuaire, tapez les <b>premières lettres d'un pseudonyme</b> (ou d'une clé publique). <br/><br/>Appuyer ensuite sur <b>Entrée</b> pour lancer la recherche.", diff --git a/www/js/controllers/app-controllers.js b/www/js/controllers/app-controllers.js index bd96a9f6029e2cc587529f90c9dad8cc8d7fed70..eb0164c217a3ed0974d7b461c111c16f82082a22 100644 --- a/www/js/controllers/app-controllers.js +++ b/www/js/controllers/app-controllers.js @@ -143,8 +143,18 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $ return helptipScope; }; - $scope.startHelpTour = function() { + $scope.startHelpTour = function(skipClearCache) { $rootScope.tour = true; // to avoid other helptip to be launched (e.g. csWallet) + + // + if (!skipClearCache) { + $ionicHistory.clearHistory(); + return $ionicHistory.clearCache() + .then(function() { + $scope.startHelpTour(true/*continue*/); + }); + } + var helptipScope = $scope.createHelptipScope(true); return helptipScope.startHelpTour() .then(function() { diff --git a/www/js/controllers/help-controllers.js b/www/js/controllers/help-controllers.js index 867f3f511255c67c9b678b3c47d604be97cc9a57..ad52ff51a956dea15a99f9f03c866adc3cf37ffe 100644 --- a/www/js/controllers/help-controllers.js +++ b/www/js/controllers/help-controllers.js @@ -157,7 +157,7 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe }) // Network tour - /*.then(function(next){ + /* .then(function(next){ if (!next) return false; return $scope.startNetworkTour(0, true) .then(function(endIndex){ @@ -166,7 +166,7 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe csSettings.store(); return $scope.continue; }); - })*/ + }) // Wot tour .then(function(next){ @@ -197,7 +197,7 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe if (!next) return false; return $scope.startWalletNoLoginTour(0, true); }) - + */ // Wallet tour (if login) .then(function(next){ if (!next) return false; @@ -224,6 +224,19 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe }); }) + // TX tour (if login) + .then(function(next){ + if (!next) return false; + if (!csWallet.isLogin()) return true; // not login: continue + return $scope.startTxTour(0, true) + .then(function(endIndex){ + if (!endIndex) return false; + csSettings.data.helptip.tx=endIndex; + csSettings.store(); + return $scope.continue; + }); + }) + // Header tour .then(function(next){ if (!next) return false; @@ -679,53 +692,44 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe // Go to wallet return $state.go('app.view_wallet') .then(function () { - return $scope.showHelpTip('helptip-wallet-balance', { + return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'helptip-wallet-options-xs' : 'helptip-wallet-options', { bindings: { - content: csSettings.data.useRelative ? 'HELP.TIP.WALLET_BALANCE_RELATIVE' : 'HELP.TIP.WALLET_BALANCE', - contentParams: contentParams, + content: 'HELP.TIP.WALLET_OPTIONS', icon: { - position: 'center' + position: UIUtils.screen.isSmall() ? 'right' : 'center' } - }, - retry: 20 // 10 * 500 = 5s max + } }); }); }, + // Wallet pubkey function () { - return $scope.showHelpTip('helptip-wallet-balance', { + $anchorScroll('helptip-wallet-pubkey'); + return $scope.showHelpTip('helptip-wallet-pubkey', { bindings: { - content: 'HELP.TIP.WALLET_BALANCE_CHANGE_UNIT', - contentParams: contentParams, + content: 'HELP.TIP.WALLET_PUBKEY', icon: { - position: 'center', - glyph: 'ion-information-circled' + position: 'bottom-center' } - } + }, + timeout: UIUtils.screen.isSmall() ? 2000 : 500, + retry: 10 }); }, function () { + $anchorScroll('helptip-wallet-certifications'); return $scope.showHelpTip('helptip-wallet-certifications', { bindings: { - content: 'HELP.TIP.WALLET_CERTIFICATIONS', + content: UIUtils.screen.isSmall() ? 'HELP.TIP.WALLET_RECEIVED_CERTIFICATIONS': 'HELP.TIP.WALLET_CERTIFICATIONS', icon: { position: 'center' } }, - onError: 'continue' - }); - }, - - function () { - return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'helptip-wallet-options-xs' : 'helptip-wallet-options', { - bindings: { - content: 'HELP.TIP.WALLET_OPTIONS', - icon: { - position: UIUtils.screen.isSmall() ? 'right' : 'center' - }, - hasNext: hasNext - } + timeout: 500, + onError: 'continue', + hasNext: hasNext }); } ]; @@ -772,16 +776,35 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe }); }, + function() { + if (skipAll || !UIUtils.screen.isSmall()) return true; + return $state.go('app.view_wallet') // go back to wallet (small device only) + .then(function() { + return $scope.showHelpTip('helptip-wallet-given-certifications', { + bindings: { + content: 'HELP.TIP.WALLET_GIVEN_CERTIFICATIONS', + icon: { + position: 'center' + } + }, + timeout: 500 + }); + }); + }, + function() { if (skipAll) return true; - if ($state.is('app.wallet_cert')) { - // Select the second tabs + + // Click on given cert link (small device only) + if ($state.is('app.view_wallet')) { + var element = $window.document.getElementById('helptip-wallet-given-certifications'); + if (!element) { + skipAll = true; + return true; + } $timeout(function() { - var tabs = $window.document.querySelectorAll('ion-tabs .tabs a'); - if (tabs && tabs.length == 2) { - angular.element(tabs[1]).triggerHandler('click'); - } - }, 100); + angular.element(element).triggerHandler('click'); + }, 500); } return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'fab-select-certify': 'helptip-certs-select-certify', { bindings: { @@ -795,7 +818,6 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe }); }, - function() { if ($scope.tour || skipAll) return hasNext; // skip Rules if features tour (already display) return $scope.showHelpTip('helptip-certs-stock', { @@ -831,6 +853,73 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe }); }; + /** + * Features tour on TX screen + * @returns {*} + */ + $scope.startTxTour = function(startIndex, hasNext) { + if (!csWallet.isLogin()) return $q.when(true); // skip if not login + + var contentParams; + + var steps = [ + function () { + $ionicSideMenuDelegate.toggleLeft(true); + return $scope.showHelpTip('helptip-menu-btn-tx', { + bindings: { + content: $rootScope.walletData.isMember ? 'HELP.TIP.MENU_BTN_TX_MEMBER' : 'HELP.TIP.MENU_BTN_TX', + icon: { + position: 'left' + } + } + }); + }, + + function () { + if ($ionicSideMenuDelegate.isOpen()) { + $ionicSideMenuDelegate.toggleLeft(false); + } + + // Go to wallet + return $state.go('app.view_wallet_tx') + .then(function () { + return $scope.showHelpTip('helptip-wallet-balance', { + bindings: { + content: csSettings.data.useRelative ? 'HELP.TIP.WALLET_BALANCE_RELATIVE' : 'HELP.TIP.WALLET_BALANCE', + contentParams: contentParams, + icon: { + position: 'center' + } + }, + retry: 20 // 10 * 500 = 5s max + }); + }); + }, + + function () { + return $scope.showHelpTip('helptip-wallet-balance', { + bindings: { + content: 'HELP.TIP.WALLET_BALANCE_CHANGE_UNIT', + contentParams: contentParams, + icon: { + position: 'center', + glyph: 'ion-information-circled' + } + } + }); + } + ]; + + // Get currency parameters, with currentUD + return csCurrency.default() + .then(function(currency) { + contentParams = currency.parameters; + contentParams.currentUD = $rootScope.walletData.currentUD; + // Launch steps + return $scope.executeStep('tx', steps, startIndex); + }); + }; + /** * header tour * @returns {*} @@ -971,7 +1060,7 @@ function HelpTipController($scope, $rootScope, $state, $window, $ionicSideMenuDe if (csWallet.isLogin()) { return $state.go('app.view_wallet') .then(function(){ - return $scope.showHelpTip('helptip-wallet-balance', { + return $scope.showHelpTip('helptip-wallet-certifications', { bindings: { content: 'HELP.TIP.END_LOGIN', hasNext: false diff --git a/www/templates/menu.html b/www/templates/menu.html index 262823ad4db2747ee6018f1d443a0a2d8d6dd08c..a74eabbbd1e3fb4e4dd8ab053c824c24b26fb07a 100644 --- a/www/templates/menu.html +++ b/www/templates/menu.html @@ -127,7 +127,7 @@ <i class="icon ion-person"></i> <span translate>MENU.ACCOUNT</span> </ion-item> - <a id="helptip-menu-btn-profile"></a> + <a id="helptip-menu-btn-account"></a> <ion-item menu-close class="item item-icon-left" @@ -138,7 +138,7 @@ <i class="icon ion-card"></i> <span translate>MENU.TRANSACTIONS</span> </ion-item> - <a id="helptip-menu-btn-account"></a> + <a id="helptip-menu-btn-tx"></a> <!-- Allow extension here --> diff --git a/www/templates/wallet/view_wallet.html b/www/templates/wallet/view_wallet.html index 52e5a7983f5641c761642b9925c7adc7479c4d77..73633e11b5289588901d32faeab5c0bcab7a2c9b 100644 --- a/www/templates/wallet/view_wallet.html +++ b/www/templates/wallet/view_wallet.html @@ -87,8 +87,8 @@ <div class="list animate-fade-slide-in-right"> <!-- Certifications --> - <a class="item item-icon-left item-icon-right item-text-wrap ink" - id="helptip-wallet-certifications" + <a id="helptip-wallet-certifications" + class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="formData.isMember||formData.requirements.pendingMembership" ng-click="showCertifications()"> <i class="icon ion-ribbon-b"></i> @@ -101,9 +101,10 @@ </a> <!-- Signature stock --> - <a class="item item-icon-left item-text-wrap item-icon-right ink visible-xs visible-sm" - ng-if="formData.isMember" - ng-click="showGivenCertifications()"> + <a id="helptip-wallet-given-certifications" + class="item item-icon-left item-text-wrap item-icon-right ink visible-xs visible-sm" + ng-if="formData.isMember" + ng-click="showGivenCertifications()"> <i class="icon ion-ribbon-a"></i> <span translate>WOT.GIVEN_CERTIFICATIONS.SENT</span> <i class="gray icon ion-ios-arrow-right"></i> @@ -144,7 +145,8 @@ </span> <!-- Public key --> - <span class="item item-icon-left item-text-wrap ink" + <span id="helptip-wallet-pubkey" + class="item item-icon-left item-text-wrap ink" on-hold="copy(formData.pubkey)" copy-on-click="{{formData.pubkey}}"> <i class="icon ion-key"></i> diff --git a/www/templates/wot/view_identity.html b/www/templates/wot/view_identity.html index cb2d7782c8eb79db350d82b8aee1cf763f4b7f06..24513b80b789051ed815bfa14d9ba33b302e04ae 100644 --- a/www/templates/wot/view_identity.html +++ b/www/templates/wot/view_identity.html @@ -35,8 +35,7 @@ <!-- Allow extension here --> <cs-extension-point name="buttons"></cs-extension-point> - <button id="helptip-certs-certify" - class="button button-stable button-small-padding icon ion-ribbon-b ink" + <button class="button button-stable button-small-padding icon ion-ribbon-b ink" ng-click="certify()" title="{{'WOT.BTN_CERTIFY' | translate}}" ng-disabled="alreadyCertified">