Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • clients/cesium-grp/cesium-android
  • Thatoo/cesium-android
2 results
Show changes
Commits on Source (1)
<?xml version='1.0' encoding='utf-8'?>
<manifest android:hardwareAccelerated="true" android:versionCode="106011" android:versionName="1.6.1" package="fr.duniter.cesium" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<manifest android:hardwareAccelerated="true" android:versionCode="106012" android:versionName="1.6.2-alpha" package="fr.duniter.cesium" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools">
<supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" android:xlargeScreens="true" />
<uses-permission android:name="android.permission.INTERNET" />
<application android:hardwareAccelerated="true" android:icon="@mipmap/icon" android:label="@string/app_name" android:supportsRtl="true">
......
......@@ -96,7 +96,7 @@
},
{
"xml": "<uses-permission android:name=\"android.permission.VIBRATE\" />",
"count": 1
"count": 2
},
{
"xml": "<uses-permission android:name=\"android.permission.CAMERA\" />",
......@@ -400,7 +400,7 @@
"cordova-plugin-secure-storage": "2.6.8",
"cordova-plugin-splashscreen": "3.2.2",
"cordova-plugin-statusbar": "2.3.0",
"cordova-plugin-vibration": "2.1.6",
"cordova-plugin-vibration": "3.1.1",
"cordova-plugin-websocket": "0.12.2",
"cordova-plugin-whitelist": "1.3.3",
"cordova-plugin-x-toast": "2.6.0",
......
......@@ -95,8 +95,8 @@ angular.module("cesium.config", [])
"defaultCountry": "France"
}
},
"version": "1.6.1",
"build": "2020-03-17T16:53:24.807Z",
"version": "1.6.2",
"build": "2020-04-13T21:20:46.576Z",
"newIssueUrl": "https://git.duniter.org/clients/cesium-grp/cesium/issues/new"
})
......
......@@ -188,7 +188,7 @@ module.exports.metadata =
"cordova-plugin-secure-storage": "2.6.8",
"cordova-plugin-splashscreen": "3.2.2",
"cordova-plugin-statusbar": "2.3.0",
"cordova-plugin-vibration": "2.1.6",
"cordova-plugin-vibration": "3.1.1",
"cordova-plugin-websocket": "0.12.2",
"cordova-plugin-whitelist": "1.3.3",
"cordova-plugin-x-toast": "2.6.0",
......
source diff could not be displayed: it is too large. Options to address this: view the blob.
......@@ -865,6 +865,7 @@ angular.module('cesium.network.services', ['ngApi', 'cesium.currency.services',
// Get current block
return peer.api.blockchain.current(false/*no cache*/)
.then(function(block) {
if (!block) throw new Error('Wrong response for /blockchain/current (empty)');
peer.currentNumber = block.number;
peer.online = true;
peer.buid = buid(block);
......@@ -1032,12 +1033,16 @@ angular.module('cesium.network.services', ['ngApi', 'cesium.currency.services',
if (data.expertMode) {
score += (100 * (peer.difficulty ? (10000-peer.difficulty) : 0));
score += (1 * (peer.uid ? computeScoreAlphaValue(peer.uid, 2, true) : 0));
score += (0.001 * (!peer.uid ? computeScoreAlphaValue(peer.pubkey, 3, true) : 0));
}
else {
score += (100 * (peer.uid ? computeScoreAlphaValue(peer.uid, 2, true) : 0));
score += (1 * (!peer.uid ? computeScoreAlphaValue(peer.pubkey, 2, true) : 0));
score += (0.001 * (!peer.uid ? computeScoreAlphaValue(peer.pubkey, 3, true) : 0));
}
score += (peer.isBma() ? (peer.isSsl() ? 0.01 : 0.001) :0); // If many endpoints: BMAS first, then BMA
score += (0.00001 * (peer.isBma() ? (peer.isSsl() ? 1 : 0.5) :0)); // If many endpoints: BMAS first, then BMA
peer.score = score;
return -score;
});
 
......@@ -2790,7 +2795,7 @@ angular.module('cesium.crypto.services', ['cesium.utils.services'])
 
// var qrcode;
 
angular.module('cesium.utils.services', [])
angular.module('cesium.utils.services', ['angular-fullscreen-toggle'])
 
// Replace the '$ionicPlatform.ready()', to enable multiple calls
// See http://stealthcode.co/multiple-calls-to-ionicplatform-ready/
......@@ -3770,7 +3775,7 @@ angular.module('cesium.cache.services', ['angular-cache'])
}
 
function onSettingsChanged(settings) {
var newStorageMode = getSettingsStorageMode(settings)
var newStorageMode = getSettingsStorageMode(settings);
var hasChanged = (newStorageMode !== storageMode);
if (hasChanged) {
storageMode = newStorageMode;
......@@ -4153,7 +4158,6 @@ angular.module('cesium.http.services', ['cesium.cache.services'])
sockets = [],
defaultCachePrefix = 'csHttp-',
allCachePrefixes = {};
;
 
if (!timeout) {
timeout=4000; // default
......@@ -5411,7 +5415,7 @@ angular.module('cesium.currency.services', ['ngApi', 'cesium.bma.services'])
 
function ready() {
if (started) return $q.when(data);
return startPromise || start();
return (startPromise || start());
}
 
function stop() {
......@@ -5425,11 +5429,26 @@ angular.module('cesium.currency.services', ['ngApi', 'cesium.bma.services'])
return $timeout(start, 200);
}
 
function start() {
function start(bmaAlive) {
if (startPromise) return startPromise;
if (started) return $q.when(data);
if (!bmaAlive) {
return BMA.ready()
.then(function(alive) {
if (alive) return start(alive); // Loop
return $timeout(start, 500); // Loop, after a delay, because BMA node seems to be not alive...
});
}
console.debug('[currency] Starting...');
var now = Date.now();
 
startPromise = BMA.ready()
.then(function(started) {
if (started) return true;
return $timeout(function() {return start(true);}, 500);
})
 
// Load data
.then(loadData)
......@@ -5851,8 +5870,8 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
};
 
that.ready = function() {
if (that.started) return $q.when(true);
return that._startPromise || that.start();
if (that.started) return $q.when(that.alive);
return (that._startPromise || that.start());
};
 
that.start = function() {
......@@ -5872,11 +5891,10 @@ angular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.
}
 
console.debug("[BMA] Starting {0} {ssl: {1})...".format(that.server, that.useSsl));
var now = Date.now();
 
that._startPromise = $q.all([
csSettings.ready,
csSettings.ready(),
that.isAlive()
])
.then(function(res) {
......@@ -10381,15 +10399,15 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se
if (!data.pubkey) throw new Error('User not login!');
return (data.children || []).reduce(function(res, wallet) {
return wallet.data.pubkey ? res.concat(wallet.data.pubkey) : res;
}, [data.pubkey])
}
}, [data.pubkey]);
},
 
getByPubkey = function(pubkey) {
if (!pubkey) throw new Error("Missing 'pubkey' argument !");
if (!data.pubkey) throw new Error('User not login!');
if (data.pubkey === pubkey) return exports; // main wallet
return getChildWalletByPubkey(pubkey);
}
},
 
downloadChildrenWalletFile = function() {
return $q.all([
......@@ -11960,7 +11978,7 @@ function HomeController($scope, $state, $timeout, $ionicHistory, $translate, $ht
$http.get(feedUrl, {responseType: 'json', cache: csCache.get(null, csCache.constants.LONG)})
.success(function(feed) {
console.debug('[home] Feeds loaded in {0}ms'.format(Date.now()-now));
if (!feed || !feed.items || !feed.items.length) return // skip if empty
if (!feed || !feed.items || !feed.items.length) return; // skip if empty
 
feed.items = feed.items.reduce(function(res, item) {
if (!item || (!item.title && !item.content_text && !item.content_html)) return res; // Skip
......@@ -11996,7 +12014,7 @@ function HomeController($scope, $state, $timeout, $ionicHistory, $translate, $ht
console.error('[home] Failed to load feeds.');
$scope.feed = null;
});
}
};
 
/**
* Catch click for quick fix
......@@ -13052,7 +13070,7 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
$scope.changeMethod = function(method, params){
$scope.hideMethodsPopover();
 
if (!method || method == $scope.formData.method) return; // same method
if (!method || method === $scope.formData.method) return; // same method
 
console.debug("[login] method is: " + method);
$scope.formData.method = method;
......@@ -13064,7 +13082,7 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
}
 
// Scrypt (advanced or not)
if (method == 'SCRYPT_DEFAULT' || method == 'SCRYPT_ADVANCED') {
if (method === 'SCRYPT_DEFAULT' || method === 'SCRYPT_ADVANCED') {
$scope.pubkey = null;
 
 
......@@ -13084,9 +13102,9 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
}
$scope.changeScrypt(scrypt);
 
$scope.autoComputePubkey = $scope.autoComputePubkey && (method == 'SCRYPT_DEFAULT');
$scope.autoComputePubkey = $scope.autoComputePubkey && (method === 'SCRYPT_DEFAULT');
}
else if (method == 'SCAN') {
else if (method === 'SCAN') {
return $scope.doScan();
}
else {
......@@ -13162,7 +13180,7 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
}
else {
$scope.formData.file.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);
$scope.formData.file.valid = !$scope.expectedPubkey || $scope.expectedPubkey == $scope.formData.file.pubkey;
$scope.formData.file.valid = !$scope.expectedPubkey || $scope.expectedPubkey === $scope.formData.file.pubkey;
$scope.validatingFile = false;
}
 
......@@ -13225,11 +13243,14 @@ function LoginModalController($scope, $timeout, $q, $ionicPopover, $window, Cryp
// TODO : for DEV only
/*$timeout(function() {
$scope.formData = {
username: 'benoit.lavenier@e-is.pro',
password: ''
method: 'SCRYPT_DEFAULT',
username: 'abc',
password: 'def'
};
//$scope.form = {$valid:true};
}, 900);*/
$scope.form = {$valid:true};
$timeout($scope.doLogin, 500);
}, 900); */
}
 
 
......@@ -16779,7 +16800,6 @@ function WalletListImportModalController($scope, $timeout, BMA, csWallet) {
$scope.validatingFile = false;
 
$scope.onFileChanged = function(file) {
console.log(file);
$scope.validatingFile = true;
 
$scope.hasContent = angular.isDefined(file) && file !== '';
......@@ -21056,7 +21076,7 @@ $templateCache.put('templates/login/item_remember_me.html','<ion-checkbox ng-mod
$templateCache.put('templates/login/modal_login.html','<ion-modal-view class="modal-full-height modal-login"><ion-header-bar class="" ng-class="{\'bar-positive\': !isAuth, \'bar-assertive\': isAuth}"><button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" ng-bind-html="title | translate"></h1><div class="buttons buttons-right"><div class="secondary-buttons"><button class="button button-icon button-clear icon ion-android-done visible-xs" ng-class="{\'button-positive\': !isAuth}" style="color: #fff" ng-click="doLogin()"></button></div></div></ion-header-bar><ion-content scroll="true"><ng-include src="::\'templates/login/form_login.html\'"></ng-include></ion-content></ion-modal-view>');
$templateCache.put('templates/login/popover_methods.html','<ion-popover-view class="fit has-header popover-login-methods" ng-class="{\'auth\': isAuth}"><ion-header-bar><h1 class="title" translate="">LOGIN.METHOD_POPOVER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink" ng-click="changeMethod(\'SCRYPT_DEFAULT\')"><i class="icon ion-shuffle" style="font-size: 22px"></i> {{\'LOGIN.METHOD.SCRYPT_DEFAULT\' | translate}} </a><a class="item item-icon-left ink" ng-click="changeMethod(\'SCRYPT_ADVANCED\')"><i class="icon ion-shuffle" style="font-size: 22px"></i> <i class="icon-secondary ion-plus" style="font-size: 13px; left: 40px; margin-top: -4px"></i> {{\'LOGIN.METHOD.SCRYPT_ADVANCED\' | translate}} </a><a class="item item-icon-left ink hidden-xs" ng-click="changeMethod(\'FILE\')"><i class="icon ion-document-text"></i> {{\'LOGIN.METHOD.FILE\' | translate}} </a><a class="item item-icon-left ink" ng-if="$root.device.barcode.enable" ng-click="changeMethod(\'SCAN\')"><i class="icon ion-qr-scanner"></i> {{\'LOGIN.METHOD.SCAN\' | translate}} </a><a class="item item-icon-left ink" ng-if="!isAuth" ng-click="changeMethod(\'PUBKEY\')"><i class="icon ion-key"></i> {{\'LOGIN.METHOD.PUBKEY\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('templates/network/item_content_peer.html','<i class="icon ion-android-desktop" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" ng-if=":rebind:!peer.avatar"></i> <b class="icon-secondary ion-person" ng-if=":rebind:!peer.avatar" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" style="left: 26px; top: -3px"></b> <i class="avatar" ng-if="::peer.avatar" style="background-image: url(\'{{::peer.avatar.src}}\')"></i> <b class="icon-secondary assertive ion-close-circled" ng-if=":rebind:!peer.online" style="left: 37px; top: -10px"></b><div class="row no-padding"><div class="col no-padding"><h3 class="dark" ng-if=":rebind:!peer.bma.private">{{:rebind:peer.dns || peer.server}}</h3><h4 class="gray" ng-if=":rebind:peer.bma.private"><i class="ion-flash"></i> {{:locale:\'NETWORK.VIEW.PRIVATE_ACCESS\'|translate}}</h4><h4><span class="gray" ng-if=":rebind:!peer.uid"><i class="ion-key"></i> {{:rebind:peer.pubkey|formatPubkey}} </span><span class="positive" ng-if=":rebind:peer.uid"><i class="ion-person"></i> {{:rebind:peer.name || peer.uid}} </span><span class="gray" ng-if=":rebind:!compactMode">{{:rebind:peer.dns && (\' | \' + peer.server) + (peer.bma.path||\'\') }}</span></h4></div><div class="col col-20 no-padding text-center" ng-if="::expertMode && search.type != \'offline\'"></div><div class="col col-20 no-padding text-center"><span id="{{$index === 0 ? helptipPrefix + \'-peer-0-block\' : \'\'}}" class="badge" ng-class=":rebind:{\'badge-balanced\': peer.hasMainConsensusBlock, \'badge-energized\': peer.hasConsensusBlock, \'ng-hide\': !peer.currentNumber && !peer.blockNumber }">{{:locale:!expertMode ? (\'COMMON.BLOCK\'|translate) : \'\' }} {{:rebind:(peer.currentNumber || peer.blockNumber) | formatInteger}}</span> <span class="badge badge-secondary" ng-if=":rebind:peer.consensusBlockDelta && expertMode"><i class="ion-clock"></i>&nbsp; {{:rebind:peer.consensusBlockDelta|formatDurationTime}}</span></div></div>');
$templateCache.put('templates/network/items_peers.html','<div class="no-padding {{::motion.ionListClass}}"><div class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-if="::isHttps && expertMode"><small><i class="icon ion-alert-circled"></i> {{:locale:\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></div><div ng-repeat="peer in search.results track by peer.id" class="item item-peer item-icon-left ink {{::ionItemClass}}" ng-class=":rebind:{\'compacted\': peer.compacted && compactMode}" id="{{::helptipPrefix}}-peer-{{::$index}}" ng-click="selectPeer(peer)" ng-include="::\'templates/network/item_content_peer.html\'"></div></div>');
$templateCache.put('templates/network/items_peers.html','<div class="no-padding {{::motion.ionListClass}}"><div class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-if="::isHttps && expertMode"><small><i class="icon ion-alert-circled"></i> {{:locale:\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></div><div ng-repeat="peer in search.results track by peer.id" class="item item-peer item-icon-left ink {{::ionItemClass}}" ng-class=":rebind:{\'compacted\': peer.compacted && compactMode}" ng-attr-id="{{::($index === 0 ? (helptipPrefix + \'-peer-0\') : undefined)}}" ng-click="selectPeer(peer)" ng-include="::\'templates/network/item_content_peer.html\'"></div></div>');
$templateCache.put('templates/network/lookup_popover_actions.html','<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>PEER.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person"></i> {{\'PEER.MEMBERS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'member\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{\'PEER.MIRRORS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'mirror\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-eye-disabled"></i> {{\'PEER.OFFLINE\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'offline\'"></i></a></div></ion-content></ion-popover-view>');
$templateCache.put('templates/network/modal_network.html','<ion-modal-view id="nodes" class="modal-full-height" cache-view="false"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate="">COMMON.BTN_CANCEL</button><h1 class="title" translate="">PEER.PEER_LIST</h1><div class="buttons buttons-right header-item"><span class="secondary"><button class="button button-clear icon ion-loop button-clear" ng-click="refresh()"></button> <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></span></div></ion-header-bar><ion-content><div class="list"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4><span ng-if="enableFilter && search.type==\'member\'" translate="">PEER.MEMBER_PEERS</span> <span ng-if="enableFilter && search.type==\'mirror\'" translate="">PEER.MIRROR_PEERS</span> <span ng-if="!enableFilter || !search.type" translate="">PEER.ALL_PEERS</span> <span ng-if="!search.loading">({{search.results.length}})</span></h4></div><div class="pull-right"><ion-spinner class="icon" icon="android" ng-if="search.loading"></ion-spinner>&nbsp;<div class="pull-right">&nbsp;</div></div></div><ng-include src="::\'templates/network/items_peers.html\'"></ng-include></div></ion-content></ion-modal-view>');
$templateCache.put('templates/network/popover_endpoints.html','<ion-popover-view class="popover-endpoints popover-light" style="height: {{(titleKey?30:0)+((!items || items.length &lt;= 1) ? 55 : 3+items.length*52)}}px"><ion-header-bar class="bar bar-header stable-bg" ng-if="titleKey"><div class="title">{{titleKey | translate:titleValues }}</div></ion-header-bar><ion-content scroll="false"><div class="list" ng-class="{\'has-header\': titleKey}"><div class="item item-text-wrap" ng-repeat="item in items"><div class="item-label" ng-if="item.label">{{item.label | translate}}</div><div id="endpoint_{{$index}}" class="badge item-note dark">{{item.value}}</div></div></div></ion-content></ion-popover-view>');
......@@ -27788,7 +27808,7 @@ $translateProvider.translations("en-GB", {
"TECHNICAL_DIVIDER": "Technical data",
"MODAL_AVATAR": {
"TITLE": "Avatar",
"SELECT_FILE_HELP": "<b>Choose an image file</b>, by clicking on the button below:",
"SELECT_FILE_HELP": "<b>Choose an image file</b>:",
"BTN_SELECT_FILE": "Choose an image",
"RESIZE_HELP": "<b>Re-crop the image</b> if necessary. A click on the image allows to move it. Click on the area at the bottom left to zoom in.",
"RESULT_HELP": "<b>Here is the result</b> as seen on your profile:"
......@@ -28342,7 +28362,7 @@ $translateProvider.translations("en", {
"TECHNICAL_DIVIDER": "Technical data",
"MODAL_AVATAR": {
"TITLE": "Avatar",
"SELECT_FILE_HELP": "<b>Choose an image file</b>, by clicking on the button below:",
"SELECT_FILE_HELP": "<b>Choose an image file</b>:",
"BTN_SELECT_FILE": "Choose an image",
"RESIZE_HELP": "<b>Re-crop the image</b> if necessary. A click on the image allows to move it. Click on the area at the bottom left to zoom in.",
"RESULT_HELP": "<b>Here is the result</b> as seen on your profile:"
......@@ -28946,7 +28966,7 @@ $translateProvider.translations("eo-EO", {
"TECHNICAL_DIVIDER": "Teknikaj informoj",
"MODAL_AVATAR": {
"TITLE": "Profil-foto",
"SELECT_FILE_HELP": "Bonvolu <b>elekti bildo-dosieron</b>, alklakante la ĉi-suban butonon:",
"SELECT_FILE_HELP": "Bonvolu <b>elekti bildo-dosieron</b>:",
"BTN_SELECT_FILE": "Elekti foton",
"RESIZE_HELP": "<b>Rekadri la bildon</b>, laŭbezone. Pluigi klakon sur la bildo ebligas movi ĝin. Alklaku la zonon malsupre maldekstre por zomi.",
"RESULT_HELP": "<b>Jen la rezulto</b> tiel videbla ĉe via profilo:"
......@@ -29524,7 +29544,7 @@ $translateProvider.translations("es-ES", {
"TECHNICAL_DIVIDER": "Informaciónes técnicas",
"MODAL_AVATAR": {
"TITLE": "Foto de perfil",
"SELECT_FILE_HELP": "Por favor, <b>elige un fichero imagen</b>, haciendo un clic sobre el botón por debajo :",
"SELECT_FILE_HELP": "Por favor, <b>elige un fichero imagen</b> :",
"BTN_SELECT_FILE": "Eligir una foto",
"RESIZE_HELP": "<b>Encuadra la imagen</b>, si es necesario. Un clic mantenido sobre la imagen permite desplazarla. Hace un clic sobre la zona abajo a la izquierda para hacer zoom.",
"RESULT_HELP": "<b>Aquí está el resultado</b> tal como está visible sobre su perfil :"
......@@ -30064,7 +30084,7 @@ $translateProvider.translations("fr-FR", {
"TECHNICAL_DIVIDER": "Informations techniques",
"MODAL_AVATAR": {
"TITLE": "Photo de profil",
"SELECT_FILE_HELP": "Veuillez <b>choisir un fichier image</b>, en cliquant sur le bouton ci-dessous :",
"SELECT_FILE_HELP": "Veuillez <b>choisir le fichier image</b> :",
"BTN_SELECT_FILE": "Choisir une photo",
"RESIZE_HELP": "<b>Recadrez l'image</b>, si besoin. Un clic maintenu sur l'image permet de la déplacer. Cliquez sur la zone en bas à gauche pour zoomer.",
"RESULT_HELP": "<b>Voici le résultat</b> tel que visible sur votre profil :"
......@@ -30643,7 +30663,7 @@ $translateProvider.translations("it-IT", {
"TECHNICAL_DIVIDER": "Dati tecnici",
"MODAL_AVATAR": {
"TITLE": "Avatar",
"SELECT_FILE_HELP": "<b>Scegliere un'immagine</b>, cliccando sul bottone qui sotto:",
"SELECT_FILE_HELP": "<b>Scegliere un'immagine</b>:",
"BTN_SELECT_FILE": "Scegliere un'immagine",
"RESIZE_HELP": "<b>Ritagliare l'immagine</b> se necessario. Cliccare sull'immagine permette di spostarla. Cliccando nella zona a basso sinistra permette di fare uno zoom-in.",
"RESULT_HELP": "<b>Questo è il risultato</b> come visibile sul suo profilo:"
......@@ -31721,33 +31741,6 @@ $translateProvider.translations("nl-NL", {
}
);
 
$translateProvider.translations("fr-FR", {
"RML9": {
"BTN_EXPORT": "Télécharger",
"BTN_OPEN": "Ouvrir la page RML9",
"BTN_SWOW_TX": "Voir les transactions",
"FILE_NAME": "relevé du compte {{pubkey|formatPubkey}} au {{currentTime|formatDateForFile}}.csv",
"HEADERS": {
"TIME": "Date",
"AMOUNT": "Montant",
"COMMENT": "Commentaire"
},
"VIEW": {
"TITLE": "RML9",
"DIVIDER": "Dernières transactions :",
"BALANCE": "Solde du compte"
},
"CHART": {
"INPUT_CHART_TITLE": "Somme des flux entrants, par émetteur :",
"OUTPUT_CHART_TITLE": "Somme des flux sortants, par destinaire :"
},
"SETTINGS": {
"ENABLE_TOGGLE": "Activer le plugin RML9 ?"
}
}
}
);
$translateProvider.translations("en-GB", {
"MAP": {
"COMMON": {
......@@ -32137,6 +32130,33 @@ $translateProvider.translations("it-IT", {
}
}
);
$translateProvider.translations("fr-FR", {
"RML9": {
"BTN_EXPORT": "Télécharger",
"BTN_OPEN": "Ouvrir la page RML9",
"BTN_SWOW_TX": "Voir les transactions",
"FILE_NAME": "relevé du compte {{pubkey|formatPubkey}} au {{currentTime|formatDateForFile}}.csv",
"HEADERS": {
"TIME": "Date",
"AMOUNT": "Montant",
"COMMENT": "Commentaire"
},
"VIEW": {
"TITLE": "RML9",
"DIVIDER": "Dernières transactions :",
"BALANCE": "Solde du compte"
},
"CHART": {
"INPUT_CHART_TITLE": "Somme des flux entrants, par émetteur :",
"OUTPUT_CHART_TITLE": "Somme des flux sortants, par destinaire :"
},
"SETTINGS": {
"ENABLE_TOGGLE": "Activer le plugin RML9 ?"
}
}
}
);
}]);
 
angular.module('cesium.plugins.templates', []).run(['$templateCache', function($templateCache) {$templateCache.put('plugins/es/templates/menu_extend.html','<div ng-if=":state:enable && extensionPoint === \'menu-user\'" class="visible-xs visible-sm"><a menu-close="" class="item item-icon-left" active-link="active" ng-if="login && walletData.isMember" active-link-path-prefix="#/app/invitations" ui-sref="app.view_invitations"><i class="icon ion-person-stalker"></i> <span translate="">MENU.INVITATIONS</span> <span class="badge badge-positive" ng-if="walletData.invitations.unreadCount">{{walletData.invitations.unreadCount}}</span> </a><a menu-close="" class="item item-icon-left" active-link="active" active-link-path-prefix="#/app/user/message" ng-class="{\'item-menu-disable\': !login}" ui-sref="app.user_message.tab_inbox"><i class="icon ion-email"></i> <span translate="">MENU.MESSAGES</span> <span class="badge badge-positive" ng-if="walletData.messages.unreadCount">{{walletData.messages.unreadCount}}</span> </a><a menu-close="" class="item item-icon-left" active-link="active" active-link-path-prefix="#/app/notifications" ng-class="{\'item-menu-disable\': !login}" ui-sref="app.view_notifications"><i class="icon ion-android-notifications"></i> <span translate="">MENU.NOTIFICATIONS</span> <span class="badge badge-positive" ng-if="walletData.notifications.unreadCount">{{walletData.notifications.unreadCount}}</span></a></div>');
......@@ -32155,14 +32175,14 @@ $templateCache.put('plugins/es/templates/blockchain/items_blocks.html','<div cla
$templateCache.put('plugins/es/templates/blockchain/lookup.html','<ion-view><ion-nav-title><span translate>BLOCKCHAIN.LOOKUP.TITLE</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-navicon visible-xs visible-sm" ng-click="toggleCompactMode()"><b class="icon-secondary" ng-class="{\'ion-arrow-down-b\': !compactMode, \'ion-arrow-up-b\': compactMode}" style="top: -12px; left: 11px; font-size: 10px"></b> <b class="icon-secondary" ng-class="{\'ion-arrow-up-b\': !compactMode,\'ion-arrow-down-b\': compactMode}" style="top: 12px; left: 11px; font-size: 10px"></b></button> <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><ng-include src="::\'plugins/es/templates/blockchain/lookup_form.html\'"></ng-include></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/blockchain/lookup_form.html','<div class="lookupForm"><div class="item no-padding"><div class="button button-small button-text button-stable button-icon-event padding no-padding-right ink" ng-repeat="filter in search.filters" ng-if="filter"><span ng-bind-html="\'BLOCKCHAIN.LOOKUP.TX_SEARCH_FILTER.\'+filter.type|translate:filter"></span> <i class="icon ion-close" ng-click="itemRemove($index)"></i></div><label class="item-input"><i class="icon ion-search placeholder-icon"></i> <input type="text" class="visible-xs visible-sm" placeholder="{{\'BLOCKCHAIN.LOOKUP.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearchText()"><div class="helptip-anchor-center"><a id="helptip-blockchain-search-text"></a></div></label></div><div class="padding-top padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4 ng-if="search.type==\'last\'" translate="">BLOCKCHAIN.LOOKUP.LAST_BLOCKS</h4><h4 ng-if="search.type==\'text\'">{{\'COMMON.RESULTS_LIST\'|translate}}</h4><h5 class="dark" ng-if="!search.loading && search.total"><span translate="COMMON.RESULTS_COUNT" translate-values="{count: search.total}"></span> <small class="gray" ng-if=":rebind:search.took && expertMode">- {{:rebind:\'COMMON.EXECUTION_TIME\'|translate: {duration: search.took} }} </small><small class="gray" ng-if=":rebind:expertMode && search.filters && search.filters.length">- <a ng-click="toggleShowQuery()" ng-if="!showQuery">{{\'DOCUMENT.LOOKUP.SHOW_QUERY\'|translate }} <i class="icon ion-arrow-down-b gray"></i> </a><a ng-click="toggleShowQuery()" ng-if="showQuery">{{\'DOCUMENT.LOOKUP.HIDE_QUERY\'|translate }} <i class="icon ion-arrow-up-b gray"></i></a></small></h5><h5 class="gray" ng-if="search.loading"><ion-spinner class="icon ion-spinner-small" icon="android"></ion-spinner><span translate="">COMMON.SEARCHING</span><br></h5></div></div><div class="item no-border no-padding" ng-if=":rebind:search.filters && search.filters.length && expertMode"><small class="no-padding no-margin" ng-if="showQuery"><span class="gray text-wrap dark">{{:rebind:search.query}}</span></small></div><ion-list class="list list-blocks" ng-class="::motion.ionListClass"><ng-include src="::\'plugins/es/templates/blockchain/items_blocks.html\'"></ng-include></ion-list><ion-infinite-scroll ng-if="search.hasMore" spinner="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll></div>');
$templateCache.put('plugins/es/templates/blockchain/lookup_popover_actions.html','<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>BLOCKCHAIN.LOOKUP.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a ng-if="enableFilter" class="item item-icon-left item-icon-right ink" ng-click="doSearchLast()"><i class="icon ion-clock"></i> {{\'BLOCKCHAIN.LOOKUP.BTN_LAST\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'last\'"></i></a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/common/edit_pictures.html','<div class="gallery" ng-controller="ESPicturesEditCtrl as ctrl"><div ng-repeat="picture in pictures" class="item card card-gallery stable-bg" ng-class="{\'in done\': picture.isnew}"><div><h2 ng-if="picture.title">{{picture.title}}</h2><img ng-src="{{picture.src}}"></div><div class="item done in tabs tabs-secondary tabs-icon-left"><a class="tab-item stable-bg assertive" ng-click="removePicture($index)" title="{{\'COMMON.BTN_PICTURE_DELETE\' | translate}}"><i class="icon ion-trash-a"></i>{{\'COMMON.BTN_PICTURE_DELETE\'|translate}}</a> <a class="tab-item stable-bg dark" ng-click="rotatePicture($index)" title="{{\'COMMON.BTN_PICTURE_ROTATE\' | translate}}"><i class="icon ion-forward"></i>{{\'COMMON.BTN_PICTURE_ROTATE\'|translate}}</a> <a class="tab-item stable-bg" ng-click="favoritePicture($index)" ng-class="{\'gray\': $index !== 0, \'positive\': $index === 0}" title="{{\'COMMON.BTN_PICTURE_FAVORISE\' | translate}}"><i class="icon ion-star"></i>{{\'COMMON.BTN_PICTURE_FAVORISE\'|translate}}</a></div></div><div class="item card card-gallery card-gallery-new text-center padding ink" ng-click="selectNewPicture(\'#pictureFile\')"><i class="ion-image stable" style="font-size:150px"></i> <b class="ion-plus gray" style="font-size:80px; position:absolute; top:25px; right: 5px"></b><p translate>COMMON.BTN_ADD_PICTURE</p></div><input type="file" id="pictureFile" accept="image/*" onchange="angular.element(this).scope().fileChanged(event)" style="visibility:hidden; position:absolute"></div>');
$templateCache.put('plugins/es/templates/common/edit_pictures.html','<div class="gallery" ng-controller="ESPicturesEditCtrl as ctrl"><div ng-repeat="picture in pictures" class="item card card-gallery stable-bg" ng-class="{\'in done\': picture.isnew}"><div><h2 ng-if="picture.title">{{picture.title}}</h2><img ng-src="{{picture.src}}"></div><div class="item done in tabs tabs-secondary tabs-icon-left"><a class="tab-item stable-bg assertive" ng-click="removePicture($index)" title="{{\'COMMON.BTN_PICTURE_DELETE\' | translate}}"><i class="icon ion-trash-a"></i>{{\'COMMON.BTN_PICTURE_DELETE\'|translate}}</a> <a class="tab-item stable-bg dark" ng-click="rotatePicture($index)" title="{{\'COMMON.BTN_PICTURE_ROTATE\' | translate}}"><i class="icon ion-forward"></i>{{\'COMMON.BTN_PICTURE_ROTATE\'|translate}}</a> <a class="tab-item stable-bg" ng-click="favoritePicture($index)" ng-class="{\'gray\': $index !== 0, \'positive\': $index === 0}" title="{{\'COMMON.BTN_PICTURE_FAVORISE\' | translate}}"><i class="icon ion-star"></i>{{\'COMMON.BTN_PICTURE_FAVORISE\'|translate}}</a></div></div><div class="item card card-gallery card-gallery-new text-center padding ink" file-select="onFileChanged(file)" accept="image/*"><i class="ion-image stable" style="font-size:150px"></i> <b class="ion-plus gray" style="font-size:80px; position:absolute; top:25px; right: 5px"></b><p translate>COMMON.BTN_ADD_PICTURE</p></div></div>');
$templateCache.put('plugins/es/templates/common/edit_position.html','<div class="item item-divider" translate>LOCATION.LOCATION_DIVIDER</div><ion-item class="item-input item-floating-label item-button-right"><span class="input-label">{{\'LOCATION.ADDRESS\' | translate}}</span><textarea placeholder="{{\'LOCATION.ADDRESS_HELP\' | translate}}" ng-model="formData.address" ng-model-options="{ debounce: 350 }" rows="4" cols="10">\n </textarea></ion-item><div class="item item-input item-floating-label" ng-class="{\'item-input-error\': form.$submitted && form.geoPoint.$invalid}"><span class="input-label" translate>LOCATION.CITY</span> <input type="text" placeholder="{{\'LOCATION.CITY_HELP\'|translate}}" ng-model="formData.city" ng-model-options="{ updateOn: \'blur\' }" required-if="formData.address" ng-change="onCityChanged()"></div><input type="hidden" name="geoPoint" ng-model="formData.geoPoint" required-if="formPosition.enable" geo-point><div class="form-errors" ng-show="form.$submitted && form.city.$error" ng-messages="form.city.$error"><div class="form-error" ng-message="required"><span translate="LOCATION.ERROR.CITY_REQUIRED_IF_STREET"></span></div></div><div class="form-errors" ng-show="form.$submitted && form.geoPoint.$error" ng-messages="form.geoPoint.$error"><div class="form-error" ng-message="required"><span translate="LOCATION.ERROR.REQUIRED_FOR_LOCATION" ng-if="!formData.city"></span> <span translate="LOCATION.ERROR.INVALID_FOR_LOCATION" ng-if="formData.city"></span></div><div class="form-error" ng-message="geoPoint"><span translate="LOCATION.ERROR.REQUIRED_FOR_LOCATION" ng-if="!formData.city"></span> <span translate="LOCATION.ERROR.INVALID_FOR_LOCATION" ng-if="formData.city"></span></div></div><div class="item row item-text-wrap no-padding"><div class="col no-padding"><ion-checkbox ng-model="formPosition.enable" ng-change="onUseGeopointChanged()" class="item item-border-large done in"><div class="item-content"><span translate>LOCATION.USE_GEO_POINT</span><h4 class="gray" ng-if="formPosition.loading"><ion-spinner class="icon ion-spinner-small" icon="android"></ion-spinner>{{\'LOCATION.LOADING_LOCATION\'|translate}}</h4></div></ion-checkbox></div><div class="col col-10 no-padding" style="min-width: 60px"><div class="row text-center"><a class="button button-stable button-small-padding" title="{{\'LOCATION.BTN_GEOLOC_ADDRESS\'|translate}}" ng-disabled="!formPosition.enable" ng-click="openSearchLocationModal()"><i class="icon ion-home" style="left: 15px"></i> <b class="icon-secondary ion-search" style="top: -9px; left:32px; font-size: 18px"></b></a></div></div></div><cs-extension-point name="after-position"></cs-extension-point>');
$templateCache.put('plugins/es/templates/common/edit_socials.html','<div class="list no-padding {{::motion.ionListClass}}"><div class="item item-divider"><span translate="">PROFILE.SOCIAL_NETWORKS_DIVIDER</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></div><ion-list show-reorder="socialData.reorder"><ion-item class="item-icon-left item-social-edit done in" type="no-padding item-text-wrap" ng-if="formData.socials && formData.socials.length" ng-repeat="social in formData.socials | filter:filterFn track by social.url" id="social-{{social.url|formatSlug}}"><i class="icon ion-social-{{social.type}}" ng-class="{\'ion-bookmark\': social.type == \'other\', \'ion-link\': social.type == \'web\', \'ion-email\': social.type == \'email\', \'ion-iphone\': social.type == \'phone\'}"></i><p ng-if="social.type && social.type != \'web\'">{{social.type}} <i class="ion-locked" ng-if="social.recipient"></i></p><h2><span>{{social.url}}</span></h2><ion-option-button class="button-assertive" ng-if="!social.recipient" ng-click="formData.socials.splice($index, 1); dirty = true;">{{\'COMMON.BTN_DELETE\'|translate}}</ion-option-button><ion-option-button class="button-info" ng-if="!social.recipient" 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($event);" ng-model="socialData.url"></label><button class="button button-small hidden-xs" type="button" ng-click="addSocialNetwork($event)" translate="">COMMON.BTN_ADD</button> <button class="button button-small button-icon icon ion-android-add visible-xs" type="button" ng-click="addSocialNetwork($event)"></button></div></ion-list>');
$templateCache.put('plugins/es/templates/common/item_comment.html','<ng-init ng-init="level = level + 1"><a name="{{::comment.id|formatHash}}"></a><ion-item id="comment-{{::comment.id|formatHash}}" class="card card-comment card-avatar stable-900-bg item-text-wrap no-padding" ng-class="::{\'in done\': comment.isnew}"><div class="card-header padding-left" ng-if="comment.parent && !hideParent"><h5 class="gray underline"><ng-if ng-if="!comment.parent.issuer">{{\'COMMENTS.REPLY_TO_DELETED_COMMENT\'|translate}}</ng-if><ng-if ng-if="comment.parent.issuer"><a ng-click="toggleExpandedParent(comment, $index)">{{\'COMMENTS.REPLY_TO_LINK\'|translate}}<ng-if ng-if="::comment.parent.uid">{{::comment.parent.name||comment.parent.uid}}</ng-if><ng-if ng-if="::!comment.parent.uid"><i class="ion-key"></i> {{::comment.parent.name|| (comment.parent.issuer|formatPubkey) }}</ng-if></a><i ng-class="{\'ion-arrow-down-b\': !comment.expandedParent[$index], \'ion-arrow-up-b\': comment.expandedParent[$index]}"></i></ng-if></h5><div class="padding-left" ng-if="comment.expandedParent[$index]"><div class="card card-avatar card-avatar-small stable-bg item-text-wrap no-padding in done"><ng-include ng-init="comment = comment.parent" src="\'plugins/es/templates/common/item_comment_content.html\'"></ng-include></div></div></div><ng-include src="::\'plugins/es/templates/common/item_comment_content.html\'"></ng-include><div class="card-footer gray"><small class="underline"><a ng-click="share($event, comment, $index)">{{comment.creationTime | formatFromNow}}</a><ng-if ng-if="comment.replyCount">| <a class="dark" ng-click="toggleExpandedReplies(comment, $index)">{{\'COMMENTS.REPLY_COUNT\'|translate:comment}}</a> <i ng-class="{\'ion-arrow-down-b\': !comment.showReplies, \'ion-arrow-up-b\': comment.showReplies}"></i></ng-if></small><div class="pull-right"><a class="ion-android-share-alt" ng-click="share($event, comment)"></a> <a class="ion-edit" ng-if="isUserPubkey(comment.issuer)" ng-click="edit(comment)"></a> <a class="ion-trash-a" ng-if="isUserPubkey(comment.issuer)" ng-click="remove(comment, $index)"></a> <a class="ion-reply" ng-click="reply(comment)">{{::\'COMMENTS.REPLY\'|translate}}</a></div></div></ion-item><div ng-if="comment.expandedReplies[$index]" class="padding-left card-avatar-small expanded" ng-init="hideParent=true"><ng-include ng-repeat="comment in comment.replies track by comment.id" src="\'plugins/es/templates/common/item_comment.html\'"></ng-include></div></ng-init>');
$templateCache.put('plugins/es/templates/common/item_comment_content.html','<div class="item item-avatar done in"><span class="avatar" ng-if="::!comment.avatar" ng-class="::{\'avatar-member\': comment.uid, \'avatar-wallet\': !comment.uid}"></span> <span class="avatar" ng-if="::comment.avatar" style="background-image: url({{::comment.avatar.src}})"></span> <a class="pull-left" ui-sref="app.wot_identity({pubkey:comment.issuer, uid: comment.uid})"><span class="positive" ng-if="::comment.uid">{{::comment.name||comment.uid}} </span><span ng-if="::!comment.uid" class="gray"><i class="icon ion-key gray"></i> {{::comment.name || (comment.issuer|formatPubkey)}} </span></a>&nbsp; <span trust-as-html="comment.html"></span></div>');
$templateCache.put('plugins/es/templates/common/item_location_search.html','<div class="item no-padding"><div class="item-input"><i class="icon ion-location placeholder-icon"></i> <input type="text" placeholder="{{(options.location.help||\'LOCATION.SEARCH_HELP\')|translate}}" ng-model-options="{ debounce: 350 }" ng-model="search.location" ng-keydown="onKeydown($event)" ng-change="onLocationChanged()" ng-blur="hideDropdown()"></div></div><ul class="item no-padding list dropdown-list" ng-if="locations" scroll="true"><div ng-if="!locations.length" class="item padding assertive"><span translate>COMMON.SEARCH_NO_RESULT</span></div><a ng-repeat="res in locations" class="item item-border-large item-text-wrap ink done in {{res.selected && \'active\' || \'\'}}" ng-class="::{\'item-divider\': !res.address, \'item-icon-left\': res.address}" ng-click="::res.address ? selectLocation(res) : false"><h4 class="text-italic" ng-if="::!res.address" ng-bind-html="res.name"></h4><ng-if ng-if="::res.address"><i class="icon ion-location"></i><h3 ng-if="res.address.road">{{::res.address.road}}</h3><h3><span ng-if="res.address.postcode">{{::res.address.postcode}}</span> {{::res.address.city||res.address.village}} <span class="gray">| {{::res.address.country}}</span></h3><h5 class="gray">{{\'LOCATION.MODAL.POSITION\'|translate:res }}</h5></ng-if></a></ul>');
$templateCache.put('plugins/es/templates/common/modal_category.html','<ion-modal-view><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title">{{ (ctrl.title || \'COMMON.CATEGORIES\') | translate}}</h1></ion-header-bar><ion-content class="categoryModal"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="list"><label class="item item-input"><i class="icon ion-search placeholder-icon"></i> <input type="text" placeholder="{{\'COMMON.CATEGORY_SEARCH_HELP\'|translate}}" ng-model="ctrl.searchText" ng-model-options="{ debounce: 350 }" ng-change="ctrl.doSearch()"></label><div ng-repeat="cat in categories" class="item item-category item-text-wrap" ng-class="{\'item-divider\': !cat.parent}" ng-click="cat.parent ? closeModal(cat) : false"><h2 ng-bind-html="cat.name"></h2></div></div></ion-content></ion-modal-view>');
$templateCache.put('plugins/es/templates/common/modal_edit_avatar.html','<ion-modal-view><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs visible-sm" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>PROFILE.MODAL_AVATAR.TITLE</h1><button class="button button-clear icon-right visible-xs" ng-click="doCrop()" ng-disabled="formData.imageCropStep == 1" ng-if="formData.imageCropStep <= 2"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-clear icon-right visible-xs" ng-click="closeModal(formData.result)" ng-if="formData.imageCropStep == 3"><i class="icon ion-android-done"></i></button></ion-header-bar><ion-content class="modal-avatar padding"><div ng-show="formData.imageCropStep == 1"><p translate>PROFILE.MODAL_AVATAR.SELECT_FILE_HELP</p><div class="item card text-center padding ink" ng-click="openFileSelector()"><i class="ion-image stable" style="font-size:150px"></i> <b class="ion-plus gray" style="position:relative; font-size:80px; top:-51px; right: 19px"></b><p translate>PROFILE.MODAL_AVATAR.BTN_SELECT_FILE</p></div><input type="file" name="fileInput" accept="image/*" id="fileInput" onchange="angular.element(this).scope().fileChanged(event)" style="visibility:hidden; position:absolute"></div><div ng-show="formData.imageCropStep == 2"><p translate>PROFILE.MODAL_AVATAR.RESIZE_HELP</p><div class="item card text-center padding ink"><image-crop data-height="200" data-width="200" data-shape="circle" data-step="formData.imageCropStep" src="formData.imgSrc" data-result="formData.result" data-result-blob="formData.resultBlob" crop="formData.initCrop" padding="150" max-size="1024"></image-crop></div></div><div ng-show="formData.imageCropStep == 3"><p translate>PROFILE.MODAL_AVATAR.RESULT_HELP</p><div class="item card padding hero" style="height: 110px"><div class="content"><img class="avatar" ng-src="{{formData.result}}" style="height: 88px; width: 88px"></div></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-click="doCrop()" translate ng-disabled="formData.imageCropStep == 1" ng-if="formData.imageCropStep <= 2">COMMON.BTN_NEXT</button> <button class="button button-positive ink" ng-click="closeModal(formData.result)" translate ng-if="formData.imageCropStep == 3">COMMON.BTN_CONTINUE</button></div></ion-content></ion-modal-view>');
$templateCache.put('plugins/es/templates/common/modal_edit_avatar.html','<ion-modal-view><ion-header-bar class="bar-positive"><button class="button button-clear visible-xs visible-sm" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>PROFILE.MODAL_AVATAR.TITLE</h1><button class="button button-clear icon-right visible-xs" ng-click="doCrop()" ng-disabled="formData.imageCropStep == 1" ng-if="formData.imageCropStep <= 2"><span translate>COMMON.BTN_NEXT</span> <i class="icon ion-ios-arrow-right"></i></button> <button class="button button-clear icon-right visible-xs" ng-click="closeModal(formData.result)" ng-if="formData.imageCropStep == 3"><i class="icon ion-android-done"></i></button></ion-header-bar><ion-content class="modal-avatar padding"><div ng-show="formData.imageCropStep == 1"><p translate>PROFILE.MODAL_AVATAR.SELECT_FILE_HELP</p><div drop-zone="onFileChanged(file)"><div file-select="onFileChanged(file)" accept="image/*"><i class="ion-image stable" style="font-size:150px"></i> <b class="ion-plus gray" style="position:relative; font-size:80px; top:-51px; right: 19px"></b><p class="gray" translate>COMMON.CHOOSE_FILE</p></div></div></div><div ng-show="formData.imageCropStep == 2"><p translate>PROFILE.MODAL_AVATAR.RESIZE_HELP</p><div class="item card text-center padding ink"><image-crop data-height="200" data-width="200" data-shape="circle" data-step="formData.imageCropStep" src="formData.imgSrc" data-result="formData.result" data-result-blob="formData.resultBlob" crop="formData.initCrop" padding="150" max-size="1024"></image-crop></div></div><div ng-show="formData.imageCropStep == 3"><p translate>PROFILE.MODAL_AVATAR.RESULT_HELP</p><div class="item card padding hero" style="height: 110px"><div class="content"><img class="avatar" ng-src="{{formData.result|trustAsHtml}}" style="height: 88px; width: 88px"></div></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="closeModal()" type="button" ng-if="formData.imageCropStep <= 2" translate>COMMON.BTN_CANCEL</button> <button class="button button-stable icon-left ion-chevron-left ink" ng-click="doPrevious()" translate ng-if="formData.imageCropStep >= 2">COMMON.BTN_BACK</button> <button class="button button-calm icon-right ion-chevron-right ink" ng-click="doCrop()" translate ng-disabled="formData.imageCropStep === 1" ng-if="formData.imageCropStep <= 2">COMMON.BTN_NEXT</button> <button class="button button-positive ink" ng-click="closeModal(formData.result)" translate ng-if="formData.imageCropStep === 3">COMMON.BTN_CONTINUE</button></div></ion-content></ion-modal-view>');
$templateCache.put('plugins/es/templates/common/modal_location.html','<ion-modal-view class="modal-full-height modal-search-location"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate="">COMMON.BTN_CANCEL</button><h1 class="title" translate="">LOCATION.MODAL.TITLE</h1></ion-header-bar><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><div class="item item-input"><i class="icon ion-search placeholder-icon"></i> <input type="text" class="visible-xs visible-sm" placeholder="{{\'LOCATION.MODAL.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearch()"></div><div class="padding-top padding-xs" style="display: block; height: 60px"><div class="pull-left" ng-if="!search.loading && search.results"><h4 translate="">COMMON.RESULTS_LIST</h4></div></div><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div ng-if="!search.loading && search.results && (!search.results.length || !search.results[0].address)" class="assertive padding"><span translate="">COMMON.SEARCH_NO_RESULT</span></div><ion-list ng-if="!search.loading" class="padding-top {{::motion.ionListClass}}"><div ng-repeat="res in search.results" class="item item-border-large item-text-wrap ink" ng-class="::{\'item-divider\': !res.address, \'item-icon-left item-icon-right\': res.address}" ng-click="res.address ? closeModal(res) : false"><h4 class="text-italic" ng-if="::!res.address" ng-bind-html="res.name"></h4><ng-if ng-if="::res.address"><i class="icon ion-location"></i><h2 ng-if="res.address.road">{{::res.address.road}}</h2><h3><span ng-if="res.address.postcode">{{::res.address.postcode}}</span> {{::res.address.city||res.address.village}} <span class="gray">| {{::res.address.country}}</span></h3><h5 class="gray">{{\'LOCATION.MODAL.POSITION\'|translate:res }}</h5><i class="icon ion-ios-arrow-right"></i></ng-if></div></ion-list></ion-content><ion-footer-bar class="stable-bg padding-left padding-right block" ng-if="license"><div class="pull-right copyright"><span class="dark">\xA9 </span><a class="positive" href="{{license.url}}" target="_blank">{{license.name}}</a></div></ion-footer-bar></ion-modal-view>');
$templateCache.put('plugins/es/templates/common/popover_profile_extend.html','<button ng-if=":state:enable && auth" class="button button-positive button-small ink" ng-click="showEditUserProfile()">{{\'PROFILE.BTN_EDIT\' | translate}}</button>');
$templateCache.put('plugins/es/templates/common/popup_report_abuse.html','<form name="abuseForm" ng-submit=""><div class="list" ng-init="setAbuseForm(abuseForm)"><label class="item item-input" ng-class="{\'item-input-error\': abuseForm.$submitted && abuseForm.comment.$invalid}"><textarea class="padding" style="background-color: transparent" name="comment" type="text" placeholder="{{\'COMMON.REPORT_ABUSE.REASON_HELP\' | translate}}" rows="3" ng-model="abuseData.comment" ng-minlength="8" required></textarea></label><div class="form-errors" ng-if="abuseForm.$submitted && abuseForm.comment.$error" ng-messages="abuseForm.comment.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div><div class="item item-toggle item-text-wrap dark"><div class="input-label" translate>COMMON.REPORT_ABUSE.ASK_DELETE</div><label class="toggle toggle-royal"><input type="checkbox" ng-model="abuseData.delete"><div class="track"><div class="handle"></div></div></label></div></div></form>');
......@@ -32196,16 +32216,6 @@ $templateCache.put('plugins/es/templates/invitation/popover_actions.html','<ion-
$templateCache.put('plugins/es/templates/invitation/popover_invitation.html','');
$templateCache.put('plugins/es/templates/invitation/view_invitations.html','<ion-view left-buttons="leftButtons" class="view-invitation"><ion-nav-title>{{\'INVITATION.LIST.TITLE\' | translate}}</ion-nav-title><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><div class="row no-padding"><div class="col no-padding-xs no-padding-sm"><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="padding gray" ng-if="!search.loading && !search.results.length" translate="">INVITATION.NO_RESULT</div><ng-include src="::\'plugins/es/templates/invitation/list_invitation.html\'"></ng-include></div></div></ion-content><button id="fab-new-invitation" class="button button-fab button-fab-bottom-right button-assertive icon ion-android-send visible-xs visible-sm spin" ng-click="showNewInvitationModal()"></button></ion-view>');
$templateCache.put('plugins/es/templates/join/modal_join_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'select-account-type\'"><div class="item item-complex card stable-bg item-icon-left item-icon-right ink" ng-class="{ activated: accountTypeMember != null && !accountTypeMember }" ng-click="selectAccountType(\'organization\')"><div class="item-content item-text-wrap"><i class="item-image icon dark cion-registry-association"></i><h2 translate>ACCOUNT.NEW.ORGANIZATION_ACCOUNT</h2><h4 class="gray" translate>ACCOUNT.NEW.ORGANIZATION_ACCOUNT_HELP</h4><i class="icon dark ion-ios-arrow-right"></i></div></div></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'last-slide\'"><ion-slide-page><ion-content class="has-header" scroll="false"><p>TOTO</p></ion-content></ion-slide-page></ng-if>');
$templateCache.put('plugins/es/templates/network/item_content_peer.html','<i class="icon ion-android-desktop" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" ng-if=":rebind:!peer.avatar"></i> <b class="icon-secondary ion-person" ng-if=":rebind:!peer.avatar" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" style="left: 26px; top: -3px"></b> <i class="avatar" ng-if=":rebind:peer.avatar" style="background-image: url(\'{{:rebind:peer.avatar.src}}\')"></i> <b class="icon-secondary assertive ion-close-circled" ng-if=":rebind:!peer.online" style="left: 37px; top: -10px"></b><div class="row no-padding"><div class="col no-padding"><h3 class="dark">{{:rebind:peer.dns || peer.server}}</h3><h4><span class="gray" ng-if=":rebind:!peer.name"><i class="ion-key"></i> {{:rebind:peer.pubkey|formatPubkey}} </span><span class="positive" ng-if=":rebind:peer.name"><i class="ion-person"></i> {{:rebind:peer.name}} </span><span class="gray">{{:rebind:peer.dns && (\' | \' + peer.server) + (peer.ep.path||\'\') }}</span></h4></div><div class="col col-20 no-padding text-center" ng-if="::!expertMode && search.type != \'offline\'"><div style="min-width: 50px; padding-top: 5px" ng-if=":rebind:peer.docCount.emailSubscription!==undefined"><span ng-if=":rebind:peer.hasEndpoint(\'ES_SUBSCRIPTION_API\')" title="{{\'ES_PEER.EMAIL_SUBSCRIPTION_COUNT\'|translate: peer.docCount }}"><i class="ion-email"></i> {{:rebind:peer.docCount.emailSubscription || \'?\'}}</span></div></div><div class="col col-20 no-padding text-center" ng-if="::expertMode && search.type != \'offline\'"></div><div class="col col-20 no-padding text-center" id="{{$index === 0 ? helptipPrefix + \'-peer-0-block\' : \'\'}}"><span class="badge badge-stable">{{:rebind:peer.docCount.record !== undefined ? (peer.docCount.record|formatInteger) : \'?\'}} <span ng-if=":rebind:!expertMode && peer.docCount.record!==undefined">{{::\'ES_PEER.DOCUMENTS\'|translate|lowercase }} </span></span><span class="badge badge-secondary" ng-class=":rebind:{\'balanced\': peer.hasMainConsensusBlock, \'energized\': peer.hasConsensusBlock, \'ng-hide\': !peer.currentNumber }" ng-if="::expertMode">{{:rebind:\'BLOCKCHAIN.VIEW.TITLE\'|translate: {number:peer.currentNumber} }}</span></div></div>');
$templateCache.put('plugins/es/templates/network/items_peers.html','<div ng-class="::motion.ionListClass" class="no-padding"><div class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-if="::isHttps && expertMode"><small><i class="icon ion-alert-circled"></i> {{::\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></div><div ng-repeat="peer in :rebind:search.results track by peer.id" class="item item-peer item-icon-left ink" ng-class="::ionItemClass" id="{{helptipPrefix}}-peer-{{$index}}" ng-click="selectPeer(peer)" ng-include="::\'plugins/es/templates/network/item_content_peer.html\'"></div></div>');
$templateCache.put('plugins/es/templates/network/lookup_popover_actions.html','<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>PEER.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person"></i> {{\'PEER.MEMBERS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'member\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{\'PEER.MIRRORS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'mirror\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-eye-disabled"></i> {{\'PEER.OFFLINE\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'offline\'"></i></a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/network/modal_network.html','<ion-modal-view id="nodes" class="modal-full-height" cache-view="false"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>PEER.PEER_LIST</h1><div class="buttons buttons-right header-item"><span class="secondary"><button class="button button-clear icon ion-loop button-clear" ng-click="refresh()"></button> <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></span></div></ion-header-bar><ion-content><div class="list"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4 ng-if="!enableFilter || !search.type">{{\'PEER.ALL_PEERS\' | translate}} <span ng-if="!search.loading">({{search.results.length}})</span></h4></div><div class="pull-right"><ion-spinner class="icon" icon="android" ng-if="search.loading"></ion-spinner>&nbsp;</div></div><ng-include src="::\'plugins/es/templates/network/items_peers.html\'"></ng-include></div></ion-content></ion-modal-view>');
$templateCache.put('plugins/es/templates/network/popover_endpoints.html','<ion-popover-view class="popover-endpoints popover-light" style="height: {{(titleKey?30:0)+((!items || items.length &lt;= 1) ? 55 : 3+items.length*52)}}px"><ion-header-bar class="bar bar-header stable-bg" ng-if="titleKey"><div class="title">{{titleKey | translate:titleValues }}</div></ion-header-bar><ion-content scroll="false"><div class="list" ng-class="{\'has-header\': titleKey}"><div class="item item-text-wrap" ng-repeat="item in items"><div class="item-label" ng-if="item.label">{{item.label | translate}}</div><div id="endpoint_{{$index}}" class="badge item-note dark">{{item.value}}</div></div></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/network/popover_network.html','');
$templateCache.put('plugins/es/templates/network/popover_peer_info.html','');
$templateCache.put('plugins/es/templates/network/view_es_network.html','<ion-view><ion-nav-title><span translate="">MENU.NETWORK</span>&nbsp; <span translate="">ES_SETTINGS.PLUGIN_NAME</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refresh()"></button></ion-nav-buttons><ion-content scroll="true" ng-init="enableFilter=true; ionItemClass=\'item-border-large\';"><div class="row responsive-sm responsive-md responsive-lg"><div class="col list col-border-right"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4><span ng-if="enableFilter && !search.online" translate="">PEER.OFFLINE_PEERS</span> <span ng-if="!enableFilter || search.online" translate="">PEER.ALL_PEERS</span> <span ng-if="search.results.length">({{search.results.length}})</span><ion-spinner ng-if="search.loading" class="icon ion-spinner-small" icon="android"></ion-spinner></h4></div><div class="pull-right"><div class="pull-right" ng-if="enableFilter"><cs-extension-point name="filter-buttons"></cs-extension-point></div></div></div><div id="helptip-network-peers" style="display: block"></div><ng-include src="::\'plugins/es/templates/network/items_peers.html\'"></ng-include></div><div class="col col-33" ng-controller="ESLastDocumentsCtrl"><div class="padding padding-xs" style="display: block"><h4 translate="">DOCUMENT.LOOKUP.LAST_DOCUMENTS_DOTS</h4></div><ng-include src="::\'plugins/es/templates/document/list_documents.html\'"></ng-include></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/network/view_es_peer.html','<ion-view><ion-nav-title><span translate="">PEER.VIEW.TITLE</span>&nbsp; <span translate="">ES_SETTINGS.PLUGIN_NAME</span></ion-nav-title><ion-content><div class="row no-padding"><div class="col list"><ion-item><h1><span translate="">PEER.VIEW.TITLE</span> <span class="gray">{{node.host}}</span></h1><h2 class="gray"><i class="gray icon ion-android-globe"></i> {{node.ep.dns || node.server}} <span class="gray" ng-if="!loading && node.useSsl"><i class="gray ion-locked"></i> <small>SSL</small> </span><span class="gray" ng-if="!loading && node.useTor"><i class="gray ion-bma-tor-api"></i></span></h2><h3><span class="dark"><i class="icon ion-android-desktop"></i> {{\'PEER.VIEW.OWNER\'|translate}} </span><a class="positive" ng-if="node.name" ui-sref="app.wot_identity({pubkey: node.pubkey, uid: node.name})"><i class="ion-person"></i> {{node.name}} </a><span ng-if="!loading && !node.name"><a class="gray" ui-sref="app.wot_identity({pubkey: node.pubkey})"><i class="ion-key"></i> {{node.pubkey|formatPubkey}}</a></span></h3><h3><a ng-click="openRawPeering($event)"><i class="icon ion-share"></i> {{\'PEER.VIEW.SHOW_RAW_PEERING\'|translate}} </a><span class="gray" ng-if="!isReachable">| </span><a ng-if="!isReachable" ng-click="openRawCurrentBlock($event)"><i class="icon ion-share"></i> <span translate="">PEER.VIEW.SHOW_RAW_CURRENT_BLOCK</span></a></h3></ion-item><div class="item item-divider" translate="">PEER.VIEW.GENERAL_DIVIDER</div><ion-item class="item-icon-left item-text-wrap ink" copy-on-click="{{node.pubkey}}"><i class="icon ion-key"></i> <span translate="">COMMON.PUBKEY</span><h4 class="dark text-left">{{node.pubkey}}</h4></ion-item><ion-item class="item item-icon-left item-text-wrap ink" ng-if="isReachable"><i class="icon ion-cube"></i> <span translate="">BLOCKCHAIN.VIEW.TITLE_CURRENT</span><div class="badge badge-calm" ng-if="!loading">{{current.number|formatInteger}}</div></ion-item><ion-item class="item item-icon-left item-text-wrap" ng-if="isReachable"><i class="icon ion-document"></i> <span translate="">ES_PEER.DOCUMENT_COUNT</span><div class="badge badge-stable" ng-if="!loading">{{node.docCount|formatInteger}}</div></ion-item><a class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="isReachable" ui-sref="app.document_search(options.document)"><i class="icon ion-document" style="font-size: 25px"></i> <i class="icon-secondary ion-clock" style="font-size: 18px; left: 33px; top: -12px"></i> <span translate="">DOCUMENT.LOOKUP.LAST_DOCUMENTS</span> <i class="gray icon ion-ios-arrow-right"></i></a><cs-extension-point name="general"></cs-extension-point><div class="item item-divider" ng-hide="loading || !isReachable" translate="">PEER.VIEW.KNOWN_PEERS</div><ion-item class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-show="!loading && !isReachable"><small><i class="icon ion-alert-circled"></i> {{\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></ion-item><div class="item center" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></div><div class="list no-padding {{::motion.ionListClass}}" ng-if="isReachable"><div ng-repeat="peer in :rebind:peers track by peer.id" class="item item-peer item-icon-left ink" ng-class="::ionItemClass" ng-click="selectPeer(peer)" ng-include="::\'plugins/es/templates/network/item_content_peer.html\'"></div></div></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/network/view_network_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'network-buttons\'"></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'blockchain-buttons\'"><a class="button button-text button-small ink" ui-sref="app.blockchain_search"><i class="icon ion-android-search"></i> <span>{{\'COMMON.BTN_SEARCH\'|translate}}</span></a></ng-if>');
$templateCache.put('plugins/es/templates/message/compose.html','<ion-view left-buttons="leftButtons" id="composeMessage"><ion-nav-title><span class="visible-xs visible-sm" nf-if="!isReply" translate="">MESSAGE.COMPOSE.TITLE</span> <span class="visible-xs visible-sm" nf-if="isReply" translate="">MESSAGE.COMPOSE.TITLE_REPLY</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-send visible-xs" ng-click="doSend()"></button></ion-nav-buttons><ion-content scroll="true"><div class="row"><div class="col"><ng-include src="::\'plugins/es/templates/message/compose_form.html\'"></ng-include></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/message/compose_form.html','<form name="messageForm" novalidate="" ng-submit="doSend()"><div class="list no-margin" ng-init="setForm(messageForm)"><a class="item item-icon-right gray ink" ng-class="{\'item-input-error\': form.$submitted && !formData.destPub}" ng-click="showWotLookupModal()"><span class="gray" translate>MESSAGE.COMPOSE.TO</span> <span class="badge badge-royal" ng-if="destUid"><i class="ion-person"></i> {{destName||destUid}}</span>&nbsp; <span class="badge badge-stable" ng-if="!destUid && destPub">{{destName}} <span ng-if="!destName"><i class="ion-key"></i>{{destPub | formatPubkey}}</span> </span>&nbsp; <i class="gray icon ion-ios-arrow-right"></i></a><div class="form-errors" ng-if="form.$submitted && !formData.destPub"><div class="form-error"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><ion-item class="item-text-wrap ink" ng-class="{\'item-icon-right\': enableSelectWallet}" ng-click="showSelectWalletModal()"><span class="gray" translate>TRANSFER.FROM</span> <span class="badge badge-balanced animate-fade-in animate-show-hide" ng-show="!loading"><ion-spinner icon="android" ng-if="!walletData.pubkey"></ion-spinner><span ng-if="walletData.pubkey && !walletData.isMember"><i class="ion-key"></i> {{walletData.pubkey| formatPubkey}}&nbsp;&nbsp; </span><span ng-if="walletData.isMember"><i class="ion-person"></i> {{walletData.name||walletData.uid}} </span></span><i class="gray icon ion-ios-arrow-right" ng-if="enableSelectWallet"></i></ion-item><div class="item item-input" ng-class="{\'item-input-error\': form.$submitted && form.title.$invalid}"><input type="text" autocomplete="off" placeholder="{{\'MESSAGE.COMPOSE.OBJECT_HELP\' | translate}}" name="title" ng-model="formData.title" ng-maxlength="256" required> <span class="badge item-note" ng-if="isReply">({{\'MESSAGE.COMPOSE.OBJECT\' | translate}})</span></div><div class="form-errors" ng-show="form.$submitted && form.title.$error" ng-messages="form.title.$error"><div class="form-error" ng-message="maxlength"><span translate="MESSAGE.ERROR.MESSAGE_CONTENT_TOO_LONG" translate-values="{maxLength: 256}"></span></div><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><div class="item item-input item-floating-label" ng-class="{\'item-input-error\': form.$submitted && form.content.$invalid}"><span class="input-label">{{\'MESSAGE.COMPOSE.MESSAGE\' | translate}}</span><textarea placeholder="{{\'MESSAGE.COMPOSE.MESSAGE_HELP\' | translate}}" autocomplete="off" name="content" ng-model="formData.content" rows="8" ng-maxlength="5000">\n </textarea></div><div class="form-errors" ng-show="form.$submitted && form.content.$error" ng-messages="form.content.$error"><div class="form-error" ng-message="maxlength"><span translate="MESSAGE.ERROR.MESSAGE_CONTENT_TOO_LONG" translate-values="{maxLength: 5000}"></span></div></div></div><div class="padding hidden-xs text-right"><button class="button button-clear button-dark ink" ng-click="cancel()" type="button" translate>COMMON.BTN_CANCEL</button> <button class="button button-positive ink" type="submit" ng-disabled="sending" translate>TRANSFER.BTN_SEND</button></div><div class="list no-margin"><div class="item item-icon-left item-text-wrap"><i class="icon ion-ios-information-outline positive"></i><h4 class="positive" translate>MESSAGE.COMPOSE.ENCRYPTED_HELP</h4></div></div></form>');
$templateCache.put('plugins/es/templates/message/list.html','<div class="padding gray" ng-if="!search.loading && !search.results.length"><span ng-if="search.type==\'last\'">{{ (\'MESSAGE.NO_MESSAGE_\' + type) | upper | translate }}</span> <span ng-if="search.type==\'text\'" translate="">COMMON.SEARCH_NO_RESULT</span></div><ion-list class="{{::motion.ionListClass}}" can-swipe="$root.device.enable"><ion-item class="item item-border-large item-avatar item-icon-right ink" ng-repeat="msg in :rebind:search.results track by msg.id" ng-click="select(msg, $event)"><i ng-if="::!msg.avatar" class="item-image icon" ng-class="{\'ion-person\': msg.uid, \'ion-email\': !msg.uid}"></i> <i ng-if="::msg.avatar" class="item-image avatar" style="background-image: url({{::msg.avatar.src}})"></i><h4 class="pull-right visible-xs visible-sm dark"><i class="ion-clock"></i> {{::msg.time|formatFromNow}}</h4><h3><a class="positive" ng-if="::msg.name||msg.uid" ui-sref="app.wot_identity({pubkey:msg.issuer, uid:msg.name||msg.uid})"><i class="ion-person"></i> {{::msg.name||msg.uid}} </a><a class="gray" ng-if="::!msg.name && !msg.uid" ui-sref="app.wot_identity({pubkey:msg.issuer})"><i class="ion-key"></i> {{::msg.issuer|formatPubkey}}</a></h3><h2 ng-class="{\'unread\': !msg.read}" ng-bind-html="::msg.title"></h2><p ng-bind-html="::msg.summary||msg.content"></p><i class="icon ion-ios-arrow-right"></i><ion-option-button class="button-stable" ng-click="showReplyModal($index)" translate="">MESSAGE.BTN_REPLY</ion-option-button><ion-option-button class="button-assertive" ng-click="delete($index)" translate="">COMMON.BTN_DELETE</ion-option-button></ion-item></ion-list><ion-infinite-scroll ng-if="!search.loading && search.hasMore" icon="ion-loading-c" on-infinite="showMore()" distance="10%"></ion-infinite-scroll>');
......@@ -32217,6 +32227,20 @@ $templateCache.put('plugins/es/templates/message/modal_compose.html','<ion-modal
$templateCache.put('plugins/es/templates/message/popover_message.html','');
$templateCache.put('plugins/es/templates/message/view_message.html','<ion-view left-buttons="leftButtons" class="view-message"><ion-nav-title><span translate="">MESSAGE.VIEW.TITLE</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true"><div class="row no-padding"><div class="col no-padding"><div class="center padding" ng-if="loading"><ion-spinner icon="android"></ion-spinner></div><div class="list animate-fade-slide-in item-text-wrap"><div class="item item-avatar" ng-class="{\'item-avatar\': formData.avatar}"><i ng-if="!formData.avatar" class="item-image" ng-class="{\'ion-person\': formData.uid, \'ion-email\': !formData.uid}"></i> <i ng-if="formData.avatar" class="item-image avatar" style="background-image: url({{::formData.avatar.src}})"></i><h4>{{type == \'inbox\' ? \'MESSAGE.VIEW.SENDER\': \'MESSAGE.VIEW.RECIPIENT\'|translate}} <a class="positive" ui-sref="app.wot_identity({pubkey: (type == \'inbox\') ? formData.issuer : formData.recipient, uid: formData.name||formData.uid})"><span ng-if="formData.uid"><i class="ion-person"></i> {{formData.name||formData.uid}} </span><span ng-if="!formData.uid" class="gray"><i class="ion-key gray"></i> {{formData.name||(formData.issuer|formatPubkey)}}</span></a></h4><h5 class="gray visible-xs visible-sm"><i class="ion-clock"></i> {{formData.time | formatDate}}</h5></div><ion-item class="visible-xs visible-sm"><h1 class="title" ng-bind-html="formData.title"></h1></ion-item><ion-item><p ng-bind-html="formData.html"></p><div class="padding gray" ng-if="!formData.content" translate="">MESSAGE.VIEW.NO_CONTENT</div></ion-item></div></div></div></ion-content><button id="fab-view-message-reply" class="button button-fab button-fab-bottom-right button-calm icon ion-reply visible-xs visible-sm spin" ng-click="showReplyModal()"></button></ion-view>');
$templateCache.put('plugins/es/templates/message/view_popover_actions.html','<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"><a class="item item-icon-left assertive ink" ng-click="delete()"><i class="icon ion-trash-a"></i> {{\'MESSAGE.VIEW.DELETE\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/network/item_content_peer.html','<i class="icon ion-android-desktop" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" ng-if=":rebind:!peer.avatar"></i> <b class="icon-secondary ion-person" ng-if=":rebind:!peer.avatar" ng-class=":rebind:{\'balanced\': peer.online && peer.hasMainConsensusBlock, \'energized\': peer.online && peer.hasConsensusBlock, \'gray\': peer.online && !peer.hasConsensusBlock && !peer.hasMainConsensusBlock, \'stable\': !peer.online}" style="left: 26px; top: -3px"></b> <i class="avatar" ng-if=":rebind:peer.avatar" style="background-image: url(\'{{:rebind:peer.avatar.src}}\')"></i> <b class="icon-secondary assertive ion-close-circled" ng-if=":rebind:!peer.online" style="left: 37px; top: -10px"></b><div class="row no-padding"><div class="col no-padding"><h3 class="dark">{{:rebind:peer.dns || peer.server}}</h3><h4><span class="gray" ng-if=":rebind:!peer.name"><i class="ion-key"></i> {{:rebind:peer.pubkey|formatPubkey}} </span><span class="positive" ng-if=":rebind:peer.name"><i class="ion-person"></i> {{:rebind:peer.name}} </span><span class="gray">{{:rebind:peer.dns && (\' | \' + peer.server) + (peer.ep.path||\'\') }}</span></h4></div><div class="col col-20 no-padding text-center" ng-if="::!expertMode && search.type != \'offline\'"><div style="min-width: 50px; padding-top: 5px" ng-if=":rebind:peer.docCount.emailSubscription!==undefined"><span ng-if=":rebind:peer.hasEndpoint(\'ES_SUBSCRIPTION_API\')" title="{{\'ES_PEER.EMAIL_SUBSCRIPTION_COUNT\'|translate: peer.docCount }}"><i class="ion-email"></i> {{:rebind:peer.docCount.emailSubscription || \'?\'}}</span></div></div><div class="col col-20 no-padding text-center" ng-if="::expertMode && search.type != \'offline\'"></div><div class="col col-20 no-padding text-center" id="{{$index === 0 ? helptipPrefix + \'-peer-0-block\' : \'\'}}"><span class="badge badge-stable">{{:rebind:peer.docCount.record !== undefined ? (peer.docCount.record|formatInteger) : \'?\'}} <span ng-if=":rebind:!expertMode && peer.docCount.record!==undefined">{{::\'ES_PEER.DOCUMENTS\'|translate|lowercase }} </span></span><span class="badge badge-secondary" ng-class=":rebind:{\'balanced\': peer.hasMainConsensusBlock, \'energized\': peer.hasConsensusBlock, \'ng-hide\': !peer.currentNumber }" ng-if="::expertMode">{{:rebind:\'BLOCKCHAIN.VIEW.TITLE\'|translate: {number:peer.currentNumber} }}</span></div></div>');
$templateCache.put('plugins/es/templates/network/items_peers.html','<div ng-class="::motion.ionListClass" class="no-padding"><div class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-if="::isHttps && expertMode"><small><i class="icon ion-alert-circled"></i> {{::\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></div><div ng-repeat="peer in :rebind:search.results track by peer.id" class="item item-peer item-icon-left ink" ng-class="::ionItemClass" id="{{helptipPrefix}}-peer-{{$index}}" ng-click="selectPeer(peer)" ng-include="::\'plugins/es/templates/network/item_content_peer.html\'"></div></div>');
$templateCache.put('plugins/es/templates/network/lookup_popover_actions.html','<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>PEER.POPOVER_FILTER_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'member\')"><i class="icon ion-person"></i> {{\'PEER.MEMBERS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'member\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'mirror\')"><i class="icon ion-radio-waves"></i> {{\'PEER.MIRRORS\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'mirror\'"></i> </a><a class="item item-icon-left item-icon-right ink" ng-click="toggleSearchType(\'offline\')"><i class="icon ion-eye-disabled"></i> {{\'PEER.OFFLINE\' | translate}} <i class="icon ion-ios-checkmark-empty" ng-show="search.type==\'offline\'"></i></a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/network/modal_network.html','<ion-modal-view id="nodes" class="modal-full-height" cache-view="false"><ion-header-bar class="bar-positive"><button class="button button-clear" ng-click="closeModal()" translate>COMMON.BTN_CANCEL</button><h1 class="title" translate>PEER.PEER_LIST</h1><div class="buttons buttons-right header-item"><span class="secondary"><button class="button button-clear icon ion-loop button-clear" ng-click="refresh()"></button> <button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></span></div></ion-header-bar><ion-content><div class="list"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4 ng-if="!enableFilter || !search.type">{{\'PEER.ALL_PEERS\' | translate}} <span ng-if="!search.loading">({{search.results.length}})</span></h4></div><div class="pull-right"><ion-spinner class="icon" icon="android" ng-if="search.loading"></ion-spinner>&nbsp;</div></div><ng-include src="::\'plugins/es/templates/network/items_peers.html\'"></ng-include></div></ion-content></ion-modal-view>');
$templateCache.put('plugins/es/templates/network/popover_endpoints.html','<ion-popover-view class="popover-endpoints popover-light" style="height: {{(titleKey?30:0)+((!items || items.length &lt;= 1) ? 55 : 3+items.length*52)}}px"><ion-header-bar class="bar bar-header stable-bg" ng-if="titleKey"><div class="title">{{titleKey | translate:titleValues }}</div></ion-header-bar><ion-content scroll="false"><div class="list" ng-class="{\'has-header\': titleKey}"><div class="item item-text-wrap" ng-repeat="item in items"><div class="item-label" ng-if="item.label">{{item.label | translate}}</div><div id="endpoint_{{$index}}" class="badge item-note dark">{{item.value}}</div></div></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/network/popover_network.html','');
$templateCache.put('plugins/es/templates/network/popover_peer_info.html','');
$templateCache.put('plugins/es/templates/network/view_es_network.html','<ion-view><ion-nav-title><span translate="">MENU.NETWORK</span>&nbsp; <span translate="">ES_SETTINGS.PLUGIN_NAME</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-loop visible-xs visible-sm" ng-click="refresh()"></button></ion-nav-buttons><ion-content scroll="true" ng-init="enableFilter=true; ionItemClass=\'item-border-large\';"><div class="row responsive-sm responsive-md responsive-lg"><div class="col list col-border-right"><div class="padding padding-xs" style="display: block; height: 60px"><div class="pull-left"><h4><span ng-if="enableFilter && !search.online" translate="">PEER.OFFLINE_PEERS</span> <span ng-if="!enableFilter || search.online" translate="">PEER.ALL_PEERS</span> <span ng-if="search.results.length">({{search.results.length}})</span><ion-spinner ng-if="search.loading" class="icon ion-spinner-small" icon="android"></ion-spinner></h4></div><div class="pull-right"><div class="pull-right" ng-if="enableFilter"><cs-extension-point name="filter-buttons"></cs-extension-point></div></div></div><div id="helptip-network-peers" style="display: block"></div><ng-include src="::\'plugins/es/templates/network/items_peers.html\'"></ng-include></div><div class="col col-33" ng-controller="ESLastDocumentsCtrl"><div class="padding padding-xs" style="display: block"><h4 translate="">DOCUMENT.LOOKUP.LAST_DOCUMENTS_DOTS</h4></div><ng-include src="::\'plugins/es/templates/document/list_documents.html\'"></ng-include></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/network/view_es_peer.html','<ion-view><ion-nav-title><span translate="">PEER.VIEW.TITLE</span>&nbsp; <span translate="">ES_SETTINGS.PLUGIN_NAME</span></ion-nav-title><ion-content><div class="row no-padding"><div class="col list"><ion-item><h1><span translate="">PEER.VIEW.TITLE</span> <span class="gray">{{node.host}}</span></h1><h2 class="gray"><i class="gray icon ion-android-globe"></i> {{node.ep.dns || node.server}} <span class="gray" ng-if="!loading && node.useSsl"><i class="gray ion-locked"></i> <small>SSL</small> </span><span class="gray" ng-if="!loading && node.useTor"><i class="gray ion-bma-tor-api"></i></span></h2><h3><span class="dark"><i class="icon ion-android-desktop"></i> {{\'PEER.VIEW.OWNER\'|translate}} </span><a class="positive" ng-if="node.name" ui-sref="app.wot_identity({pubkey: node.pubkey, uid: node.name})"><i class="ion-person"></i> {{node.name}} </a><span ng-if="!loading && !node.name"><a class="gray" ui-sref="app.wot_identity({pubkey: node.pubkey})"><i class="ion-key"></i> {{node.pubkey|formatPubkey}}</a></span></h3><h3><a ng-click="openRawPeering($event)"><i class="icon ion-share"></i> {{\'PEER.VIEW.SHOW_RAW_PEERING\'|translate}} </a><span class="gray" ng-if="!isReachable">| </span><a ng-if="!isReachable" ng-click="openRawCurrentBlock($event)"><i class="icon ion-share"></i> <span translate="">PEER.VIEW.SHOW_RAW_CURRENT_BLOCK</span></a></h3></ion-item><div class="item item-divider" translate="">PEER.VIEW.GENERAL_DIVIDER</div><ion-item class="item-icon-left item-text-wrap ink" copy-on-click="{{node.pubkey}}"><i class="icon ion-key"></i> <span translate="">COMMON.PUBKEY</span><h4 class="dark text-left">{{node.pubkey}}</h4></ion-item><ion-item class="item item-icon-left item-text-wrap ink" ng-if="isReachable"><i class="icon ion-cube"></i> <span translate="">BLOCKCHAIN.VIEW.TITLE_CURRENT</span><div class="badge badge-calm" ng-if="!loading">{{current.number|formatInteger}}</div></ion-item><ion-item class="item item-icon-left item-text-wrap" ng-if="isReachable"><i class="icon ion-document"></i> <span translate="">ES_PEER.DOCUMENT_COUNT</span><div class="badge badge-stable" ng-if="!loading">{{node.docCount|formatInteger}}</div></ion-item><a class="item item-icon-left item-icon-right item-text-wrap ink" ng-if="isReachable" ui-sref="app.document_search(options.document)"><i class="icon ion-document" style="font-size: 25px"></i> <i class="icon-secondary ion-clock" style="font-size: 18px; left: 33px; top: -12px"></i> <span translate="">DOCUMENT.LOOKUP.LAST_DOCUMENTS</span> <i class="gray icon ion-ios-arrow-right"></i></a><cs-extension-point name="general"></cs-extension-point><div class="item item-divider" ng-hide="loading || !isReachable" translate="">PEER.VIEW.KNOWN_PEERS</div><ion-item class="item item-text-wrap no-border done in gray no-padding-top no-padding-bottom inline text-italic" ng-show="!loading && !isReachable"><small><i class="icon ion-alert-circled"></i> {{\'NETWORK.INFO.ONLY_SSL_PEERS\'|translate}}</small></ion-item><div class="item center" ng-if="loading"><ion-spinner class="icon" icon="android"></ion-spinner></div><div class="list no-padding {{::motion.ionListClass}}" ng-if="isReachable"><div ng-repeat="peer in :rebind:peers track by peer.id" class="item item-peer item-icon-left ink" ng-class="::ionItemClass" ng-click="selectPeer(peer)" ng-include="::\'plugins/es/templates/network/item_content_peer.html\'"></div></div></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/network/view_network_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'network-buttons\'"></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'blockchain-buttons\'"><a class="button button-text button-small ink" ui-sref="app.blockchain_search"><i class="icon ion-android-search"></i> <span>{{\'COMMON.BTN_SEARCH\'|translate}}</span></a></ng-if>');
$templateCache.put('plugins/es/templates/notification/list_notification.html','<ion-list class="{{::motion.ionListClass}}"><ion-item ng-repeat="notification in search.results track by notification.id" class="item-border-large item-text-wrap ink item-avatar" ng-class="{\'unread\': !notification.read}" ng-click="select($event, notification)"><i ng-if="!notification.avatar" class="item-image icon {{::notification.avatarIcon}}"></i> <i ng-if="notification.avatar" class="item-image avatar" style="background-image: url({{::notification.avatar.src}})"></i><h3 trust-as-html="notification.message | translate:(notification.messageParams||notification)"></h3><h4 ng-if="!notification.medianTime"><i class="icon {{notification.icon}}"></i>&thinsp;<span class="dark">{{notification.time|formatFromNow}}</span> <span class="gray">| {{notification.time|formatDate}}</span></h4><h4 ng-if="notification.medianTime"><i class="icon {{notification.icon}}"></i>&thinsp;<span class="dark">{{notification.medianTime|medianFromNow}}</span> <span class="gray">| {{notification.medianTime|medianDate}}</span></h4></ion-item></ion-list><ion-infinite-scroll ng-if="!search.loading && search.hasMore" spinner="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll>');
$templateCache.put('plugins/es/templates/notification/popover_actions.html','<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"><a class="item item-icon-left ink" ng-disabled="!search.results.length" ng-click="markAllAsRead()"><i class="icon ion-android-checkmark-circle"></i> {{\'COMMON.NOTIFICATIONS.MARK_ALL_AS_READ\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/notification/popover_notification.html','');
$templateCache.put('plugins/es/templates/notification/view_notifications.html','<ion-view left-buttons="leftButtons" class="view-notification"><ion-nav-title>{{\'COMMON.NOTIFICATIONS.TITLE\' | translate}}</ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="refresh(true)"></ion-refresher><div class="row no-padding"><div class="col no-padding-xs no-padding-sm"><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="padding gray" ng-if="!search.loading && !search.results.length" translate="">COMMON.NOTIFICATIONS.NO_RESULT</div><ng-include src="::\'plugins/es/templates/notification/list_notification.html\'"></ng-include></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/registry/edit_record.html','<ion-view left-buttons="leftButtons" class="view-page"><ion-nav-title><span class="visible-xs" ng-if="id" ng-bind-html="formData.title"></span> <span class="visible-xs" ng-if="!loading && !id" translate="">REGISTRY.EDIT.TITLE_NEW</span></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear visible-xs visible-sm" ng-class="{\'ion-android-send\':!id, \'ion-android-done\': id}" ng-click="save()"></button></ion-nav-buttons><ion-content scroll="true"><div class="hero"><div class="content"><i class="avatar" ng-class="avatarClass" ng-style="avatarStyle"><button class="button button-positive button-large button-clear flat icon ion-camera visible-xs visible-sm" style="display: inline-block" ng-click="showAvatarModal()"></button> <button ng-if="avatar.src" class="button button-positive button-large button-clear flat visible-xs visible-sm" style="display: inline-block; left: 85px; bottom:15px" ng-click="rotateAvatar()"><i class="icon-secondary ion-image" style="left: 24px; top: 3px; font-size: 24px"></i> <i class="icon-secondary ion-forward" style="left: 26px; top: -13px"></i></button></i><h3 class="dark"><span ng-if="!loading && formData.title">{{formData.title}}</span> <span ng-if="!loading && !id && !formData.title" translate="">REGISTRY.EDIT.TITLE_NEW</span></h3><h4 class="dark"><ion-spinner ng-if="loading" icon="android"></ion-spinner></h4></div></div><div class="row no-padding"><div class="col no-padding-xs no-padding-sm"><form name="recordForm" novalidate="" ng-submit="save()"><div class="list {{::motion.ionListClass}}" ng-init="setForm(recordForm)"><div class="item" ng-if="id"><h4 class="gray"><i class="icon ion-calendar"></i> {{\'COMMON.LAST_MODIFICATION_DATE\'|translate}}&nbsp;{{formData.time | formatDate}}</h4><div class="badge badge-balanced badge-editable" ng-click="showRecordTypeModal()">{{\'REGISTRY.TYPE.ENUM.\'+formData.type|upper|translate}}</div></div><ng-include src="::\'plugins/es/templates/common/edit_pictures.html\'"></ng-include><div class="item item-divider" translate="">REGISTRY.GENERAL_DIVIDER</div><div class="item item-input item-floating-label" ng-class="{\'item-input-error\': form.$submitted && form.title.$invalid}"><span class="input-label" translate="">REGISTRY.EDIT.RECORD_TITLE</span> <input type="text" placeholder="{{\'REGISTRY.EDIT.RECORD_TITLE_HELP\'|translate}}" name="title" id="registry-record-title" ng-model="formData.title" ng-minlength="3" ng-required="true"></div><div class="form-errors" ng-if="form.$submitted && form.title.$error" ng-messages="form.title.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div><div class="form-error" ng-message="minlength"><span translate="ERROR.FIELD_TOO_SHORT"></span></div></div><div class="item item-input item-floating-label"><span class="input-label" translate="">REGISTRY.EDIT.RECORD_DESCRIPTION</span><textarea placeholder="{{\'REGISTRY.EDIT.RECORD_DESCRIPTION_HELP\'|translate}}" ng-model="formData.description" rows="8" cols="10">\n </textarea></div><div class="item item-icon-right ink" ng-if="loading || formData.type===\'company\' || formData.type===\'shop\'" ng-class="{\'item-input-error\': form.$submitted && !formData.category.id, \'done in\': !loading}" ng-click="showCategoryModal()"><span translate="">REGISTRY.CATEGORY</span> <span class="badge badge-royal">{{formData.category.name | formatCategory}}</span>&nbsp; <i class="gray icon ion-ios-arrow-right"></i></div><input type="hidden" name="category" ng-model="formData.category.id" required-if="formData.type==\'company\' || formData.type==\'shop\'"><div class="form-errors" ng-if="form.$submitted && form.category.$error" ng-messages="form.category.$error"><div class="form-error" ng-message="required"><span translate="ERROR.FIELD_REQUIRED"></span></div></div><ng-include src="::\'plugins/es/templates/common/edit_position.html\'" ng-controller="ESPositionEditCtrl as ctrl"></ng-include><ng-include src="::\'plugins/es/templates/common/edit_socials.html\'" ng-controller="ESSocialsEditCtrl"></ng-include><div class="item item-divider" translate="">REGISTRY.TECHNICAL_DIVIDER</div><div class="item item-input item-floating-label"><span class="input-label" translate="">REGISTRY.EDIT.RECORD_PUBKEY</span> <input type="text" placeholder="{{\'REGISTRY.EDIT.RECORD_PUBKEY_HELP\'|translate}}" ng-model="formData.pubkey"></div></div></form></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/registry/lookup_form.html','<form ng-submit="doSearch()"><div class="item no-padding"><div class="item-input"><i class="icon ion-search placeholder-icon"></i> <input type="text" class="visible-xs visible-sm" placeholder="{{\'REGISTRY.SEARCH.SEARCH_HELP\'|translate}}" ng-model="search.text" ng-model-options="{ debounce: 650 }" ng-change="doSearch()" on-return="doSearchText()" select-on-click=""></div></div><ng-include src="::\'plugins/es/templates/common/item_location_search.html\'" ng-if="entered && options.location.show && (!search.geoPoint || smallscreen)" ng-controller="ESSearchPositionItemCtrl"></ng-include><ng-include src="::\'plugins/es/templates/registry/lookup_form_options.html\'"></ng-include></form><div class="padding-top padding-xs padding-sm" style="display: block; height: 60px"><div class="pull-left ng-hide" ng-show="!search.loading && search.results"><ng-if ng-if="search.lastRecords"><h4 translate="">REGISTRY.SEARCH.LAST_RECORDS</h4><small class="gray no-padding" ng-if="search.total"><span ng-if="search.geoPoint && search.total">{{\'REGISTRY.SEARCH.LAST_RECORD_COUNT_LOCATION\'|translate:{count: search.total, location: search.location} }}</span> <span ng-if="!search.geoPoint && search.total">{{\'REGISTRY.SEARCH.LAST_RECORD_COUNT\'|translate:{count: search.total} }}</span></small></ng-if><ng-if ng-if="!search.lastRecords"><h4 translate="">COMMON.RESULTS_LIST</h4><small class="gray no-padding" ng-if="search.total"><span ng-if="search.geoPoint && search.total">{{\'REGISTRY.SEARCH.RESULT_COUNT_LOCATION\'|translate:{count: search.total, location: search.location} }}</span> <span ng-if="!search.geoPoint && search.total">{{\'REGISTRY.SEARCH.RESULT_COUNT\'|translate:{count: search.total} }}</span></small></ng-if></div></div><div class="center" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="padding assertive" ng-if="!search.loading && search.results.length===0" translate="">COMMON.SEARCH_NO_RESULT</div>');
$templateCache.put('plugins/es/templates/registry/lookup_form_options.html','<div class="item item-icon-left item-input item-select stable-bg" ng-if="search.advanced && options.location.show"><i class="icon ion-arrow-resize gray"></i> <span class="input-label item-icon-left-padding" translate="">LOCATION.DISTANCE</span><label><select ng-model="search.geoDistance" class="col-border-left" ng-options="i as (geoDistanceLabels[i].labelKey | translate:geoDistanceLabels[i].labelParams ) for i in geoDistances track by i"></select></label></div>');
......@@ -32229,10 +32253,6 @@ $templateCache.put('plugins/es/templates/registry/modal_record_type.html','<ion-
$templateCache.put('plugins/es/templates/registry/view_popover_actions.html','<ion-popover-view class="fit has-header"><ion-header-bar><h1 class="title" translate>REGISTRY.VIEW.MENU_TITLE</h1></ion-header-bar><ion-content scroll="false"><div class="list item-text-wrap"><a class="item item-icon-left ink visible-xs visible-sm" ng-click="showSharePopover($event)"><i class="icon ion-android-share-alt"></i> {{\'COMMON.BTN_SHARE\' | translate}} </a><a class="item item-icon-left assertive ink visible-xs visible-sm" ng-if="canEdit" ng-click="delete()"><i class="icon ion-trash-a"></i> {{\'COMMON.BTN_DELETE\' | translate}}</a><ng-if ng-if="!canEdit && likeData.abuses"><button class="item item-icon-left ink" ng-disabled="!!likeData.abuses.wasHitCount" ng-class="{\'gray\': !!likeData.abuses.wasHitCount}" ng-click="hideActionsPopover() && reportAbuse($event)"><i class="icon ion-android-warning"></i> {{\'COMMON.BTN_REPORT_ABUSE_DOTS\' | translate}}</button></ng-if></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/registry/view_record.html','<ion-view left-buttons="leftButtons" class="view-page"><ion-nav-title></ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-bar button-icon button-clear visible-xs visible-sm" ng-click="edit()" ng-if="canEdit"><i class="icon ion-android-create"></i></button> <button class="button button-bar button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true" class="refresher-top-bg"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="load()"></ion-refresher><div class="hero"><div class="content" ng-if="!loading"><i class="avatar cion-page-{{formData.type}}" ng-if="!formData.avatar"></i> <i class="avatar" ng-style="{{avatarStyle}}" ng-if="formData.avatar"></i><h3><span class="dark" ng-bind-html="formData.title"></span></h3><h4 class="gray"><small ng-include="::\'plugins/es/templates/common/view_likes.html\'"></small></h4></div><h4 class="content dark" ng-if="loading"><ion-spinner icon="android"></ion-spinner></h4></div><div class="visible-xs visible-sm"><button class="button button-fab button-fab-top-right button-stable" ng-click="toggleLike($event)"><i class="icon ion-heart" ng-class="{\'gray\': !likeData.likes.wasHitCount, \'calm\': likeData.likes.wasHitCount}"></i></button></div><div class="row no-padding-xs no-padding-sm"><div class="col list animate-fade-slide-in item-text-wrap no-padding-xs no-padding-sm"><div class="item"><h2 class="gray"><a ng-if="formData.city" ui-sref="app.wot_lookup.tab_registry({location:formData.city})"><i class="icon ion-location"></i> <span ng-bind-html="formData.city"></span> </a><span ng-if="formData.city && formData.type">&nbsp;|&nbsp;</span> <a ng-if="formData.type" ui-sref="app.wot_lookup.tab_registry({type:formData.type})"><i class="cion-page-{{formData.type}}"></i> {{\'REGISTRY.TYPE.ENUM.\'+formData.type|upper|translate}}</a></h2><h4><i class="icon ion-clock" ng-if="formData.time"></i> <span translate="">COMMON.SUBMIT_BY</span> <a ng-class="{\'positive\': issuer.uid, \'gray\': !issuer.uid}" ui-sref="app.wot_identity({pubkey:issuer.pubkey, uid: issuer.name||issuer.uid})"><ng-if ng-if="issuer.uid"><i class="icon ion-person"></i> {{::issuer.name||issuer.uid}}</ng-if><span ng-if="!issuer.uid"><i class="icon ion-key"></i> {{issuer.pubkey|formatPubkey}} </span></a><span>{{formData.time|formatFromNow}}<h4 class="gray hidden-xs">| {{formData.time | formatDate}}</h4></span></h4></div><a id="registry-share-anchor-{{id}}"></a><div class="item"><h2 trust-as-html="formData.description"></h2></div><div class="item" ng-if="formData.category || formData.address"><h4 ng-if="formData.category"><span class="gray" translate="">REGISTRY.VIEW.CATEGORY</span> <a class="positive" ng-if="formData.category" ui-sref="app.wot_lookup.tab_registry({category:formData.category.id})"><span ng-bind-html="formData.category.name"></span></a></h4><h4 ng-if="formData.address"><span class="gray" translate="">REGISTRY.VIEW.LOCATION</span> <a class="positive" target="_system" href="https://www.openstreetmap.org/search?query={{formData.address}},%20{{formData.city}}"><span ng-bind-html="formData.address"></span> <span ng-if="formData.city">- </span><span ng-bind-html="formData.city"></span></a></h4></div><ng-if ng-if="formData.socials && formData.socials.length>0"><div class="item item-icon-left" type="no-padding item-text-wrap" ng-repeat="social in formData.socials track by social.url" id="social-{{social.url|formatSlug}}"><i class="icon ion-social-{{social.type}}" ng-class="{\'ion-bookmark\': social.type == \'other\', \'ion-link\': social.type == \'web\', \'ion-email\': social.type == \'email\'}"></i><p ng-if="social.type && social.type != \'web\'">{{social.type}}</p><h2><a ng-click="openLink($event, social.url, social.type)">{{social.url}}</a></h2></div></ng-if><div class="item item-icon-left item-text-wrap ink" ng-if="formData.pubkey" copy-on-click="{{::formData.pubkey}}"><i class="icon ion-key"></i> <span translate="">REGISTRY.EDIT.RECORD_PUBKEY</span><h4 class="dark">{{::formData.pubkey}}</h4></div><div class="lazy-load"><ng-include src="::\'plugins/es/templates/common/view_pictures.html\'"></ng-include><ng-include src="::\'plugins/es/templates/common/view_comments.html\'"></ng-include></div></div></div></ion-content><button class="button button-fab button-fab-bottom-right button-assertive icon ion-android-send visible-xs visible-sm" ng-if="formData.pubkey && !isUserPubkey(formData.pubkey)" ng-click="showTransferModal({pubkey: formData.pubkey, uid: formData.title})"></button></ion-view>');
$templateCache.put('plugins/es/templates/registry/view_wallet_pages.html','<ion-view left-buttons="leftButtons" class="view-notification"><ion-nav-title>{{\'REGISTRY.MY_PAGES\' | translate}}</ion-nav-title><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><ion-refresher pulling-text="{{:locale:\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="doUpdate()"></ion-refresher><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="center padding gray" ng-if="!search.loading && !search.results.length" translate="">REGISTRY.NO_PAGE</div><ng-include src="::\'plugins/es/templates/registry/lookup_list.html\'"></ng-include></ion-content><button id="fab-wallet-add-registry-record" class="button button-fab button-fab-bottom-right button-assertive hidden-md hidden-lg spin" ng-click="showNewPageModal()"><i class="icon ion-plus"></i></button></ion-view>');
$templateCache.put('plugins/es/templates/notification/list_notification.html','<ion-list class="{{::motion.ionListClass}}"><ion-item ng-repeat="notification in search.results track by notification.id" class="item-border-large item-text-wrap ink item-avatar" ng-class="{\'unread\': !notification.read}" ng-click="select($event, notification)"><i ng-if="!notification.avatar" class="item-image icon {{::notification.avatarIcon}}"></i> <i ng-if="notification.avatar" class="item-image avatar" style="background-image: url({{::notification.avatar.src}})"></i><h3 trust-as-html="notification.message | translate:(notification.messageParams||notification)"></h3><h4 ng-if="!notification.medianTime"><i class="icon {{notification.icon}}"></i>&thinsp;<span class="dark">{{notification.time|formatFromNow}}</span> <span class="gray">| {{notification.time|formatDate}}</span></h4><h4 ng-if="notification.medianTime"><i class="icon {{notification.icon}}"></i>&thinsp;<span class="dark">{{notification.medianTime|medianFromNow}}</span> <span class="gray">| {{notification.medianTime|medianDate}}</span></h4></ion-item></ion-list><ion-infinite-scroll ng-if="!search.loading && search.hasMore" spinner="android" on-infinite="showMore()" distance="1%"></ion-infinite-scroll>');
$templateCache.put('plugins/es/templates/notification/popover_actions.html','<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"><a class="item item-icon-left ink" ng-disabled="!search.results.length" ng-click="markAllAsRead()"><i class="icon ion-android-checkmark-circle"></i> {{\'COMMON.NOTIFICATIONS.MARK_ALL_AS_READ\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/notification/popover_notification.html','');
$templateCache.put('plugins/es/templates/notification/view_notifications.html','<ion-view left-buttons="leftButtons" class="view-notification"><ion-nav-title>{{\'COMMON.NOTIFICATIONS.TITLE\' | translate}}</ion-nav-title><ion-nav-buttons side="secondary"><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showActionsPopover($event)"></button></ion-nav-buttons><ion-content scroll="true"><ion-refresher pulling-text="{{\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="refresh(true)"></ion-refresher><div class="row no-padding"><div class="col no-padding-xs no-padding-sm"><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="padding gray" ng-if="!search.loading && !search.results.length" translate="">COMMON.NOTIFICATIONS.NO_RESULT</div><ng-include src="::\'plugins/es/templates/notification/list_notification.html\'"></ng-include></div></div></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/settings/plugin_settings.html','<ion-view left-buttons="leftButtons" class="settings"><ion-nav-title translate="">ES_SETTINGS.PLUGIN_NAME</ion-nav-title><ion-content scroll="true"><div class="item item-toggle dark"><div class="input-label" translate="">ES_SETTINGS.ENABLE_TOGGLE</div><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.enable"><div class="track"><div class="handle"></div></div></label></div><span class="item item-divider" translate="">SETTINGS.STORAGE_DIVIDER</span><div class="item item-toggle item-text-wrap dark"><div class="input-label" ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.ENABLE_REMOTE_STORAGE</div><h4 class="gray text-wrap" ng-bind-html="\'ES_SETTINGS.ENABLE_REMOTE_STORAGE_HELP\' | translate"></h4><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.useRemoteStorage" ng-disabled="!formData.enable"><div class="track"><div class="handle"></div></div></label></div><span class="item item-divider" translate="">SETTINGS.NETWORK_SETTINGS</span><ion-item class="ink item-icon-right item-text-wrap visible-xs visible-sm" ng-click="formData.enable && changeEsNode()" ng-disabled="!formData.enable"><div class="input-label" ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.PEER</div><ng-if ng-if="isFallbackNode"><h4 class="gray text-wrap assertive"><b class="ion-alert-circled"></b> <span ng-bind-html="\'SETTINGS.PEER_CHANGED_TEMPORARY\' | translate "></span></h4><div class="badge badge-assertive">{{server}}</div></ng-if><div class="badge" ng-class="{\'badge-balanced\': formData.enable, \'badge-stable\': !formData.enable}" ng-if="!isFallbackNode">{{server}}</div><i class="icon ion-ios-arrow-right"></i></ion-item><span class="item item-divider" translate="">ES_SETTINGS.NOTIFICATIONS.DIVIDER</span><span class="item gray item-text-wrap" translate="">ES_SETTINGS.NOTIFICATIONS.HELP_TEXT</span><label class="item item-toggle dark item-text-wrap"><span ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.NOTIFICATIONS.ENABLE_TX_SENT</span><div class="toggle toggle-royal"><input type="checkbox" ng-model="formData.notifications.txSent" ng-disabled="!formData.enable"><div class="track"><div class="handle"></div></div></div></label><label class="item item-toggle dark item-text-wrap"><span ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.NOTIFICATIONS.ENABLE_TX_RECEIVED</span><label class="toggle toggle-royal"><input type="checkbox" ng-model="formData.notifications.txReceived" ng-disabled="!formData.enable"><div class="track"><div class="handle"></div></div></label></label><label class="item item-toggle dark item-text-wrap"><span ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.NOTIFICATIONS.ENABLE_CERT_SENT</span><div class="toggle toggle-royal"><input type="checkbox" ng-model="formData.notifications.certSent" ng-disabled="!formData.enable"><div class="track"><div class="handle"></div></div></div></label><label class="item item-toggle dark item-text-wrap"><span ng-class="{\'gray\': !formData.enable}" translate="">ES_SETTINGS.NOTIFICATIONS.ENABLE_CERT_RECEIVED</span><div class="toggle toggle-royal"><input type="checkbox" ng-model="formData.notifications.certReceived" ng-disabled="!formData.enable"><div class="track"><div class="handle"></div></div></div></label><cs-extension-point name="common"></cs-extension-point></ion-content></ion-view>');
$templateCache.put('plugins/es/templates/settings/settings_extend.html','<div class="item item-text-wrap item-icon-right ink" ui-sref="app.es_settings"><div class="input-label ng-binding" translate>ES_SETTINGS.PLUGIN_NAME</div><h4 class="gray" translate>ES_SETTINGS.PLUGIN_NAME_HELP</h4><i class="icon ion-ios-arrow-right"></i></div>');
$templateCache.put('plugins/es/templates/subscription/edit_subscriptions.html','<ion-view left-buttons="leftButtons" class="view-notification"><ion-nav-title>{{\'SUBSCRIPTION.EDIT.TITLE\' | translate}}</ion-nav-title><ion-nav-buttons side="secondary"></ion-nav-buttons><ion-content class="padding no-padding-xs no-padding-sm" scroll="true"><ion-refresher pulling-text="{{:locale:\'COMMON.BTN_REFRESH\' | translate}}" on-refresh="load()"></ion-refresher><div class="center padding" ng-if="search.loading"><ion-spinner icon="android"></ion-spinner></div><div class="center padding gray" ng-if="!search.loading && !search.results.length" translate="">SUBSCRIPTION.NO_SUBSCRIPTION</div><div class="row no-padding"><div class="col list {{::motion.ionListClass}} item-border-large"><ng-repeat ng-repeat="subscriptions in search.results | filter: { type: \'email\' }" ng-include="\'plugins/es/templates/subscription/item_\' + subscriptions.type.toLowerCase() + \'_subscription.html\'">></ng-repeat></div></div></ion-content><button id="fab-add-subscription-record" class="button button-fab button-fab-bottom-right button-assertive icon ion-plus hidden-md hidden-lg spin" ng-click="addSubscription()"></button></ion-view>');
......@@ -32249,17 +32269,17 @@ $templateCache.put('plugins/es/templates/wot/lookup_item_page.html','<i ng-if=":
$templateCache.put('plugins/es/templates/wot/lookup_lg_extend.html','<div class="buttons-tabs" ng-if=":state:enable"><div class="pull-right"><div class="button button-tab dark" title="{{\'REGISTRY.BTN_SHOW_WOT_HELP\' | translate}}" nav-transition="none" active-link="active" active-link-path-prefix="#/app/wot/lg" ui-sref="app.wot_lookup_lg"><i class="icon ion-person-stalker"></i> {{\'REGISTRY.BTN_SHOW_WOT\' | translate}}</div><a class="button button-tab ink dark" title="{{\'REGISTRY.BTN_SHOW_PAGES_HELP\' | translate}}" nav-transition="none" active-link="active" active-link-path-prefix="#/app/wot/page" ui-sref="app.registry_lookup_lg"><i class="icon ion-social-buffer"></i> {{\'REGISTRY.BTN_SHOW_PAGES\' | translate}}</a></div><div class="pull-right" ng-if="showNewPageButton">&nbsp;</div></div>');
$templateCache.put('plugins/es/templates/wot/popover_certification_actions.html','<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"><a class="item item-icon-left ink" ng-if="canCertify" ng-click="certify()"><i class="icon ion-ribbon-b"></i> {{\'WOT.BTN_CERTIFY\' | translate}} </a><a class="item item-icon-left ink" ng-if="!isUserPubkey(formData.pubkey) && formData.isMember" ng-click="askCertification()"><i class="icon-secondary ion-ribbon-b" style="left: 16px; top: 0px; font-size: 25px"></i> <b class="icon-secondary ion-help" style="left: 35px; top: 0px"></b> {{\'WOT.BTN_ASK_CERTIFICATION\' | translate}} </a><a class="item item-icon-left ink" ng-if="isUserPubkey(formData.pubkey)" ng-click="showAskCertificationModal()"><i class="icon-secondary ion-ribbon-b" style="left: 16px; top: 0px; font-size: 25px"></i> <b class="icon-secondary ion-help" style="left: 35px; top: 0px"></b> {{\'WOT.BTN_ASK_CERTIFICATIONS_DOTS\' | translate}} </a><a class="item item-icon-left ink" ng-if="!isUserPubkey(formData.pubkey)" ng-click="showSuggestCertificationModal()"><i class="icon-secondary ion-person-stalker" style="left: 16px; top: 0px; font-size: 25px"></i> <b class="icon-secondary ion-help" style="left: 37px; top: -4px"></b> {{\'WOT.BTN_SUGGEST_CERTIFICATIONS_DOTS\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/es/templates/wot/view_certifications_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'nav-buttons\'"><button class="button button-icon button-clear icon ion-android-more-vertical visible-xs visible-sm" ng-click="showCertificationActionsPopover($event)"></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'buttons\'"><button class="button button-stable button-small-padding icon ion-android-more-vertical" ng-click="showCertificationActionsPopover($event)" title="{{\'COMMON.POPOVER_ACTIONS_TITLE\' | translate}}"></button></ng-if>');
$templateCache.put('plugins/es/templates/wot/view_identity_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'hero\'"><small class="light" style="display: inline-block" ng-include="::\'plugins/es/templates/common/view_likes.html\'"></small></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'buttons-top-fab\'"><button id="fab-compose-{{:rebind:formData.pubkey}}" class="button button-fab button-fab-top-left button-fab-hero mini button-stable spin" style="left: 88px" ng-click="showNewMessageModal()"><i class="icon ion-compose"></i></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'buttons\'"><button class="button button-stable button-small-padding icon ion-compose" ng-disabled="loading" ng-click="showNewMessageModal()" title="{{\'MESSAGE.BTN_WRITE\' | translate}}"></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'after-buttons\'"><button class="button button-stable button-small-padding icon ion-android-more-vertical" ng-click="showActionsPopover($event)"></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'after-general\'"><span class="item item-divider item-divider-top-border"><span>{{\'PROFILE.PROFILE_DIVIDER\' | translate}} <a style="font-size: 12pt; cursor: pointer" ng-click="showProfileHelp=!showProfileHelp" class="icon positive ion-ios-help-outline ink" title="{{\'PROFILE.PROFILE_DIVIDER_HELP\' | translate}}"></a></span></span><div class="item item-text-wrap positive item-small-height" ng-show="showProfileHelp"><small translate>PROFILE.PROFILE_DIVIDER_HELP</small></div><ng-include src="::\'plugins/es/templates/user/items_profile.html\'" ng-init="showName=false;"></ng-include></ng-if>');
$templateCache.put('plugins/es/templates/wot/view_identity_extend.html','<ng-if ng-if=":state:enable && extensionPoint === \'hero\'"><small class="light" style="display: inline-block" ng-include="::\'plugins/es/templates/common/view_likes.html\'"></small></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'buttons-top-fab\'"><button id="fab-compose-{{:rebind:formData.pubkey}}" class="button button-fab button-fab-top-left button-fab-hero mini button-stable spin" style="left: 88px" ng-click="showNewMessageModal()"><i class="icon ion-email"></i></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'buttons\'"><button class="button button-stable button-small-padding icon ion-email" ng-disabled="loading" ng-click="showNewMessageModal()" title="{{\'MESSAGE.BTN_WRITE\' | translate}}"></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'after-buttons\'"><button class="button button-stable button-small-padding icon ion-android-more-vertical" ng-click="showActionsPopover($event)"></button></ng-if><ng-if ng-if=":state:enable && extensionPoint === \'after-general\'"><span class="item item-divider item-divider-top-border"><span>{{\'PROFILE.PROFILE_DIVIDER\' | translate}} <a style="font-size: 12pt; cursor: pointer" ng-click="showProfileHelp=!showProfileHelp" class="icon positive ion-ios-help-outline ink" title="{{\'PROFILE.PROFILE_DIVIDER_HELP\' | translate}}"></a></span></span><div class="item item-text-wrap positive item-small-height" ng-show="showProfileHelp"><small translate>PROFILE.PROFILE_DIVIDER_HELP</small></div><ng-include src="::\'plugins/es/templates/user/items_profile.html\'" ng-init="showName=false;"></ng-include></ng-if>');
$templateCache.put('plugins/es/templates/wot/view_popover_actions.html','<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"><a class="item item-icon-left ink visible-xs visible-sm" ng-click="showSharePopover($event)"><i class="icon ion-android-share-alt"></i> {{\'COMMON.BTN_SHARE\' | translate}} </a><a class="item item-icon-left assertive ink" ng-if="canDelete" ng-click="delete()"><i class="icon ion-trash-a"></i> {{\'COMMON.BTN_DELETE\' | translate}} </a><a class="item item-icon-left ink" ng-if="!canEdit && likeData.likes" ng-click="hideActionsPopover() && toggleLike($event)"><i class="icon" ng-class="{\'ion-heart-broken\': likeData.likes.wasHit, \'ion-heart\': !likeData.likes.wasHit}"></i> {{(likeData.likes.wasHit ? \'COMMON.BTN_LIKE_REMOVE\' : \'COMMON.BTN_LIKE\' )| translate}} </a><a class="item item-icon-left ink" ng-if="!canEdit && likeData.abuses" ng-disabled="!!likeData.abuses.wasHitCount" ng-class="{\'gray\': !!likeData.abuses.wasHitCount}" ng-click="hideActionsPopover() && reportAbuse($event)"><i class="icon ion-android-warning"></i> {{\'COMMON.BTN_REPORT_ABUSE_DOTS\' | translate}}</a></div></ion-content></ion-popover-view>');
$templateCache.put('plugins/graph/templates/blockchain/graph_block_issuers.html','\n <div class="row responsive-lg">\n\n <!-- bar -->\n <div class="col col-75">\n <canvas id="bar" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-labels="labels"\n chart-colors="colors"\n chart-options="barOptions"\n chart-click="onChartClick">\n </canvas>\n </div>\n\n <!-- pie -->\n <div class="col col-25 padding-top">\n <canvas id="blocksByIssuer-pie" class="chart-pie"\n chart-data="data"\n chart-labels="labels"\n chart-colors="colors"\n chart-click="onChartClick">\n </canvas>\n\n <div class="gray padding-top text-center">\n <small ng-bind-html="\'GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_HELP\'| translate:{issuerCount: data.length, blockCount: blockCount }"></small>\n </div>\n </div>\n </div>\n');
$templateCache.put('plugins/graph/templates/blockchain/graph_tx_count.html','\n <!-- button bar -->\n <div class="button-bar-inline "\n style="top: 33px; margin-top:-33px; position: relative;">\n <button\n class="button button-stable button-clear no-padding-xs pull-right"\n ng-click="showActionsPopover($event)">\n <i class="icon ion-navicon-round"></i>\n </button>\n </div>\n\n <div class="padding-left padding-right">\n <canvas id="tx-line" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-dataset-override="datasetOverride"\n chart-colors="colors"\n chart-options="options"\n chart-labels="labels"\n chart-click="onChartClick">\n </canvas>\n </div>\n\n <ng-include src="::\'plugins/graph/templates/common/graph_range_bar.html\'"></ng-include>\n');
$templateCache.put('plugins/graph/templates/blockchain/view_stats.html','<ion-view left-buttons="leftButtons"\n cache-view="false">\n <ion-nav-title>\n {{\'GRAPH.BLOCKCHAIN.TITLE\' | translate}}{{id}}\n </ion-nav-title>\n\n <ion-content scroll="true" class="no-padding">\n\n <div class="center padding" ng-if="loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div class="list" ng-if="!loading">\n\n\n <!-- TX count -->\n <ng-controller ng-controller="GpBlockchainTxCountCtrl">\n <div class="center padding" ng-if="loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div class="item item-divider" ng-if="!loading" >\n {{\'GRAPH.BLOCKCHAIN.TX_DIVIDER\'|translate}}\n <ion-spinner ng-if="loadingRange" class="ion-spinner-small" icon="android"></ion-spinner>\n </div>\n\n <div class="item no-padding-xs no-padding-sm"\n ng-if="!loading"\n ng-include="::\'plugins/graph/templates/blockchain/graph_tx_count.html\'"\n ng-init="setSize(350, 1000)">\n </div>\n </ng-controller>\n\n\n <!-- Blocks issuer -->\n <ng-controller ng-controller="GpBlockchainIssuersCtrl">\n\n <div class="item item-divider" ng-if="!loading" translate>GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_DIVIDER</div>\n\n <div class="item no-padding-xs no-padding-sm"\n ng-if="!loading"\n ng-include="::\'plugins/graph/templates/blockchain/graph_block_issuers.html\'"\n ng-init="setSize(300, 750)">\n </div>\n\n </ng-controller>\n\n </ion-content>\n\n</ion-view>\n');
$templateCache.put('plugins/graph/templates/account/graph_balance.html','\n <!-- button bar -->\n <div class="button-bar-inline "\n style="top: 33px; margin-top:-33px; position: relative;">\n <button\n class="button button-stable button-clear no-padding-xs pull-right"\n ng-click="showActionsPopover($event)">\n <i class="icon ion-navicon-round"></i>\n </button>\n </div>\n\n <div class="padding-left padding-right">\n <canvas id="account-balance" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-dataset-override="datasetOverride"\n chart-colors="colors"\n chart-options="options"\n chart-labels="labels"\n chart-click="onChartClick">\n </canvas>\n </div>\n\n <ng-include src="::\'plugins/graph/templates/common/graph_range_bar.html\'"></ng-include>\n');
$templateCache.put('plugins/graph/templates/account/graph_certifications.html','\n <div class="padding-left padding-right">\n <canvas id="account-certifications" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-dataset-override="datasetOverride"\n chart-colors="colors"\n chart-options="options"\n chart-labels="labels"\n chart-click="onChartClick">\n </canvas>\n </div>\n');
$templateCache.put('plugins/graph/templates/account/graph_sum_tx.html','<div class="row responsive-sm" ng-if="!loading">\n\n <div class="col col-10 hidden-xs hidden-sm">&nbsp;</div>\n\n <div class="col text-center">\n\n <!-- TX input chart -->\n <p class="gray padding text-wrap"\n ng-if="inputChart.data.length"\n translate>GRAPH.ACCOUNT.INPUT_CHART_TITLE</p>\n <canvas id="chart-received-pie" class="chart-pie"\n chart-data="inputChart.data"\n chart-labels="inputChart.labels"\n chart-colors="inputChart.colors"\n chart-click="onInputChartClick">\n </canvas>\n\n </div>\n\n <div class="col col-10 hidden-xs hidden-sm">&nbsp;</div>\n\n <div class="col text-center">\n\n <!-- TX output chart -->\n <p class="gray padding text-wrap"\n ng-if="outputChart.data.length"\n translate>GRAPH.ACCOUNT.OUTPUT_CHART_TITLE</p>\n <canvas id="chart-sent-pie" class="chart-pie"\n chart-data="outputChart.data"\n chart-labels="outputChart.labels"\n chart-colors="outputChart.colors"\n chart-click="onOutputChartClick">\n </canvas>\n\n </div>\n\n <div class="col col-10 hidden-xs hidden-sm">&nbsp;</div>\n\n</div>\n');
$templateCache.put('plugins/graph/templates/account/view_identity_tx_extend.html','<!-- Buttons section -->\n<ng-if ng-if=":state:enable && extensionPoint === \'buttons\'">\n\n <button class="button button-stable button-small-padding icon ion-stats-bars"\n ui-sref="app.wot_identity_stats({pubkey: formData.pubkey})"\n title="{{\'GRAPH.ACCOUNT.BTN_SHOW_STATS\' | translate}}">\n </button>\n\n</ng-if>\n');
$templateCache.put('plugins/graph/templates/account/view_stats.html','<ion-view left-buttons="leftButtons"\n cache-view="false">\n <ion-nav-title>\n {{\'GRAPH.ACCOUNT.TITLE\' | translate}}{{id}}\n </ion-nav-title>\n\n <ion-content scroll="true" class="no-padding">\n\n\n\n <div class="list" >\n\n <!-- - - - - Balance - - - - -->\n <ng-controller ng-controller="GpAccountBalanceCtrl">\n <div class="center padding" ng-if="loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div class="item item-divider" ng-if="!loading" >\n {{\'GRAPH.ACCOUNT.BALANCE_DIVIDER\'|translate}}\n <ion-spinner ng-if="loadingRange" class="ion-spinner-small" icon="android"></ion-spinner>\n </div>\n\n <div class="item no-padding-xs"\n ng-if="!loading"\n ng-include="::\'plugins/graph/templates/account/graph_balance.html\'"\n ng-init="setSize(350, 1000)">\n </div>\n </ng-controller>\n\n </div>\n\n <div class="item no-padding-xs"\n ng-include="::\'plugins/graph/templates/account/graph_sum_tx.html\'"\n ng-controller="GpAccountSumTxCtrl">\n </div>\n\n <!-- - - - - WOT - - - -\n <div class="item item-divider" translate>\n GRAPH.ACCOUNT.WOT_DIVIDER\n </div>\n\n <div class="item no-padding-xs"\n ng-include="::\'plugins/graph/templates/account/graph_certifications.html\'"\n ng-controller="GpAccountCertificationCtrl"\n ng-init="setSize(350, 1000)">\n </div>-->\n\n </ion-content>\n\n</ion-view>\n');
$templateCache.put('plugins/graph/templates/account/view_wallet_tx_extend.html','<!-- Buttons section -->\n<ng-if ng-if=":state:enable && extensionPoint === \'buttons\'">\n\n <button class="button button-stable button-small-padding icon ion-stats-bars"\n ui-sref="app.wot_identity_stats({pubkey: formData.pubkey})"\n title="{{\'GRAPH.ACCOUNT.BTN_SHOW_STATS\' | translate}}">\n </button>\n\n</ng-if>\n');
$templateCache.put('plugins/graph/templates/blockchain/graph_block_issuers.html','\n <div class="row responsive-lg">\n\n <!-- bar -->\n <div class="col col-75">\n <canvas id="bar" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-labels="labels"\n chart-colors="colors"\n chart-options="barOptions"\n chart-click="onChartClick">\n </canvas>\n </div>\n\n <!-- pie -->\n <div class="col col-25 padding-top">\n <canvas id="blocksByIssuer-pie" class="chart-pie"\n chart-data="data"\n chart-labels="labels"\n chart-colors="colors"\n chart-click="onChartClick">\n </canvas>\n\n <div class="gray padding-top text-center">\n <small ng-bind-html="\'GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_HELP\'| translate:{issuerCount: data.length, blockCount: blockCount }"></small>\n </div>\n </div>\n </div>\n');
$templateCache.put('plugins/graph/templates/blockchain/graph_tx_count.html','\n <!-- button bar -->\n <div class="button-bar-inline "\n style="top: 33px; margin-top:-33px; position: relative;">\n <button\n class="button button-stable button-clear no-padding-xs pull-right"\n ng-click="showActionsPopover($event)">\n <i class="icon ion-navicon-round"></i>\n </button>\n </div>\n\n <div class="padding-left padding-right">\n <canvas id="tx-line" class="chart-bar"\n height="{{height}}" width="{{width}}"\n chart-data="data"\n chart-dataset-override="datasetOverride"\n chart-colors="colors"\n chart-options="options"\n chart-labels="labels"\n chart-click="onChartClick">\n </canvas>\n </div>\n\n <ng-include src="::\'plugins/graph/templates/common/graph_range_bar.html\'"></ng-include>\n');
$templateCache.put('plugins/graph/templates/blockchain/view_stats.html','<ion-view left-buttons="leftButtons"\n cache-view="false">\n <ion-nav-title>\n {{\'GRAPH.BLOCKCHAIN.TITLE\' | translate}}{{id}}\n </ion-nav-title>\n\n <ion-content scroll="true" class="no-padding">\n\n <div class="center padding" ng-if="loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div class="list" ng-if="!loading">\n\n\n <!-- TX count -->\n <ng-controller ng-controller="GpBlockchainTxCountCtrl">\n <div class="center padding" ng-if="loading">\n <ion-spinner icon="android"></ion-spinner>\n </div>\n\n <div class="item item-divider" ng-if="!loading" >\n {{\'GRAPH.BLOCKCHAIN.TX_DIVIDER\'|translate}}\n <ion-spinner ng-if="loadingRange" class="ion-spinner-small" icon="android"></ion-spinner>\n </div>\n\n <div class="item no-padding-xs no-padding-sm"\n ng-if="!loading"\n ng-include="::\'plugins/graph/templates/blockchain/graph_tx_count.html\'"\n ng-init="setSize(350, 1000)">\n </div>\n </ng-controller>\n\n\n <!-- Blocks issuer -->\n <ng-controller ng-controller="GpBlockchainIssuersCtrl">\n\n <div class="item item-divider" ng-if="!loading" translate>GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_DIVIDER</div>\n\n <div class="item no-padding-xs no-padding-sm"\n ng-if="!loading"\n ng-include="::\'plugins/graph/templates/blockchain/graph_block_issuers.html\'"\n ng-init="setSize(300, 750)">\n </div>\n\n </ng-controller>\n\n </ion-content>\n\n</ion-view>\n');
$templateCache.put('plugins/graph/templates/common/graph_range_bar.html','\n <div class="range range-positive no-padding-left no-padding-right">\n <a\n class="button button-stable button-clear no-padding pull-left"\n ng-click="goPreviousRange($event)">\n <i class="icon ion-chevron-left"></i>\n </a>\n <input type="range"\n ng-model="formData.timePct"\n name="timePct"\n min="0" max="100"\n value="{{formData.timePct}}"\n ng-change="onRangeChanged();"\n ng-model-options="{ debounce: 250 }">\n <a\n class="button button-stable button-clear no-padding pull-right"\n ng-click="goNextRange($event)">\n <i class="icon ion-chevron-right"></i>\n </a>\n </div>\n');
$templateCache.put('plugins/graph/templates/common/popover_range_actions.html','<ion-popover-view class="has-header popover-graph-currency">\n <ion-header-bar>\n <h1 class="title" translate>COMMON.POPOVER_ACTIONS_TITLE</h1>\n </ion-header-bar>\n <ion-content scroll="false">\n <div class="list item-text-wrap">\n\n <!-- scale -->\n <a class="item item-icon-left ink"\n ng-click="toggleScale()">\n <i class="icon ion-ios-checkmark-empty" ng-show="formData.scale==\'logarithmic\'"></i>\n <span ng-bind-html="\'GRAPH.COMMON.LOGARITHMIC_SCALE\' | translate"></span>\n </a>\n\n <!-- duration divider -->\n <div class="item item-divider">\n {{\'GRAPH.COMMON.RANGE_DURATION_DIVIDER\'|translate}}\n </div>\n\n <!-- duration: hour -->\n <a class="item item-icon-left ink"\n ng-click="setRangeDuration(\'hour\')">\n <i class="icon ion-ios-checkmark-empty" ng-show="formData.rangeDuration==\'hour\'"></i>\n <span ng-bind-html="\'GRAPH.COMMON.RANGE_DURATION.HOUR\' | translate"></span>\n </a>\n\n <!-- duration: day -->\n <a class="item item-icon-left ink"\n ng-click="setRangeDuration(\'day\')">\n <i class="icon ion-ios-checkmark-empty" ng-show="formData.rangeDuration==\'day\'"></i>\n <span ng-bind-html="\'GRAPH.COMMON.RANGE_DURATION.DAY\' | translate"></span>\n </a>\n\n <!-- duration: month -->\n <a class="item item-icon-left ink"\n ng-click="setRangeDuration(\'month\')">\n <i class="icon ion-ios-checkmark-empty" ng-show="formData.rangeDuration==\'month\'"></i>\n <span ng-bind-html="\'GRAPH.COMMON.RANGE_DURATION.MONTH\' | translate"></span>\n </a>\n\n </div>\n </ion-content>\n</ion-popover-view>\n');
$templateCache.put('plugins/graph/templates/currency/graph_du.html','\n <!-- graphs button bar -->\n <div class="button-bar-inline "\n style="top: 33px; margin-top:-33px; position: relative;">\n <button\n class="button button-stable button-clear no-padding-xs no-padding-sm pull-right"\n ng-click="showActionsPopover($event)">\n <i class="icon ion-navicon-round"></i>\n </button>\n </div>\n\n <canvas id="monetaryMass-bar" class="chart-bar"\n height="{{height}}"\n width="{{width}}"\n chart-data="data"\n chart-labels="labels"\n chart-colors="colors"\n chart-dataset-override="datasetOverride"\n chart-options="options"\n chart-click="showBlock">\n </canvas>\n');
......@@ -32491,7 +32511,7 @@ function EsNotification(json, markAsReadCallback) {
that.icon = 'ion-alert-circled energized';
 
// If deletion has been asked, change the message
if (json.code === 'MODERATION_RECEIVED' && level == 5) {
if (json.code === 'MODERATION_RECEIVED' && json.level === 5) {
that.message = 'EVENT.PAGE.DELETION_RECEIVED';
that.icon = 'ion-trash-a assertive';
}
......@@ -33998,7 +34018,7 @@ angular.module('cesium.es.http.services', ['ngResource', 'ngApi', 'cesium.servic
var url = csHttp.uri.parse(csSettings.data.plugins.es.latestReleaseUrl);
var useSsl = (url.port == 443 || url.protocol === 'https:' || forceUseSsl);
getRequest = csHttp.getWithCache(url.host, url.port, "/" + url.pathname, useSsl, csCache.constants.LONG);
that.raw.getLatestRelease = getRequest
that.raw.getLatestRelease = getRequest;
}
 
return getRequest()
......@@ -38327,8 +38347,7 @@ angular.module('cesium.es.wot.services', ['ngResource', 'cesium.es.http.services
 
return result;
});
};
}
 
function cleanAllCache() {
console.debug("[ES] [wot] Cleaning cache {prefix: '{0}'}...".format(cachePrefix));
......@@ -39581,7 +39600,7 @@ angular.module('cesium.es.network.services', ['ngApi', 'cesium.es.http.services'
// api extension
api: api
};
};
}
 
var service = new EsNetwork('default');
 
......@@ -39657,7 +39676,7 @@ angular.module('cesium.es.like.services', ['ngResource', 'cesium.services',
// User already like: so remove it
if (existingLikeIds && existingLikeIds.length) {
return $q.all(_.map(existingLikeIds, function(likeId) {
return removeLike(likeId, options)
return removeLike(likeId, options);
}))
// Return the deletion, as a delta
.then(function() {
......@@ -39723,10 +39742,10 @@ angular.module('cesium.es.like.services', ['ngResource', 'cesium.services',
 
result.wasHitByPubkey[issuer] = issuerHitIndex !== -1 || false;
result.wasHitCount += issuerHitIndex !== -1 ? 1 : 0;
})
});
 
return result;
})
});
}
 
// Expose functions
......@@ -39753,7 +39772,7 @@ ESSocialsEditController.$inject = ['$scope', '$focus', '$filter', 'UIUtils', 'So
ESSocialsViewController.$inject = ['$scope'];
ESCommentsController.$inject = ['$scope', '$filter', '$state', '$focus', '$timeout', '$anchorScroll', 'UIUtils'];
ESCategoryModalController.$inject = ['$scope', 'UIUtils', '$timeout', 'parameters'];
ESAvatarModalController.$inject = ['$scope'];
ESAvatarModalController.$inject = ['$scope', '$sce'];
ESPositionEditController.$inject = ['$scope', 'csConfig', 'esGeo', 'ModalUtils'];
ESLookupPositionController.$inject = ['$scope', '$q', 'csConfig', 'esGeo', 'ModalUtils'];
ESSearchPositionItemController.$inject = ['$scope', '$timeout', 'ModalUtils', 'csConfig', 'esGeo'];
......@@ -39809,22 +39828,20 @@ function ESPicturesEditController($scope, UIUtils, $q, Device) {
.catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));
};
 
$scope.fileChanged = function(event) {
if (!event.target.files || !event.target.files.length) return;
$scope.onFileChanged = function(event) {
if (!event || !event.file) return;
UIUtils.loading.show();
var file = event.target.files[0];
var file = event.file;
return UIUtils.image.resizeFile(file)
.then(function(imageData) {
$scope.pictures.push({
src: imageData,
isnew: true // use to prevent visibility hidden (if animation)
});
event.target.value = ""; // reset input[type=file]
UIUtils.loading.hide(100);
})
.catch(function(err) {
console.error(err);
event.target.value = ""; // reset input[type=file]
UIUtils.loading.hide();
});
};
......@@ -40186,7 +40203,7 @@ function ESSocialsViewController($scope) {
 
 
 
function ESAvatarModalController($scope) {
function ESAvatarModalController($scope, $sce) {
 
$scope.formData = {
initCrop: false,
......@@ -40196,36 +40213,33 @@ function ESAvatarModalController($scope) {
resultBlob: undefined
};
 
$scope.openFileSelector = function() {
var fileInput = angular.element(document.querySelector('.modal-avatar #fileInput'));
if (fileInput && fileInput.length > 0) {
fileInput[0].click();
}
};
$scope.fileChanged = function(e) {
$scope.onFileChanged = function(event) {
if (!event || !event.file) return; // Skip
 
var files = e.target.files;
var fileReader = new FileReader();
fileReader.readAsDataURL(files[0]);
fileReader.readAsDataURL(event.file);
 
fileReader.onload = function(e) {
var res = this.result;
$scope.$applyAsync(function() {
$scope.formData.imgSrc = res;
$scope.formData.imgSrc = $sce.getTrustedHtml(res);
});
};
};
 
$scope.doNext = function() {
if ($scope.formData.imageCropStep == 2) {
if ($scope.formData.imageCropStep === 2) {
$scope.doCrop();
}
else if ($scope.formData.imageCropStep == 3) {
else if ($scope.formData.imageCropStep === 3) {
$scope.closeModal($scope.formData.result);
}
};
 
$scope.doPrevious = function() {
$scope.formData.imageCropStep -= 1;
};
$scope.doCrop = function() {
$scope.formData.initCrop = true;
};
......@@ -46567,7 +46581,7 @@ function InvitationsController($scope, $q, $ionicPopover, $state, $timeout, UIUt
$scope.hideActionsPopover();
 
return $timeout(function() {
return esModals.showNewInvitation({})
return esModals.showNewInvitation({});
}, 500); // Timeout need, to avoid freeze
};
 
......@@ -47553,7 +47567,7 @@ function ESLastDocumentsController($scope, $controller, $timeout, $state, $filte
$scope.selectDocument = function(event, doc) {
if (!doc || !event || event.defaultPrevented) return;
event.stopPropagation();
var anchor;
if (doc.index === "user" && doc.type === "profile") {
$state.go('app.wot_identity', {pubkey: doc.pubkey, uid: doc.name});
}
......@@ -47561,18 +47575,18 @@ function ESLastDocumentsController($scope, $controller, $timeout, $state, $filte
$state.go('app.view_page', {title: doc.title, id: doc.id});
}
else if (doc.index === "page" && doc.type === "comment") {
var anchor = $filter('formatHash')(doc.id);
anchor = $filter('formatHash')(doc.id);
$state.go('app.view_page_anchor', {title: doc.title, id: doc.record, anchor: anchor});
}
else if (doc.index === "group" && doc.type === "record") {
$state.go('app.view_group', {title: doc.title, id: doc.id});
}
else if (doc.index === "group" && doc.type === "comment") {
var anchor = $filter('formatHash')(doc.id);
anchor = $filter('formatHash')(doc.id);
$state.go('app.view_group_anchor', {title: doc.title, id: doc.record, anchor: anchor});
}
else {
console.warn("Click on this kind of document not implement yet!", doc)
console.warn("Click on this kind of document not implement yet!", doc);
}
};
 
......@@ -47863,7 +47877,7 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil
if (!res || !res.comment) return; // Empty comment: skip
options.comment = res.comment;
options.level = res.level || (res.delete && 5) || undefined;
return $scope.reportAbuse(event, options) // Loop, with the comment
return $scope.reportAbuse(event, options); // Loop, with the comment
});
}
 
......@@ -47871,8 +47885,8 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil
options.kind = 'ABUSE';
return $scope.toggleLike(event, options)
.then(function() {
UIUtils.toast.show('COMMON.REPORT_ABUSE.CONFIRM.SENT')
})
UIUtils.toast.show('COMMON.REPORT_ABUSE.CONFIRM.SENT');
});
};
 
csWallet.api.data.on.reset($scope, function() {
......@@ -47882,7 +47896,7 @@ function ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtil
$scope.likeData[key].wasHitByPubkey = {};
$scope.likeData[key].wasHitCount = 0;
}
})
});
$scope.$broadcast('$$rebind::like'); // notify binder
}, this);
 
......@@ -49267,7 +49281,7 @@ function GpCurrencyAbstractController($scope, $filter, $ionicPopover, $ionicHist
return dataset.yAxisID && dataset.yAxisID === meta.yAxisID;
}).length;
if (yAxisDatasetCount === 1) {
ci.scales[meta.yAxisID].options.display = !(meta.hidden === true);
ci.scales[meta.yAxisID].options.display = (meta.hidden !== false);
}
}
 
......@@ -51221,22 +51235,22 @@ function GpDocStatsController($scope, $state, $controller, $q, $translate, gpCol
$scope.onChartClick = function(data, e, item) {
if (!item) return;
var chart = _.find($scope.charts , function(chart) {
return ($scope.chartIdPrefix + chart.id) == item._chart.canvas.id;
return ($scope.chartIdPrefix + chart.id) === item._chart.canvas.id;
});
 
var serie = chart.series[item._datasetIndex];
var serie = chart && chart.series[item._datasetIndex];
var from = $scope.times[item._index];
var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();
 
if (serie && serie.clickState && serie.clickState.name) {
var stateParams = serie.clickState.params ? angular.copy(serie.clickState.params) : {};
 
// Compute query
var from = $scope.times[item._index];
var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();
stateParams.q = 'time:>={0} AND time:<{1}'.format(from, to);
 
return $state.go(serie.clickState.name, stateParams);
}
else {
else if (serie) {
console.debug('Click on item index={0} on range [{1},{2}]'.format(item._index, from, to));
}
};
......@@ -51629,7 +51643,7 @@ angular.module('cesium.map.wot.services', ['cesium.services'])
.then(function(res) {
var uids = res[1];
var memberships = res[2];
var res = res[0];
res = res[0];
if (!res.hits || !res.hits.total) return [];
 
// Transform pending MS into a map by pubkey
......@@ -51657,12 +51671,13 @@ angular.module('cesium.map.wot.services', ['cesium.services'])
 
// Additional slice requests
request.from += request.size;
var processRequestResultFn = function(subRes) {
if (!subRes.hits || !subRes.hits.hits.length) return [];
return processLoadHits(options, uids, memberships, subRes);
};
while (request.from < res.hits.total) {
jobs.push(search(angular.copy(request))
.then(function(res) {
if (!res.hits || !res.hits.hits.length) return [];
return processLoadHits(options, uids, memberships, res);
}));
var searchRequest = search(angular.copy(request)).then(processRequestResultFn);
jobs.push(searchRequest);
request.from += request.size;
}
return $q.all(jobs)
......@@ -52592,7 +52607,7 @@ function MapWotViewController($scope, $filter, $templateCache, $interpolate, $ti
var popupMarker = popupMarkerId && _.find(map._layers, function(layer) {
return (layer.options && layer.options.id === popupMarkerId);
});
popupMarker && popupMarker.openPopup();
if (popupMarker) popupMarker.openPopup();
}, 400);
},
firstTipSubmit: true,
......@@ -53036,7 +53051,7 @@ function MapRegistryViewController($scope, $filter, $templateCache, $interpolate
var popupMarker = popupMarkerId && _.find(map._layers, function(layer) {
return (layer.options && layer.options.id === popupMarkerId);
});
popupMarker && popupMarker.openPopup();
if (popupMarker) popupMarker.openPopup();
}, 400);
},
firstTipSubmit: true,
......@@ -53769,8 +53784,7 @@ function MapHelpTipController($scope, $controller) {
// the 2nd parameter is an array of 'requires'
// 'starter.controllers' is found in controllers.js
angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'ngSanitize', 'pascalprecht.translate',
'ngApi', 'angular-cache', 'angular.screenmatch', 'angular.bind.notifier', 'ImageCropper', 'ion-digit-keyboard',
'FBAngular', // = angular-fullscreen
'ngApi', 'angular-cache', 'angular.screenmatch', 'angular.bind.notifier', 'ImageCropper', 'ion-digit-keyboard', 'angular-fullscreen-toggle',
// removeIf(no-device)
'ngCordova',
// endRemoveIf(no-device)
......@@ -54328,10 +54342,11 @@ angular.module('cesium.directives', [])
elem.bind('drop', function(e) {
e.stopPropagation();
e.preventDefault();
var file = e.dataTransfer.files[0];
var fileData = {
name: e.dataTransfer.files[0].name,
size: e.dataTransfer.files[0].size,
type: e.dataTransfer.files[0].type
name: file.name,
size: file.size,
type: file.type
};
 
var reader = new FileReader();
......@@ -54339,6 +54354,7 @@ angular.module('cesium.directives', [])
scope.$apply(function () {
fn(scope, {
file: {
file: file,
fileContent: onLoadEvent.target.result,
fileData : fileData}
});
......@@ -54372,16 +54388,18 @@ angular.module('cesium.directives', [])
 
fileInput.on('change', function (onChangeEvent) {
var reader = new FileReader();
var file = this.files[0];
var fileData = {
name: this.files[0].name,
size: this.files[0].size,
type: this.files[0].type
name: file.name,
size: file.size,
type: file.type
};
 
reader.onload = function(onLoadEvent) {
scope.$applyAsync(function() {
fn(scope, {
file: {
file: file,
fileContent: onLoadEvent.target.result,
fileData : fileData}
});
......@@ -54415,7 +54433,6 @@ angular.module('cesium.directives', [])
}
};
}]);
;
 
// Cesium filters
angular.module('cesium.filters', ['cesium.config', 'cesium.platform', 'pascalprecht.translate', 'cesium.translations'
......@@ -54911,7 +54928,7 @@ angular.module('cesium.platform', ['ngIdle', 'cesium.config', 'cesium.services']
 
// Fix issue #893
// See https://stackoverflow.com/questions/31859257/firefox-addon-using-angularjs-ng-src-not-working
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(filesystem:resource|resource|moz-extension|chrome-extension|file):/);
$compileProvider.imgSrcSanitizationWhitelist(/^\s*(filesystem:resource|resource|moz-extension|chrome-extension|file|data):/);
}])
 
.config(['$animateProvider', function($animateProvider) {
source diff could not be displayed: it is too large. Options to address this: view the blob.
assets/www/img/splash.png

172 KiB

......@@ -18,11 +18,11 @@
</head>
<body id="cesium" ng-strict-di="true" window-exit-unauth="true" ng-class="{'nobackdrop': $root.tour, 'expert-mode': $root.settings.expertMode}">
<body id="cesium" ng-strict-di="true" window-exit-unauth="true" ng-class="{'nobackdrop': $root.tour, 'expert-mode': $root.settings.expertMode}" style="background-color: #1a237e">
<ion-nav-view>
<div class="loader">
<h3 style="text-align: center; padding-top: 25px"><b>Cesium</b></h3>
<h4 style="text-align: center"><i class="icon ion-load-a"></i></h4>
<h3 style="text-align: center; padding-top: 25px; color: whitesmoke"><b>Cesium</b></h3>
<h4 style="text-align: center; color: whitesmoke"><i class="icon ion-load-a"></i></h4>
</div>
</ion-nav-view>
......
......@@ -2,7 +2,7 @@
"short_name": "Cesium",
"name": "Cesium",
"manifest_version": 1,
"version": "1.6.1",
"version": "1.6.2-alpha",
"default_locale": "fr",
"description": "Manage your Duniter Wallet on a libre currency, like Ğ1",
"icons": [
......
......@@ -188,7 +188,7 @@ module.exports.metadata =
"cordova-plugin-secure-storage": "2.6.8",
"cordova-plugin-splashscreen": "3.2.2",
"cordova-plugin-statusbar": "2.3.0",
"cordova-plugin-vibration": "2.1.6",
"cordova-plugin-vibration": "3.1.1",
"cordova-plugin-websocket": "0.12.2",
"cordova-plugin-whitelist": "1.3.3",
"cordova-plugin-x-toast": "2.6.0",
......
<?xml version='1.0' encoding='utf-8'?>
<widget android-versionCode="106011" id="fr.duniter.cesium" ios-CFBundleIdentifier="org.duniter.cesium" version="1.6.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<widget android-versionCode="106012" id="fr.duniter.cesium" ios-CFBundleIdentifier="org.duniter.cesium" version="1.6.2-alpha" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
<feature name="Clipboard">
<param name="android-package" value="com.verso.cordova.clipboard.Clipboard" />
</feature>
......