Commit 58ddcb70 authored by Benoit Lavenier's avatar Benoit Lavenier

[fix] Move delete profile button into the profile edit page - fix #684

[enh] Allow to reorder Cesium+ profil links - fix #691
parent 0ac04f3f
......@@ -263,6 +263,7 @@
"WARN_PRE_RELEASE": "Pre-release (latest stable: <b>{{version}}</b>)",
"WARN_NEW_RELEASE": "Version <b>{{version}}</b> available",
"WS2PID": "Identifier:",
"PRIVATE_ACCESS": "Private access",
"POW_PREFIX": "Proof of work prefix:",
"ENDPOINTS": {
"BMAS": "Secure endpoint (SSL)",
......@@ -456,11 +457,9 @@
"SIG_STOCK": "Stock of certifications to give",
"BTN_RECEIVE_MONEY": "Receive",
"BTN_SELECT_ALTERNATIVES_IDENTITIES": "Switch to another identity...",
"BTN_MEMBERSHIP_IN_DOTS": "Register as member...",
"BTN_MEMBERSHIP_RENEW": "Renew membership",
"BTN_MEMBERSHIP_RENEW_DOTS": "Renew membership...",
"BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
"BTN_SEND_IDENTITY_DOTS": "Publish identity...",
"BTN_SECURITY_DOTS": "Sign-in and security...",
"BTN_SHOW_DETAILS": "Display technical data",
"LOCKED_OUTPUTS_POPOVER": {
......@@ -519,6 +518,10 @@
"BTN_RESET" : "Reset",
"DOWNLOAD_REVOKE": "Save a revocation file",
"DOWNLOAD_REVOKE_HELP" : "Having a revocation file is important, for example in case of loss of identifiers. It allows you to <b>get this account out of the Web Of Trust</b>, thus becoming a simple wallet.",
"MEMBERSHIP_IN": "Register as member...",
"MEMBERSHIP_IN_HELP": "Allows you to <b>transform </b> a simple wallet account <b>into a member account</b>, by sending a membership request. Useful only if you do not already have another member account.",
"SEND_IDENTITY": "Publish identity...",
"SEND_IDENTITY_HELP": "Allows you to associate a pseudonym to this account, but <b>without applying for membership</b> to become a member. This is not very useful because the validity of this pseudonym association is limited in time.",
"HELP_LEVEL": "Choose <strong> at least {{nb}} questions </strong> :",
"LEVEL": "Security level",
"LOW_LEVEL": "Low <span class=\"hidden-xs\">(2 questions minimum)</span>",
......
......@@ -263,6 +263,7 @@
"WARN_PRE_RELEASE": "Pre-release (latest stable: <b>{{version}}</b>)",
"WARN_NEW_RELEASE": "Version <b>{{version}}</b> available",
"WS2PID": "Identifier:",
"PRIVATE_ACCESS": "Private access",
"POW_PREFIX": "Proof of work prefix:",
"ENDPOINTS": {
"BMAS": "Secure endpoint (SSL)",
......@@ -456,11 +457,9 @@
"SIG_STOCK": "Stock of certifications to give",
"BTN_RECEIVE_MONEY": "Receive",
"BTN_SELECT_ALTERNATIVES_IDENTITIES": "Switch to another identity...",
"BTN_MEMBERSHIP_IN_DOTS": "Register as member...",
"BTN_MEMBERSHIP_RENEW": "Renew membership",
"BTN_MEMBERSHIP_RENEW_DOTS": "Renew membership...",
"BTN_MEMBERSHIP_OUT_DOTS": "Revoke membership...",
"BTN_SEND_IDENTITY_DOTS": "Publish identity...",
"BTN_SECURITY_DOTS": "Sign-in and security...",
"BTN_SHOW_DETAILS": "Display technical data",
"LOCKED_OUTPUTS_POPOVER": {
......@@ -519,6 +518,10 @@
"BTN_RESET" : "Reset",
"DOWNLOAD_REVOKE": "Save a revocation file",
"DOWNLOAD_REVOKE_HELP" : "Having a revocation file is important, for example in case of loss of identifiers. It allows you to <b>get this account out of the Web Of Trust</b>, thus becoming a simple wallet.",
"MEMBERSHIP_IN": "Register as member...",
"MEMBERSHIP_IN_HELP": "Allows you to <b>transform </b> a simple wallet account <b>into a member account</b>, by sending a membership request. Useful only if you do not already have another member account.",
"SEND_IDENTITY": "Publish identity...",
"SEND_IDENTITY_HELP": "Allows you to associate a pseudonym to this account, but <b>without applying for membership</b> to become a member. This is not very useful because the validity of this pseudonym association is limited in time.",
"HELP_LEVEL": "Choose <strong> at least {{nb}} questions </strong> :",
"LEVEL": "Security level",
"LOW_LEVEL": "Low <span class=\"hidden-xs\">(2 questions minimum)</span>",
......
......@@ -457,11 +457,9 @@
"SIG_STOCK": "Certifications envoyées",
"BTN_RECEIVE_MONEY": "Encaisser",
"BTN_SELECT_ALTERNATIVES_IDENTITIES": "Basculer vers une autre identité...",
"BTN_MEMBERSHIP_IN_DOTS": "Devenir membre...",
"BTN_MEMBERSHIP_RENEW": "Renouveler l'adhésion",
"BTN_MEMBERSHIP_RENEW_DOTS": "Renouveler l'adhésion...",
"BTN_MEMBERSHIP_OUT_DOTS": "Arrêter l'adhésion...",
"BTN_SEND_IDENTITY_DOTS": "Publier son identitié...",
"BTN_SECURITY_DOTS": "Compte et sécurité...",
"BTN_SHOW_DETAILS": "Afficher les infos techniques",
"LOCKED_OUTPUTS_POPOVER": {
......@@ -520,6 +518,10 @@
"BTN_RESET": "Réinitialiser",
"DOWNLOAD_REVOKE": "Sauvegarder mon fichier de révocation",
"DOWNLOAD_REVOKE_HELP": "Disposer d'un fichier de révocation est important, par exemple en cas de perte de vos identifiants. Il vous permet de <b>sortir ce compte de la toile de confiance</b>, en redevenant ainsi un simple portefeuille.",
"MEMBERSHIP_IN": "Transformer en compte membre...",
"MEMBERSHIP_IN_HELP": "Permet de <b>transformer</b> un compte simple portefeuille <b>en compte membre</b>, en envoyant une demande d'adhésion. Utile uniquement si vous n'avez pas déjà une autre compte membre.",
"SEND_IDENTITY": "Publier son identité...",
"SEND_IDENTITY_HELP": "Permet d'associer un pseudonyme à ce compte, mais <b>sans faire de demande d'adhésion</b> pour devenir membre. Cette association n'est généralement pas utile, car la validité de cette association de pseudonyme est limitée dans le temps.",
"HELP_LEVEL": "Pour générer un fichier de sauvegarde de vos identifiants, choisissez <strong> au moins {{nb}} questions :</strong>",
"LEVEL": "Niveau de sécurité",
"LOW_LEVEL": "Faible <span class=\"hidden-xs\">(2 questions minimum)</span>",
......
......@@ -571,6 +571,13 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
throw 'RETRY';
});
}
else {
// Remembering to not ask for confirmation
if (csSettings.data.wallet.alertIfUnusedWallet) {
csSettings.data.wallet.alertIfUnusedWallet = false;
csSettings.store();
}
}
return true;
});
})
......
This diff is collapsed.
......@@ -299,6 +299,7 @@
"BTN_ADD": "Create my profile",
"BTN_EDIT": "Edit my profile",
"BTN_DELETE": "Delete my profile",
"BTN_REORDER": "Reorder",
"UID": "Pseudonym",
"TITLE": "Lastname, FirstName",
"TITLE_HELP": "Name",
......@@ -316,7 +317,7 @@
"RESULT_HELP": "<b>Here is the result</b> as seen on your profile:"
},
"CONFIRM": {
"DELETE": "Are you sure you want to <b>delete your cesium+ profile ?</b><br/><br/>This operation is irreversible."
"DELETE": "Are you sure you want to <b>delete your Cesium+ profile ?</b><br/><br/>This operation is irreversible."
},
"ERROR": {
"REMOVE_PROFILE_FAILED": "Deleting profile failed",
......
......@@ -299,6 +299,7 @@
"BTN_ADD": "Create my profile",
"BTN_EDIT": "Edit my profile",
"BTN_DELETE": "Delete my profile",
"BTN_REORDER": "Reorder",
"UID": "Pseudonym",
"TITLE": "Lastname, FirstName",
"TITLE_HELP": "Name",
......@@ -316,7 +317,7 @@
"RESULT_HELP": "<b>Here is the result</b> as seen on your profile:"
},
"CONFIRM": {
"DELETE": "Are you sure you want to <b>delete your cesium+ profile ?</b><br/><br/>This operation is irreversible."
"DELETE": "Are you sure you want to <b>delete your Cesium+ profile ?</b><br/><br/>This operation is irreversible."
},
"ERROR": {
"REMOVE_PROFILE_FAILED": "Deleting profile failed",
......
......@@ -350,6 +350,7 @@
"BTN_ADD": "Saisir mon profil",
"BTN_EDIT": "Editer mon profil",
"BTN_DELETE": "Supprimer mon profil",
"BTN_REORDER": "Réordonner",
"UID": "Pseudonyme",
"TITLE": "Nom, Prénom",
"TITLE_HELP": "Nom, Prénom",
......@@ -367,7 +368,7 @@
"RESULT_HELP": "<b>Voici le résultat</b> tel que visible sur votre profil :"
},
"CONFIRM": {
"DELETE": "Etes-vous sur de vouloir <b>supprimer votre profif cesium+ ?</b><br/><br/>Cette opération est irréversible."
"DELETE": "Etes-vous sur de vouloir <b>supprimer votre profif Cesium+ ?</b><br/><br/>Cette opération est irréversible."
},
"ERROR": {
"REMOVE_PROFILE_FAILED": "Erreur de suppression du profil",
......
......@@ -315,13 +315,15 @@ function ESSocialsEditController($scope, $focus, $filter, UIUtils, SocialUtils)
'ngInject';
$scope.socialData = {
url: null
url: null,
reorder: false
};
$scope.addSocialNetwork = function() {
if (!$scope.socialData.url || $scope.socialData.url.trim().length === 0) {
return;
}
$scope.formData.socials = $scope.formData.socials || [];
var url = $scope.socialData.url.trim();
......@@ -345,6 +347,8 @@ function ESSocialsEditController($scope, $focus, $filter, UIUtils, SocialUtils)
selector: '#social-' + $filter('formatSlug')(social.url),
startVelocity: 10000
});
};
$scope.editSocialNetwork = function(index) {
......@@ -354,6 +358,13 @@ function ESSocialsEditController($scope, $focus, $filter, UIUtils, SocialUtils)
$focus('socialUrl');
};
$scope.reorderSocialNetwork = function(social, fromIndex, toIndex) {
if (!social || fromIndex == toIndex) return; // no changes
$scope.formData.socials.splice(fromIndex, 1);
$scope.formData.socials.splice(toIndex, 0, social);
};
$scope.filterFn = function(social) {
return !social.recipient || social.valid;
};
......
......@@ -23,8 +23,9 @@ angular.module('cesium.es.profile.controllers', ['cesium.es.services'])
;
function ESViewEditProfileController($scope, $rootScope, $q, $timeout, $state, $focus, $translate, $controller, $ionicHistory,
UIUtils, esHttp, esProfile, ModalUtils, Device) {
function ESViewEditProfileController($scope, $rootScope, $q, $timeout, $state, $focus, $translate, $controller,
$ionicHistory, $ionicPopover,
UIUtils, csWallet, esHttp, esProfile, ModalUtils, Device) {
'ngInject';
// Initialize the super class and extend it.
......@@ -44,6 +45,7 @@ function ESViewEditProfileController($scope, $rootScope, $q, $timeout, $state, $
$scope.socialData = {
url: null
};
$scope.socialReorder = true;
$scope.$on('$ionicView.enter', function(e) {
$scope.loadWallet()
......@@ -238,7 +240,7 @@ function ESViewEditProfileController($scope, $rootScope, $q, $timeout, $state, $
if (!$scope.existing) {
return esProfile.add(formData)
.then(function() {
console.info("[ES] [profile] successfully created.");
console.info("[ES] [profile] Successfully created.");
$scope.existing = true;
$scope.saving = false;
$scope.dirty = false;
......@@ -337,7 +339,67 @@ function ESViewEditProfileController($scope, $rootScope, $q, $timeout, $state, $
});
};
$scope.removeProfile = function(){
// Hide popover if need
$scope.hideActionsPopover();
return $scope.existing && csWallet.auth({minData: true})
.then(function(walletData) {
UIUtils.loading.hide();
UIUtils.alert.confirm('PROFILE.CONFIRM.DELETE', undefined, {okText: 'COMMON.BTN_DELETE'})
.then(function(confirm) {
if (confirm){
console.debug('[ES] [profile] Deleting user profile...');
// removeIf(no-device)
UIUtils.loading.show();
// endRemoveIf(no-device)
return esProfile.remove(walletData.pubkey)
.then(function () {
walletData.name=null;
walletData.profile = null;
walletData.avatar = null;
console.debug('[ES] [profile] Successfully deleted');
$scope.dirty = false;
return $scope.close();
})
.then(function() {
return $timeout(function() {
UIUtils.toast.show('PROFILE.INFO.PROFILE_REMOVED');
}, 750);
})
.catch(UIUtils.onError('PROFILE.ERROR.REMOVE_PROFILE_FAILED'));
}
});
});
};
/* -- Popover -- */
$scope.showActionsPopover = function(event) {
if (!$scope.actionsPopover) {
$ionicPopover.fromTemplateUrl('plugins/es/templates/user/edit_popover_actions.html', {
scope: $scope
}).then(function(popover) {
$scope.actionsPopover = popover;
//Cleanup the popover when we're done with it!
$scope.$on('$destroy', function() {
$scope.actionsPopover.remove();
});
$scope.actionsPopover.show(event);
});
}
else {
$scope.actionsPopover.show(event);
}
};
$scope.hideActionsPopover = function() {
if ($scope.actionsPopover) {
$scope.actionsPopover.hide();
}
};
}
......@@ -23,35 +23,18 @@ angular.module('cesium.es.wallet.controllers', ['cesium.es.services'])
;
function ESWalletController($scope, $controller, esModals,csWallet,UIUtils,esProfile) {
function ESWalletController($scope, $controller, esModals) {
'ngInject';
// Initialize the super class and extend it.
angular.extend(this, $controller('ESWotIdentityViewCtrl', {$scope: $scope}));
$scope.showProfileHelp = false;
/* -- modals -- */
$scope.showNewPageModal = function() {
return esModals.showNewPage();
};
$scope.deleteProfile = function(){
return csWallet && csWallet.auth({minData: true})
.then(function(walletData) {
UIUtils.loading.hide();
UIUtils.alert.confirm('PROFILE.CONFIRM.DELETE')
.then(function(confirm) {
if (confirm){
esProfile.remove(walletData.pubkey)
.then(function () {
$scope.formData.name=null;
$scope.formData.profile = null;
$scope.doUpdate(true);
UIUtils.toast.show('PROFILE.INFO.PROFILE_REMOVED');
}).catch(UIUtils.onError('PROFILE.ERROR.REMOVE_PROFILE_FAILED'));
}
});
});
};
}
<ion-list class="no-padding">
<!-- divider -->
<div class="item item-divider">
<span>
{{'PROFILE.SOCIAL_NETWORKS_DIVIDER' | translate}}
</span>
<a class="badge button button-text button-small button-small-padding"
ng-class="{'button-text-positive': socialData.reorder}"
ng-if="formData.socials && formData.socials.length &gt; 1"
ng-click="socialData.reorder=!socialData.reorder">
<span translate>PROFILE.BTN_REORDER</span>
</a>
</div>
</ion-list>
<div class="item item-divider" translate>PROFILE.SOCIAL_NETWORKS_DIVIDER</div>
<ion-list show-reorder="socialData.reorder">
<ion-item class="item-remove-animate item-icon-left "
type="no-padding item-text-wrap"
......@@ -17,12 +31,12 @@
<a href="mailto:{{social.url}}" ng-if="social.type == 'email'">{{social.url}}</a>
<a href="tel:{{social.url}}" ng-if="social.type == 'phone'">{{social.url}}</a>
<a class="gray hidden-device"
ng-if="!social.recipient"
ng-if="!social.recipient && !socialData.reorder"
ng-click="formData.socials.splice($index, 1); dirty = true;">
&nbsp;<b class="ion ion-trash-a"></b>&nbsp;
</a>
<a class="gray hidden-device"
ng-if="!social.recipient"
ng-if="!social.recipient && !socialData.reorder"
ng-click="editSocialNetwork($index)">
&nbsp;<b class="ion ion-edit"></b>&nbsp;
</a>
......@@ -37,20 +51,26 @@
ng-click="editSocialNetwork($index)">
{{'COMMON.BTN_EDIT'|translate}}
</ion-option-button>
<ion-reorder-button class="ion-drag"
on-reorder="reorderSocialNetwork(social, $fromIndex, $toIndex)">
</ion-reorder-button>
</ion-item>
</ion-list>
<ion-list class="no-padding">
<div class="item item-complex item-input-inset">
<label class="item-input-wrapper">
<input type="text" style="width:100%" placeholder="{{'PROFILE.SOCIAL_HELP'|translate}}"
id="socialUrl"
on-return="addSocialNetwork();"
on-return="addSocialNetwork($event);"
ng-model="socialData.url"/>
</label>
<button class="button button-small hidden-xs" type="button" ng-click="addSocialNetwork()">
<button class="button button-small hidden-xs" type="button" ng-click="addSocialNetwork($event)">
{{'COMMON.BTN_ADD'|translate}}
</button>
<button class="button button-small button-icon icon ion-android-add visible-xs" type="button"
ng-click="addSocialNetwork()">
ng-click="addSocialNetwork($event)">
</button>
</div>
</ion-list>
<ion-popover-view class="fit has-header">
<ion-header-bar>
<h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1>
</ion-header-bar>
<ion-content scroll="false">
<div class="list item-text-wrap">
<!-- delete profile -->
<a class="item item-icon-left assertive ink"
ng-click="removeProfile()">
<i class="icon ion-trash-a"></i>
{{'PROFILE.BTN_DELETE' | translate}}
</a>
</div>
</ion-content>
</ion-popover-view>
......@@ -4,8 +4,13 @@
</ion-nav-title>
<ion-nav-buttons side="secondary">
<button class="button button-icon button-clear ion-android-done visible-xs visible-sm" ng-click="submitAndSaveAndClose()">
</button>
<!-- remove button -->
<button class="button button-icon button-clear button-assertive ion-trash-a visible-xs visible-sm" ng-click="removeProfile()"
ng-if="existing">
</button>
<!-- save button -->
<button class="button button-icon button-clear ion-android-done visible-xs visible-sm" ng-click="submitAndSaveAndClose()">
</button>
</ion-nav-buttons>
<ion-content scroll="true">
......@@ -45,11 +50,25 @@
</div>
<div class="col">
<!-- Buttons bar-->
<div class="hidden-xs hidden-sm padding text-center" ng-if="existing && !saving">
<button class="button button-stable icon-right ink"
ng-click="showActionsPopover($event)">
&nbsp; <i class="icon ion-android-more-vertical"></i>&nbsp;
{{'COMMON.BTN_OPTIONS' | translate}}
</button>
</div>
<form name="profileForm" novalidate="" ng-submit="saveAndClose()">
<div class="list item-text-wrap {{::motion.ionListClass}}"
ng-init="setForm(profileForm)">
<!-- Public info -->
<div class="item item-icon-left item-text-wrap">
<i class="icon ion-ios-information-outline positive"></i>
......@@ -95,8 +114,12 @@
<!-- position -->
<ng-include src="'plugins/es/templates/common/edit_position.html'" ng-controller="ESPositionEditCtrl as ctrl"></ng-include>
<!-- social networks -->
<ng-include src="'plugins/es/templates/common/edit_socials.html'" ng-controller="ESSocialsEditCtrl"></ng-include>
</div>
<!-- social networks -->
<ng-include src="'plugins/es/templates/common/edit_socials.html'" ng-controller="ESSocialsEditCtrl"></ng-include>
<div class="list item-text-wrap {{::motion.ionListClass}}">
<div class="item item-divider">
{{'PROFILE.TECHNICAL_DIVIDER' | translate}}
......
......@@ -16,13 +16,6 @@
</a>
</div>
<div class="item item-right">
<a class="badge button button-text button-small button-small-padding "
ng-click="deleteProfile()">
<i ng-if="formData.profile" class="icon ion-trash-a assertive"></i>
<span class="assertive" ng-if="formData.profile" translate>PROFILE.BTN_DELETE</span>
</a>
</div>
<div class="item item-text-wrap positive item-small-height" ng-show="showProfileHelp">
<small translate>PROFILE.PROFILE_DIVIDER_HELP</small>
......
......@@ -4,13 +4,15 @@
</div>
<!-- avoid web browser to fill password automatically -->
<input type="password" name="fake-password" style="visibility:hidden; position:absolute;"/>
<input type="password" name="fake-password" autocomplete="off" style="visibility:hidden; position:absolute;"/>
<!-- salt (=username, to enable browser login cache) -->
<label class="item item-input"
ng-class="{ 'item-input-error': form.$submitted && form.username.$invalid}">
<span class="input-label hidden-xs" translate>LOGIN.SALT</span>
<input name="username" type="password" autocomplete="off" placeholder="{{'LOGIN.SALT_HELP' | translate}}"
<input name="username" type="password"
placeholder="{{'LOGIN.SALT_HELP' | translate}}"
autocomplete="off"
ng-model="formData.username"
ng-model-options="{ debounce: 650 }"
class="highlight-light"
......@@ -28,7 +30,9 @@
<label class="item item-input"
ng-class="{ 'item-input-error': form.$submitted && form.password.$invalid}">
<span class="input-label hidden-xs" translate>LOGIN.PASSWORD</span>
<input name="password" type="password" placeholder="{{'LOGIN.PASSWORD_HELP' | translate}}"
<input name="password" type="password"
placeholder="{{'LOGIN.PASSWORD_HELP' | translate}}"
autocomplete="off"
ng-model="formData.password"
ng-model-options="{ debounce: 650 }"
select-on-click
......
......@@ -81,9 +81,28 @@
</div>
</div>
<div class="item item-complex card stable-bg item-icon-left item-icon-right ink"
ng-click="self()" ng-if="needSelf">
<div class="item-content item-text-wrap">
<i class="item-image icon ion-person dark"></i>
<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>
</div>
</div>
<div class="item item-complex card stable-bg item-icon-left item-icon-right ink"
ng-click="revokeWalletIdentity()" ng-if="isLogin">
ng-click="membershipIn()" ng-if="needMembership">
<div class="item-content item-text-wrap">
<i class="item-image icon ion-person dark"></i>
<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>
</div>
</div>
<div class="item item-complex card stable-bg item-icon-left item-icon-right ink"
ng-click="revokeWalletIdentity()" ng-if="isLogin && hasSelf">
<div class="item-content item-text-wrap">
<i class="item-image icon ion-person assertive-900"></i>
<b class="ion-close icon-secondary assertive-900" style="top: -8px; left: 39px; font-size: 12px;"></b>
......@@ -111,9 +130,6 @@
<ion-slide-page ng-if="isLogin && option == 'saveID'">
<ng-include src="'templates/wallet/slides/slides_saveID_2.html'"></ng-include>
</ion-slide-page>
<ion-slide-page ng-if="isLogin && option == 'saveID'">
<ng-include src="'templates/wallet/slides/slides_saveID_3.html'"></ng-include>
</ion-slide-page>
<ion-slide-page ng-if="option == 'recoverID'">
<ng-include src="'templates/wallet/slides/slides_recoverID_1.html'"></ng-include>
......
......@@ -21,36 +21,16 @@
{{'ACCOUNT.BTN_SELECT_ALTERNATIVES_IDENTITIES' | translate}}
</a>
<!-- identity -->
<a class="item item-icon-left ink"
ng-if="walletData.requirements.needSelf"
ng-click="self()">
<i class="icon ion-flag"></i>
{{'ACCOUNT.BTN_SEND_IDENTITY_DOTS' | translate}}
</a>
<!-- membership in -->
<a class="item item-icon-left ink visible-xs visible-sm"
ng-if="walletData.requirements.needMembership"
ng-click="membershipIn()">
<i class="icon ion-person"></i>
{{'ACCOUNT.BTN_MEMBERSHIP_IN_DOTS' | translate}}
</a>
<a class="item item-icon-left ink hidden-xs hidden-sm"
ng-class="{'gray':!walletData.requirements.needMembership}"
ng-click="membershipIn()">
<i class="icon ion-person"></i>
{{'ACCOUNT.BTN_MEMBERSHIP_IN_DOTS' | translate}}
</a>
<!-- renew membership -->
<!-- (show only if a SELF has been sent - fix #673) -->
<a class="item item-icon-left ink visible-xs visible-sm"
ng-if="walletData.requirements.needRenew"
ng-if="!walletData.requirements.needSelf && walletData.requirements.needRenew"
ng-click="renewMembership()">
<i class="icon ion-loop"></i>
{{'ACCOUNT.BTN_MEMBERSHIP_RENEW_DOTS' | translate}}
</a>
<a class="item item-icon-left ink hidden-xs hidden-sm"
ng-if="!walletData.requirements.needSelf"
ng-class="{'gray':!walletData.requirements.needRenew}"
ng-click="renewMembership()">
<i class="icon ion-loop"></i>
......
......@@ -44,7 +44,8 @@
</h4>
</div>
<div id="qrcode" class="qrcode spin"
<div ng-attr-id="{{ qrcodeId }}"
class="qrcode spin"
ng-class="{'active': toggleQRCode}"
ng-click="toggleQRCode = !toggleQRCode"></div>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment