{"version":3,"sources":["dist/dist_js/app/services/device-services.js","dist/dist_js/app/services/desktop-services.js","dist/dist_js/app/entities/peer.js","dist/dist_js/app/entities/block.js","dist/dist_js/app/entities/ws2pmessage.js","dist/dist_js/app/controllers/app-controllers.js","dist/dist_js/app/controllers/join-controllers.js","dist/dist_js/app/controllers/login-controllers.js","dist/dist_js/app/controllers/help-controllers.js","dist/dist_js/app/controllers/wallet-controllers.js","dist/dist_js/app/controllers/wallets-controllers.js","dist/dist_js/app/services/settings-services.js","dist/dist_js/app/controllers/wot-controllers.js","dist/dist_js/app/controllers/network-controllers.js","dist/dist_js/app/controllers/currency-controllers.js","dist/dist_js/app/controllers/transfer-controllers.js","dist/dist_js/app/controllers/settings-controllers.js","dist/dist_js/app/controllers/blockchain-controllers.js","dist/dist_js/plugins/es/js/entities/notification.js","dist/dist_js/plugins/es/js/entities/comment.js","dist/dist_js/plugins/es/js/entities/invitation.js","dist/dist_js/plugins/es/js/entities/peer.js","dist/dist_js/plugins/es/js/controllers/common-controllers.js","dist/dist_js/plugins/es/js/controllers/app-controllers.js","dist/dist_js/plugins/es/js/controllers/settings-controllers.js","dist/dist_js/plugins/es/js/controllers/wallet-controllers.js","dist/dist_js/plugins/es/js/controllers/wot-controllers.js","dist/dist_js/plugins/es/js/controllers/registry-controllers.js","dist/dist_js/plugins/es/js/controllers/profile-controllers.js","dist/dist_js/plugins/es/js/controllers/message-controllers.js","dist/dist_js/plugins/es/js/controllers/notification-controllers.js","dist/dist_js/plugins/es/js/controllers/blockchain-controllers.js","dist/dist_js/plugins/es/js/controllers/network-controllers.js","dist/dist_js/plugins/es/js/controllers/group-controllers.js","dist/dist_js/plugins/es/js/controllers/invitation-controllers.js","dist/dist_js/plugins/es/js/controllers/subscription-controllers.js","dist/dist_js/plugins/es/js/controllers/document-controllers.js","dist/dist_js/plugins/es/js/controllers/like-controllers.js","dist/dist_js/plugins/graph/js/controllers/common-controllers.js","dist/dist_js/plugins/graph/js/controllers/blockchain-controllers.js","dist/dist_js/plugins/graph/js/controllers/network-controllers.js","dist/dist_js/plugins/graph/js/controllers/currency-controllers.js","dist/dist_js/plugins/graph/js/controllers/account-controllers.js","dist/dist_js/plugins/graph/js/controllers/docstats-controllers.js","dist/dist_js/plugins/graph/js/controllers/synchro-controllers.js","dist/dist_js/plugins/map/js/controllers/common-controllers.js","dist/dist_js/plugins/map/js/controllers/wot-controllers.js","dist/dist_js/plugins/map/js/controllers/registry-controllers.js","dist/dist_js/plugins/map/js/controllers/user-controllers.js","dist/dist_js/plugins/map/js/controllers/help-controllers.js","dist/dist_js/app/platform.js","dist/dist_js/app/services/network-services.js","dist/dist_js/app/services/crypto-services.js","dist/dist_js/app/services/utils-services.js","dist/dist_js/app/services/cache-services.js","dist/dist_js/app/services/modal-services.js","dist/dist_js/app/services/http-services.js","dist/dist_js/app/services/storage-services.js","dist/dist_js/app/services/currency-services.js","dist/dist_js/app/services/bma-services.js","dist/dist_js/app/services/wot-services.js","dist/dist_js/app/services/tx-services.js","dist/dist_js/app/services/wallet-services.js","dist/dist_js/app/services/help-services.js","dist/dist_js/app/services/plugin-services.js","dist/dist_js/app/services.js","dist/dist_js/app/controllers.js","dist/dist_js/app/templates.js","dist/dist_js/app/translations.js","dist/dist_js/app/plugins.js","dist/dist_js/plugins/translations.js","dist/dist_js/plugins/templates.js","dist/dist_js/plugins/es/js/plugin.js","dist/dist_js/plugins/es/js/services.js","dist/dist_js/plugins/es/js/services/comment-services.js","dist/dist_js/plugins/es/js/services/http-services.js","dist/dist_js/plugins/es/js/services/settings-services.js","dist/dist_js/plugins/es/js/services/registry-services.js","dist/dist_js/plugins/es/js/services/social-services.js","dist/dist_js/plugins/es/js/services/crypto-services.js","dist/dist_js/plugins/es/js/services/profile-services.js","dist/dist_js/plugins/es/js/services/notification-services.js","dist/dist_js/plugins/es/js/services/message-services.js","dist/dist_js/plugins/es/js/services/modal-services.js","dist/dist_js/plugins/es/js/services/blockchain-services.js","dist/dist_js/plugins/es/js/services/group-services.js","dist/dist_js/plugins/es/js/services/invitation-services.js","dist/dist_js/plugins/es/js/services/subscription-services.js","dist/dist_js/plugins/es/js/services/wallet-services.js","dist/dist_js/plugins/es/js/services/wot-services.js","dist/dist_js/plugins/es/js/services/tx-services.js","dist/dist_js/plugins/es/js/services/geo-services.js","dist/dist_js/plugins/es/js/services/document-services.js","dist/dist_js/plugins/es/js/services/network-services.js","dist/dist_js/plugins/es/js/services/like-services.js","dist/dist_js/plugins/es/js/controllers/currency-controllers.js","dist/dist_js/plugins/graph/js/plugin.js","dist/dist_js/plugins/graph/js/services.js","dist/dist_js/plugins/graph/js/services/data-services.js","dist/dist_js/plugins/graph/js/services/color-services.js","dist/dist_js/plugins/map/js/plugin.js","dist/dist_js/plugins/map/js/services.js","dist/dist_js/plugins/map/js/services/wot-services.js","dist/dist_js/plugins/map/js/services/registry-services.js","dist/dist_js/plugins/map/js/services/utils-services.js","dist/dist_js/plugins/map/js/controllers/network-controllers.js","dist/dist_js/plugins/map/js/controllers/settings-controllers.js","dist/dist_js/app/app.js","dist/dist_js/app/components.js","dist/dist_js/app/directives.js","dist/dist_js/app/filters.js"],"names":["nw","Peer","json","that","this","Object","keys","forEach","key","endpoints","Block","attributes","length","_","identitiesCount","identities","joinersCount","joiners","activesCount","actives","leaversCount","leavers","revokedCount","revoked","excludedCount","excluded","certificationsCount","certifications","transactionsCount","transactions","empty","isEmpty","id","number","hash","join","Ws2pMessage","message","parts","split","startsWith","Error","pubkey","buid","prefix","matches","regexp","WS2P_PREFIX","exec","privateOptions","private","useTor","mode","substring","publicOptions","public","ws2pid","software","version","powPrefix","PluginExtensionPointController","$scope","PluginService","extensionPoint","extensions","points","current","get","AppController","$rootScope","$state","$ionicSideMenuDelegate","$q","$timeout","$ionicHistory","$controller","$window","csPlatform","csSettings","CryptoUtils","csCrypto","UIUtils","BMA","csWallet","Device","Modals","csConfig","csHttp","walletData","data","search","login","isLogin","auth","isAuth","motion","default","fullscreen","screen","isEnabled","showHome","nextViewOptions","historyRoot","go","then","loading","hide","createHelptipScope","isTour","tour","settings","helptip","enable","isSmall","helptipScope","$new","startHelpTour","event","skipClearCache","defaultPrevented","clearHistory","clearCache","$destroy","catch","err","disableHelpTour","preventDefault","stopPropagation","store","loadWalletData","options","console","warn","wallet","loadData","loadWallet","isStarted","ready","isDataLoaded","when","loginAndGo","state","closeProfilePopover","httpsMode","location","protocol","href","hashIndex","indexOf","rootPath","substr","httpsModeDebug","debug","logout","force","profilePopover","askConfirm","alert","confirm","show","isOpenLeft","toggleLeft","isDefault","onError","doAuth","isUserPubkey","api","on","deferred","resolve","unauth","showTransferModal","parameters","showTransfer","showAboutModal","showAbout","showJoinModal","showJoin","showSettings","showHelpModal","showHelp","showProfilePopover","popover","templateUrl","scope","autoremove","afterShow","ink","selector","isShown","showPeerInfoPopover","openLink","$event","uri","uid","USER_ID","test","copy","open","showFab","timeout","toggleOn","hideFab","toggleOff","doMotion","askFullscreen","isWeb","cancelText","okText","toggleFullscreen","toggleAll","HomeController","$translate","$http","csCache","csCurrency","locales","angular","smallscreen","enter","e","ionic","Platform","isIOS","window","StatusBar","overlaysWebView","stateParams","error","node","disableAnimate","disableBack","undefined","reload","inherit","notify","loadFeeds","$on","feedUrl","getFeedUrl","maxContentLength","feed","now","Date","format","responseType","cache","constants","LONG","success","items","reduce","res","item","title","content_text","content_html","date_published","time","moment","utc","unix","content","replace","endIndex","Math","max","lastIndexOf","truncated","author","concat","status","doQuickFix","action","changeLanguage","langKey","use","hideLocalesPopover","locale","findWhere","showLocalesPopover","localesPopover","JoinController","extend","JoinChooseAccountTypeModalController","formData","slides","slider","loop","effect","speed","load","currency","name","lockSwipes","slidePrev","unlockSwipes","slideNext","selectAccountTypeAndClose","type","accountType","closeModal","helpAnchor","anchor","JoinModalController","$interval","pseudo","pager","showPager","slideBehavior","isLicenseRead","showUsername","showPassword","computing","userIdPattern","accountAvailable","walletId","children","getByPubkey","licenseFileUrl","getLicenseUrl","computeSlideBehavior","showAccountPubkey","scryptKeypair","username","password","keypair","util","encode_base58","signPk","checkAccountAvailable","formDataChanged","getCurrentFormName","index","activeIndex","formName","hasPreviousButton","hasNextButton","hasAcceptButton","focus","hasSendButton","doNext","$submitted","$valid","uiAlreadyUsed","doPrev","doNewAccount","messageKey","cssClass","okType","onErrorLogout","parameter","isNew","method","expectedPubkey","showMethods","alertIfUnusedWallet","needSelf","isUndefined","blockUid","toUpperCase","setSelf","self","membership","inside","ucode","errorCodes","MEMBERSHIP_ALREADY_SEND","requirements","downloadRevocationRegistration","downloadRevocation","startListenLicenseBottom","iframeEl","element","document","querySelector","contentWindow","licenseBottomInterval","yPos","body","scrollTop","scrollHeight","clientHeight","stopListenLicenseBottom","cancel","checkUid","wot","lookup","results","some","pub","uids","idty","$watch","tx","sources","identifierRecovery","i","LoginController","showLoginModal","LoginModalController","$ionicPopover","ionicReady","showPubkey","showComputePubkeyButton","autoComputePubkey","pubkeyPattern","PUBKEY","PUBKEY_WITH_CHECKSUM","isDefined","showNewAccountLink","expectedUid","scryptParamsValues","SCRYPT_PARAMS","label","params","init","grade","toLowerCase","rememberMe","keepAuthIdle","keepAuth","KEEP_AUTH_IDLE_SESSION","changeMethod","leave","methods","doLogin","skipForm","form","promise","scryptPrams","scrypt","pubkeyError","file","valid","readKeyFile","withSecret","trim","showWotLookupModal","pkChecksum","$error","checksum","rememberMeChanged","equals","keepAuthIdleChanged","methodChanged","paramsChanged","useLocalStorage","silent","onScryptFormChanged","computePubkey","salt","pwd","scryptSignPk","showAccountSecurityModal","showAccountSecurity","doScan","barcode","scan","parse","keyfile","parseData","signSk","base58","encode","hideMethodsPopover","find","changeScrypt","subTitle","read","BAD_PASSWORD","onFileChanged","fileData","size","fileContent","validatingFile","removeKeyFile","searchText","showWotLookup","q","showMethodsPopover","methodsPopover","AuthController","setForm","HelpController","$anchorScroll","HelpModalController","itemsClass","listClass","HelpTipController","csHelpConstants","continue","executeStep","partName","steps","step","next","showHelpTip","bindings","value","hasNext","backdropClickToClose","startWalletNoLoginTour","startWalletTour","startWalletCertTour","walletCerts","startTxTour","startWalletsTour","wallets","startHeaderTour","startSettingsTour","startWotLookupTour","cancelled","wotLookup","startWotTour","startWotCertTour","wotCerts","startCurrencyTour","startNetworkTour","network","finishTour","startIndex","contentParams","icon","position","isOpen","useRelative","glyph","is","retry","showNetworkTabIfNeed","tabs","querySelectorAll","triggerHandler","installDocUrl","getElementById","currentUD","hasCertificationsItem","isMember","pendingMembership","stepCount","skipAll","_getProfilBtnElement","elements","el","offsetWidth","iconStyle","style","all","HelpTourController","WalletController","$ionicPopup","$location","ModalUtils","csPopovers","csHelp","qrcodeId","$id","toggleQRCode","likeData","likes","abuses","refresh","enableSelectWallet","count","isDefaultWallet","cleanLocationHref","updateView","addListeners","showQRCode","$broadcast","setRegisterForm","registerForm","onWalletLogout","hideQRCode","removeListeners","listeners","$watchCollection","newEvents","oldEvents","remove","showUidPopup","reject","translations","newUid","buttons","text","onTap","hideActionsPopover","doMembershipIn","retryCount","membershipIn","keepSelf","info","showJoinMember","membershipOut","confirmAgain","out","toast","doUpdate","refreshData","renewMembership","wasMember","needRenew","minData","membershipExpiresIn","fixIdentity","sigDate","fixMembership","inheritedLogout","loadQrCode","svg","html","showCertifications","showGivenCertifications","showTxHistory","showLicenseModal","balance","done","showSecurityModal","showSelectIdentitiesModal","showSelectPubkeyIdentity","alternatives","showSelectWalletModal","showSelectWallet","showDefault","showBalance","excludedWalletId","newWallet","showActionsPopover","actionsPopover","showSharePopover","url","shareBaseUrl","share","titleKey","titleValues","postMessage","showSelectWalletPopover","WalletTxController","csTx","hasMinData","downloadHistoryFile","fromTime","balanceChanged","newVal","oldVal","walletHistoryAutoRefresh","push","newBlock","block","showTxErrors","goState","showMoreTx","walletHistoryTimeSecond","date","HTTP_LIMITATION","toUnlockUIArray","unlockTreeItem","leftPadding","operator","padding-left","child","padding-top","padding-bottom","showLockedOutputsPopover","lockedOutputs","popoverData","lockedOuputs","lockedOutput","amount","unlockFunctions","unlockConditions","unlockTree","hideLockedOutputsPopover","lockedOutputsPopover","stateName","WalletTxErrorController","filterReceivedTx","filterSentTx","hasReceivedTx","errors","hasSentTx","WalletSecurityModalController","isLastSlide","recover","isValidFile","hasSelf","canRevoke","needMembership","option","addQuestion","level","questions","toString","each","translation","checked","hasContent","recoverId","downloadSaveIDFile","selectOption","restore","question","answer","revocation","indexOfQuestions","LastIndexQuestions","cypherNonce","cypherPubkey","cypherSalt","cypherPwd","recoverForm","loginData","forceAuth","values","filter","record","getCryptedId","downloadSaveId","isRequired","revokeWithFile","revokeIdentity","downloadRevokeFile","revokeWalletIdentity","revoke","revocationError","downloadKeyFile","WalletListAbstractController","filterTranslations","updatingWalletId","stopped","setParameters","jobs","defaultWallet","walletLoadOptions","hasLoadError","loadCounter","updateWalletView","loadPromise","loaded","refreshOptions","merge","resetData","filterFn","entered","selectorSuffix","selectPrevented","addNewWallet","useLocalStorageEncryption","raisePromise","addListenersOnWallet","add","showNewWalletModal","instance","hasPubkey","select","WalletSelectModalController","isDefaultPrevented","WalletListViewController","editWallet","showEditPopup","newName","localName","storeData","downloadAsFile","downloadFile","selectAndRemoveWallet","showImportFileModal","authData","loginAndAddWallet","setEditForm","editForm","inheritedUpdateView","inheritedUpdateWalletView","WalletSelectPopoverController","closePopover","WalletListImportModalController","rows","row","cols","removeFile","WotLookupController","$focus","csWot","wotSearchTextId","enableFilter","enableWallets","allowMultiple","selection","showResultLabel","updateLocationHref","doSearch","initPhase","doGetPending","doGetNewcomers","doGetWallets","resetWotSearch","match","doSearchText","total","idties","doDisplayResult","countBy","hit","divider","offset","skipLocationUpdate","newcomers","hits","hasMore","searchFunction","pending","avatar","showMore","loadingMore","ok","expire","toggleCheck","identity","addToSelection","removeSelection","toggleSelect","selected","copyIdty","identityInSelection","splice","existIdtyInResult","scanQrCode","result","obj","identityInRes","WotLookupModalController","superEnter","WotIdentityAbstractController","disableCertifyButton","viewData","enableBack","pendingRevocation","canCertify","canSelectAndCertify","cert","received_cert","received_cert_pending","expiresIn","timeWarningExpire","alreadyCertified","certify","displayBalance","expired","previousCert","meta","timestamp","sig","prepareNewCert","unshift","pendingCertificationCount","selectAndCertify","confirmTitle","extendAll","given_cert_pending","removeActionParamInLocationHref","doAction","WotIdentityViewController","fadeSlideInRight","like","kinds","onLoadSuccess","showSelectIdentities","qrcode","WotIdentityTxViewController","WotCertificationsViewController","motions","receivedCertifications","fadeSlideIn","givenCertifications","fadeIn","skipItems","doMotionReceivedCertifications","ionListClass","doMotionGivenCertifications","isWallet","WotSelectPubkeyIdentityModalController","loadRequirements","NetworkLookupController","csNetwork","networkStarted","ionItemClass","expertMode","isHttps","endpoint","bma","ssl","ws2p","sort","asc","compactMode","helptipPrefix","enableLocationHref","isDefaultNode","same","host","port","expert","close","computeOptions","member","mirror","online","start","refreshing","changed","peers","memberPeersCount","isBusy","loadPeers","toggleSearchType","toggleSearchEndpoint","toggleSort","toggleCompactMode","selectPeer","peer","compacted","hasBma","server","getServer","isSsl","isTor","tor","context","clickEvent","showEndpointsPopover","endpointName","getEndpoints","ep","parseEndPoint","path","showWs2pPopover","privateAccessMessage","valueKey","NetworkLookupModalController","NetworkLookupPopoverController","PeerInfoPopoverController","blockchain","medianTime","powMin","useSsl","summary","duniter","latest","latestRelease","compare","isPreRelease","hasNewRelease","PeerViewController","isReachable","serverParts","lightInstance","peering","map","p","blockNumber","dns","getDns","keyID","sortBy","score","hasMainConsensusBlock","ipv4","ipv6","isWs2p","openRawPeering","openRawCurrentBlock","CurrencyViewController","M","MoverN","UD","cactual","c","dt","sigQty","sigStock","msWindow","msValidity","sigWindow","sigValidity","sigPeriod","difficulty","Nprev","stepMax","sentries","xpercent","durationFromLastUD","dtReeval","udReevalTime0","allRules","allWotRules","licenseUrl","mainBlockChanged","mainBlock","lastUDTime","avgGenTime","udTime0","monetaryMass","N","membersCount","NO_CURRENT_BLOCK","stats","ud","blocks","lastBlockWithUD","unitbase","dividend","pow","ud0","Mprev","MoverNprev","ceil","refreshPeers","showExtendActionsPopover","onAllRulesChange","onAllWotRulesChange","CurrencyLicenseModalController","FileSaver","licenseUrlHtml","Blob","saveAs","TransferController","TransferModalController","$filter","convertedBalance","destPub","comment","useComment","restPub","restAmount","udAmount","minAmount","commentPattern","COMMENT","commentInputId","digitKeyboardSettings","keyboard","digit","bindModel","decimal","decimalSeparator","resizeContent","digitKeyboardVisible","destUid","restUid","$$destroyed","onUseRelativeChanged","onAmountChanged","$setPristine","sending","parseFloat","RegExp","min","$invalid","doTransfer","hideDigitKeyboard","askTransferConfirm","toFixed","transferAll","transfer","hasRest","from","to","unit","restTo","addComment","formDataField","showUnitPopover","showDigitKeyboard","SettingsController","popupData","nodePopup","keepAuthIdleLabels","10","labelKey","labelParams","30","60","600","3600","9999","keepAuthIdles","blockValidityWindowLabels","0","6","12","24","blockValidityWindows","blockCount","setPopupForm","popupForm","defaultSettings","reset","pendingSaving","restart","changeNode","showNodePopup","newNode","temporary","isAlive","alive","stop","showNodeList","forceUseSsl","_popupStack","responseDeferred","showNetworkLookup","getBMA","hasValid4","save","saving","cleanupHelpTip","apply","onDataChanged","oldValue","newValue","BlockLookupController","searchTextId","defaultSizeLimit","doSearchLast","blocksSlice","oldestNumber","cleanData","b","doPrepareResult","formatDateShort","previousEmptyBlockDay","lastBlock","day","blockDay","notFirstEmpty","previousNotEmptyOrSameDay","onBlock","websocket","onListener","existingBlock","showBlock","selectBlock","BlockViewController","users","groupBy","issuers","issuer","outputs","output","unlockCondition","parseUnlockCondition","showUnlockConditionPopover","unlockConditionPopover","hideUnlockConditionsPopover","openRawBlock","EsNotification","markAsReadCallback","pubkeys","input","messagePrefixes","user","page","read_signature","code","reference","markAsRead","avatarIcon","Comment","creationTime","reply_to","replyCount","parent","replies","onRemoveListeners","otherComment","avatarStyle","setReplies","copyFromJson","addOnRemoveListener","listener","cleanAllListeners","removeAllReplies","addReplies","cm1","cm2","reply","containsReply","addReply","removeReply","replyId","findIndex","Invitation","separatorIndex","EsPeer","ESPicturesEditController","selectNewPicture","inputSelector","openPicturePopup","fileInput","click","camera","getPicture","imageData","pictures","src","isnew","fileChanged","target","files","image","resizeFile","removePicture","favoritePicture","rotatePicture","rotateSrc","dataURL","ESCategoryModalController","allCategories","categories","afterLoad","cat","ESCommentsController","defaultCommentSize","comments","animate","service","scrollToAnchor","loadAvatarAllParent","cmt","changes","elemList","getElementsByName","onKeypress","charCode","ctrlKey","focusNewComment","stateUrl","absolute","postUrl","autoselect","edit","newComment","forceIfSmall","removeParentLink","toggleExpandedReplies","expandedReplies","toggleExpandedParent","expandedParent","ESSocialsEditController","SocialUtils","socialData","reorder","addSocialNetwork","socials","social","startVelocity","editSocialNetwork","reorderSocialNetwork","fromIndex","toIndex","recipient","ESSocialsViewController","openSocial","ESAvatarModalController","initCrop","imageCropStep","imgSrc","resultBlob","openFileSelector","fileReader","FileReader","readAsDataURL","onload","$applyAsync","doCrop","clear","ESPositionEditController","esGeo","defaultCountry","plugins","es","loadingCurrentPosition","formPosition","searchModalOpened","tryToLocalize","getAddressToSearch","point","searchByAddress","updateGeoPoint","openSearchLocationModal","forceFallback","onCityChanged","geoPoint","lat","lon","onUseGeopointChanged","dirty","onGeopointChanged","address","city","cityParts","postcode","country","fallbackText","focusFirstInput","ESLookupPositionController","loadingPosition","geoDistanceLabels","distance","geoDistances","searchPosition","exact","shortName","ESSearchPositionItemController","locations","selectLocationIndex","onKeydown","keyCode","hideDropdown","onEnter","onArrowUpOrDown","showDropdown","selectLocation","velocity","onLocationChanged","requestId","license","exactMatch","ESSearchPositionModalController","firstSearch","dividerText","ESExtensionController","esSettings","isEnable","ESMenuExtendController","showRegistryLookupView","showNotificationsPopover","showMessagesPopover","showInvitationsPopover","ESProfilePopoverExtendController","showEditUserProfile","ESPluginSettingsController","esHttp","esModals","hasWindowNotification","keepEnableState","wasEnable","isFallbackNode","isFallback","changeEsNode","newEsNode","ES_USER_API_ENDPOINT","esEps","getEsEndpoints","esEp","onFormChanged","notifications","emitHtml5","Notification","permission","requestPermission","ESWalletViewController","showProfileHelp","showNewPageModal","showNewPage","ESWalletLikesController","esProfile","canEdit","loadLikes","ESWotLookupExtendController","openRegistryLookup","ESWotIdentityViewController","esLike","esWallet","esInvitation","KINDS","showNewMessageModal","profile","showMessageCompose","sent","showSuggestCertificationModal","hideCertificationActionsPopover","help","box","getKeypair","send","showAskCertificationModal","askCertification","delete","canDelete","moderator","showCertificationActionsPopover","certificationActionsPopover","ESRegistryLookupController","esRegistry","lastRecords","category","advanced","geoDistance","isNaN","geoUnit","finishEntered","d","defaultSearch","registry","instant","last","oldLocation","odlDistance","onGeoPointChanged","resolveLocationPosition","doGetLastRecords","hidePopovers","filters","term","tags","parseTags","multi_match","query","fields","boost","description","nested","bool","category.name","terms","category.id","locationCity","or","and","not","exists","field","match_phrase","geo_distance","request","highlight","should","minimum_should_match","doRequest","formatSlug","urlTitle","removeType","removeCategory","removeLocation","onToggleAdvanced","toggleAdvanced","showRecordTypeModal","showCategoryModal","filtersPopover","showFiltersPopover","hideFiltersPopover","ESWalletPagesController","ESRegistryRecordViewController","args","background-image","secondTry","picture","_source","pic","fromAttachment","pages","ESRegistryRecordEditController","nextParams","fromState","confirmSave","saved","confirmGo","raw","avatarClass","onFormDataChanged","needCategory","hasWaitDebounce","uniq","picturesCount","toAttachment","resizeSrc","imageSrc","_content","_content_type","update","currentView","stateId","rotateAvatar","rotating","goBack","showAvatarModal","ESViewEditProfileController","existing","socialReorder","source","updateWallet","descriptionHtml","parseAsHtml","showSuccessToast","doFinishSave","saveAndClose","submitAndSaveAndClose","removeProfile","ESMessageAbstractListController","esMessage","limit","fabButtonNewMessageId","s","markAllAsRead","msg","deleteAll","removeAll","messageId","showReplyModal","isReply","onMessageDelete","onNewOutboxMessage","onNewInboxMessage","notification","new","onUnauth","ESMessageInboxListController","ESMessageOutboxListController","ESMessageComposeController","ESMessageComposeModalController","doSend","forceNoContent","destName","ESMessageViewController","clearPageCache","recipientField","PopoverMessageController","onNewMessageNotification","NotificationsController","esNotification","preventSelect","codes","excludes","EXCLUDED_CODES","setWallet","aWallet","resetUnreadCount","unreadCount","lastNotification","readTime","onNewNotification","nextIndex","n","PopoverNotificationsController","ESBlockLookupController","esBlockchain","excludeCurrent","parseSearchText","took","itemRemove","toggleShowQuery","showQuery","ESNetworkLookupController","esNetwork","endpointFilter","ES_USER_API","toggleOnline","ESNetworkLookupModalController","ESNetworkLookupPopoverController","ESPeerInfoPopoverController","ESPeerViewController","getUrl","docCount","hasEsEndpoint","ESGroupListController","esGroup","showNewRecordModal","ESGroupViewController","fetchPictures","ESGroupEditController","InvitationsController","defaultSearchLimit","DEFAULT_LOAD_SIZE","includes","INVITATION_CODES","invitations","onNewInvitation","invitation","accept","showNewInvitationModal","showNewInvitation","PopoverInvitationController","NewInvitationModalController","recipients","suggestions","onUseCommentChanged","removeRecipient","removeSuggestion","showSelectRecipientModal","showSelectSuggestionModal","ViewSubscriptionsController","esSubscription","emailFrequencies","groups","addSubscription","showEmailModal","notImplemented","addToUI","subscriptions","editSubscription","oldRecord","removeFromUI","deleteSubscription","ModalEmailSubscriptionsController","frequencies","frequency","doSubmit","email","subscriptionForm","ES_SUBSCRIPTION_API","ESDocumentLookupController","esDocument","showHeaders","doc","selectDocument","startListenChanges","wsChanges","change","fromHit","_operation","onDeleteDocument","onNewDocument","updated","ESLastDocumentsController","inheritedComputeOptions","side","getTimeFunction","ESLikesController","abuseData","abuseLevels","staring","initLikes","kind","contains","markAsView","$parent","toggleLike","reportAbuse","toggle","delta","wasHitByPubkey","wasHitCount","setAbuseForm","abuseForm","showAbuseCommentPopover","GpCurrencyAbstractController","_truncDate","startOf","rangeDuration","timePct","firstBlockTime","scale","beginAtZero","height","width","maintainAspectRatio","times","t","stepUnit","parseInt","currencyAge","setScale","updateHiddenDataset","updateLocation","setSize","toggleScale","scales","yAxes","yAxe","ticks","callback","log10","setRangeDuration","startTime","endTime","rangeDurationSec","datasetOverride","hidden","yAxisID","dataset","display","onLegendClick","legendItem","datasetIndex","ci","chart","getDatasetMeta","datasets","config","union","difference","goPreviousRange","loadingRange","goNextRange","timeWindow","onRangeChanged","updateRange","updateTimePct","GpBlockchainTxCountController","gpData","gpColor","displayRightAxis","txCount","datePatterns","hour","month","formatAmount","currencySymbol","labelPattern","labels","local","colors","fix","responsive","gridLines","drawOnChartArea","legend","onClick","tooltips","enabled","callbacks","tooltipItems","yLabel","hoverBackgroundColor","rgba","calm","fill","borderColor","gray","borderWidth","backgroundColor","pointBackgroundColor","pointBorderColor","white","pointHoverBackgroundColor","pointHoverBorderColor","translucent","pointRadius","onChartClick","_index","GpBlockchainIssuersController","countByIssuer","barOptions","custom","GpPeerViewExtendController","GpCurrencyViewExtendController","GpCurrencyMonetaryMassController","displayShareAxis","hiddenDatasets","truncAmount","trunc","withDividend","formatDate","blocksPeriod","pointHitRadius","pointHoverRadius","showLine","energized","GpCurrencyDUController","dateFilter","GpCurrencyMembersCountController","withCurrent","xAxes","GpAccountBalanceController","defaultSetScale","abs","withUD","movement","formatDecimal","received","stacked","positive","assertive","lineTension","GpAccountSumTxController","history","inputChart","computeChartData","outputChart","txArray","formatPubkey","sumByPubkeys","sum","sumItems","reverse","pluck","onInputChartClick","onOutputChartClick","GpAccountCertificationController","formatInteger","deltaReceived","deltaGiven","given","displayFormat","addPlus","GpDocStatsController","chartIdPrefix","charts","series","color","royal","clickState","defaultChartOptions","serie","docstat","usedYAxisIDs","endsWith","previousValue","_chart","canvas","_datasetIndex","GpSynchroController","synchro","execution","MapEditPositionAbstractController","MapUtils","mapId","markers","center","zoom","lng","helpText","draggable","MapWotViewController","$templateCache","$interpolate","leafletData","mapWot","markersSearchLayer","icons","markerColor","iconColor","loadingMarker","layers","overlays","visible","bounds","showDescription","enableDescription","noBackdrop","cPart","loadMap","getMap","L","easyButton","leafletClasses","states","addTo","btn","Control","separate","control","localizeMe","layerGroup","searchTip","layer","propertyName","buildTip","val","moveToLocation","lnglat","_map","setView","panTo","popupMarkerId","popupMarker","_layers","openPopup","firstTipSubmit","tooltipLimit","extractMarkerLayer","marker","markerClusterLayer","markerClusterGroup","disableClusteringAtZoom","LOCALIZE_ZOOM","maxClusterRadius","showCoverageOnHover","iconCreateFunction","cluster","countByLayer","getAllChildMarkers","childCount","getChildCount","className","divIcon","iconSize","Point","eachLayer","addLayer","featureGroup","subGroup","fire","clearLayers","markerTemplate","shortPubkey","opacity","getMessageScope","searchMarker","Marker","centerHash","isNumber","mapwot","startMapWotTour","MapRegistryViewController","mapRegistry","shop","company","association","institution","pageMarkerTemplate","MapPageEditController","MapProfileEditController","MapHelpTipController","module","factory","Api","localStorage","flag","fallbackLocale","fallbackLanguage","fixLocale","localeParts","similarLocale","l","String","prototype","call","previousData","startPromise","fixedLocale","STORAGE_KEY","fixedSettings","cacheTimeMs","timeWarningExpireMembership","minVersion","newIssueUrl","userForumUrl","latestReleaseUrl","duniterLatestReleaseUrl","persistCache","walletHistorySliceSecond","showUDHistory","decimalCount","uiEffects","blockValidityWindow","header","defaultLanguage","en","fr-FR","es-ES","started","emitChangedEvent","raise","getObject","previousSettings","savedData","setObject","applyData","newData","localeChanged","localeId","storedData","numeral","language","registerEvent","getByPath","defaultValue","jsonFeed","interval","isHttpsMode","compact","knownBlocks","minOnlineBlockNumber","uidsByPubkeys","searchingPeersOnNetwork","difficulties","ws2pHeads","loadW2spHeads","heads","head","loadDifficulties","levels","newPeers","flushNewPeersAndSort","sortPeers","initJobs","addOrRefreshPeerFromJson","hasEndpoint","privateWs2pHeads","privateEPCount","hasEndPoint","currentNumber","useWs2p","applyPeerFilter","oldBlock","isBma","list","createPeerEntities","hasUpdates","existingPeer","existingMainBuid","existingOnline","refreshPeer","refreshedPeer","existingIndex","useBma","endpointsAsString","epStr","getHost","ws2pHeadKey","getPort","ROOT_BLOCK_HASH","hardship","updateMainBuid","ids","newPeersAdded","computeScoreAlphaValue","nbChars","charCodeAt","buids","previousPeer","pct","hasConsensusBlock","consensusBlockDelta","$q_started","hasPeers","getPeers","getTrustedPeers","getKnownBlocks","getMainBlockUid","mainBuid","CryptoAbstractService","isLoaded","array_to_string","buf","bb","Uint8Array","f","readAsText","crypto_sign_BYTES","crypto_secretbox_NONCEBYTES","crypto_box_MACBYTES","SEED_LENGTH","SIMPLE","r","memory","DEFAULT","async_load_base58","on_ready","Base58","async_load_scrypt","scrypt_module_factory","async_load_nacl_js","nacl_factory","instantiate","async_load_base64","Base64","async_load_sha256","sha256","seed_from_signSk","seed","crypto","msCrypto","Crypto","FullJSServiceFactory","nacl","base64","check","function_name","check_injectBytes","what","thing","expected_length","check_length","bs","MALLOC","nacl_raw","HEAPU8","set","injectBytes","nbytes","_malloc","FREE","pointer","_free","Target","decode_utf8","unescape","encodeURIComponent","encode_utf8","a","decode_base58","decode","decode_base64","encode_base64","hash_sha256","to_hex","crypto_hash_sha256","random_nonce","getRandomValues","nonce","crypto_box_random_nonce","msg_int8","crypto_scrypt","seedLength","box_keypair_from_sign","signKeyPair","boxSk","boxPk","ska","_crypto_sign_secretkeybytes","skb","_crypto_box_secretkeybytes","_crypto_sign_ed25519_sk_to_curve25519","crypto_box_keypair_from_raw_sk","extractBytes","box_pk_from_sign","pka","_crypto_sign_publickeybytes","pkb","_crypto_box_publickeybytes","_crypto_sign_ed25519_pk_to_curve25519","box_sk_from_sign","recipientPk","senderSk","messageBin","ciphertextBin","crypto_box","box_open","cypherText","senderPk","recipientSk","crypto_box_open","scryptParams","signKeypair","crypto_sign_seed_keypair","boxKeypair","crypto_box_seed_keypair","seedKeypair","verify","signature","sm","crypto_sign_open","sign","m","sk","signedMsg","crypto_sign","defer","naclOptions","scryptOptions","requested_total_memory","loadedLib","checkAllLibLoaded","lib","fromSignKeypair","skFromSignSk","pkFromSignPk","pack","subarray","serviceImpl","regexpContent","xor","buffer","concat_Uint8Array","buffer1","buffer2","tmp","byteLength","WIF","DATA_LENGTH","EWIF","SALT_LENGTH","DERIVED_HALF_LENGTH","REGEXP","SECKEY","FILE","TYPE_LINE","VERSION","PUB","SEC","DATA","BAD_CHECKSUM","parseKeyFileContent","defaultType","typeMatch","parseWIF_or_EWIF","data_base58","data_int8","wif_base58","wif_int8","wif_int8_no_checksum","slice","expectedChecksum","parseWIF_v1","parseEWIF_v1","ewif_base58","ewif_int8","ewif_int8_no_checksum","encryptedhalf1","encryptedhalf2","scrypt_seed","derivedhalf1","derivedhalf2","aesEcb","aesjs","ModeOfOperation","ecb","decryptedhalf1","decrypt","decryptedhalf2","expectedSalt","getBoxKeypair","signPk_int8","reader","parseKeyFileData","generateContent","generateKeyFileContent","fi","seed_fi","wif_v1_from_keypair","seed1_xor_derivedhalf1_1","seed2_xor_derivedhalf1_2","encrypt","ewif_v1_from_keypair","recipientFieldName","cypherFieldNames","boxRecipientPk","fieldName","cypherTexts","cypherFieldName","records","issuerFieldName","issuerBoxPks","issuerBoxPk","$ionicPlatform","readyPromise","$ionicLoading","$ionicConfig","ionicMaterialInk","ionicMaterialMotion","Fullscreen","screenmatch","exports","loadingTextCache","CONST","MAX_HEIGHT","MAX_WIDTH","THUMB_MAX_HEIGHT","THUMB_MAX_WIDTH","bind","alertError","subtitle","template","alertInfo","hideLoading","showLoading","isSmallScreen","active","imageOnLoadResize","thumbnail","ctx","maxWidth","maxHeight","createElement","getContext","xoffset","yoffset","drawImage","dataurl","toDataURL","showPopover","popovers","_show","isResolved","getSelection","setSelectionRange","autofocus","$emit","_cleanup","removeClass","fromTemplateUrl","afterHidden","motionDelegate","delegate","motionTimeout","defaultSelector","createQRCodeObj","typeNumber","errorCorrectionLevel","mb","stringToBytes","stringToBytesFuncs","qr","addData","make","classList","ripple","blinds","panInLeft","pushDown","slideUp","cancelType","_getLoader","loader","duration","fullMsg","displayEffect","setEffects","views","transition","nothing","class","createSvgTag","img","createImgTag","fab","fabs","getElementsByClassName","showHelptip","preAction","postAction","retryTimeout","selectElementText","childNodes","range","createRange","selectNodeContents","removeAllRanges","addRange","selectedText","angle","PI","rotate","imageOnLoadRotate","CacheFactory","VERY_LONG","MEDIUM","SHORT","storageMode","getSettingsStorageMode","cacheNames","getCacheOptions","deleteOnExpire","onExpire","cacheFlushInterval","onSettingsChanged","newStorageMode","cacheName","setOptions","maxAge","counter","createCache","cachePrefix","clearAll","controller","$ionicModal","$injector","DefaultModalController","resolved","openModal","modal","hideModal","propName","getParameters","hideDelay","ctrlName","fragments","animation","locals","ctrlEval","isControllerAs","controllerName","ctrlInstance","showJoinWallet","useDigitKeyboard","showLogin","showLicense","submit","popup","afterShowSaved","sockets","allCachePrefixes","processError","prepare","pkeys","queryParams","newUri","pkey","parseUri","parser","pathname","hostname","compareVersionNumbers","v1","v2","v1parts","v2parts","validateParts","x","NaN","forcedTimeout","headers","getWithCache","autoRefresh","put","post","Content-Type","ws","getWsUrl","_waitOpen","readyState","waitDuration","waitRetryDelay","round","_open","WebSocket","onerror","onmessage","JSON","onopen","openTime","onclose","closeEvent","socket","closing","_close","_remove","isClosed","closeAllWs","sock","isDesktop","Shell","openExternal","openOptions","openTarget","win","moveTo","isCompatible","actualVersion","storage","sessionStorage","stringify","$log","appName","isDevice","standard","secure","initStandardStorage","cordova","SecureStorage","initSecureStorage","removeItem","barcodeScanner","clipboard","$cordovaClipboard","sourceType","navigator","PictureSourceType","PHOTOLIBRARY","CAMERA","quality","destinationType","DestinationType","DATA_URL","encodingType","EncodingType","PNG","targetWidth","targetHeight","$cordovaCamera","Keyboard","modelScope","modelPath","getModelValue","setModelValue","paths","property","leftButton","rightButton","userAgent","isOSX","process","InAppBrowser","WELL_KNOWN_CURRENCIES","g1","medianTimeOffset","medianTimeBlocks","currencyName","BLOCK_NOT_FOUND","_safeLoadCurrentUD","blockIndex","base","getData","getDataField","currentBlock","receivedAt","currentBlockField","getCurrent","lastValid","useCache","SIG","OUTPUT_OBJ","REGEX_ENDPOINT_PARAMS","BMAS","WS2P","BMATOR","WS2PTOR","CURRENCY","INVALID_COMMENT_CHARS","URI_WITH_AT","URI_WITH_PATH","BMA_ENDPOINT","BMAS_ENDPOINT","WS2P_ENDPOINT","BMATOR_ENDPOINT","WS2PTOR_ENDPOINT","PROTOCOL_VERSION","LIMIT_REQUEST_COUNT","LIMIT_REQUEST_DELAY","closeWs","wsByPath","cacheTime","requestKey","getRequestFn","_startPromise","execCount","postRequest","postByPath","REVOCATION_ALREADY_REGISTERED","IDENTITY_SANDBOX_FULL","NO_MATCHING_IDENTITY","UID_ALREADY_USED","NO_MATCHING_MEMBER","NO_IDTY_MATCHING_PUB_OR_UID","WRONG_SIGNATURE_MEMBERSHIP","SOURCE_ALREADY_CONSUMED","TX_INPUTS_OUTPUTS_NOT_EQUAL","TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS","TX_ALREADY_PROCESSED","URI","TX_OUTPUT_SIG","TX_OUTPUT_FUNCTION","TX_OUTPUT_OBJ_OPERATOR_AND","TX_OUTPUT_OBJ_OPERATOR_OR","TX_OUTPUT_OBJ","TX_OUTPUT_OBJ_OPERATOR","TX_OUTPUT_OBJ_PARENTHESIS","TX_OUTPUT_FUNCTIONS","OUTPUT_FUNCTION","node2","port2","certifiedBy","certifiersOf","requirementsWithCache","currentWithCache","pendings","timesWithCache","treeItem","treeItemId","childrenContent","childrenMatches","convertedOutput","treeItems","functions","epPrefix","otherNode","wasStarted","memberUidsByPubkey","getByUid","blockNumbers","getHttpRecursive","peersByLeaves","leaves","httpGetRequest","paramName","paramValues","paramValue","requestParams","getHttpWithRetryIfLimitation","lastUd","pathCount","getLatestRelease","html_url","tag_name","identityCache","requirementsCache","_addUniqueIds","idtyKeys","_sortAndSliceIdentities","_resetRequirements","canMembershipOut","certificationCount","needCertifications","needCertificationCount","willNeedCertificationCount","_fillRequirements","currencyParameters","invalid","membershipPendingExpiresIn","willExpireCertificationCount","willExpire","revocation_sig","pendingCerts","certifiers","_fillIdentitiesMeta","inputData","withCache","cacheKey","outdistanced","certCount","loadIdentityByLookup","revoked_on","certPubkeys","certsMap","idtyFullKey","others","certs","certFullKey","cert_time","block_number","block_hash","signed","loadCertifications","getFunction","lookupCertifications","_certId","lookupHasCertTime","lookupCerticationsByCertId","certId","written","certTime","pendingCertifications","pendingCertByBlocks","validBuid","writtenCertByPubkey","_sortCertifications","errorCertifications","dataByLookup","received_cert_error","given_cert","given_cert_error","addEvent","messageParams","revocationTime","addEvents","safeText","addUniqueId","allowExtension","excludeRevoked","blocUid","lookupResultCount","getNewcomersRecursive","maxResultSize","joiner","idtyKey","memberDate","getAllRecursive","letters","letter","pubkeyAttributeName","skipAddUid","uidsByPubkey","events","memberships","idtiesByBlock","idtiesByPubkey","ms","blockHash","otherIdtySamePubkey","aidty","reduceTxAndPush","processedTxMap","allowPendings","outputBase","walletIsIssuer","otherIssuers","otherRecipients","noffset","outputArray","conditions","outputAmount","powBase","outputCondition","sigMatches","outputPubkey","identifier","consumed","txPubkeys","blockstampTime","txKey","newTx","isUD","locktime","inputs","loadTx","nowInSec","validating","reduceTxFn","sliceTime","loadUDs","tx1","tx2","firstValidatedTxIndex","toTime","addSources","sourcesIndexByKey","srcKey","addSource","loadSourcesAndBalance","txPendings","txErrors","balanceFromSource","balanceWithPending","_processPendingTx","consumedSources","inputKey","srcIndex","txs","allTx","loadSources","currentTime","filename","medianDate","formatSymbol","Idle","defaultBMA","CsWallet","enableAuthIdle","encryptedData","resetKeypair","resetTxAndSources","hasEncryptedData","needLogin","needAuth","loginCheck","restoreData","openEncryptedData","checkAuthIdle","loadOptions","wasAuth","resetStore","isNeverUsed","secureContent","useEncryption","storageKey","childrenCount","contentStr","cypherContent","seckey","sessionStorageData","localStorageData","applyRestoredData","oldChildrenCount","oldChildren","removeAllChildrenWallets","newChildInstance","addChildWallet","cleanEventsByContext","loadTxAndSources","loadSigStock","loadMinData","loadFullData","unused","skipData","truncBase","getInputs","filterBase","sourcesAmount","minBase","maxBase","lowerInputs","floor","logs","amountBase","subUnit","rest","isBase","truncBaseOrMinBase","createAndSendTx","pendingTx","build","firstSlice","secondSlice","outputOffset","newSources","signedTx","transaction","txHash","getIdentityDocument","sideIn","signedMembership","insertAtFirst","getkeypairSaveId","nbCharSalt","getRevocationDocument","identityLines","idtySignature","setParent","removedChildren","getChildWalletByPubkey","getAllChildrenWallet","getWalletSettings","allSettings","newSettings","useEncryptionChanged","useStorageChanged","downloadChildrenWalletFile","fileName","fromJson","failIfInvalid","isAuthResult","newEnableAuthIdle","setIdle","watch","unwatch","getIdle","internal","addListener","needToLoadRequirements","signedCert","saveId","getSaveIDDocument","saveIdFile","revocationFile","cleanByContext","create","childIndex","parentWallet","constant","startWalletHelpTip","helpController","provider","eagerLoadingServices","extensionByStates","registerEagerLoadingService","serviceName","extendState","extension","extendStates","stateNames","$get","currentExtensionPointName","getActivesByName","extensionPointName","BMA_REGEXP","BMAS_REGEXP","WS2P_REGEXP","LOCAL_IP_ADDRESS","regex","copyValues","copyValuesFrom","getRaw","bmaRegex","bmasRegex","regExp","getIPv4","getIPv6","getURL","parseArrayValues","parseTransactions","array","itemObjProperties","arrayProperty","toHimself","$inject","$stateProvider","$urlRouterProvider","abstract","large","menuContent","otherwise","silentLocationChange","tab","preferHttp","tab-parameters","tab-wot","tab-network","tab-blocks","run","$translateProvider","COMMON","APP_NAME","APP_VERSION","APP_BUILD","MEMBER","BLOCK","BTN_OK","BTN_YES","BTN_NO","BTN_SEND","BTN_SEND_MONEY","BTN_SEND_MONEY_SHORT","BTN_SAVE","BTN_YES_SAVE","BTN_YES_CONTINUE","BTN_SHOW","BTN_SHOW_PUBKEY","BTN_RELATIVE_UNIT","BTN_BACK","BTN_NEXT","BTN_IMPORT","BTN_CANCEL","BTN_CLOSE","BTN_LATER","BTN_LOGIN","BTN_LOGOUT","BTN_ADD_ACCOUNT","BTN_SHARE","BTN_EDIT","BTN_DELETE","BTN_ADD","BTN_SEARCH","BTN_REFRESH","BTN_RETRY","BTN_START","BTN_CONTINUE","BTN_CREATE","BTN_UNDERSTOOD","BTN_OPTIONS","BTN_HELP_TOUR","BTN_HELP_TOUR_SCREEN","BTN_DOWNLOAD","BTN_DOWNLOAD_ACCOUNT_STATEMENT","BTN_MODIFY","CHOOSE_FILE","DAYS","NO_ACCOUNT_QUESTION","SEARCH_NO_RESULT","LOADING","LOADING_WAIT","SEARCHING","FROM","TO","COPY","LANGUAGE","UNIVERSAL_DIVIDEND","DATE_PATTERN","DATE_FILE_PATTERN","DATE_SHORT_PATTERN","DATE_MONTH_YEAR_PATTERN","EMPTY_PARENTHESIS","UID","ENABLE","DISABLE","RESULTS_LIST","RESULTS_COUNT","EXECUTION_TIME","SHOW_VALUES","POPOVER_ACTIONS_TITLE","POPOVER_FILTER_TITLE","SHOW_MORE","SHOW_MORE_COUNT","POPOVER_SHARE","TITLE","SHARE_ON_TWITTER","SHARE_ON_FACEBOOK","SHARE_ON_DIASPORA","SHARE_ON_GOOGLEPLUS","DATE","TYPE","SIZE","VALIDATING","SYSTEM","PICTURE_CHOOSE_TYPE","BTN_PICTURE_GALLERY","BTN_PICTURE_CAMERA","MENU","HOME","WOT","ACCOUNT","WALLETS","SETTINGS","NETWORK","TRANSACTIONS","ABOUT","LICENSE","LATEST_RELEASE","PLEASE_UPDATE","CODE","OFFICIAL_WEB_SITE","DEVELOPERS","FORUM","PLEASE_REPORT_ISSUE","REPORT_ISSUE","BTN_OPEN_DEV_WINDOW","WELCOME","MESSAGE","BTN_CURRENCY","BTN_ABOUT","BTN_HELP","NOT_YOUR_ACCOUNT_QUESTION","BTN_CHANGE_ACCOUNT","CONNECTION_ERROR","SHOW_ALL_FEED","READ_MORE","FEED_SOURCE","DISPLAY_DIVIDER","STORAGE_DIVIDER","NETWORK_SETTINGS","PEER","PEER_SHORT","PEER_CHANGED_TEMPORARY","PERSIST_CACHE","PERSIST_CACHE_HELP","USE_LOCAL_STORAGE","USE_LOCAL_STORAGE_HELP","WALLETS_SETTINGS","USE_WALLETS_ENCRYPTION","USE_WALLETS_ENCRYPTION_HELP","ENABLE_HELPTIP","DISABLE_HELPTIP","ENABLE_UI_EFFECTS","HISTORY_SETTINGS","DISPLAY_UD_HISTORY","TX_HISTORY_AUTO_REFRESH","TX_HISTORY_AUTO_REFRESH_HELP","AUTHENTICATION_SETTINGS","KEEP_AUTH","KEEP_AUTH_SHORT","KEEP_AUTH_HELP","KEEP_AUTH_OPTION","NEVER","SECONDS","MINUTE","MINUTES","HOUR","ALWAYS","KEYRING_FILE","KEYRING_FILE_HELP","REMEMBER_ME","REMEMBER_ME_HELP","PLUGINS_SETTINGS","BTN_RESET","EXPERT_MODE","EXPERT_MODE_HELP","BLOCK_VALIDITY_WINDOW","BLOCK_VALIDITY_WINDOW_SHORT","BLOCK_VALIDITY_WINDOW_HELP","BLOCK_VALIDITY_OPTION","NONE","POPUP_PEER","HOST","HOST_HELP","USE_SSL","USE_SSL_HELP","BTN_SHOW_LIST","BLOCKCHAIN","HASH","VIEW","HEADER_TITLE","TITLE_CURRENT","COMPUTED_BY","SHOW_RAW","TECHNICAL_DIVIDER","UNIVERSAL_DIVIDEND_HELP","EMPTY","POW_MIN","POW_MIN_HELP","DATA_DIVIDER","IDENTITIES_COUNT","JOINERS_COUNT","ACTIVES_COUNT","ACTIVES_COUNT_HELP","LEAVERS_COUNT","LEAVERS_COUNT_HELP","EXCLUDED_COUNT","EXCLUDED_COUNT_HELP","REVOKED_COUNT","REVOKED_COUNT_HELP","TX_COUNT","CERT_COUNT","TX_TO_HIMSELF","TX_OUTPUT_UNLOCK_CONDITIONS","TX_OUTPUT_OPERATOR","AND","OR","XHX","CSV","CLTV","LOOKUP","NO_BLOCK","LAST_BLOCKS","BTN_COMPACT","TAB_CURRENCY","TAB_WOT","TAB_NETWORK","TAB_BLOCKS","CURRENCY_SHORT_DESCRIPTION","NETWORK_RULES_DIVIDER","CURRENCY_NAME","MEMBERS","MEMBERS_VARIATION","MONEY_DIVIDER","MASS","SHARE","C_ACTUAL","MEDIAN_TIME","MONEY_RULES_DIVIDER","C_RULE","UD_RULE","DT_REEVAL","REEVAL_SYMBOL","DT_REEVAL_VALUE","UD_REEVAL_TIME0","SIG_QTY_RULE","SIG_STOCK","SIG_PERIOD","SIG_WINDOW","SIG_VALIDITY","MS_WINDOW","MS_VALIDITY","STEP_MAX","WOT_RULES_DIVIDER","SENTRIES","SENTRIES_FORMULA","XPERCENT","AVG_GEN_TIME","CURRENT","MATH_CEILING","DISPLAY_ALL_RULES","BTN_SHOW_LICENSE","WOT_DIVIDER","NO_LICENSE_FILE","LOADING_PEERS","NODE_ADDRESS","SOFTWARE","WARN_PRE_RELEASE","WARN_NEW_RELEASE","WS2PID","PRIVATE_ACCESS","POW_PREFIX","ENDPOINTS","INFO","ONLY_SSL_PEERS","PEERS","SIGNED_ON_BLOCK","MIRROR","MIRRORS","MIRROR_PEERS","PEER_LIST","MEMBER_PEERS","ALL_PEERS","DIFFICULTY","API","CURRENT_BLOCK","OFFLINE","OFFLINE_PEERS","BTN_SHOW_PEER","OWNER","SHOW_RAW_PEERING","SHOW_RAW_CURRENT_BLOCK","KNOWN_PEERS","GENERAL_DIVIDER","ERROR","LOADING_TOR_NODE_ERROR","LOADING_NODE_ERROR","SEARCH_HELP","SEARCH_INIT_PHASE_WARNING","REGISTERED_SINCE","REGISTERED_SINCE_BLOCK","NO_CERTIFICATION","NO_GIVEN_CERTIFICATION","NOT_MEMBER_PARENTHESIS","IDENTITY_REVOKED_PARENTHESIS","MEMBER_PENDING_REVOCATION_PARENTHESIS","EXPIRE_IN","NOT_WRITTEN_EXPIRE_IN","EXPIRED","PSEUDO","WRITTEN_ON_BLOCK","NOT_MEMBER_ACCOUNT","NOT_MEMBER_ACCOUNT_HELP","BTN_CERTIFY","BTN_YES_CERTIFY","BTN_SELECT_AND_CERTIFY","ACCOUNT_OPERATIONS","POPOVER_SHARE_TITLE","NEWCOMERS","NEWCOMERS_COUNT","PENDING","PENDING_COUNT","REGISTERED","MEMBER_FROM","BTN_NEWCOMERS","BTN_PENDING","NO_PENDING","NO_NEWCOMERS","CONTACTS","MODAL","CERTIFICATIONS","SUMMARY","LIST","PENDING_LIST","RECEIVED","RECEIVED_BY","SENTRY_MEMBER","OPERATIONS","GIVEN_CERTIFICATIONS","SENT","SENT_BY","LOGIN","SCRYPT_FORM_HELP","PUBKEY_FORM_HELP","FILE_FORM_HELP","SCAN_FORM_HELP","SALT","SALT_HELP","SHOW_SALT","PASSWORD","PASSWORD_HELP","PUBKEY_HELP","HAVE_ACCOUNT_QUESTION","CREATE_ACCOUNT","CREATE_FREE_ACCOUNT","FORGOTTEN_ID","ASSOCIATED_PUBKEY","BTN_METHODS","BTN_METHODS_DOTS","METHOD_POPOVER_TITLE","MEMORIZE_AUTH_FILE","SCRYPT_PARAMETERS","AUTO_LOGOUT","BTN_RELOGIN","IDLE_WARNING","METHOD","SCRYPT_DEFAULT","SCRYPT_ADVANCED","SCAN","SCRYPT","SECURE","HARDEST","EXTREME","USER","HELP","AUTH","BTN_AUTH","GENERAL_HELP","EXPECTED_UID_HELP","EXPECTED_PUBKEY_HELP","BALANCE","LAST_TX","BALANCE_ACCOUNT","NO_TX","SHOW_MORE_TX","SHOW_ALL_TX","TX_FROM_DATE","PENDING_TX","VALIDATING_TX","ERROR_TX","ERROR_TX_SENT","PENDING_TX_RECEIVED","EVENTS","OUT_DISTANCED","WAITING_MEMBERSHIP","WAITING_CERTIFICATIONS","WAITING_CERTIFICATIONS_HELP","WILL_MISSING_CERTIFICATIONS","WILL_NEED_RENEW_MEMBERSHIP","NEED_RENEW_MEMBERSHIP","NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED","NO_WAITING_MEMBERSHIP","CERTIFICATION_COUNT","CERTIFICATION_COUNT_SHORT","BTN_RECEIVE_MONEY","BTN_SELECT_ALTERNATIVES_IDENTITIES","BTN_FIX_MEMBERSHIP","BTN_MEMBERSHIP_RENEW","BTN_MEMBERSHIP_RENEW_DOTS","BTN_MEMBERSHIP_OUT_DOTS","BTN_SECURITY_DOTS","BTN_SHOW_DETAILS","LOCKED_OUTPUTS_POPOVER","DESCRIPTION","DESCRIPTION_MANY","LOCKED_AMOUNT","NEW","INTRO_WARNING_TIME","INTRO_WARNING_SECURITY","INTRO_WARNING_SECURITY_HELP","INTRO_HELP","REGISTRATION_NODE","REGISTRATION_NODE_HELP","SELECT_ACCOUNT_TYPE","MEMBER_ACCOUNT","MEMBER_ACCOUNT_TITLE","MEMBER_ACCOUNT_HELP","WALLET_ACCOUNT","WALLET_ACCOUNT_TITLE","WALLET_ACCOUNT_HELP","SALT_WARNING","PASSWORD_WARNING","PSEUDO_WARNING","PSEUDO_HELP","SALT_CONFIRM","SALT_CONFIRM_HELP","PASSWORD_CONFIRM","PASSWORD_CONFIRM_HELP","SLIDE_6_TITLE","COMPUTING_PUBKEY","LAST_SLIDE_CONGRATULATION","CONFIRMATION_MEMBER_ACCOUNT","CONFIRMATION_WALLET_ACCOUNT","CHECKING_PSEUDO","PSEUDO_AVAILABLE","PSEUDO_NOT_AVAILABLE","INFO_LICENSE","BTN_ACCEPT","BTN_ACCEPT_LICENSE","POPUP_REGISTER","SELECT_IDENTITY_MODAL","SELECT_WALLET_MODAL","WALLET_LIST","BTN_NEW","BTN_IMPORT_FILE_DOTS","NO_WALLET","BTN_RENAME","EXPORT_FILENAME","TOTAL_DOTS","EDIT_POPOVER","NAME_HELP","IMPORT_MODAL","WALLET_COUNT","NO_NEW_WALLET","SECURITY","ADD_QUESTION","BTN_CLEAN","DOWNLOAD_REVOKE","DOWNLOAD_REVOKE_HELP","GENERATE_KEYFILE","GENERATE_KEYFILE_HELP","KEYFILE_FILENAME","MEMBERSHIP_IN","MEMBERSHIP_IN_HELP","SEND_IDENTITY","SEND_IDENTITY_HELP","HELP_LEVEL","LEVEL","LOW_LEVEL","MEDIUM_LEVEL","QUESTION_1","QUESTION_2","QUESTION_3","QUESTION_4","QUESTION_5","QUESTION_6","QUESTION_7","QUESTION_8","QUESTION_9","QUESTION_10","QUESTION_11","QUESTION_12","QUESTION_13","QUESTION_14","QUESTION_15","QUESTION_16","QUESTION_17","QUESTION_18","QUESTION_19","RECOVER_ID","RECOVER_ID_HELP","RECOVER_ID_SELECT_FILE","REVOCATION_WITH_FILE","REVOCATION_WITH_FILE_DESCRIPTION","REVOCATION_WITH_FILE_HELP","REVOCATION_WALLET","REVOCATION_WALLET_HELP","REVOCATION_FILENAME","SAVE_ID","SAVE_ID_HELP","STRONG_LEVEL","KEYFILE","PUBSEC_FORMAT","PUBSEC_FORMAT_HELP","WIF_FORMAT","WIF_FORMAT_HELP","EWIF_FORMAT","EWIF_FORMAT_HELP","PASSWORD_POPUP","FILE_NAME","HEADERS","TIME","AMOUNT","TRANSFER","SUB_TITLE","SUB_TITLE_ALL","AMOUNT_HELP","COMMENT_HELP","BTN_ADD_COMMENT","REST","REST_TO","WARN_COMMENT_IS_PUBLIC","UNKNOWN_URI_FORMAT","PUBKEY_INVALID_CHECKSUM","POPUP_TITLE","UNKNOWN_ERROR","CRYPTO_UNKNOWN_ERROR","DOWNLOAD_KEYFILE_FAILED","EQUALS_TO_PSEUDO","EQUALS_TO_SALT","FIELD_REQUIRED","FIELD_TOO_SHORT","FIELD_TOO_SHORT_WITH_LENGTH","FIELD_TOO_LONG","FIELD_TOO_LONG_WITH_LENGTH","FIELD_MIN","FIELD_MAX","FIELD_ACCENT","FIELD_NOT_NUMBER","FIELD_NOT_INT","FIELD_NOT_EMAIL","PASSWORD_NOT_CONFIRMED","SALT_NOT_CONFIRMED","SEND_IDENTITY_FAILED","SEND_CERTIFICATION_FAILED","NEED_MEMBER_ACCOUNT_TO_CERTIFY","NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF","IDENTITY_TO_CERTIFY_HAS_NO_SELF","LOGIN_FAILED","LOAD_IDENTITY_FAILED","LOAD_REQUIREMENTS_FAILED","SEND_MEMBERSHIP_IN_FAILED","SEND_MEMBERSHIP_OUT_FAILED","REFRESH_WALLET_DATA","GET_CURRENCY_PARAMETER","GET_CURRENCY_FAILED","SEND_TX_FAILED","ALL_SOURCES_USED","NOT_ENOUGH_SOURCES","ACCOUNT_CREATION_FAILED","RESTORE_WALLET_DATA_ERROR","LOAD_WALLET_DATA_ERROR","COPY_CLIPBOARD_FAILED","TAKE_PICTURE_FAILED","SCAN_FAILED","SCAN_UNKNOWN_FORMAT","WOT_LOOKUP_FAILED","LOAD_PEER_DATA_FAILED","NEED_LOGIN_FIRST","AMOUNT_REQUIRED","AMOUNT_NEGATIVE","NOT_ENOUGH_CREDIT","INVALID_NODE_SUMMARY","INVALID_USER_ID","INVALID_COMMENT","INVALID_PUBKEY","INVALID_PUBKEY_CHECKSUM","IDENTITY_REVOKED","IDENTITY_REVOKED_WITH_TIME","IDENTITY_PENDING_REVOCATION","IDENTITY_INVALID_BLOCK_HASH","IDENTITY_EXPIRED","IDENTITY_NOT_FOUND","IDENTITY_TX_FAILED","WOT_PENDING_INVALID_BLOCK_HASH","WALLET_INVALID_BLOCK_HASH","WALLET_IDENTITY_EXPIRED","WALLET_REVOKED","WALLET_HAS_NO_SELF","AUTH_REQUIRED","AUTH_INVALID_PUBKEY","AUTH_INVALID_SCRYPT","AUTH_INVALID_FILE","AUTH_FILE_ERROR","IDENTITY_ALREADY_CERTIFY","IDENTITY_ALREADY_CERTIFY_PENDING","UNABLE_TO_CERTIFY_TITLE","LOAD_NEWCOMERS_FAILED","LOAD_PENDING_FAILED","ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION","ONLY_MEMBER_OR_WAS_MEMBER_CAN_EXECUTE_THIS_ACTION","ONLY_SELF_CAN_EXECUTE_THIS_ACTION","GET_BLOCK_FAILED","INVALID_BLOCK_HASH","DOWNLOAD_REVOCATION_FAILED","REVOCATION_FAILED","SALT_OR_PASSWORD_NOT_CONFIRMED","RECOVER_ID_FAILED","LOAD_FILE_FAILED","NOT_VALID_REVOCATION_FILE","NOT_VALID_SAVE_ID_FILE","NOT_VALID_KEY_FILE","EXISTING_ACCOUNT","EXISTING_ACCOUNT_REQUEST","GET_LICENSE_FILE_FAILED","CHECK_NETWORK_CONNECTION","ISSUE_524_TX_FAILED","ADD_SECONDARY_WALLET_FAILED","UPDATE_WALLET_LIST_FAILED","LOAD_WALLET_LIST_FAILED","SAVE_WALLET_LIST_FAILED","COULD_NOT_ADD_MAIN_WALLET","COULD_NOT_ADD_EXISTING_WALLET","UNKNOWN_WALLET_ID","RESTORE_WALLET_LIST_FAILED","INVALID_FILE_FORMAT","SAME_TX_RECIPIENT","CERTIFICATION_DONE","TRANSFER_SENT","COPY_TO_CLIPBOARD_DONE","MEMBERSHIP_OUT_SENT","NOT_NEED_MEMBERSHIP","IDENTITY_WILL_MISSING_CERTIFICATIONS","IDENTITY_NEED_MEMBERSHIP","HAS_ALTERNATIVE_IDENTITIES","REVOCATION_SENT","REVOCATION_SENT_WAITING_PROCESS","FEATURES_NOT_IMPLEMENTED","EMPTY_TX_HISTORY","CONFIRM","POPUP_WARNING_TITLE","POPUP_SECURITY_WARNING_TITLE","CERTIFY_RULES_TITLE_UID","CERTIFY_RULES","FULLSCREEN","EXIT_APP","TRANSFER_ALL","MEMBERSHIP_OUT","MEMBERSHIP_OUT_2","LOGIN_UNUSED_WALLET_TITLE","LOGIN_UNUSED_WALLET","FIX_IDENTITY","FIX_MEMBERSHIP","MEMBERSHIP","RENEW_MEMBERSHIP","REVOKE_IDENTITY","REVOKE_IDENTITY_2","NOT_NEED_RENEW_MEMBERSHIP","SAVE_BEFORE_LEAVE","SAVE_BEFORE_LEAVE_TITLE","LOGOUT","USE_FALLBACK_NODE","ISSUE_524_SEND_LOG","DOWNLOAD","POPUP_REVOKE_MESSAGE","JOIN","SECTION","PUBKEY_DEF","METHOD_DEF","GLOSSARY","MEMBER_DEF","CURRENCY_RULES","CURRENCY_RULES_DEF","BLOCKCHAIN_DEF","UNIVERSAL_DIVIDEND_DEF","WOT_DEF","DISTANCE_RULE","DISTANCE_RULE_DEF","TIP","MENU_BTN_CURRENCY","CURRENCY_WOT","CURRENCY_MASS","CURRENCY_UNIT_RELATIVE","CURRENCY_CHANGE_UNIT","CURRENCY_CHANGE_UNIT_TO_RELATIVE","MENU_BTN_NETWORK","NETWORK_BLOCKCHAIN","NETWORK_PEERS","NETWORK_PEERS_BLOCK_NUMBER","NETWORK_PEERS_PARTICIPATE","MENU_BTN_ACCOUNT","MENU_BTN_ACCOUNT_MEMBER","WALLET_CERTIFICATIONS","WALLET_RECEIVED_CERTIFICATIONS","WALLET_GIVEN_CERTIFICATIONS","WALLET_BALANCE","WALLET_BALANCE_RELATIVE","WALLET_BALANCE_CHANGE_UNIT","WALLET_PUBKEY","WALLET_SEND","WALLET_SEND_NO_MONEY","WALLET_OPTIONS","WALLET_RECEIVED_CERTS","WALLET_CERTIFY","WALLET_CERT_STOCK","MENU_BTN_WALLETS","MENU_BTN_TX","MENU_BTN_WOT","WOT_SEARCH_TEXT_XS","WOT_SEARCH_TEXT","WOT_SEARCH_RESULT","WOT_VIEW_CERTIFICATIONS","WOT_VIEW_CERTIFICATIONS_COUNT","WOT_VIEW_CERTIFICATIONS_CLICK","WOT_VIEW_CERTIFY","MENU_BTN_SETTINGS","HEADER_BAR_BTN_PROFILE","SETTINGS_CHANGE_UNIT","END_LOGIN","END_NOT_LOGIN","LINK_DOC","LINK_DOC_HELP","LINK_STANDARD_APP","LINK_STANDARD_APP_HELP","MESSAGE_SHORT","DOC_HEADER","TITLE_SHORT","AMOUNTS_HELP","NAME","NODE","DEMO","BAD_CREDENTIALS","SUCCESS_REDIRECTING_WITH_NAME","SUCCESS_REDIRECTING","CANCEL_REDIRECTING_WITH_NAME","CANCEL_REDIRECTING","TRANSFER_FAILED","DOC","DESCRIPTION_DIVIDER","URL_DIVIDER","PARAMETERS_DIVIDER","AVAILABLE_PARAMETERS","DEMO_DIVIDER","DEMO_HELP","DEMO_RESULT","DEMO_RESULT_PEER","DEMO_SUCCEED","DEMO_CANCELLED","INTEGRATE_DIVIDER","INTEGRATE_CODE","INTEGRATE_RESULT","INTEGRATE_PARAMETERS","PARAM_PUBKEY","PARAM_PUBKEY_HELP","PARAM_AMOUNT","PARAM_AMOUNT_HELP","PARAM_COMMENT","PARAM_COMMENT_HELP","PARAM_NAME","PARAM_NAME_HELP","PARAM_REDIRECT_URL","PARAM_REDIRECT_URL_HELP","PARAM_CANCEL_URL","PARAM_CANCEL_URL_HELP","PARAM_PREFERRED_NODE","PARAM_PREFERRED_NODE_HELP","EXAMPLES_HELP","EXAMPLE_BUTTON","EXAMPLE_BUTTON_DEFAULT_TEXT","EXAMPLE_BUTTON_DEFAULT_STYLE","EXAMPLE_BUTTON_TEXT_HELP","EXAMPLE_BUTTON_BG_COLOR","EXAMPLE_BUTTON_BG_COLOR_HELP","EXAMPLE_BUTTON_FONT_COLOR","EXAMPLE_BUTTON_FONT_COLOR_HELP","EXAMPLE_BUTTON_TEXT_ICON","EXAMPLE_BUTTON_TEXT_WIDTH","EXAMPLE_BUTTON_TEXT_WIDTH_HELP","EXAMPLE_BUTTON_ICON_NONE","EXAMPLE_BUTTON_ICON_DUNITER","EXAMPLE_BUTTON_ICON_CESIUM","EXAMPLE_BUTTON_ICON_G1_COLOR","EXAMPLE_BUTTON_ICON_G1_BLACK","DEV_WARNING","DEV_WARNING_MESSAGE","DEV_WARNING_MESSAGE_SHORT","CURRENCIES","BTN_REGISTRY","SELECT","MEMBERS_COUNT","ERROR_TX_RECEIVED","BTN_MEMBERSHIP_IN_DOTS","BTN_SEND_IDENTITY_DOTS","BTN_REVOKE","SLIDE_1_TITLE","SLIDE_2_TITLE","LICENCE","CATEGORY","CATEGORIES","CATEGORY_SEARCH_HELP","LAST_MODIFICATION_DATE","SUBMIT_BY","BTN_LIKE","BTN_LIKE_REMOVE","LIKES_TEXT","ABUSES_TEXT","BTN_REPORT_ABUSE_DOTS","BTN_REMOVE_REPORTED_ABUSE","BTN_PUBLISH","BTN_PICTURE_DELETE","BTN_PICTURE_FAVORISE","BTN_PICTURE_ROTATE","BTN_ADD_PICTURE","NOTIFICATION","HAS_UNREAD","NOTIFICATIONS","MARK_ALL_AS_READ","NO_RESULT","SHOW_ALL","LOAD_NOTIFICATIONS_FAILED","REPORT_ABUSE","REASON_HELP","ASK_DELETE","REGISTRY","USER_PROFILE","MESSAGES","INVITATIONS","ORGANIZATION_ACCOUNT","ORGANIZATION_ACCOUNT_HELP","EVENT","MEMBER_WITHOUT_PROFILE","WS_CONNECTION_FAILED","BTN_SUGGEST_CERTIFICATIONS_DOTS","BTN_ASK_CERTIFICATIONS_DOTS","BTN_ASK_CERTIFICATION","SUGGEST_CERTIFICATIONS_MODAL","ASK_CERTIFICATIONS_MODAL","SEARCH","DIVIDER_PROFILE","DIVIDER_PAGE","DIVIDER_GROUP","SUGGEST_CERTIFICATIONS","ASK_CERTIFICATION","ASK_CERTIFICATIONS","INVITATION","BTN_DELETE_ALL","BTN_NEW_INVITATION","SUGGESTION_CERTIFICATION","SUGGESTED_BY","RECIPIENTS","RECIPIENTS_HELP","RECIPIENTS_MODAL_TITLE","RECIPIENTS_MODAL_HELP","SUGGESTION_IDENTITIES","SUGGESTION_IDENTITIES_HELP","SUGGESTION_IDENTITIES_MODAL_TITLE","SUGGESTION_IDENTITIES_MODAL_HELP","DELETE_ALL_CONFIRMATION","SEND_INVITATIONS_TO_CERTIFY","INVITATION_SENT","LOAD_INVITATIONS_FAILED","REMOVE_INVITATION_FAILED","REMOVE_ALL_INVITATIONS_FAILED","SEND_INVITATION_FAILED","BAD_INVITATION_FORMAT","COMMENTS","DIVIDER","SHOW_MORE_COMMENTS","COMMENT_HELP_REPLY_TO","REPLY","REPLY_TO","REPLY_TO_LINK","REPLY_TO_DELETED_COMMENT","REPLY_COUNT","DELETED_COMMENT","MODIFIED_ON","MODIFIED_PARENTHESIS","FAILED_SAVE_COMMENT","FAILED_REMOVE_COMMENT","REPLY_TITLE_PREFIX","FORWARD_TITLE_PREFIX","BTN_REPLY","BTN_COMPOSE","BTN_WRITE","NO_MESSAGE_INBOX","NO_MESSAGE_OUTBOX","MESSAGE_RECEIVED","INBOX","OUTBOX","LAST_INBOX","LAST_OUTBOX","BTN_LAST_MESSAGES","POPOVER_ACTIONS","DELETE_ALL","COMPOSE","TITLE_REPLY","OBJECT","OBJECT_HELP","ENCRYPTED_HELP","MESSAGE_HELP","CONTENT_CONFIRMATION","SENDER","RECIPIENT","NO_CONTENT","DELETE","REMOVE","REMOVE_ALL","USER_HAS_NO_PROFILE","MESSAGE_REMOVED","All_MESSAGE_REMOVED","MESSAGE_SENT","SEND_MSG_FAILED","LOAD_MESSAGES_FAILED","LOAD_MESSAGE_FAILED","MESSAGE_NOT_READABLE","USER_NOT_RECIPIENT","NOT_AUTHENTICATED_MESSAGE","REMOVE_MESSAGE_FAILED","MESSAGE_CONTENT_TOO_LONG","MARK_AS_READ_FAILED","REMOVE_All_MESSAGES_FAILED","MARK_ALL_AS_READ_FAILED","RECIPIENT_IS_MANDATORY","HEADER_MEDIAN_TIME","HEADER_BLOCK","HEADER_ISSUER","BTN_LAST","DISPLAY_QUERY","HIDE_QUERY","TX_SEARCH_FILTER","MEMBER_FLOWS","EXISTING_TRANSACTION","PERIOD","ISSUER","TX_PUBKEY","SEARCH_BLOCKS_FAILED","LOCATION_DIVIDER","SOCIAL_NETWORKS_DIVIDER","BTN_SHOW_WOT","BTN_SHOW_WOT_HELP","BTN_SHOW_PAGES","BTN_SHOW_PAGES_HELP","MY_PAGES","NO_PAGE","BTN_LAST_RECORDS","BTN_ADVANCED_SEARCH","LOCATION_HELP","RESULTS","RESULT_COUNT_LOCATION","RESULT_COUNT","LAST_RECORDS","LAST_RECORD_COUNT_LOCATION","LAST_RECORD_COUNT","POPOVER_FILTERS","LOCATION","MENU_TITLE","REMOVE_CONFIRMATION","SELECT_TYPE","ENUM","SHOP","COMPANY","ASSOCIATION","INSTITUTION","EDIT","TITLE_NEW","RECORD_TYPE","RECORD_TITLE","RECORD_TITLE_HELP","RECORD_DESCRIPTION","RECORD_DESCRIPTION_HELP","RECORD_ADDRESS","RECORD_ADDRESS_HELP","RECORD_CITY","RECORD_CITY_HELP","RECORD_SOCIAL_NETWORKS","RECORD_PUBKEY","RECORD_PUBKEY_HELP","WALLET","PAGE_DIVIDER","PAGE_DIVIDER_HELP","LOAD_CATEGORY_FAILED","LOAD_RECORD_FAILED","LOOKUP_RECORDS_FAILED","REMOVE_RECORD_FAILED","SAVE_RECORD_FAILED","RECORD_NOT_EXISTS","GEO_LOCATION_NOT_FOUND","RECORD_REMOVED","RECORD_SAVED","PROFILE","PROFILE_DIVIDER","PROFILE_DIVIDER_HELP","NO_PROFILE_DEFINED","BTN_REORDER","TITLE_HELP","DESCRIPTION_HELP","SOCIAL_HELP","MODAL_AVATAR","SELECT_FILE_HELP","BTN_SELECT_FILE","RESIZE_HELP","RESULT_HELP","REMOVE_PROFILE_FAILED","LOAD_PROFILE_FAILED","SAVE_PROFILE_FAILED","INVALID_SOCIAL_NETWORK_FORMAT","IMAGE_RESIZE_FAILED","PROFILE_REMOVED","PROFILE_SAVED","WARNING_PUBLIC_DATA","BTN_GEOLOC_ADDRESS","USE_GEO_POINT","LOADING_LOCATION","ADDRESS","ADDRESS_HELP","CITY","CITY_HELP","DISTANCE","DISTANCE_UNIT","DISTANCE_OPTION","PROFILE_POSITION","ALTERNATIVE_RESULT_DIVIDER","POSITION","CITY_REQUIRED_IF_STREET","REQUIRED_FOR_LOCATION","INVALID_FOR_LOCATION","GEO_LOCATION_FAILED","ADDRESS_LOCATION_FAILED","SUBSCRIPTION","SUBSCRIPTION_DIVIDER","SUBSCRIPTION_DIVIDER_HELP","NO_SUBSCRIPTION","SUBSCRIPTION_COUNT","HELP_TEXT","PROVIDER","EMAIL","DELETE_SUBSCRIPTION","LOAD_SUBSCRIPTIONS_FAILED","ADD_SUBSCRIPTION_FAILED","UPDATE_SUBSCRIPTION_FAILED","DELETE_SUBSCRIPTION_FAILED","MODAL_EMAIL","EMAIL_LABEL","EMAIL_HELP","FREQUENCY_LABEL","FREQUENCY_DAILY","FREQUENCY_WEEKLY","DOCUMENT","BTN_ACTIONS","LAST_DOCUMENTS_DOTS","LAST_DOCUMENTS","SHOW_QUERY","HEADER_TIME","HEADER_RECIPIENT","READ","BTN_REMOVE","HAS_CREATE_OR_UPDATE_PROFILE","REMOVED","LOAD_DOCUMENTS_FAILED","REMOVE_FAILED","REMOVE_ALL_FAILED","ES_SETTINGS","PLUGIN_NAME","PLUGIN_NAME_HELP","ENABLE_TOGGLE","ENABLE_REMOTE_STORAGE","ENABLE_REMOTE_STORAGE_HELP","ENABLE_MESSAGE_TOGGLE","PEER_HELP","ENABLE_TX_SENT","ENABLE_TX_RECEIVED","ENABLE_CERT_SENT","ENABLE_CERT_RECEIVED","ENABLE_HTML5_NOTIFICATION","ENABLE_HTML5_NOTIFICATION_HELP","ASK_ENABLE_TITLE","ASK_ENABLE","ES_WALLET","ES_PEER","DOCUMENTS","DOCUMENT_COUNT","EMAIL_SUBSCRIPTION_COUNT","NODE_STARTED","NODE_BMA_DOWN","NODE_BMA_UP","MEMBER_JOIN","MEMBER_LEAVE","MEMBER_EXCLUDE","MEMBER_REVOKE","MEMBER_ACTIVE","TX_SENT","TX_SENT_MULTI","TX_RECEIVED","TX_RECEIVED_MULTI","CERT_SENT","CERT_RECEIVED","LIKE_RECEIVED","FOLLOW_RECEIVED","STAR_RECEIVED","MODERATION_RECEIVED","DELETION_RECEIVED","ABUSE_RECEIVED","PAGE","NEW_COMMENT","UPDATE_COMMENT","NEW_REPLY_COMMENT","UPDATE_REPLY_COMMENT","FOLLOW_NEW_COMMENT","FOLLOW_UPDATE_COMMENT","FOLLOW_NEW","FOLLOW_UPDATE","LIKE","FAILED_TOGGLE_LIKE","ES_USE_FALLBACK_NODE","ES_CONNECTION_ERROR","ES_MAX_UPLOAD_BODY_SIZE","GROUP","CREATED_TIME","LAST_RESULTS_LIST","OPEN_RESULTS_LIST","MANAGED_RESULTS_LIST","OPEN_GROUP","OPEN_GROUP_HELP","MANAGED_GROUP","MANAGED_GROUP_HELP","OPEN","MANAGED","SEARCH_GROUPS_FAILED","ENABLE_SETTINGS_TOGGLE","DELETE_BY_MODERATOR","DELETE_PROFILE_FAILED","TITLE_SMALL_DEVICE","BTN_GRAPH","GRAPH","LINEAR_SCALE","LOGARITHMIC_SCALE","BTN_SHOW_STATS","BTN_SHOW_DETAILED_STATS","RANGE_DURATION_DIVIDER","RANGE_DURATION","DAY","MONTH","BALANCE_DIVIDER","BALANCE_TITLE","TX_RECEIVED_LABEL","TX_SENT_LABEL","UD_LABEL","BALANCE_LABEL","INPUT_CHART_TITLE","OUTPUT_CHART_TITLE","BLOCKS_ISSUERS_DIVIDER","BLOCKS_ISSUERS_HELP","BLOCKS_ISSUERS_TITLE","BLOCKS_ISSUERS_LABEL","TX_DIVIDER","TX_AMOUNT_TITLE","TX_AMOUNT_PUBKEY_TITLE","TX_AMOUNT_LABEL","TX_COUNT_TITLE","TX_COUNT_LABEL","TX_AVG_BY_BLOCK","MONETARY_MASS_TITLE","MONETARY_MASS_LABEL","MONETARY_MASS_SHARE_LABEL","UD_TITLE","MEMBERS_COUNT_TITLE","MEMBERS_COUNT_LABEL","BLOCK_COUNT_LABEL","BLOCK_COUNT","DOC_STATS","USER_SETTINGS","USER_DELTA","MESSAGE_INBOX","MESSAGE_OUTBOX","INVITATION_CERTIFICATION","SOCIAL","PAGE_COMMENT","PAGE_RECORD","GROUP_RECORD","OTHER","HISTORY_DELETE","TX_ACCUMULATION_LABEL","UD_ACCUMULATION_LABEL","CERTIFICATION_TITLE","RECEIVED_CERT_LABEL","RECEIVED_CERT_DELTA_LABEL","GIVEN_CERT_LABEL","GIVEN_CERT_DELTA_LABEL","SYNCHRO","COUNT","INSERTS","UPDATES","DELETES","PERFORMANCE","DURATION","RML9","BTN_EXPORT","BTN_OPEN","BTN_SWOW_TX","CHART","MAP","SEARCH_DOTS","BTN_LOCALIZE_ME","BTN_MAP","BTN_MAP_HELP","LAYER","LOAD_POSITION_FAILED","MARKER_HELP","LOCALIZE_ME_FAILED","MAP_DIVIDER","ENABLE_GOOGLE_API","ENABLE_GOOGLE_API_HELP","GOOGLE_API_KEY","BTN_GOOGLE_API","BTN_GOOGLE_API_WARNING","GOOGLE_API_KEY_PLACEHOLDER","WOT_BTN_LAYERS","WOT_BTN_SEARCH","API_REGEXP","getEP","epRegex","isHttp","commons","refreshTreeLinks","addTreeLinks","mapById","incompleteCommentIdByParentIds","_id","order","loadDataByRecordId","recordId","loadAvatar","createOnDeleteListener","onRemoveListener","entity","stopListenChanges","$sce","EsHttp","enableCache","defaultSettingsNode","ANY_API_ENDPOINT","MAX_UPLOAD_BODY_SIZE","maxUploadBodySize","IMAGE_SRC","URL","HASH_TAG","USER_TAG","API_ENDPOINT","fallbackNodeIndex","truncUrlFilter","isSameNodeAsSettings","isSameNode","setIsFallbackNode","onSettingsReset","parseTagsFromText","reg","tag","cleanCache","isTemporary","byteCount","encodeURI","_inheritedOpen","checkNodeAlive","fallbackNode","fallbackNodes","newServer","old","skipInit","imageField","attachment","_type","_title","_name","moderators","sameAsSettings","getRequest","postParams","tagFields","fieldNames","fillRecordTags","ignoreFields","str","bodyLength","_version","escape","tagState","uidState","newLine","urls","parseUrlsFromText","link","hashTags","userTags","titles","suffix","lines","line","parseMarkdownTitlesFromText","findObjectInTree","attrName","Array","isArray","countHits","subscription","PluginServiceProvider","previousRemoteData","SETTINGS_SAVE_SPEC","askEnable","useRemoteStorage","txSent","txReceived","certSent","certReceived","enableGoogleApi","googleApiKey","enableMixedSearch","ignoreSettingsChanged","failEnable","onWalletAuth","loadSettings","storeSettingsLocally","refreshState","filteredData","copyUsingSpec","copySpec","storeSettingsRemotely","isEmitHtml5Enable","isMixedSearchEnable","esComment","onWalletReset","onWalletLoad","getCategories","readRecordFromHit","getCommons","geoDistanceObj","geoDistanceUnit","fecthPictures","esCrypto","PHONE","facebook","twitter","googleplus","youtube","github","tumblr","snapchat","linkedin","vimeo","instagram","wordpress","diaspora","bitcoin","curve25519","getTypeFromUrl","urlToMatch","slashPathIndex","getFromUrl","reduceArray","createForEncryption","dataToEncrypt","openArray","socialsToDecrypt","packArray","socialsToEncrypt","getProfile","getAll","found","fillAvatars","datas","pubkeyAtributeName","onWotSearch","dataByPubkey","mixedSearch","_id^4","constant_score","indices_boost","group","indices","avatarFieldName","memberCount","_fillSearchResultFromHit","onWotLoad","getFields","getAvatarAndName","wsUserEventCloseFn","MESSAGE_CODES","createFilterQuery","must","excludesCodes","must_not","gt","loadUnreadNotificationsCount","missing","postCount","getWalletNotifications","Promise","MEDIAN_TIME_OFFSET","warnCount","onNewUserEvent","newInvitation","markNotificationAsRead","$$phase","addNewNotification","emitEsNotification","newMessage","htmlToPlaintext","emitHtml5Notification","lang","onclick","browserNotification","postReadById","countWarnEvents","excludeCodes","ui","onWalletLogin","wsUserEvent","getUserEvent","postSearch","getChanges","walletNotifs","html5","emit","postSearchByType","getByTypeAndId","onWalletInit","messages","countUnreadMessages","onNewMessageEvent","doSendMessage","boxPath","searchMessages","decryptMessages","withSummary","fillSummary","sortFilteredMessages","titleMatch","contentMatch","onSendError","developers","developer","loadMessages","avatarField","filteredMessages","word","filterMessages","outbox","updateNotificationCountAndReadTime","notificationReadTime","showNotifications","onRead","REGEXPS","SEARCH_FILTER","LAST_AND","FIELDS","MINIMAL","COMMONS","ES_CORE_API_ENDPOINT","processSearchResult","fillAvatar","hasExcludedCurrent","unparsedText","filterType","filterText","defaultLoadSize","_internal","_executeSearchRequest","getLastGroups","countUnreadInvitations","onWalletCertify","invitationstoRemove","where","deleteInvitation","onNewInvitationEvent","getInvitationById","jsons","deleteInvitationsByIds","certification","getIds","identitiesToExtend","deleteByIds","countBeforeDeletion","unreadCountBeforeDeletion","$sanitize","issuerContent","recipientContent","encryptedRecord","onWalletUnauth","fullKeypair","membershipsCache","cleanAllCache","lastJoinTime","joinTime","leaveTime","esWot","onLoadUDs","filtered","uds","googleSearchPositionByString","google","apiKey","display_name","address_components","long_name","geometry","osm","freegeoip","hasConfigApiKey","geolocation","getCurrentPosition","coords","latitude","longitude","addressdetails","village","town","road","suburb","hamlet","place_id","osmErr","street","googleErr","lat1","lon1","lat2","lon2","radlat1","radlat2","theta","radtheta","dist","sin","cos","acos","ip","_initOptions","stats.medianTime","nested_path","_readSearchHits","issuerField","docType","queryString","documents","EsNetwork","pod","emailSubscription","sortScore","addLike","postRecord","removeLike","removeRecord","getSearch","searchBaseQueryString","getLikeIds","existingLikeIds","likeId","issuerHitIndex","nav-buttons-right","menu-user","profile-popover-user","nav-buttons","hero","after-general","item-wallet","top","general","after-buttons","buttons-top-fab","tab_registry","tab_inbox","tab_outbox","network-buttons","blockchain-buttons","currencyCache","blockstat","_powBase","rawLightInstance","_initRangeOptions","maxRangeSize","defaultTotalRangeCount","subtract","aggs","blocksByIssuer","aggregations","buckets","agg","doc_count","deltaWithLastDividend","ranges","isBefore","txAmount","avgByBlock","avg","maxByBlock","getByRange","received_stats","sent_stats","getUds","fromMapping","ud_stats","unitbase_stats","udRanges","udFromMapping","pop","udRange","udsMap","truncTime","searchRequest","request_cache","inserts","updates","deletes","peer_count","apis","cardinality","css2Rgb","balanced","stable","startColor","startState","_state2side","defaultStateSize","sides","stateCounters","j","valueOf","mapObject","rgbArray","documents-buttons","parameters-actual","wot-actual","network-actual","AwesomeMarkers","Icon","searchAddress","northEast","southWest","boundingBox","top_left","bottom_right","geo_bounding_box","processLoadHits","commaRegexp","searchAddressItems","random","leafletHelpers","FRANCE","isSameCenter","isSameCenterOnMap","setControlId","_container","superOnAdd","onAdd","container","DEFAULT_CENTER","overlaysNames","defaults","scrollWheelZoom","tileLayerOptions","attribution","baselayers","layerOptions","subdomains","continuousWorld","controls","updateCenter","invalidateSize","_resetView","isValidCenter","isSame","centerModel","mapCenter","initial","markerLocation","translatePromise","textPlaceholder","textErr","setId","overlayNames","overlayName","addEventListener","filter-buttons","after-position","markerMessageTemplate","offline","markerIdByPeerId","markerCounter","inheritedEnter","_getMarkerColor","countByColor","green","lightgreen","lightgray","getAttribution","markerIdByPeerIdToRemove","markerId","updateMarker","searchIp","peerId","common","deferIntercept","$urlRouter","disableChangeState","preventStateChange","currentScope","newUrl","oldUrl","listen","styleLightContent","bootstrap","component","csId","directive","require","ngModel","compareTo","$validators","modelValue","$eval","$validate","differentTo","NUMBER_REGEXP","numberFloat","$isEmpty","INT_REGEXP","attrs","numberInt","EMAIL_REGEXP","requiredIf","required","restrict","showCopyPopover","copyOnClick","clazz","activeLink","activeLinkPathPrefix","newPath","addClass","returnClose","onReturn","onFocus","onBlur","attr","which","blur","$compile","$parse","compile","tElement","tAttrs","ngBindHtmlGetter","trustAsHtml","ngBindHtmlWatch","$$addBindingClass","$$addBindingInfo","getTrustedHtml","contents","$element","tAttributes","extensionPoints","append","getTemplate","pre","iElement","iAttrs","fn","onReadFile","onChangeEvent","onLoadEvent","srcElement","elem","dropZone","dataTransfer","$apply","transclude","fileSelect","attachEvent","onLocaleChange","onCurrencyChange","pattern","patternRelative","minValueRelative","formatRelative","formatQuantitative","minValue","Infinity","fromNow","separator","_cache","sepChars","charAt","uniformLanguageTag","determinePreferredLanguage","useSanitizeValueStrategy","useLoaderCache","$httpProvider","useXDomain","$compileProvider","debugInfoEnabled","imgSrcSanitizationWhitelist","$animateProvider","classNameFilter","CacheFactoryProvider","recycleFreq","storagePrefix","capacity","screenmatchConfigProvider","rules","$ionicConfigProvider","enableJsScrolling","scrolling","jsScrolling","maxCache","IdleProvider","idle","logoutIdle","logoutTimeout","exception","cause","removeChangeStateListener","enableChangeState","checkBmaNodeAlive","messageParam","errorState","isNewer","device","hideKeyboardAccessoryBar","disableScroll","release","newRelease","registerBackButtonAction","backView","exitApp","rtrim","arguments"],"mappings":"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","file":"../../dist_js/cesium.js","sourcesContent":["var App;\n\nangular.module('cesium.device.services', ['cesium.utils.services', 'cesium.settings.services'])\n\n .factory('Device', ['$rootScope', '$translate', '$ionicPopup', '$q', 'ionicReady', function($rootScope, $translate, $ionicPopup, $q,\n ionicReady) {\n 'ngInject';\n\n var\n CONST = {\n MAX_HEIGHT: 400,\n MAX_WIDTH: 400\n },\n exports = {\n // workaround to quickly no is device or not (even before the ready() event)\n enable: true\n },\n cache = {},\n started = false,\n startPromise;\n\n // removeIf(device)\n // workaround to quickly no is device or not (even before the ready() event)\n exports.enable = false;\n // endRemoveIf(device)\n\n function getPicture(options) {\n if (!exports.camera.enable) {\n return $q.reject(\"Camera not enable. Please call 'ionicReady()' once before use (e.g in app.js).\");\n }\n\n // Options is the sourceType by default\n if (options && (typeof options === \"string\")) {\n options = {\n sourceType: options\n };\n }\n options = options || {};\n\n // Make sure a source type has been given (if not, ask user)\n if (angular.isUndefined(options.sourceType)) {\n return $translate(['SYSTEM.PICTURE_CHOOSE_TYPE', 'SYSTEM.BTN_PICTURE_GALLERY', 'SYSTEM.BTN_PICTURE_CAMERA'])\n .then(function(translations){\n return $ionicPopup.show({\n title: translations['SYSTEM.PICTURE_CHOOSE_TYPE'],\n buttons: [\n {\n text: translations['SYSTEM.BTN_PICTURE_GALLERY'],\n type: 'button',\n onTap: function(e) {\n return navigator.camera.PictureSourceType.PHOTOLIBRARY;\n }\n },\n {\n text: translations['SYSTEM.BTN_PICTURE_CAMERA'],\n type: 'button button-positive',\n onTap: function(e) {\n return navigator.camera.PictureSourceType.CAMERA;\n }\n }\n ]\n })\n .then(function(sourceType){\n console.info('[camera] User select sourceType:' + sourceType);\n options.sourceType = sourceType;\n return exports.camera.getPicture(options);\n });\n });\n }\n\n options.quality = options.quality || 50;\n options.destinationType = options.destinationType || navigator.camera.DestinationType.DATA_URL;\n options.encodingType = options.encodingType || navigator.camera.EncodingType.PNG;\n options.targetWidth = options.targetWidth || CONST.MAX_WIDTH;\n options.targetHeight = options.targetHeight || CONST.MAX_HEIGHT;\n return $cordovaCamera.getPicture(options);\n }\n\n function scan(n) {\n if (!exports.enable) {\n return $q.reject(\"Barcode scanner not enable. Please call 'ionicReady()' once before use (e.g in app.js).\");\n }\n var deferred = $q.defer();\n cordova.plugins.barcodeScanner.scan(\n function(result) {\n if (!result.cancelled) {\n console.debug('[device] barcode scanner scan: ' + result.text);\n deferred.resolve(result.text); // make sure to convert into String\n }\n else {\n console.debug('[device] barcode scanner scan: CANCELLED');\n deferred.resolve();\n }\n },\n function(err) {\n console.error('[device] Error while using barcode scanner: ' + err);\n deferred.reject(err);\n },\n n);\n return deferred.promise;\n }\n\n function copy(text, callback) {\n if (!exports.enable) {\n return $q.reject('Device disabled');\n }\n var deferred = $q.defer();\n $cordovaClipboard\n .copy(text)\n .then(function () {\n // success\n if (callback) {\n callback();\n }\n deferred.resolve();\n }, function () {\n // error\n deferred.reject({message: 'ERROR.COPY_CLIPBOARD'});\n });\n return deferred.promise;\n }\n\n exports.clipboard = {copy: copy};\n exports.camera = {\n getPicture : getPicture,\n scan: function(n){\n console.warn('Deprecated use of Device.camera.scan(). Use Device.barcode.scan() instead');\n return scan(n);\n }\n };\n exports.barcode = {\n enable : false,\n scan: scan\n };\n exports.keyboard = {\n enable: false,\n close: function() {\n if (!exports.keyboard.enable) return;\n cordova.plugins.Keyboard.close();\n }\n };\n\n // Numerical keyboard - fix #30\n exports.keyboard.digit = {\n settings: {\n bindModel: function(modelScope, modelPath, settings) {\n settings = settings || {};\n modelScope = modelScope || $rootScope;\n var getModelValue = function() {\n return (modelPath||'').split('.').reduce(function(res, path) {\n return res ? res[path] : undefined;\n }, modelScope);\n };\n var setModelValue = function(value) {\n var paths = (modelPath||'').split('.');\n var property = paths.length && paths[paths.length-1];\n paths.reduce(function(res, path) {\n if (path == property) {\n res[property] = value;\n return;\n }\n return res[path];\n }, modelScope);\n };\n\n settings.animation = settings.animation || 'pop';\n settings.action = settings.action || function(number) {\n setModelValue((getModelValue() ||'') + number);\n };\n if (settings.decimal) {\n settings.decimalSeparator = settings.decimalSeparator || '.';\n settings.leftButton = {\n html: '.',\n action: function () {\n var text = getModelValue() || '';\n // only one '.' allowed\n if (text.indexOf(settings.decimalSeparator) >= 0) return;\n // Auto add zero when started with '.'\n if (!text.trim().length) {\n text = '0';\n }\n setModelValue(text + settings.decimalSeparator);\n }\n };\n }\n settings.rightButton = settings.rightButton || {\n html: '',\n action: function() {\n var text = getModelValue();\n if (text && text.length) {\n text = text.slice(0, -1);\n setModelValue(text);\n }\n }\n };\n return settings;\n }\n }\n };\n\n exports.isIOS = function() {\n return !!navigator.userAgent.match(/iPhone | iPad | iPod/i) || ionic.Platform.isIOS();\n };\n\n exports.isOSX = function() {\n return !!navigator.userAgent.match(/Macintosh/i) || ionic.Platform.is(\"osx\");\n };\n\n exports.isDesktop = function() {\n if (!angular.isDefined(cache.isDesktop)) {\n try {\n // Should have NodeJs and NW\n cache.isDesktop = !exports.enable && !!process && !!nw && !!nw.App;\n } catch (err) {\n cache.isDesktop = false;\n }\n }\n return cache.isDesktop;\n };\n\n exports.isWeb = function() {\n return !exports.enable && !exports.isDesktop();\n };\n\n exports.ready = function() {\n if (started) return $q.when();\n return startPromise || exports.start();\n };\n\n exports.start = function() {\n\n startPromise = ionicReady()\n .then(function(){\n\n exports.enable = window.cordova && cordova && cordova.plugins;\n\n if (exports.enable){\n exports.camera.enable = !!navigator.camera;\n exports.keyboard.enable = cordova && cordova.plugins && !!cordova.plugins.Keyboard;\n exports.barcode.enable = cordova && cordova.plugins && !!cordova.plugins.barcodeScanner && !exports.isOSX();\n exports.clipboard.enable = cordova && cordova.plugins && !!cordova.plugins.clipboard;\n\n if (exports.keyboard.enable) {\n angular.extend(exports.keyboard, cordova.plugins.Keyboard);\n }\n\n console.debug('[device] Ionic platform ready, with [camera: {0}] [barcode scanner: {1}] [keyboard: {2}] [clipboard: {3}]'\n .format(exports.camera.enable, exports.barcode.enable, exports.keyboard.enable, exports.clipboard.enable));\n\n if (cordova.InAppBrowser) {\n console.debug('[device] Enabling InAppBrowser');\n }\n }\n else {\n console.debug('[device] Ionic platform ready - no device detected.');\n }\n\n started = true;\n startPromise = null;\n });\n\n return startPromise;\n };\n\n return exports;\n }])\n\n ;\n","var App, nw;\n\nangular.module('cesium.desktop.services', ['cesium.device.services', 'cesium.settings.services'])\n\n .factory('csDesktop', ['$rootScope', 'Device', function($rootScope, Device) {\n 'ngInject';\n\n if (!Device.isDesktop()) return;\n\n console.info(\"Starting desktop mode...\");\n }]);\n","\n\nfunction Peer(json) {\n\n var that = this;\n\n Object.keys(json).forEach(function (key) {\n that[key] = json[key];\n });\n\n that.endpoints = that.endpoints || [];\n}\n\n\nPeer.prototype.regexp = {\n BMA: /^BASIC_MERKLED_API[ ]?/,\n BMAS: /^BMAS[ ]?/,\n WS2P: /^WS2P[ ]?/,\n BMA_REGEXP: /^BASIC_MERKLED_API([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))$/,\n BMAS_REGEXP: /^BMAS([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))$/,\n WS2P_REGEXP: /^WS2P[ ]+([a-z0-9]+)([ ]+([a-z_][a-z0-9-_.ğĞ]*))?([ ]+([0-9.]+))?([ ]+([0-9a-f:]+))?([ ]+([0-9]+))([ ]+([a-z0-9/.&#!]+))?$/,\n LOCAL_IP_ADDRESS: /^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]/\n};\nPeer.prototype.regex = Peer.prototype.regexp; // for backward compat\n\nPeer.prototype.keyID = function () {\n var bma = this.bma || this.getBMA();\n if (bma.useBma) {\n return [this.pubkey || \"Unknown\", bma.dns, bma.ipv4, bma.ipv6, bma.port, bma.useSsl, bma.path].join('-');\n }\n return [this.pubkey || \"Unknown\", bma.ws2pid, bma.path].join('-');\n};\n\nPeer.prototype.copyValues = function(to) {\n var obj = this;\n [\"version\", \"currency\", \"pub\", \"endpoints\", \"hash\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n to[key] = obj[key];\n });\n};\n\nPeer.prototype.copyValuesFrom = function(from) {\n var obj = this;\n [\"version\", \"currency\", \"pub\", \"endpoints\", \"block\", \"signature\"].forEach(function (key) {\n obj[key] = from[key];\n });\n};\n\nPeer.prototype.json = function() {\n var obj = this;\n var json = {};\n [\"version\", \"currency\", \"endpoints\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n json[key] = obj[key];\n });\n json.raw = this.raw && this.getRaw();\n json.pubkey = this.pubkey;\n return json;\n};\n\nPeer.prototype.getBMA = function() {\n if (this.bma) return this.bma;\n var bma = null;\n var bmaRegex = this.regexp.BMA_REGEXP;\n var bmasRegex = this.regexp.BMAS_REGEXP;\n this.endpoints.forEach(function(ep){\n var matches = !bma && bmaRegex.exec(ep);\n if (matches) {\n bma = {\n \"dns\": matches[2] || '',\n \"ipv4\": matches[4] || '',\n \"ipv6\": matches[6] || '',\n \"port\": matches[8] || 80,\n \"useSsl\": matches[8] == 443,\n \"useBma\": true\n };\n }\n matches = !bma && bmasRegex.exec(ep);\n if (matches) {\n bma = {\n \"dns\": matches[2] || '',\n \"ipv4\": matches[4] || '',\n \"ipv6\": matches[6] || '',\n \"port\": matches[8] || 80,\n \"useSsl\": true,\n \"useBma\": true\n };\n }\n });\n return bma || {};\n};\n\nPeer.prototype.getEndpoints = function(regex) {\n if (!regex) return this.endpoints;\n return this.endpoints.reduce(function(res, ep){\n return ep.match(regex) ? res.concat(ep) : res;\n }, []);\n};\n\nPeer.prototype.hasEndpoint = function(endpoint){\n //console.debug('testing if hasEndpoint:' + endpoint);\n var regExp = this.regexp[endpoint] || new RegExp('^' + endpoint);\n var endpoints = this.getEndpoints(regExp);\n if (!endpoints.length) return false;\n else return true;\n};\n\nPeer.prototype.getDns = function() {\n var bma = this.bma || this.getBMA();\n return bma.dns ? bma.dns : null;\n};\n\nPeer.prototype.getIPv4 = function() {\n var bma = this.bma || this.getBMA();\n return bma.ipv4 ? bma.ipv4 : null;\n};\n\nPeer.prototype.getIPv6 = function() {\n var bma = this.bma || this.getBMA();\n return bma.ipv6 ? bma.ipv6 : null;\n};\n\nPeer.prototype.getPort = function() {\n var bma = this.bma || this.getBMA();\n return bma.port ? bma.port : null;\n};\n\nPeer.prototype.getHost = function(getHost) {\n bma = getHost || this.bma || this.getBMA();\n return ((bma.port == 443 || bma.useSsl) && bma.dns) ? bma.dns :\n (this.hasValid4(bma) ? bma.ipv4 :\n (bma.dns ? bma.dns :\n (bma.ipv6 ? '[' + bma.ipv6 + ']' :'')));\n};\n\nPeer.prototype.getURL = function(bma) {\n bma = bma || this.bma || this.getBMA();\n var host = this.getHost(bma);\n var protocol = (bma.port == 443 || bma.useSsl) ? 'https' : 'http';\n return protocol + '://' + host + (bma.port ? (':' + bma.port) : '');\n};\n\nPeer.prototype.getServer = function(bma) {\n bma = bma || this.bma || this.getBMA();\n var host = this.getHost(bma);\n return host + (host && bma.port ? (':' + bma.port) : '');\n};\n\nPeer.prototype.hasValid4 = function(bma) {\n return bma.ipv4 &&\n /* exclude private address - see https://fr.wikipedia.org/wiki/Adresse_IP */\n !bma.ipv4.match(this.regexp.LOCAL_IP_ADDRESS) ?\n true : false;\n};\n\nPeer.prototype.isReachable = function () {\n return !!this.getServer();\n};\n\nPeer.prototype.isSsl = function() {\n var bma = this.bma || this.getBMA();\n return bma.useSsl;\n};\n\nPeer.prototype.isTor = function() {\n var bma = this.bma || this.getBMA();\n return bma.useTor;\n};\n\nPeer.prototype.isWs2p = function() {\n var bma = this.bma || this.getBMA();\n return bma.useWs2p;\n};\n\nPeer.prototype.isBma = function() {\n var bma = this.bma || this.getBMA();\n return !bma.useWs2p && !bma.useTor;\n};\n\nPeer.prototype.hasBma = function() {\n return this.hasEndpoint('(BASIC_MERKLE_API|BMAS|BMATOR)');\n};\n","/**\n * Created by blavenie on 01/02/17.\n */\nfunction Block(json, attributes) {\n \"use strict\";\n\n var that = this;\n\n // Copy default fields\n if (!attributes || !attributes.length) {\n [\"currency\", \"issuer\", \"medianTime\", \"number\", \"version\", \"powMin\", \"dividend\", \"membersCount\", \"hash\", \"identities\", \"joiners\", \"actives\", \"leavers\", \"revoked\", \"excluded\", \"certifications\", \"transactions\", \"unitbase\"]\n .forEach(function (key) {\n that[key] = json[key];\n });\n }\n // or just given\n else {\n _.forEach(attributes, function (key) {\n that[key] = json[key];\n });\n\n }\n\n that.identitiesCount = that.identities ? that.identities.length : 0;\n that.joinersCount = that.joiners ? that.joiners.length : 0;\n that.activesCount = that.actives ? that.actives.length : 0;\n that.leaversCount = that.leavers ? that.leavers.length : 0;\n that.revokedCount = that.revoked ? that.revoked.length : 0;\n that.excludedCount = that.excluded ? that.excluded.length : 0;\n that.certificationsCount = that.certifications ? that.certifications.length : 0;\n that.transactionsCount = that.transactions ? that.transactions.length : 0;\n\n that.empty = that.isEmpty();\n\n that.id = [that.number, that.hash].join('-');\n}\n\nBlock.prototype.isEmpty = function(){\n \"use strict\";\n return !this.transactionsCount &&\n !this.certificationsCount &&\n !this.joinersCount &&\n !this.dividend &&\n !this.activesCount &&\n !this.identitiesCount &&\n !this.leaversCount &&\n !this.excludedCount &&\n !this.revokedCount;\n};\n\nBlock.prototype.parseData = function() {\n this.identities = this.parseArrayValues(this.identities, ['pubkey', 'signature', 'buid', 'uid']);\n this.joiners = this.parseArrayValues(this.joiners, ['pubkey', 'signature', 'mBuid', 'iBuid', 'uid']);\n this.actives = this.parseArrayValues(this.actives, ['pubkey', 'signature', 'mBuid', 'iBuid', 'uid']);\n this.leavers = this.parseArrayValues(this.leavers, ['pubkey', 'signature', 'mBuid', 'iBuid', 'uid']);\n this.revoked = this.parseArrayValues(this.revoked, ['pubkey', 'signature']);\n this.excluded = this.parseArrayValues(this.excluded, ['pubkey']);\n\n // certifications\n this.certifications = this.parseArrayValues(this.certifications, ['from', 'to', 'block', 'signature']);\n //this.certifications = _.groupBy(this.certifications, 'to');\n\n // TX\n this.transactions = this.parseTransactions(this.transactions);\n\n delete this.raw; // not need\n};\n\nBlock.prototype.cleanData = function() {\n delete this.identities;\n delete this.joiners;\n delete this.actives;\n delete this.leavers;\n delete this.revoked;\n delete this.excluded;\n delete this.certifications;\n delete this.transactions;\n\n delete this.raw; // not need\n};\n\nBlock.prototype.parseArrayValues = function(array, itemObjProperties){\n if (!array || !array.length) return [];\n return array.reduce(function(res, raw) {\n var parts = raw.split(':');\n if (parts.length != itemObjProperties.length) {\n console.debug('[block] Bad format for \\'{0}\\': [{1}]. Expected {1} parts. Skipping'.format(arrayProperty, raw, itemObjProperties.length));\n return res;\n }\n var obj = {};\n for (var i=0; i= 1) {\n var prefix = parts[0];\n\n // Private/public options\n if (prefix.length > 4) {\n var matches = this.regexp.WS2P_PREFIX.exec(prefix);\n if (!matches) {\n throw Error('Invalid format: ' + message);\n }\n\n // Private options\n var privateOptions = matches[1];\n if (privateOptions) {\n that.private = {\n useTor: privateOptions.startsWith('T')\n };\n var mode = privateOptions.substring(1);\n if (mode == 'A') {\n that.private.mode = 'all';\n }\n else if (mode == 'M') {\n that.private.mode = 'mixed';\n }\n else if (mode == 'S') {\n that.private.mode = 'strict';\n }\n }\n\n // Public options\n var publicOptions = matches[2];\n if (publicOptions) {\n that.public = {\n useTor: publicOptions.startsWith('T'),\n mode: 'all'\n };\n }\n\n // For DEBUG only:\n /*\n console.log('[http] private {0}, public {1}'.format(\n (that.private && (that.private.useTor ? 'TOR ' : '' ) + (that.private.mode || 'false')) || 'false',\n that.public && ((that.public.useTor ? 'TOR ' : '' ) + (that.public.mode || 'false')) || 'false'\n ), prefix);*/\n }\n\n that.pubkey=parts[3];\n that.buid=parts[4];\n that.ws2pid=parts[5];\n that.software=parts[6];\n that.version=parts[7];\n that.powPrefix=parts[8];\n }\n }\n }\n\n}\n\n\nWs2pMessage.prototype.regexp = {\n WS2P_PREFIX: /^WS2P(?:O([CT][SAM]))?(?:I([CT]))?$/,\n};\n\n\n","\nAppController.$inject = ['$scope', '$rootScope', '$state', '$ionicSideMenuDelegate', '$q', '$timeout', '$ionicHistory', '$controller', '$window', 'csPlatform', 'csSettings', 'CryptoUtils', 'csCrypto', 'UIUtils', 'BMA', 'csWallet', 'Device', 'Modals', 'csConfig', 'csHttp'];\nHomeController.$inject = ['$scope', '$state', '$timeout', '$ionicHistory', '$translate', '$http', 'UIUtils', 'csConfig', 'csCache', 'csPlatform', 'csCurrency', 'csSettings'];\nPluginExtensionPointController.$inject = ['$scope', 'PluginService'];angular.module('cesium.app.controllers', ['cesium.platform', 'cesium.services'])\n\n .config(['$stateProvider', '$urlRouterProvider', function($stateProvider, $urlRouterProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app', {\n url: \"/app\",\n abstract: true,\n templateUrl: \"templates/menu.html\",\n controller: 'AppCtrl',\n data: {\n large: false\n }\n })\n\n .state('app.home', {\n url: \"/home?error\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/home/home.html\",\n controller: 'HomeCtrl'\n }\n }\n })\n\n .state('app.lock', {\n cache: false,\n url: \"/lock\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/common/view_passcode.html\",\n controller: 'PassCodeCtrl'\n }\n }\n })\n ;\n\n // if none of the above states are matched, use this as the fallback\n $urlRouterProvider.otherwise('/app/home');\n\n }])\n\n .controller('AppCtrl', AppController)\n\n .controller('HomeCtrl', HomeController)\n\n .controller('PluginExtensionPointCtrl', PluginExtensionPointController)\n\n;\n\n/**\n * Useful controller that could be reuse in plugin, using $scope.extensionPoint for condition rendered in templates\n */\nfunction PluginExtensionPointController($scope, PluginService) {\n 'ngInject';\n $scope.extensionPoint = PluginService.extensions.points.current.get();\n}\n\n/**\n * Abstract controller (inherited by other controllers)\n */\nfunction AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $timeout,\n $ionicHistory, $controller, $window, csPlatform, csSettings, CryptoUtils, csCrypto,\n UIUtils, BMA, csWallet, Device, Modals, csConfig, csHttp\n) {\n 'ngInject';\n\n $scope.walletData = csWallet.data;\n $scope.search = {};\n $scope.login = csWallet.isLogin();\n $scope.auth = csWallet.isAuth();\n $scope.motion = UIUtils.motion.default;\n $scope.fullscreen = UIUtils.screen.fullscreen.isEnabled();\n\n $scope.showHome = function() {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n return $state.go('app.home')\n .then(UIUtils.loading.hide);\n };\n\n ////////////////////////////////////////\n // Show Help tour\n ////////////////////////////////////////\n\n $scope.createHelptipScope = function(isTour) {\n if (!isTour && ($rootScope.tour || !$rootScope.settings.helptip.enable || UIUtils.screen.isSmall())) {\n return; // avoid other helptip to be launched (e.g. csWallet)\n }\n // Create a new scope for the tour controller\n var helptipScope = $scope.$new();\n $controller('HelpTipCtrl', { '$scope': helptipScope});\n return helptipScope;\n };\n\n $scope.startHelpTour = function(event, skipClearCache) {\n if (event && event.defaultPrevented) return false; // Event stopped;\n\n $rootScope.tour = true; // to avoid other helptip to be launched (e.g. csWallet)\n\n // Clear cache history\n if (!skipClearCache) {\n $ionicHistory.clearHistory();\n return $ionicHistory.clearCache()\n .then(function() {\n $scope.startHelpTour(null, true/*continue*/);\n });\n }\n\n var helptipScope = $scope.createHelptipScope(true/*is tour*/);\n return helptipScope.startHelpTour()\n .then(function() {\n helptipScope.$destroy();\n delete $rootScope.tour;\n })\n .catch(function(err){\n delete $rootScope.tour;\n });\n };\n\n $scope.disableHelpTour = function(event) {\n if (event) {\n event.preventDefault();\n event.stopPropagation();\n }\n\n if (csSettings.data.helptip && csSettings.data.helptip.enable) {\n $rootScope.settings.helptip.enable = false;\n csSettings.store();\n }\n\n };\n\n ////////////////////////////////////////\n // Login & wallet\n ////////////////////////////////////////\n\n $scope.isLogin = function() {\n return $scope.login;\n };\n\n // Load wallet data (after login)\n $scope.loadWalletData = function(options) {\n\n console.warn(\"[app-controller] DEPRECATED - Please use csWallet.load() instead of $scope.loadWalletData()\", new Error());\n\n options = options || {};\n var wallet = options.wallet || csWallet;\n return wallet.loadData(options)\n\n .then(function(walletData) {\n // cancel login\n if (!walletData) throw 'CANCELLED';\n return walletData;\n });\n };\n\n // Login and load wallet\n $scope.loadWallet = function(options) {\n\n console.warn(\"[app-controller] DEPRECATED - Please use csWallet.loginOrLoad() instead of $scope.loadWallet()\", new Error());\n\n // Make sure the platform is ready\n if (!csPlatform.isStarted()) {\n return csPlatform.ready().then(function(){\n return $scope.loadWallet(options);\n });\n }\n\n options = options || {};\n\n var wallet = options.wallet || csWallet;\n\n // If need auth\n if (options.auth && !wallet.isAuth()) {\n return wallet.auth(options)\n .then(function (walletData) {\n if (walletData) return walletData;\n // failed to auth\n throw 'CANCELLED';\n });\n }\n\n // If need login\n else if (!wallet.isLogin()) {\n return wallet.login(options)\n .then(function (walletData) {\n if (walletData) return walletData;\n // failed to login\n throw 'CANCELLED';\n });\n }\n\n // Already login or auth\n else if (!wallet.isDataLoaded(options)) {\n return $scope.loadWalletData(options);\n }\n else {\n return $q.when(wallet.data);\n }\n };\n\n // Login and go to a state (or wallet if not)\n $scope.loginAndGo = function(state, options) {\n $scope.closeProfilePopover();\n options = options || {};\n var wallet = options.wallet || csWallet;\n delete options.wallet;\n\n state = state || 'app.view_wallet';\n\n if (!wallet.isLogin()) {\n\n // Make sure to protect login modal, if HTTPS enable - fix #340\n if (csConfig.httpsMode && $window.location && $window.location.protocol !== 'https:') {\n var href = $window.location.href;\n var hashIndex = href.indexOf('#');\n var rootPath = (hashIndex != -1) ? href.substr(0, hashIndex) : href;\n rootPath = 'https' + rootPath.substr(4);\n href = rootPath + $state.href(state);\n if (csConfig.httpsModeDebug) {\n // Debug mode: just log, then continue\n console.debug('[httpsMode] --- Should redirect to: ' + href);\n }\n else {\n $window.location.href = href;\n return;\n }\n }\n\n return wallet.login(options)\n .then(function(){\n return $state.go(state, options);\n })\n .then(UIUtils.loading.hide);\n }\n else {\n return $state.go(state, options);\n }\n };\n\n // Logout\n $scope.logout = function(options) {\n options = options || {};\n var wallet = options.wallet || csWallet;\n if (!options.force && $scope.profilePopover) {\n // Make the popover if really closed, to avoid UI refresh on popover buttons\n return $scope.profilePopover.hide()\n .then(function(){\n options.force = true;\n return $scope.logout(options);\n });\n }\n if (options.askConfirm) {\n return UIUtils.alert.confirm('CONFIRM.LOGOUT')\n .then(function(confirm) {\n if (confirm) {\n options.askConfirm=false;\n return $scope.logout(options);\n }\n });\n }\n\n UIUtils.loading.show();\n return wallet.logout()\n .then(function() {\n // Close left menu if open\n if ($ionicSideMenuDelegate.isOpenLeft()) {\n $ionicSideMenuDelegate.toggleLeft();\n }\n\n // If default wallet: clear navigation history, then go back to home\n if (wallet.isDefault()) {\n $ionicHistory.clearHistory();\n\n return $ionicHistory.clearCache()\n .then(function() {\n return $scope.showHome();\n });\n }\n else {\n UIUtils.loading.hide(10);\n }\n })\n .catch(UIUtils.onError('ERROR.LOGOUT'));\n };\n // Do authentification\n $scope.doAuth = function(options) {\n var wallet = options && options.wallet || csWallet;\n return wallet.auth()\n .then(UIUtils.loading.hide);\n };\n\n // If connected and same pubkey\n $scope.isUserPubkey = function(pubkey) {\n return csWallet.isUserPubkey(pubkey);\n };\n\n // add listener on wallet event\n csWallet.api.data.on.login($scope, function(data, deferred) {\n $scope.login = true;\n return deferred ? deferred.resolve() : $q.when();\n });\n csWallet.api.data.on.logout($scope, function() {\n $scope.login = false;\n });\n csWallet.api.data.on.auth($scope, function(data, deferred) {\n $scope.auth = true;\n return deferred ? deferred.resolve() : $q.when();\n });\n csWallet.api.data.on.unauth($scope, function() {\n $scope.auth = false;\n });\n\n ////////////////////////////////////////\n // Useful modals\n ////////////////////////////////////////\n\n // Open transfer modal\n $scope.showTransferModal = function(parameters) {\n return Modals.showTransfer(parameters);\n };\n\n $scope.showAboutModal = function() {\n return Modals.showAbout();\n };\n\n $scope.showJoinModal = function() {\n $scope.closeProfilePopover();\n return Modals.showJoin();\n };\n\n $scope.showSettings = function() {\n $scope.closeProfilePopover();\n return $state.go('app.settings');\n };\n\n $scope.showHelpModal = function(parameters) {\n return Modals.showHelp(parameters);\n };\n\n ////////////////////////////////////////\n // Useful popovers\n ////////////////////////////////////////\n\n $scope.showProfilePopover = function(event) {\n return UIUtils.popover.show(event, {\n templateUrl :'templates/common/popover_profile.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.profilePopover = popover;\n $timeout(function() {\n UIUtils.ink({selector: '#profile-popover .ink, #profile-popover .ink-dark'});\n }, 100);\n }\n });\n };\n\n $scope.closeProfilePopover = function() {\n if ($scope.profilePopover && $scope.profilePopover.isShown()) {\n $timeout(function(){$scope.profilePopover.hide();});\n }\n };\n\n // Change peer info\n $scope.showPeerInfoPopover = function(event) {\n return UIUtils.popover.show(event, {\n templateUrl: 'templates/network/popover_peer_info.html',\n autoremove: true,\n scope: $scope.$new(true)\n });\n };\n\n ////////////////////////////////////////\n // Link management\n ////////////////////////////////////////\n\n $scope.openLink = function($event, uri, options) {\n $event.stopPropagation();\n $event.preventDefault();\n\n // Read URL like '@UID' (Used by home page, in feed's author url)\n if (uri && uri.startsWith('@')) {\n var uid = uri.substr(1);\n if (BMA.regexp.USER_ID.test(uid)) {\n $state.go('app.wot_identity_uid', {uid: uid});\n return false;\n }\n }\n\n options = options || {};\n\n // If unable to open, just copy value\n options.onError = function() {\n return UIUtils.popover.copy($event, uri);\n };\n\n csHttp.uri.open(uri, options);\n\n return false;\n };\n\n ////////////////////////////////////////\n // Layout Methods\n ////////////////////////////////////////\n $scope.showFab = function(id, timeout) {\n UIUtils.motion.toggleOn({selector: '#'+id + '.button-fab'}, timeout);\n };\n\n $scope.hideFab = function(id, timeout) {\n UIUtils.motion.toggleOff({selector: '#'+id + '.button-fab'}, timeout);\n };\n\n // Could be override by subclass\n $scope.doMotion = function(options) {\n return $scope.motion.show(options);\n };\n\n\n ////////////////////////////////////////\n // Fullscreen mode\n ////////////////////////////////////////\n\n $scope.askFullscreen = function() {\n var skip = $scope.fullscreen || !UIUtils.screen.isSmall() || !Device.isWeb();\n if (skip) return;\n\n return UIUtils.alert.confirm('CONFIRM.FULLSCREEN', null, {\n cancelText: 'COMMON.BTN_NO',\n okText: 'COMMON.BTN_YES'\n })\n .then(function(confirm) {\n if (!confirm) return;\n $scope.toggleFullscreen();\n });\n };\n\n $scope.toggleFullscreen = function() {\n $scope.fullscreen = !UIUtils.screen.fullscreen.isEnabled();\n UIUtils.screen.fullscreen.toggleAll();\n };\n\n // removeIf(device)\n // Ask switching fullscreen\n $scope.askFullscreen();\n // endRemoveIf(device)\n}\n\n\nfunction HomeController($scope, $state, $timeout, $ionicHistory, $translate, $http, UIUtils,\n csConfig, csCache, csPlatform, csCurrency, csSettings) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.locales = angular.copy(csSettings.locales);\n $scope.smallscreen = UIUtils.screen.isSmall();\n\n $scope.enter = function(e, state) {\n if (ionic.Platform.isIOS()) {\n if(window.StatusBar) {\n // needed to fix Xcode 9 / iOS 11 issue with blank space at bottom of webview\n // https://github.com/meteor/meteor/issues/9041\n StatusBar.overlaysWebView(false);\n StatusBar.overlaysWebView(true);\n }\n }\n\n if (state && state.stateParams && state.stateParams.error) { // Error query parameter\n $scope.error = state.stateParams.error;\n $scope.node = csCurrency.data.node;\n $scope.loading = false;\n $ionicHistory.nextViewOptions({\n disableAnimate: true,\n disableBack: true,\n historyRoot: true\n });\n $state.go('app.home', {error: undefined}, {\n reload: false,\n inherit: true,\n notify: false});\n }\n else {\n // Wait platform to be ready\n csPlatform.ready()\n .then(function() {\n $scope.loading = false;\n $scope.loadFeeds();\n })\n .catch(function(err) {\n $scope.node = csCurrency.data.node;\n $scope.loading = false;\n $scope.error = err;\n });\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.reload = function() {\n $scope.loading = true;\n delete $scope.error;\n\n $timeout($scope.enter, 200);\n };\n\n $scope.loadFeeds = function() {\n var feedUrl = csSettings.getFeedUrl();\n if (!feedUrl || typeof feedUrl !== 'string') return; // Skip\n\n var maxContentLength = (csConfig.feed && csConfig.feed.maxContentLength) || 650;\n\n var now = Date.now();\n console.debug(\"[home] Loading feeds from {0}...\".format(feedUrl));\n\n $http.get(feedUrl, {responseType: 'json', cache: csCache.get(null, csCache.constants.LONG)})\n .success(function(feed) {\n console.debug('[home] Feeds loaded in {0}ms'.format(Date.now()-now));\n if (!feed || !feed.items || !feed.items.length) return // skip if empty\n\n feed.items = feed.items.reduce(function(res, item) {\n if (!item || (!item.title && !item.content_text && !item.content_html)) return res; // Skip\n\n // Convert UTC time\n if (item.date_published) {\n item.time = moment.utc(item.date_published).unix();\n }\n // Convert content to HTML\n if (item.content_html) {\n item.content = item.content_html;\n }\n else {\n item.content = (item.content_text||'').replace(/\\n/g, '
');\n }\n\n // Trunc content, if need\n if (maxContentLength !== -1 && item.content && item.content.length > maxContentLength) {\n var endIndex = Math.max(item.content.lastIndexOf(\" \", maxContentLength), item.content.lastIndexOf(\"<\", maxContentLength));\n item.content = item.content.substr(0, endIndex) + ' (...)';\n item.truncated = true;\n }\n\n // If author is missing, copy the main author\n item.author = item.author || feed.author;\n\n return res.concat(item);\n }, []);\n\n $scope.feed = feed;\n })\n .error(function(data, status) {\n console.error('[home] Failed to load feeds.');\n $scope.feed = null;\n });\n }\n\n /**\n * Catch click for quick fix\n * @param event\n */\n $scope.doQuickFix = function(action) {\n if (action === 'settings') {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n $state.go('app.settings');\n }\n };\n\n $scope.changeLanguage = function(langKey) {\n $translate.use(langKey);\n $scope.hideLocalesPopover();\n csSettings.data.locale = _.findWhere($scope.locales, {id: langKey});\n csSettings.store();\n $scope.loadFeeds();\n };\n\n /* -- show/hide locales popup -- */\n\n $scope.showLocalesPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/common/popover_locales.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.localesPopover = popover;\n }\n });\n };\n\n $scope.hideLocalesPopover = function() {\n if ($scope.localesPopover) {\n $scope.localesPopover.hide();\n $scope.localesPopover = null;\n }\n };\n\n // For DEV ONLY\n /*$timeout(function() {\n $scope.loginAndGo();\n }, 500);*/\n}\n","\nJoinController.$inject = ['$scope', '$timeout', '$controller', 'Modals', 'csWallet'];\nJoinChooseAccountTypeModalController.$inject = ['$scope', '$state', 'Modals', 'UIUtils', 'csCurrency'];\nJoinModalController.$inject = ['$scope', '$state', '$interval', '$q', '$timeout', 'Device', 'UIUtils', 'CryptoUtils', 'csSettings', 'Modals', 'csWallet', 'BMA', 'parameters'];angular.module('cesium.join.controllers', ['cesium.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n .state('app.join', {\n url: \"/join\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/home/home.html\",\n controller: 'JoinCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('JoinCtrl', JoinController)\n\n .controller('JoinChooseAccountTypeModalCtrl', JoinChooseAccountTypeModalController)\n\n .controller('JoinModalCtrl', JoinModalController)\n;\n\nfunction JoinController($scope, $timeout, $controller, Modals, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('HomeCtrl', {$scope: $scope}));\n\n $scope.showJoinModal = function() {\n if ($scope.loading) return $timeout($scope.showJoinModal, 500); // recursive call\n\n if (!csWallet.isLogin() && !$scope.error) {\n return $timeout(Modals.showJoin, 300);\n }\n };\n $scope.$on('$ionicView.enter', $scope.showJoinModal);\n\n}\n\nfunction JoinChooseAccountTypeModalController($scope, $state, Modals, UIUtils, csCurrency) {\n 'ngInject';\n\n $scope.formData = {};\n $scope.slides = {\n slider: null,\n options: {\n loop: false,\n effect: 'slide',\n speed: 500\n }\n };\n $scope.loading = true;\n\n $scope.load = function() {\n if ($scope.loading) {\n return csCurrency.get()\n .then(function (currency) {\n if (!currency) return;\n $scope.currency = currency;\n $scope.formData.currency = currency.name;\n $scope.loading = false;\n })\n .catch(UIUtils.onError('ERROR.GET_CURRENCY_FAILED'));\n }\n };\n $scope.$on('modal.shown', $scope.load);\n\n $scope.$on(\"$ionicSlides.sliderInitialized\", function(event, data){\n // Disable swipe\n data.slider.lockSwipes();\n });\n\n $scope.slidePrev = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slidePrev();\n $scope.slides.slider.lockSwipes();\n };\n\n $scope.slideNext = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slideNext();\n $scope.slides.slider.lockSwipes();\n };\n\n $scope.selectAccountTypeAndClose = function(type) {\n $scope.formData.accountType = type;\n $scope.closeModal($scope.formData);\n };\n\n /**\n * Catch click for quick fix\n * @param fix\n */\n $scope.doQuickFix = function(event) {\n if (event == 'settings') {\n $scope.closeModal();\n $state.go('app.settings');\n }\n };\n\n $scope.showHelpModal = function(helpAnchor) {\n Modals.showHelp({anchor: helpAnchor});\n };\n\n // TODO DEV only\n //$timeout(function() {\n //$scope.selectCurrency('g1');\n //$scope.selectAccountTypeAndClose('member');\n //}, 400);\n}\n\n\nfunction JoinModalController($scope, $state, $interval, $q, $timeout, Device, UIUtils, CryptoUtils, csSettings, Modals, csWallet, BMA, parameters) {\n 'ngInject';\n\n $scope.formData = {\n pseudo: parameters.uid || '',\n pubkey: parameters.pubkey || undefined\n };\n $scope.slides = {\n slider: null,\n options: {\n loop: false,\n effect: 'slide',\n speed: 500,\n pager: false,\n showPager: false\n }\n };\n $scope.slideBehavior = {};\n $scope.loading = true;\n\n $scope.isLicenseRead = Device.isIOS(); // always enable the button, on IOS fix #554\n $scope.showUsername = false;\n $scope.showPassword = false;\n $scope.formData.computing=false;\n $scope.smallscreen = UIUtils.screen.isSmall();\n $scope.userIdPattern = BMA.constants.regexp.USER_ID;\n $scope.accountAvailable = !!parameters.pubkey;\n\n // Read input parameters\n $scope.currency = parameters.currency;\n $scope.accountType = parameters.accountType || 'member';\n\n var wallet;\n\n $scope.load = function() {\n if ($scope.loading) {\n\n // Get the wallet\n wallet = (parameters.walletId && csWallet.children.get(parameters.walletId)) ||\n (parameters.pubkey && csWallet.children.getByPubkey(parameters.pubkey)) ||\n ((!parameters.pubkey || csWallet.isUserPubkey(parameters.pubkey)) && csWallet);\n if (!wallet) throw new Error(\"Cannot found the corresponding wallet, from parameters.pubkey or parameters.walletId\");\n\n console.debug(\"[join] Starting join modal on wallet {0}\".format(wallet.id));\n\n if ($scope.accountType === 'member') {\n $scope.licenseFileUrl = csSettings.getLicenseUrl();\n if ($scope.licenseFileUrl) {\n // Use HTML in iframe, when original file is markdown (fix #538)\n if ( $scope.licenseFileUrl.substring($scope.licenseFileUrl.length - 3) != '.txt') {\n $scope.licenseFileUrl = $scope.licenseFileUrl + '.html';\n }\n if (!$scope.isLicenseRead) {\n //$scope.startListenLicenseBottom();\n\n // Make sure to enable the next button when error occured - Fix issue #592\n $timeout(function() {\n if (!$scope.isLicenseRead) {\n $scope.isLicenseRead = true;\n }\n }, 5000);\n }\n }\n }\n\n $scope.slideBehavior = $scope.computeSlideBehavior();\n $scope.loading = false;\n }\n };\n $scope.$on('modal.shown', $scope.load);\n\n $scope.$on(\"$ionicSlides.sliderInitialized\", function(event, data){\n // Disable swipe\n data.slider.lockSwipes();\n });\n\n $scope.slidePrev = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slidePrev();\n $scope.slides.slider.lockSwipes();\n };\n\n $scope.slideNext = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slideNext();\n $scope.slides.slider.lockSwipes();\n };\n\n $scope.showAccountPubkey = function() {\n if (parameters.pubkey && parameters.pseudo === $scope.formData.pseudo) {\n $scope.formData.pubkey = parameters.pubkey;\n $scope.formData.computing = false;\n return;\n }\n\n $scope.formData.computing=true;\n\n CryptoUtils.scryptKeypair($scope.formData.username, $scope.formData.password)\n .then(function(keypair) {\n $scope.formData.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);\n return $scope.checkAccountAvailable();\n })\n .then(function() {\n return $timeout(function(){\n $scope.formData.computing=false;\n }, 400);\n })\n .catch(function(err) {\n $scope.formData.pubkey = undefined;\n $scope.formData.computing=false;\n UIUtils.onError('ERROR.CRYPTO_UNKNOWN_ERROR')(err);\n });\n };\n\n $scope.formDataChanged = function() {\n $scope.formData.computing=false;\n $scope.formData.pubkey=null;\n };\n\n $scope.getCurrentFormName = function() {\n var index = $scope.slides.slider.activeIndex;\n if($scope.accountType === 'member') {\n index += ($scope.licenseFileUrl ? 0 : 1); // skip index 0, when no license file\n index += (parameters.pubkey && index >= 2 ? 2 : 0); // skip salt+pass, if already a pubkey\n if (index === 0) return \"licenseForm\";\n if (index === 1) return \"pseudoForm\";\n if (index === 2) return \"saltForm\";\n if (index === 3) return \"passwordForm\";\n if (index === 4) return \"confirmForm\";\n }\n else {\n if (index === 0) return \"saltForm\";\n if (index === 1) return \"passwordForm\";\n if (index === 2) return \"confirmForm\";\n }\n };\n\n $scope.computeSlideBehavior = function() {\n var formName = $scope.getCurrentFormName();\n\n var behavior;\n if (formName === \"licenseForm\") {\n behavior = {\n hasPreviousButton: false,\n hasNextButton: false,\n hasAcceptButton: true\n };\n }\n else if (formName === \"pseudoForm\") {\n behavior = {\n helpAnchor: 'join-pseudo',\n hasPreviousButton: $scope.licenseFileUrl && true,\n hasNextButton: true,\n focus: 'pseudo'\n };\n }\n else if (formName === \"saltForm\") {\n behavior = {\n helpAnchor: 'join-salt',\n hasPreviousButton: $scope.accountType === 'member',\n hasNextButton: true,\n focus: 'salt'\n };\n }\n else if (formName === \"passwordForm\") {\n behavior = {\n helpAnchor: 'join-password',\n hasPreviousButton: true,\n hasNextButton: true,\n focus: 'password'\n };\n }\n else if (formName === \"confirmForm\") {\n behavior = {\n hasPreviousButton: true,\n hasNextButton: false,\n hasSendButton: true,\n helpAnchor: 'join-pubkey'\n };\n }\n else {\n behavior = {\n hasPreviousButton: false,\n hasNextButton: true\n };\n }\n\n // removeIf(device)\n // Focus input text (only if NOT device, to avoid keyboard opening)\n // FIXME: this cause issue #464\n /*if (behavior.focus) {\n $timeout(function(){\n $focus(behavior.focus);\n }, 100);\n }*/\n // endRemoveIf(device)\n\n return behavior;\n };\n\n\n $scope.doNext = function() {\n var formName = $scope.getCurrentFormName();\n if (formName && $scope[formName]){\n $scope[formName].$submitted=true;\n if(!$scope[formName].$valid) {\n return;\n }\n if (formName === \"pseudoForm\" && $scope.uiAlreadyUsed) {\n return;\n }\n if (formName === \"passwordForm\") {\n $scope.showAccountPubkey();\n }\n }\n\n $scope.slideNext();\n\n $scope.slideBehavior = $scope.computeSlideBehavior();\n };\n\n $scope.doPrev = function() {\n $scope.slidePrev();\n $scope.slideBehavior = $scope.computeSlideBehavior();\n };\n\n $scope.doNewAccount = function(confirm) {\n\n if (!confirm) {\n\n var messageKey = ($scope.accountType === 'member') ? 'ACCOUNT.NEW.CONFIRMATION_MEMBER_ACCOUNT' :\n 'ACCOUNT.NEW.CONFIRMATION_WALLET_ACCOUNT';\n\n return UIUtils.alert.confirm(messageKey, undefined,\n {\n cssClass: 'warning',\n okText: $scope.accountType == 'member' ? 'COMMON.BTN_SEND' : 'COMMON.BTN_CONTINUE',\n okType: 'button-assertive'\n })\n .then(function(confirm) {\n if (confirm) {\n $scope.doNewAccount(true);\n }\n });\n }\n\n var onErrorLogout = function(message) {\n return function(err) {\n if (parameter.uid) {\n wallet.unauth()\n .then(function(){\n UIUtils.onError(message)(err);\n });\n }\n else {\n wallet.logout()\n .then(function(){\n UIUtils.onError(message)(err);\n });\n }\n throw new Error('CANCELLED');\n };\n };\n\n UIUtils.loading.show();\n\n return wallet.login({\n auth: true,\n isNew: true,\n method: 'SCRYPT_DEFAULT',\n expectedPubkey: $scope.formData.pubkey,\n showMethods: false\n })\n .then(function() {\n if ($scope.accountType === \"member\") {\n $scope.closeModal();\n csSettings.data.wallet = csSettings.data.wallet || {};\n csSettings.data.wallet.alertIfUnusedWallet = false; // do not alert if empty\n\n var needSelf = angular.isUndefined(parameters.uid) || angular.isUndefined(parameters.blockUid) ||\n (parameters.uid.toUpperCase() !== $scope.formData.pseudo.toUpperCase());\n if (!needSelf) {\n wallet.setSelf(parameters.uid, parameters.blockUid);\n }\n\n // Self promise (if need)\n var selfPromise = needSelf ?\n wallet.self($scope.formData.pseudo, false/*do NOT load membership here*/)\n .catch(onErrorLogout('ERROR.SEND_IDENTITY_FAILED')) :\n $q.when();\n\n return selfPromise\n .then(function() {\n // Send membership IN\n return wallet.membership.inside()\n .catch(function(err) {\n if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) return;\n onErrorLogout('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);\n });\n })\n .then(function() {\n\n $scope.closeModal();\n\n // Redirect to wallet\n if (wallet.isDefault()) {\n return $state.go('app.view_wallet');\n } else {\n return $state.go('app.view_wallet_by_id', {id: wallet.id});\n }\n })\n .then(function() {\n // Wait 2s (for wallet load)\n // then ask to download revocation file\n return $timeout(function() {\n // Hide the loading indicator, if wallet already loaded\n if (wallet.isDataLoaded({requirements: true})) {\n UIUtils.loading.hide();\n }\n return $scope.downloadRevocationRegistration();\n },\n 2000);\n });\n }\n else{\n $scope.closeModal();\n\n // Redirect to wallet\n if (wallet.isDefault()) {\n $state.go('app.view_wallet');\n }\n else {\n $state.go('app.view_wallet_by_id', {id: wallet.id});\n }\n\n }\n })\n .catch(function(err) {\n UIUtils.loading.hide();\n if (err === 'CANCELLED') return;\n if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) {\n console.error(\"[wallet] Node: already membership\", err);\n return; // OK\n }\n else {\n UIUtils.alert.error('ERROR.UNKNOWN_ERROR');\n }\n });\n };\n\n $scope.downloadRevocationRegistration = function() {\n return UIUtils.alert.confirm('DOWNLOAD.POPUP_REVOKE_MESSAGE', 'DOWNLOAD.POPUP_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_DOWNLOAD',\n okType: 'button-assertive',\n cancelText: 'COMMON.BTN_LATER'\n })\n .then(function(confirm) {\n if (!confirm) return;\n return wallet.downloadRevocation();\n });\n };\n\n $scope.showHelpModal = function(helpAnchor) {\n Modals.showHelp({anchor: helpAnchor});\n };\n\n $scope.startListenLicenseBottom = function(){\n var iframeEl = angular.element(document.querySelector('.modal #iframe-license'));\n iframeEl = iframeEl && iframeEl.length ? iframeEl[0] : undefined;\n if (!iframeEl || !iframeEl.contentWindow) {\n console.debug('[join] Waiting license frame to be load...');\n return $timeout($scope.startListenLicenseBottom, 1000);\n }\n\n $scope.licenseBottomInterval = $interval(function(){\n var yPos = iframeEl.contentWindow.document.body.scrollTop;\n var scrollHeight = iframeEl.contentWindow.document.body.scrollHeight;\n var clientHeight = iframeEl.contentWindow.document.body.clientHeight;\n var isBottom = (scrollHeight - clientHeight === yPos);\n if(isBottom){\n $scope.isLicenseRead = true;\n $scope.stopListenLicenseBottom();\n }\n }, 1000);\n };\n\n $scope.stopListenLicenseBottom = function() {\n if ($scope.licenseBottomInterval) {\n $interval.cancel($scope.licenseBottomInterval);\n delete $scope.licenseBottomInterval;\n }\n };\n $scope.$on('modal.hidden', $scope.stopListenLicenseBottom);\n\n $scope.checkUid = function(){\n if (!$scope.formData.pseudo || $scope.formData.pseudo.length < 3) {\n $scope.formData.computing=false;\n delete $scope.uiAlreadyUsed;\n return;\n }\n\n var uid = $scope.formData.pseudo.toUpperCase();\n $scope.formData.computing=true;\n\n // Same has given uid + self block: skip control\n if (parameters.uid && uid === parameters.uid.toUpperCase()) {\n $scope.formData.computing=false;\n $scope.uiAlreadyUsed = false;\n return;\n }\n else {\n // search on uid\n BMA.wot.lookup({ search: uid })\n .then(function(res) {\n $scope.uiAlreadyUsed = (res.results || []).some(function(pub){\n return (pub.uids || []).some(function(idty) {\n return (idty.uid.toUpperCase() === uid); // same Uid\n });\n });\n $scope.formData.computing=false;\n })\n .catch(function(err){\n console.error(err);\n $scope.formData.computing=false;\n $scope.uiAlreadyUsed = false;\n });\n }\n };\n $scope.$watch('formData.pseudo', $scope.checkUid, true);\n\n $scope.checkAccountAvailable = function() {\n if (parameters.pubkey) {\n $scope.accountAvailable = true;\n return;\n }\n\n delete $scope.accountAvailable;\n // Search for tx source, from pubkey\n return BMA.tx.sources({ pubkey: $scope.formData.pubkey })\n .then(function(res) {\n $scope.accountAvailable = !res || !res.sources.length;\n })\n .catch(function(err) {\n console.error(err);\n $scope.accountAvailable = false;\n });\n };\n\n $scope.identifierRecovery = function() {\n // Go back\n $scope.slides.slider.unlockSwipes();\n for (var i = 0; i < 2; i++) {\n $scope.slides.slider.slidePrev();\n }\n $scope.slides.slider.lockSwipes();\n // Recompute behavior\n $scope.slideBehavior = $scope.computeSlideBehavior();\n };\n\n // TODO: remove auto add account when done\n /*$timeout(function() {\n //$scope.selectCurrency('g1');\n //$scope.selectAccountType('member');\n $scope.formData.username=\"azertypoi\";\n $scope.formData.confirmUsername=$scope.formData.username;\n $scope.formData.password=\"azertypoi\";\n $scope.formData.confirmPassword=$scope.formData.password;\n $scope.formData.pseudo=\"azertypoi\";\n //$scope.doNext();\n //$scope.doNext();\n }, 400);*/\n}\n\n","\nLoginController.$inject = ['$scope', '$timeout', '$controller', 'csWallet'];\nLoginModalController.$inject = ['$scope', '$timeout', '$q', '$ionicPopover', '$window', 'CryptoUtils', 'csCrypto', 'ionicReady', 'UIUtils', 'BMA', 'Modals', 'csSettings', 'Device', 'parameters'];\nAuthController.$inject = ['$scope', '$controller'];\nangular.module('cesium.login.controllers', ['cesium.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n .state('app.login', {\n url: \"/login\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/home/home.html\",\n controller: 'LoginCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('LoginCtrl', LoginController)\n\n .controller('LoginModalCtrl', LoginModalController)\n\n .controller('AuthCtrl', AuthController)\n\n;\n\n\nfunction LoginController($scope, $timeout, $controller, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('HomeCtrl', {$scope: $scope}));\n\n $scope.showLoginModal = function() {\n if ($scope.loading) return $timeout($scope.showLoginModal, 500); // recursive call\n\n if (!csWallet.isLogin() && !$scope.error) {\n return $timeout(csWallet.login, 300);\n }\n };\n $scope.$on('$ionicView.enter', $scope.showLoginModal);\n\n}\n\nfunction LoginModalController($scope, $timeout, $q, $ionicPopover, $window, CryptoUtils, csCrypto, ionicReady,\n UIUtils, BMA, Modals, csSettings, Device, parameters) {\n 'ngInject';\n\n parameters = parameters || {};\n\n $scope.computing = false;\n $scope.pubkey = null;\n $scope.formData = {};\n $scope.showPubkey = false;\n $scope.showComputePubkeyButton = false;\n $scope.autoComputePubkey = false;\n $scope.pubkeyPattern = '^(:?{0}|{1})$'.format(BMA.constants.regexp.PUBKEY, BMA.constants.regexp.PUBKEY_WITH_CHECKSUM);\n\n $scope.isAuth = parameters.auth;\n $scope.okText = parameters.okText;\n $scope.title = parameters.title || ($scope.isAuth ? 'AUTH.TITLE' : 'LOGIN.TITLE');\n $scope.showMethods = angular.isDefined(parameters.showMethods) ? parameters.showMethods : true;\n $scope.showNewAccountLink = angular.isDefined(parameters.showNewAccountLink) ? parameters.showNewAccountLink : true;\n $scope.expectedPubkey = parameters.expectedPubkey;\n $scope.expectedUid = parameters.uid;\n\n $scope.scryptParamsValues = _.keys(CryptoUtils.constants.SCRYPT_PARAMS)\n .reduce(function(res, key) {\n return res.concat({id: key, label: 'LOGIN.SCRYPT.' + key, params: CryptoUtils.constants.SCRYPT_PARAMS[key]});\n }, [{id: 'USER', label: 'LOGIN.SCRYPT.USER', params: {}}]);\n\n // modal init\n $scope.init = function() {\n\n ionicReady().then(function(){\n // Should auto-compute pubkey ?\n $scope.autoComputePubkey = ionic.Platform.grade.toLowerCase()==='a' &&\n !UIUtils.screen.isSmall();\n });\n\n // Init remember me\n $scope.formData.rememberMe = csSettings.data.rememberMe;\n\n // Init keep auth, from idle time\n $scope.formData.keepAuthIdle = csSettings.data.keepAuthIdle;\n $scope.formData.keepAuth = ($scope.formData.keepAuthIdle == csSettings.constants.KEEP_AUTH_IDLE_SESSION);\n\n // Init method\n var method = parameters.method || csSettings.data.login && csSettings.data.login.method || 'SCRYPT_DEFAULT';\n var params = csSettings.data.login && csSettings.data.login.params;\n // used default method, when PUBKEY + auth, or SCAN, or if ask for 'default'\n if (($scope.isAuth && method === 'PUBKEY') || (method === 'SCAN') || (method === 'default')) {\n method = 'SCRYPT_DEFAULT';\n }\n $scope.changeMethod(method, params);\n };\n\n // modal enter\n $scope.enter = function() {\n UIUtils.loading.hide();\n // Ink effect\n UIUtils.ink({selector: '.modal-login .ink'});\n };\n $scope.$on('modal.shown', $scope.enter);\n\n // modal leave\n $scope.leave = function() {\n $scope.formData = {};\n $scope.computing = false;\n $scope.pubkey = null;\n $scope.methods = [];\n };\n $scope.$on('modal.hide', $scope.leave);\n\n // Login form submit\n $scope.doLogin = function(skipForm) {\n var method = $scope.formData.method;\n\n if(!$scope.form.$valid && method !== 'SCAN') return;\n\n var keepAuthIdle = $scope.formData.keepAuthIdle;\n var promise;\n\n // Scrypt\n if (method === 'SCRYPT_DEFAULT' || method === 'SCRYPT_ADVANCED') {\n if (!$scope.formData.username || !$scope.formData.password) return;\n var scryptPrams = $scope.formData.scrypt && $scope.formData.scrypt.params;\n UIUtils.loading.show();\n promise = CryptoUtils.scryptKeypair($scope.formData.username, $scope.formData.password, scryptPrams)\n .then(function(keypair) {\n if (!keypair) return UIUtils.loading.hide(10);\n var pubkey = CryptoUtils.util.encode_base58(keypair.signPk);\n // Check pubkey\n if (parameters.expectedPubkey && parameters.expectedPubkey != pubkey) {\n $scope.pubkey = pubkey;\n $scope.showPubkey = true;\n $scope.pubkeyError = true;\n return UIUtils.loading.hide(10);\n }\n\n $scope.pubkeyError = false;\n\n return {\n pubkey: pubkey,\n keypair: keypair,\n params: ($scope.formData.scrypt && $scope.formData.scrypt.id != 'SCRYPT_DEFAULT') ? scryptPrams : undefined\n };\n })\n .catch(UIUtils.onError('ERROR.CRYPTO_UNKNOWN_ERROR'));\n }\n\n // File\n else if (method === 'FILE') {\n if (!$scope.formData.file || !$scope.formData.file.valid || !$scope.formData.file.pubkey) return;\n\n // If checkbox keep auth checked: set idle time to session\n keepAuthIdle = ($scope.formData.keepAuth && csSettings.constants.KEEP_AUTH_IDLE_SESSION) || keepAuthIdle;\n\n promise =\n UIUtils.loading.show()\n .then(function() {\n return $scope.readKeyFile($scope.formData.file, {\n withSecret: ($scope.isAuth || $scope.formData.keepAuth)\n });\n })\n .then(function(keypair) {\n if (!keypair) return UIUtils.loading.hide(10);\n var pubkey = CryptoUtils.util.encode_base58(keypair.signPk);\n\n // Check pubkey\n if (parameters.expectedPubkey && parameters.expectedPubkey != pubkey) {\n $scope.formData.file.valid = false;\n return UIUtils.loading.hide(10);\n }\n\n $scope.pubkeyError = false;\n\n return {\n pubkey: pubkey,\n keypair: keypair\n };\n })\n .catch(UIUtils.onError('ERROR.AUTH_FILE_ERROR'));\n }\n\n // Pubkey\n else if (method === 'PUBKEY') {\n var pubkey = $scope.formData.pubkey && $scope.formData.pubkey.trim();\n var uid = $scope.formData.uid && $scope.formData.uid.trim() || undefined;\n if (!pubkey) return;\n var matches = BMA.regexp.PUBKEY.exec(pubkey);\n // valid pubkey: use it\n if (matches) {\n promise = UIUtils.loading.show()\n .then(function() {\n return {\n pubkey: pubkey,\n uid : uid\n };\n });\n }\n\n // Check checksum\n else {\n\n matches = BMA.regexp.PUBKEY_WITH_CHECKSUM.exec(pubkey);\n if (matches) {\n\n pubkey = matches[1];\n var checksum = matches[2];\n var expectedChecksum = csCrypto.util.pkChecksum(pubkey);\n if (checksum != expectedChecksum) {\n $scope.form.pubkey.$error = {checksum: true};\n }\n else {\n promise = UIUtils.loading.show()\n .then(function() {\n return {\n pubkey: pubkey,\n uid : uid\n };\n });\n }\n }\n // Not a pubkey: launch search on\n else {\n return $scope.showWotLookupModal(pubkey);\n }\n }\n }\n\n // Scan QR code\n else if (method === 'SCAN') {\n var valid = $scope.formData.pubkey && (!$scope.isAuth || !!$scope.formData.keypair);\n if (!valid) return;\n\n promise = UIUtils.loading.show()\n .then(function() {\n return {\n pubkey: $scope.formData.pubkey,\n keypair: $scope.formData.keypair\n };\n });\n }\n\n if (!promise) {\n console.warn('[login] unknown method: ', method);\n return;\n }\n\n return promise.then(function(res) {\n if (!res) return;\n\n // Update settings (if need)\n var rememberMeChanged = !angular.equals(csSettings.data.rememberMe, $scope.formData.rememberMe);\n var keepAuthIdleChanged = !angular.equals(csSettings.data.keepAuthIdle, keepAuthIdle);\n var methodChanged = !angular.equals(csSettings.data.login && csSettings.data.login.method, method);\n var paramsChanged = !angular.equals(csSettings.data.login && csSettings.data.login.params, res.params);\n if (rememberMeChanged || keepAuthIdleChanged || methodChanged || paramsChanged) {\n csSettings.data.rememberMe = $scope.formData.rememberMe;\n csSettings.data.keepAuthIdle = keepAuthIdle;\n csSettings.data.useLocalStorage = csSettings.data.rememberMe ? true : csSettings.data.useLocalStorage;\n csSettings.data.login = csSettings.data.login || {};\n csSettings.data.login.method = method;\n csSettings.data.login.params = res.params;\n $timeout(csSettings.store, 500);\n }\n\n if (parameters.success) {\n parameters.success($scope.formData);\n }\n\n // hide loading\n if (parameters.silent) {\n UIUtils.loading.hide();\n }\n\n // Return result then close\n return $scope.closeModal(res);\n });\n };\n\n $scope.onScryptFormChanged = function() {\n if ($scope.computing) return; // avoid multiple call\n $scope.pubkey = null;\n $scope.pubkeyError = false;\n $scope.showPubkey = !!$scope.formData.username && !!$scope.formData.password;\n if ($scope.autoComputePubkey && $scope.showPubkey) {\n $scope.computePubkey();\n $scope.showComputePubkeyButton = false;\n }\n else {\n $scope.showComputePubkeyButton = !$scope.autoComputePubkey && $scope.showPubkey;\n }\n };\n $scope.$watch('formData.username + formData.password', $scope.onScryptFormChanged, true);\n\n $scope.computePubkey = function() {\n $scope.showComputePubkeyButton = false;\n $scope.computing = true;\n $scope.pubkey = null;\n return $timeout(function() {\n var salt = $scope.formData.username;\n var pwd = $scope.formData.password;\n var scryptPrams = $scope.formData.scrypt && $scope.formData.scrypt.params;\n return CryptoUtils.scryptSignPk(salt, pwd, scryptPrams)\n .then(function (signPk) {\n\n // If model has changed before the response, then retry\n if (salt !== $scope.formData.username || pwd !== $scope.formData.password) {\n return $scope.computePubkey();\n }\n\n $scope.pubkey = CryptoUtils.util.encode_base58(signPk);\n if ($scope.expectedPubkey && $scope.expectedPubkey != $scope.pubkey) {\n $scope.pubkeyError = true;\n }\n\n $scope.computing = false;\n }\n )\n .catch(function (err) {\n UIUtils.onError('ERROR.CRYPTO_UNKNOWN_ERROR')(err);\n $scope.computing = false;\n $scope.autoComputePubkey = false; // Avoid a infinite loop (computePubkey -> onScryptFormChanged -> computePubkey)\n $scope.onScryptFormChanged();\n });\n }, 100);\n };\n\n $scope.showJoinModal = function() {\n $scope.closeModal();\n $timeout(function() {\n Modals.showJoin();\n }, 300);\n };\n\n $scope.showAccountSecurityModal = function() {\n $scope.closeModal();\n $timeout(function() {\n Modals.showAccountSecurity();\n }, 300);\n };\n\n $scope.showHelpModal = function(parameters) {\n return Modals.showHelp(parameters);\n };\n\n $scope.doScan = function() {\n if ($scope.computing) return;\n\n $scope.computing = true;\n $scope.formData.pubkey = null;\n $scope.formData.keypair = null;\n\n // Run scan cordova plugin, on device\n return Device.barcode.scan()\n .then(function(data) {\n if (!data) return;\n\n // Skip simple parsing, if auth if need\n if ($scope.isAuth) return $q.when(data);\n\n // Try to parse as an URI\n return BMA.uri.parse(data)\n .then(function (res) {\n if (!res || !res.pubkey) throw {message: 'ERROR.SCAN_UNKNOWN_FORMAT'};\n // If simple pubkey\n return res;\n })\n .catch(function(err) {\n console.debug('[login] Error while parsing as URI: ' + (err && err.message || err));\n return data;\n });\n })\n .then(function(data) {\n if (!data) return;\n // Parse success: continue\n if (data && data.pubkey) return data;\n\n // Try to read as WIF format\n return csCrypto.keyfile.parseData(data, {silent: true})\n .then(function(keypair) {\n if (!keypair || !keypair.signPk || !keypair.signSk) throw {message: 'ERROR.SCAN_UNKNOWN_FORMAT'}; // rethrow an error\n\n var pubkey = CryptoUtils.base58.encode(keypair.signPk);\n\n // Login using keypair\n return {\n pubkey: pubkey,\n keypair: keypair\n };\n })\n // Unknown format (nor URI, nor WIF/EWIF)\n .catch(UIUtils.onError('ERROR.SCAN_UNKNOWN_FORMAT'));\n })\n .then(function(res) {\n if (!res || !res.pubkey) return; // no data\n\n $scope.pubkeyError = $scope.expectedPubkey && $scope.expectedPubkey != res.pubkey;\n $scope.formData.pubkey = res.pubkey;\n $scope.formData.keypair = res.keypair;\n })\n .then(function() {\n $scope.computing = false;\n UIUtils.loading.hide(10);\n })\n .catch(function(err) {\n $scope.computing = false;\n UIUtils.onError('ERROR.SCAN_FAILED')(err);\n });\n };\n\n $scope.changeMethod = function(method, params){\n $scope.hideMethodsPopover();\n\n if (!method || method == $scope.formData.method) return; // same method\n\n console.debug(\"[login] method is: \" + method);\n $scope.formData.method = method;\n $scope.formData.uid = null;\n\n if ($scope.form) {\n // hide form's fields errors on the form\n delete $scope.form.$submitted;\n }\n\n // Scrypt (advanced or not)\n if (method == 'SCRYPT_DEFAULT' || method == 'SCRYPT_ADVANCED') {\n $scope.pubkey = null;\n\n\n // Search scrypt object\n var scrypt;\n if (params) {\n scrypt = _.find($scope.scryptParamsValues, function(item){\n return item.params && angular.equals(item.params, params);\n });\n if (!scrypt) {\n scrypt = _.findWhere($scope.scryptParamsValues, {id: 'USER'}) || {};\n scrypt.params = params;\n }\n }\n else {\n scrypt = _.findWhere($scope.scryptParamsValues, {id: 'DEFAULT'});\n }\n $scope.changeScrypt(scrypt);\n\n $scope.autoComputePubkey = $scope.autoComputePubkey && (method == 'SCRYPT_DEFAULT');\n }\n else if (method == 'SCAN') {\n return $scope.doScan();\n }\n else {\n $scope.formData.username = null;\n $scope.formData.password = null;\n $scope.formData.pubkey = null;\n $scope.pubkey = null;\n $scope.computing = false;\n }\n };\n\n $scope.changeScrypt = function(scrypt) {\n // Protect params against changes\n $scope.formData.scrypt = angular.copy(scrypt||{});\n $scope.onScryptFormChanged();\n };\n\n $scope.readKeyFile = function(file, options) {\n options = options || {};\n\n options.password = options.password || $scope.formData.file.password || function() {\n $scope.formData.file.password = undefined;\n return Modals.showPassword({\n title: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE',\n subTitle: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP',\n error: options.error,\n scope: $scope\n })\n .then(function (password) {\n // Remember password (for validation)\n $scope.formData.file.password = password;\n // Timeout is need to force popup to be hide\n return $timeout(function() {\n return password;\n }, 150);\n });\n };\n\n return csCrypto.keyfile.read($scope.formData.file, options)\n .catch(function(err) {\n $scope.formData.file.password = undefined;\n if (err === 'CANCELLED') {\n UIUtils.loading.hide(10);\n }\n if (err && err.ucode == csCrypto.errorCodes.BAD_PASSWORD) {\n // Recursive call\n return $scope.readKeyFile($scope.formData.file, {withSecret: options.withSecret, error: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD'});\n }\n throw err;\n });\n };\n\n $scope.onFileChanged = function(file) {\n if (!file || !file.fileData) {\n $scope.validatingFile = false;\n return; // Skip\n }\n $scope.formData.file = {\n name: file.fileData.name,\n size: file.fileData.size,\n content: file.fileContent\n };\n $scope.validatingFile = true;\n $timeout(function() {\n console.debug(\"[login] key file changed: \", $scope.formData.file);\n $scope.validatingFile = true;\n\n return $scope.readKeyFile($scope.formData.file, {withSecret: false, password: $scope.formData.file.password})\n .then(function(keypair) {\n if (!keypair || !keypair.signPk) {\n $scope.formData.file.valid = false;\n $scope.formData.file.pubkey = undefined;\n }\n else {\n $scope.formData.file.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);\n $scope.formData.file.valid = !$scope.expectedPubkey || $scope.expectedPubkey == $scope.formData.file.pubkey;\n $scope.validatingFile = false;\n }\n\n })\n .catch(function(err) {\n if (err && err === 'CANCELLED') {\n $scope.removeKeyFile();\n return;\n }\n $scope.validatingFile = false;\n $scope.formData.file.valid = false;\n $scope.formData.file.pubkey = undefined;\n UIUtils.onError('ERROR.AUTH_FILE_ERROR')(err);\n });\n });\n };\n\n $scope.removeKeyFile = function() {\n $scope.formData.file = undefined;\n };\n\n /* -- modals -- */\n\n $scope.showWotLookupModal = function(searchText) {\n return Modals.showWotLookup({q: searchText})\n .then(function(res){\n if (res && res.pubkey) {\n $scope.formData.pubkey = res.pubkey;\n $scope.formData.uid = res.uid || undefined;\n return $timeout($scope.doLogin, 300);\n }\n });\n };\n\n /* -- popover -- */\n $scope.showMethodsPopover = function(event) {\n if (event.defaultPrevented) return;\n UIUtils.popover.show(event, {\n templateUrl :'templates/login/popover_methods.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.methodsPopover = popover;\n UIUtils.ink({selector: '.popover-login-methods .item'});\n }\n });\n };\n\n $scope.hideMethodsPopover = function() {\n if ($scope.methodsPopover) {\n $scope.methodsPopover.hide();\n $scope.methodsPopover = null;\n }\n };\n\n // Default action\n $scope.init();\n\n\n // TODO : for DEV only\n /*$timeout(function() {\n $scope.formData = {\n username: 'benoit.lavenier@e-is.pro',\n password: ''\n };\n //$scope.form = {$valid:true};\n }, 900);*/\n}\n\n\nfunction AuthController($scope, $controller){\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('LoginModalCtrl', {$scope: $scope, parameters: {auth: true}}));\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n}\n","\nHelpController.$inject = ['$scope', '$state', '$timeout', '$anchorScroll', 'csSettings'];\nHelpModalController.$inject = ['$scope', '$timeout', '$anchorScroll', 'csSettings', 'parameters'];\nHelpTipController.$inject = ['$scope', '$state', '$window', '$ionicSideMenuDelegate', '$timeout', '$q', '$anchorScroll', 'UIUtils', 'csConfig', 'csSettings', 'csCurrency', 'csHelpConstants', 'Device', 'csWallet'];\nHelpTourController.$inject = ['$scope'];\nangular.module('cesium.help.controllers', ['cesium.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n\n .state('app.help_tour', {\n url: \"/tour\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/home/home.html\",\n controller: 'HelpTourCtrl'\n }\n }\n })\n\n .state('app.help', {\n url: \"/help?anchor\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/help/view_help.html\",\n controller: 'HelpCtrl'\n }\n }\n })\n\n .state('app.help_anchor', {\n url: \"/help/:anchor\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/help/view_help.html\",\n controller: 'HelpCtrl'\n }\n }\n })\n\n ;\n\n\n }])\n\n .controller('HelpCtrl', HelpController)\n\n .controller('HelpModalCtrl', HelpModalController)\n\n .controller('HelpTipCtrl', HelpTipController)\n\n .controller('HelpTourCtrl', HelpTourController)\n\n\n;\n\n\nfunction HelpController($scope, $state, $timeout, $anchorScroll, csSettings) {\n 'ngInject';\n\n $scope.$on('$ionicView.enter', function(e) {\n $scope.locale = csSettings.data.locale.id;\n if ($state.stateParams && $state.stateParams.anchor) {\n $scope.anchor = $state.stateParams.anchor;\n $timeout(function () {\n $anchorScroll($state.stateParams.anchor);\n }, 100);\n }\n });\n}\n\nfunction HelpModalController($scope, $timeout, $anchorScroll, csSettings, parameters) {\n 'ngInject';\n\n $scope.itemsClass = {};\n $scope.locale = csSettings.data.locale.id;\n\n parameters = parameters || {};\n if (parameters && typeof parameters == \"string\") {\n parameters = {anchor: parameters};\n }\n\n if (parameters.anchor) {\n\n $timeout(function() {\n $anchorScroll(parameters.anchor);\n }, 100);\n\n // Change CSS classes\n $scope.itemsClass = {};\n $scope.itemsClass[parameters.anchor] = 'selected';\n $scope.listClass = 'selection';\n }\n\n}\n\n\n/* ----------------------------\n* Help Tip\n* ---------------------------- */\nfunction HelpTipController($scope, $state, $window, $ionicSideMenuDelegate, $timeout, $q, $anchorScroll,\n UIUtils, csConfig, csSettings, csCurrency, csHelpConstants, Device, csWallet) {\n\n $scope.tour = false; // Is a tour or a helptip ?\n $scope.continue = true;\n\n $scope.executeStep = function(partName, steps, index) {\n index = angular.isDefined(index) ? index : 0;\n\n if (index >= steps.length) {\n return $q.when(true); // end\n }\n\n var step = steps[index];\n if (typeof step !== 'function') {\n throw new Error('[helptip] Invalid step at index {0} of \\'{1}\\' tour: step must be a function'.format(index, partName));\n }\n var promise = step();\n if (typeof promise === 'boolean') {\n promise = $q.when(promise);\n }\n return promise\n .then(function(next) {\n if (angular.isUndefined(next)) {\n $scope.continue = false;\n return index; // keep same index (no button press: popover just closed)\n }\n if (!next || index === steps.length - 1) {\n return next ? -1 : index+1; // last step OK, so mark has finished\n }\n return $scope.executeStep(partName, steps, index+1);\n })\n .catch(function(err) {\n if (err && err.message === 'transition prevented') {\n console.error('ERROR: in help tour [{0}], in step [{1}] -> use large if exists, to prevent [transition prevented] error'.format(partName, index));\n }\n else {\n console.error('ERROR: in help tour [{0}], in step [{1}] : {2}'.format(partName, index, err));\n }\n $scope.continue = false;\n return index;\n });\n };\n\n $scope.showHelpTip = function(id, options) {\n options = options || {};\n options.bindings = options.bindings || {};\n options.bindings.value =options.bindings.value || '';\n options.bindings.hasNext = angular.isDefined(options.bindings.hasNext) ? options.bindings.hasNext : true;\n options.timeout = options.timeout || (Device.enable ? 900 : 500);\n options.autoremove = true; // avoid memory leak\n options.bindings.tour = $scope.tour;\n options.backdropClickToClose = !$scope.tour;\n return UIUtils.popover.helptip(id, options);\n };\n\n $scope.showHelpModal = function(helpAnchor) {\n Modals.showHelp({anchor: helpAnchor});\n };\n\n $scope.startHelpTour = function() {\n $scope.tour = true;\n $scope.continue = true;\n\n // Wallet (if NOT login)\n return $scope.startWalletNoLoginTour(0, true)\n\n // Wallet (if login)\n .then(function(next){\n if (!next) return false;\n if (!csWallet.isLogin()) return true; // not login: continue\n return $scope.startWalletTour(0, true)\n .then(function(endIndex){\n if (!endIndex) return false;\n csSettings.data.helptip.wallet=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Wallet certifications\n .then(function(next){\n if (!next) return false;\n if (!csWallet.isLogin()) return true; // not login: continue\n return $scope.startWalletCertTour(0, true)\n .then(function(endIndex){\n if (!endIndex) return false;\n csSettings.data.helptip.walletCerts=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // My operations (if login)\n .then(function(next){\n if (!next) return false;\n if (!csWallet.isLogin()) return true; // not login: continue\n return $scope.startTxTour(0, true)\n .then(function(endIndex){\n if (!endIndex) return false;\n csSettings.data.helptip.tx=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // My wallets (if login)\n .then(function(next){\n if (!next) return false;\n if (!csWallet.isLogin()) return true; // not login: continue\n return $scope.startWalletsTour(0, true)\n .then(function(endIndex){\n if (!endIndex) return false;\n csSettings.data.helptip.wallets=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Header tour\n .then(function(next){\n if (!next) return false;\n return $scope.startHeaderTour(0, true);\n })\n\n // Settings tour\n .then(function(next){\n if (!next) return false;\n return $scope.startSettingsTour(0, true);\n })\n\n // Wot lookup tour\n .then(function(next){\n if (!next) return false;\n return $scope.startWotLookupTour(0, true)\n .then(function(endIndex){\n if (!endIndex || $scope.cancelled) return false;\n csSettings.data.helptip.wotLookup=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Wot identity\n .then(function(next){\n if (!next) return false;\n return $scope.startWotTour(0, true)\n .then(function(endIndex){\n if (!endIndex || $scope.cancelled) return false;\n csSettings.data.helptip.wot=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Identity certifications\n .then(function(next){\n if (!next) return false;\n return $scope.startWotCertTour(0, true)\n .then(function(endIndex){\n if (!endIndex) return false;\n csSettings.data.helptip.wotCerts=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Currency tour\n .then(function(next){\n if (!next) return false;\n\n return $scope.startCurrencyTour(0, true)\n .then(function(endIndex){\n if (!endIndex || $scope.cancelled) return false;\n csSettings.data.helptip.currency=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n // Network tour\n .then(function(next){\n if (!next) return false;\n return $scope.startNetworkTour(0, true)\n .then(function(endIndex){\n if (!endIndex || $scope.cancelled) return false;\n csSettings.data.helptip.network=endIndex;\n csSettings.store();\n return $scope.continue;\n });\n })\n\n\n // Finish tour\n .then(function(next){\n if (!next) return false;\n return $scope.finishTour();\n });\n };\n\n /**\n * Features tour on currency\n * @returns {*}\n */\n $scope.startCurrencyTour = function(startIndex, hasNext) {\n\n var showWotTabIfNeed = function() {\n if ($state.is('app.currency.tab_parameters')) {\n $state.go('app.currency.tab_wot');\n }\n };\n\n var contentParams;\n\n var steps = [\n\n function(){\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-currency', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_CURRENCY',\n icon: {\n position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'\n }\n }\n });\n },\n\n function () {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n return $state.go(UIUtils.screen.isSmall() ? 'app.currency' : 'app.currency_lg')\n .then(function () {\n return $scope.showHelpTip('helptip-currency-mass-member', {\n bindings: {\n content: 'HELP.TIP.CURRENCY_MASS',\n icon: {\n position: 'center'\n }\n }\n });\n });\n },\n\n function () {\n if (!csSettings.data.useRelative) return true; //skip but continue\n return $scope.showHelpTip('helptip-currency-mass-member-unit', {\n bindings: {\n content: 'HELP.TIP.CURRENCY_UNIT_RELATIVE',\n contentParams: contentParams,\n icon: {\n position: UIUtils.screen.isSmall() ? 'right' : 'center'\n }\n }\n });\n },\n\n // function () {\n // if (!csSettings.data.useRelative) return true; //skip but continue\n // $anchorScroll('helptip-currency-change-unit');\n // return $scope.showHelpTip('helptip-currency-change-unit', {\n // bindings: {\n // content: 'HELP.TIP.CURRENCY_CHANGE_UNIT',\n // contentParams: contentParams,\n // icon: {\n // position: UIUtils.screen.isSmall() ? 'right' : undefined\n // }\n // }\n // });\n // },\n //\n // function () {\n // if (csSettings.data.useRelative) return true; //skip but continue\n // $anchorScroll('helptip-currency-change-unit');\n // return $scope.showHelpTip('helptip-currency-change-unit', {\n // bindings: {\n // content: 'HELP.TIP.CURRENCY_CHANGE_UNIT_TO_RELATIVE',\n // contentParams: contentParams,\n // icon: {\n // position: UIUtils.screen.isSmall() ? 'right' : undefined\n // }\n // }\n // });\n // },\n\n function () {\n $anchorScroll('helptip-currency-rules-anchor');\n return $scope.showHelpTip('helptip-currency-rules', {\n bindings: {\n content: 'HELP.TIP.CURRENCY_RULES',\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n }\n }\n });\n },\n\n function () {\n showWotTabIfNeed();\n $anchorScroll('helptip-currency-newcomers-anchor');\n return $scope.showHelpTip('helptip-currency-newcomers', {\n bindings: {\n content: 'HELP.TIP.CURRENCY_WOT',\n icon: {\n position: 'center'\n },\n hasNext: hasNext\n },\n timeout: 1200, // need for Firefox\n retry: 2\n });\n }\n ];\n\n // Get currency parameters, with currentUD\n return csCurrency.get().then(function(currency) {\n contentParams = currency.parameters;\n // Launch steps\n return $scope.executeStep('currency', steps, startIndex);\n });\n };\n\n /**\n * Features tour on network\n * @returns {*}\n */\n $scope.startNetworkTour = function(startIndex, hasNext) {\n\n var showNetworkTabIfNeed = function() {\n if ($state.is('app.currency')) {\n // Select the second tabs\n $timeout(function () {\n var tabs = $window.document.querySelectorAll('ion-tabs .tabs a');\n if (tabs && tabs.length == 3) {\n angular.element(tabs[2]).triggerHandler('click');\n }\n }, 100);\n }\n };\n\n var contentParams;\n\n var steps = [\n\n function(){\n if (UIUtils.screen.isSmall()) return true; // skip but continue\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-network', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_NETWORK',\n icon: {\n position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'\n }\n }\n });\n },\n\n function () {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n return $state.go(UIUtils.screen.isSmall() ? 'app.currency.tab_network' : 'app.network')\n .then(function () {\n showNetworkTabIfNeed();\n return $scope.showHelpTip('helptip-network-peers', {\n bindings: {\n content: 'HELP.TIP.NETWORK_BLOCKCHAIN',\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n }\n },\n timeout: 1200 // need for Firefox\n });\n });\n },\n\n function() {\n showNetworkTabIfNeed();\n return $scope.showHelpTip('helptip-network-peer-0', {\n bindings: {\n content: 'HELP.TIP.NETWORK_PEERS',\n icon: {\n position: UIUtils.screen.isSmall() ? undefined : 'center'\n }\n },\n timeout: 1000,\n retry: 20\n });\n },\n\n\n function() {\n showNetworkTabIfNeed();\n return $scope.showHelpTip('helptip-network-peer-0-block', {\n bindings: {\n content: 'HELP.TIP.NETWORK_PEERS_BLOCK_NUMBER',\n icon: {\n position: UIUtils.screen.isSmall() ? undefined : 'center'\n }\n }\n });\n },\n\n function() {\n showNetworkTabIfNeed();\n var locale = csSettings.data.locale.id;\n return $scope.showHelpTip('helptip-network-peers', {\n bindings: {\n content: 'HELP.TIP.NETWORK_PEERS_PARTICIPATE',\n contentParams: {\n installDocUrl: (csConfig.helptip && csConfig.helptip.installDocUrl) ?\n (csConfig.helptip.installDocUrl[locale] ? csConfig.helptip.installDocUrl[locale] : csConfig.helptip.installDocUrl) :\n 'http://duniter.org'\n },\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n // Get currency parameters, with currentUD\n return csCurrency.parameters().then(function(parameters) {\n contentParams = parameters;\n // Launch steps\n return $scope.executeStep('network', steps, startIndex);\n });\n };\n\n /**\n * Features tour on WOT lookup\n * @returns {*}\n */\n $scope.startWotLookupTour = function(startIndex, hasNext) {\n\n var steps = [\n function() {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-wot', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_WOT',\n icon: {\n position: UIUtils.screen.isSmall() ? 'left' : 'bottom-left'\n }\n },\n onError: 'continue'\n });\n },\n\n function() {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n return $state.go(UIUtils.screen.isSmall() ? 'app.wot_lookup.tab_search' : 'app.wot_lookup_lg')\n .then(function(){\n return $scope.showHelpTip('helptip-wot-search-text', {\n bindings: {\n content: UIUtils.screen.isSmall() ? 'HELP.TIP.WOT_SEARCH_TEXT_XS' : 'HELP.TIP.WOT_SEARCH_TEXT',\n icon: {\n position: 'center'\n }\n }\n });\n });\n },\n\n function() {\n return $scope.showHelpTip('helptip-wot-search-result-0', {\n bindings: {\n content: 'HELP.TIP.WOT_SEARCH_RESULT',\n icon: {\n position: 'center'\n }\n },\n timeout: 700,\n retry: 15\n });\n },\n\n function() {\n var element = $window.document.getElementById('helptip-wot-search-result-0');\n if (!element) return true;\n $timeout(function() {\n angular.element(element).triggerHandler('click');\n });\n return $scope.showHelpTip('helptip-wot-view-certifications', {\n bindings: {\n content: 'HELP.TIP.WOT_VIEW_CERTIFICATIONS',\n hasNext: hasNext\n },\n timeout: 2500\n });\n }\n ];\n\n // Launch steps\n return $scope.executeStep('wotLookup', steps, startIndex);\n };\n\n /**\n * Features tour on WOT identity\n * @returns {*}\n */\n $scope.startWotTour = function(startIndex, hasNext) {\n var contentParams;\n\n var steps = [\n function() {\n return $scope.showHelpTip('helptip-wot-view-certifications', {\n bindings: {\n content: 'HELP.TIP.WOT_VIEW_CERTIFICATIONS_COUNT',\n contentParams: contentParams,\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n }\n }\n });\n },\n\n function() {\n return $scope.showHelpTip('helptip-wot-view-certifications-count', {\n bindings: {\n content: 'HELP.TIP.WOT_VIEW_CERTIFICATIONS_CLICK',\n icon: {\n position: 'center'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n // Get currency parameters, with currentUD\n return csCurrency.get().then(function(currency) {\n contentParams = currency.parameters;\n contentParams.currentUD = currency.currentUD;\n // Launch steps\n return $scope.executeStep('wot', steps, startIndex);\n });\n };\n\n /**\n * Features tour on wot certifications\n * @returns {*}\n */\n $scope.startWotCertTour = function(startIndex, hasNext) {\n var steps = [\n\n function() {\n // If on identity: click on certifications\n if ($state.is('app.wot_identity')) {\n var element = $window.document.getElementById('helptip-wot-view-certifications');\n if (!element) return true;\n $timeout(function() {\n angular.element(element).triggerHandler('click');\n });\n }\n return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'fab-certify': 'helptip-certs-certify', {\n bindings: {\n content: 'HELP.TIP.WOT_VIEW_CERTIFY',\n icon: {\n position: UIUtils.screen.isSmall() ? 'bottom-right' : 'center'\n }\n },\n timeout: UIUtils.screen.isSmall() ? 2000 : 1000,\n retry: 10\n });\n },\n\n function() {\n return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'fab-certify': 'helptip-certs-certify', {\n bindings: {\n content: 'HELP.TIP.CERTIFY_RULES',\n icon: {\n position: 'center',\n glyph: 'ion-alert-circled'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n return $scope.executeStep('certs', steps, startIndex);\n };\n\n /**\n * Features tour on wallet (if not login)\n * @returns {*}\n */\n $scope.startWalletNoLoginTour = function(startIndex, hasNext) {\n if (csWallet.isLogin()) return $q.when(true); // skip if login\n\n var steps = [\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-account', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_ACCOUNT',\n icon: {\n position: 'left'\n },\n hasNext: hasNext\n }\n });\n },\n\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-tx', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_TX',\n icon: {\n position: 'left'\n },\n hasNext: hasNext\n }\n });\n },\n\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-wallets', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_WALLETS',\n icon: {\n position: 'left'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n return $scope.executeStep('wallet-no-login', steps, startIndex);\n };\n\n /**\n * Features tour on wallet screens\n * @returns {*}\n */\n $scope.startWalletTour = function(startIndex, hasNext) {\n if (!csWallet.isLogin()) return $q.when(true); // skip if not login\n\n var hasCertificationsItem = csWallet.data.isMember||(csWallet.data.requirements && csWallet.data.requirements.pendingMembership);\n var contentParams;\n\n var steps = [\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-account', {\n bindings: {\n content: csWallet.data.isMember ? 'HELP.TIP.MENU_BTN_ACCOUNT_MEMBER' : 'HELP.TIP.MENU_BTN_ACCOUNT',\n icon: {\n position: 'left'\n }\n }\n });\n },\n\n function () {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n\n // Go to wallet\n return $state.go('app.view_wallet')\n .then(function () {\n return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'helptip-wallet-options-xs' : 'helptip-wallet-options', {\n bindings: {\n content: 'HELP.TIP.WALLET_OPTIONS',\n icon: {\n position: UIUtils.screen.isSmall() ? 'right' : 'center'\n }\n },\n timeout: UIUtils.screen.isSmall() ? 2000 : 1000,\n retry: 10\n });\n });\n },\n\n // Wallet pubkey\n function () {\n $anchorScroll('helptip-wallet-pubkey');\n return $scope.showHelpTip('helptip-wallet-pubkey', {\n bindings: {\n content: 'HELP.TIP.WALLET_PUBKEY',\n icon: {\n position: 'center'\n },\n hasNext: !hasCertificationsItem && hasNext\n },\n timeout: UIUtils.screen.isSmall() ? 2000 : 500,\n retry: 10\n });\n },\n\n function () {\n if (!hasCertificationsItem) return hasNext;\n $anchorScroll('helptip-wallet-certifications');\n return $scope.showHelpTip('helptip-wallet-certifications', {\n bindings: {\n content: UIUtils.screen.isSmall() ? 'HELP.TIP.WALLET_RECEIVED_CERTIFICATIONS': 'HELP.TIP.WALLET_CERTIFICATIONS',\n icon: {\n position: 'center'\n },\n hasNext: hasNext\n },\n timeout: 500,\n onError: 'continue' // if simple wallet: no certification item, so continue\n });\n }\n ];\n\n // Check that constants are well configured\n if (steps.length != csHelpConstants.wallet.stepCount) {\n console.error(\"[help] Invalid value of 'csHelpConstants.wallet.stepCount'. Please update to {0}\".format(steps.length));\n }\n\n // Get currency parameters, with currentUD\n return csCurrency.get()\n .then(function(currency) {\n contentParams = currency.parameters;\n contentParams.currentUD = currency.currentUD;\n // Launch steps\n return $scope.executeStep('wallet', steps, startIndex);\n });\n };\n\n /**\n * Features tour on wallet certifications\n * @returns {*}\n */\n $scope.startWalletCertTour = function(startIndex, hasNext) {\n if (!csWallet.isLogin()) return $q.when(true);\n\n var contentParams;\n var skipAll = false;\n\n var steps = [\n\n function() {\n // If on wallet : click on certifications\n if ($state.is('app.view_wallet')) {\n var element = $window.document.getElementById('helptip-wallet-certifications');\n if (!element) {\n skipAll = true;\n return true;\n }\n $timeout(function() {\n angular.element(element).triggerHandler('click');\n });\n }\n if (!UIUtils.screen.isSmall()) return true; // skip this helptip if not in tabs mode\n return $scope.showHelpTip('helptip-received-certs', {\n bindings: {\n content: 'HELP.TIP.WALLET_RECEIVED_CERTS'\n }\n });\n },\n\n function() {\n if (skipAll || !UIUtils.screen.isSmall()) return true;\n return $state.go('app.view_wallet') // go back to wallet (small device only)\n .then(function() {\n return $scope.showHelpTip('helptip-wallet-given-certifications', {\n bindings: {\n content: 'HELP.TIP.WALLET_GIVEN_CERTIFICATIONS',\n icon: {\n position: 'center'\n }\n },\n timeout: 500\n });\n });\n },\n\n function() {\n if (skipAll) return true;\n\n // Click on given cert link (small device only)\n if ($state.is('app.view_wallet')) {\n var element = $window.document.getElementById('helptip-wallet-given-certifications');\n if (!element) {\n skipAll = true;\n return true;\n }\n $timeout(function() {\n angular.element(element).triggerHandler('click');\n }, 500);\n }\n return $scope.showHelpTip(UIUtils.screen.isSmall() ? 'fab-select-certify': 'helptip-certs-select-certify', {\n bindings: {\n content: 'HELP.TIP.WALLET_CERTIFY',\n icon: {\n position: UIUtils.screen.isSmall() ? 'bottom-right' : 'center'\n }\n },\n timeout: UIUtils.screen.isSmall() ? 2000 : 500,\n retry: 10\n });\n },\n\n function() {\n if ($scope.tour || skipAll) return hasNext; // skip Rules if features tour (already display)\n return $scope.showHelpTip('helptip-certs-stock', {\n bindings: {\n content: 'HELP.TIP.CERTIFY_RULES',\n icon: {\n position: 'center',\n glyph: 'ion-alert-circled'\n },\n hasNext: hasNext\n }\n });\n }\n\n /* FIXME : how to select the left tab ?\n ,function() {\n return $scope.showHelpTip('helptip-certs-stock', {\n bindings: {\n content: 'HELP.TIP.WALLET_CERT_STOCK',\n contentParams: contentParams,\n icon: {\n position: 'center'\n },\n hasNext: hasNext\n }\n });\n }*/\n ];\n\n return csCurrency.parameters().then(function(parameters) {\n contentParams = parameters;\n return $scope.executeStep('certs', steps, startIndex);\n });\n };\n\n /**\n * Features tour on TX screen\n * @returns {*}\n */\n $scope.startTxTour = function(startIndex, hasNext) {\n if (!csWallet.isLogin()) return $q.when(true); // skip if not login\n\n var contentParams;\n\n var steps = [\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-tx', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_TX',\n icon: {\n position: 'left'\n }\n }\n });\n },\n\n function () {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n\n // Go to wallet\n return $state.go('app.view_wallet_tx')\n .then(function () {\n return $scope.showHelpTip('helptip-wallet-balance', {\n bindings: {\n content: csSettings.data.useRelative ? 'HELP.TIP.WALLET_BALANCE_RELATIVE' : 'HELP.TIP.WALLET_BALANCE',\n contentParams: contentParams,\n icon: {\n position: 'center'\n }\n },\n retry: 20 // 10 * 500 = 5s max\n });\n });\n },\n\n function () {\n return $scope.showHelpTip('helptip-wallet-balance', {\n bindings: {\n content: 'HELP.TIP.WALLET_BALANCE_CHANGE_UNIT',\n contentParams: contentParams,\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n }\n }\n });\n }\n ];\n\n // Get currency parameters, with currentUD\n return csCurrency.get()\n .then(function(currency) {\n contentParams = currency.parameters;\n contentParams.currentUD = currency.currentUD;\n // Launch steps\n return $scope.executeStep('tx', steps, startIndex);\n });\n };\n\n /**\n * Features tour on My wallets\n * @returns {*}\n */\n $scope.startWalletsTour = function(startIndex, hasNext) {\n\n var steps = [\n function () {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-wallets', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_WALLETS',\n icon: {\n position: 'left'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n return $scope.executeStep('my-wallets', steps, startIndex);\n };\n\n /**\n * header tour\n * @returns {*}\n */\n $scope.startHeaderTour = function(startIndex, hasNext) {\n if (UIUtils.screen.isSmall()) return $q.when(true);\n\n function _getProfilBtnElement() {\n var elements = $window.document.querySelectorAll('#helptip-header-bar-btn-profile');\n if (!elements || !elements.length) return null;\n return _.find(elements, function(el) {return el.offsetWidth > 0;});\n }\n\n var steps = [\n function () {\n\n if (UIUtils.screen.isSmall()) return true; // skip for small screen\n var element = _getProfilBtnElement();\n if (!element) return true;\n\n // If home; add offset because of locales button\n var iconStyle = $state.is('app.home') ? 'margin-right: 60px' : undefined;\n\n return $scope.showHelpTip(element, {\n bindings: {\n content: 'HELP.TIP.HEADER_BAR_BTN_PROFILE',\n icon: {\n position: 'right',\n style: iconStyle\n }\n }\n });\n },\n\n function () {\n // small screens\n if (UIUtils.screen.isSmall()) {\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-settings', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_SETTINGS',\n icon: {\n position: 'left'\n },\n hasNext: hasNext\n },\n timeout: 1000\n });\n }\n // wide screens\n else {\n var element = _getProfilBtnElement();\n if (!element) return true;\n $timeout(function() {\n angular.element(element).triggerHandler('click');\n });\n return $scope.showHelpTip('helptip-popover-profile-btn-settings', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_SETTINGS',\n icon: {\n position: 'center'\n },\n hasNext: hasNext\n },\n timeout: 1000\n })\n .then(function(res) {\n // close profile popover\n $scope.closeProfilePopover();\n return res;\n });\n }\n }\n ];\n\n return $scope.executeStep('header', steps, startIndex);\n };\n\n /**\n * Settings tour\n * @returns {*}\n */\n $scope.startSettingsTour = function(startIndex, hasNext) {\n var contentParams;\n var steps = [\n\n function () {\n if (!UIUtils.screen.isSmall()) return true;\n $ionicSideMenuDelegate.toggleLeft(true);\n return $scope.showHelpTip('helptip-menu-btn-settings', {\n bindings: {\n content: 'HELP.TIP.MENU_BTN_SETTINGS',\n icon: {\n position: 'left'\n }\n },\n timeout: 1000\n });\n },\n\n function () {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n\n // Go to settings\n return $state.go('app.settings')\n .then(function () {\n return $scope.showHelpTip('helptip-settings-btn-unit-relative', {\n bindings: {\n content: 'HELP.TIP.SETTINGS_CHANGE_UNIT',\n contentParams: contentParams,\n icon: UIUtils.screen.isSmall() ? {\n position: 'right',\n style: 'margin-right: 60px'\n } : {position: 'center'},\n hasNext: hasNext\n },\n timeout: 1000\n });\n });\n }\n ];\n\n return csCurrency.parameters()\n .then(function(parameters) {\n contentParams = parameters;\n return $scope.executeStep('settings', steps, startIndex);\n });\n };\n\n\n /**\n * Finish the features tour (last step)\n * @returns {*}\n */\n $scope.finishTour = function() {\n if ($ionicSideMenuDelegate.isOpen()) {\n $ionicSideMenuDelegate.toggleLeft(false);\n }\n\n // If login: redirect to wallet\n if (csWallet.isLogin()) {\n return $state.go('app.view_wallet')\n .then(function(){\n return $scope.showHelpTip('helptip-wallet-pubkey', {\n bindings: {\n content: 'HELP.TIP.END_LOGIN',\n hasNext: false\n },\n timeout: 1200\n });\n });\n }\n\n // If not login: redirect to home\n else {\n var contentParams;\n return $q.all([\n $scope.showHome(),\n\n csCurrency.parameters()\n .then(function(parameters) {\n contentParams = parameters;\n })\n ])\n .then(function(){\n return $scope.showHelpTip('helptip-home-logo', {\n bindings: {\n content: 'HELP.TIP.END_NOT_LOGIN',\n contentParams: contentParams,\n hasNext: false\n }\n });\n });\n }\n };\n}\n\n/* ----------------------------\n * Help tour (auto start from home page)\n * ---------------------------- */\nfunction HelpTourController($scope) {\n\n $scope.$on('$ionicView.enter', function(e, state) {\n $scope.startHelpTour();\n });\n\n}\n","\nWalletController.$inject = ['$scope', '$rootScope', '$q', '$ionicPopup', '$timeout', '$state', '$translate', '$ionicPopover', '$location', 'UIUtils', 'ModalUtils', 'Modals', 'csPopovers', 'BMA', 'csConfig', 'csSettings', 'csWallet', 'csHelp'];\nWalletTxController.$inject = ['$scope', '$ionicPopover', '$state', '$timeout', '$location', 'UIUtils', 'Modals', 'csPopovers', 'BMA', 'csHttp', 'csSettings', 'csCurrency', 'csWallet', 'csTx'];\nWalletTxErrorController.$inject = ['$scope', 'UIUtils', 'csSettings', 'csWallet'];\nWalletSecurityModalController.$inject = ['$scope', 'UIUtils', 'csWallet', '$translate', 'parameters'];angular.module('cesium.wallet.controllers', ['cesium.services', 'cesium.currency.controllers'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n $stateProvider\n\n\n .state('app.view_wallet', {\n url: \"/account?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet.html\",\n controller: 'WalletCtrl'\n }\n },\n data: {\n login: true,\n silentLocationChange: true\n }\n })\n\n .state('app.view_wallet_tx', {\n url: \"/history/account?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet_tx.html\",\n controller: 'WalletTxCtrl'\n }\n },\n data: {\n login: true,\n silentLocationChange: true\n }\n })\n\n .state('app.view_wallet_tx_errors', {\n url: \"/history/account/errors\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet_tx_error.html\",\n controller: 'WalletTxErrorCtrl'\n }\n },\n data: {\n login: true\n }\n })\n ;\n }])\n\n .controller('WalletCtrl', WalletController)\n\n .controller('WalletTxCtrl', WalletTxController)\n\n .controller('WalletTxErrorCtrl', WalletTxErrorController)\n\n .controller('WalletSecurityModalCtrl', WalletSecurityModalController)\n;\n\nfunction WalletController($scope, $rootScope, $q, $ionicPopup, $timeout, $state, $translate, $ionicPopover, $location,\n UIUtils, ModalUtils, Modals, csPopovers, BMA, csConfig, csSettings, csWallet, csHelp) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.settings = csSettings.data;\n $scope.qrcodeId = 'qrcode-wallet-' + $scope.$id;\n $scope.toggleQRCode = false;\n $scope.likeData = {\n likes: {},\n abuses: {}\n };\n\n var wallet;\n\n $scope.enter = function(e, state) {\n $scope.loading = $scope.loading || (state.stateParams && state.stateParams.refresh);\n $scope.enableSelectWallet = csWallet.children.count() > 0;\n if ($scope.loading) { // load once\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.isDefaultWallet = wallet.isDefault();\n $scope.walletId = wallet.id;\n\n $scope.cleanLocationHref(state);\n\n return $scope.load();\n }\n else {\n // update view (to refresh avatar + plugin data, such as profile, subscriptions...)\n UIUtils.loading.hide(10);\n $timeout($scope.updateView, 300);\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function() {\n if (!wallet) return;\n\n return wallet.login()\n .then(function(walletData) {\n $scope.formData = walletData;\n $scope.loading=false; // very important, to avoid TX to be display before wallet.currentUd is loaded\n $scope.updateView();\n $scope.addListeners();\n\n $scope.showQRCode();\n if (wallet.isDefault()) $scope.showHelpTip();\n\n UIUtils.loading.hide(10); // loading could have be open (e.g. new account)\n })\n .catch(function(err){\n if (err === 'CANCELLED') {\n $scope.showHome();\n return;\n }\n UIUtils.onError('ERROR.LOAD_WALLET_DATA_ERROR')(err);\n });\n };\n\n $scope.updateView = function() {\n $scope.motion.show({selector: '#wallet .item'});\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n };\n\n\n $scope.setRegisterForm = function(registerForm) {\n $scope.registerForm = registerForm;\n };\n\n // Clean controller data when logout\n $scope.onWalletLogout = function() {\n // clean QRcode\n $scope.hideQRCode();\n $scope.removeListeners();\n delete $scope.formData;\n wallet = null;\n $scope.loading = true;\n };\n\n $scope.addListeners = function() {\n $scope.listeners = [\n // Reset the view on logout\n wallet.api.data.on.logout($scope, $scope.onWalletLogout),\n\n // Listen new events (can appears from security wizard also)\n $scope.$watchCollection('formData.events', function(newEvents, oldEvents) {\n if (!oldEvents || $scope.loading || angular.equals(newEvents, oldEvents)) return;\n $scope.updateView();\n })\n ];\n };\n\n $scope.removeListeners = function() {\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n };\n\n // Ask uid\n $scope.showUidPopup = function() {\n return $q(function(resolve, reject) {\n $translate(['ACCOUNT.NEW.TITLE', 'ACCOUNT.POPUP_REGISTER.TITLE', 'ACCOUNT.POPUP_REGISTER.HELP', 'COMMON.BTN_OK', 'COMMON.BTN_CANCEL'])\n .then(function (translations) {\n $scope.formData.newUid = (!!$scope.formData.uid ? ''+$scope.formData.uid : '');\n\n // Choose UID popup\n $ionicPopup.show({\n templateUrl: 'templates/wallet/popup_register.html',\n title: translations['ACCOUNT.POPUP_REGISTER.TITLE'],\n subTitle: translations['ACCOUNT.POPUP_REGISTER.HELP'],\n scope: $scope,\n buttons: [\n { text: translations['COMMON.BTN_CANCEL'] },\n {\n text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: function(e) {\n $scope.registerForm.$submitted=true;\n if(!$scope.registerForm.$valid || !$scope.formData.newUid) {\n //don't allow the user to close unless he enters a uid\n e.preventDefault();\n } else {\n return $scope.formData.newUid;\n }\n }\n }\n ]\n })\n .then(function(uid) {\n if (!uid) { // user cancel\n delete $scope.formData.uid;\n UIUtils.loading.hide();\n reject('CANCELLED');\n return;\n }\n resolve(uid);\n });\n });\n });\n };\n\n // Send self identity\n $scope.self = function() {\n $scope.hideActionsPopover();\n\n return $scope.showUidPopup()\n .then(function(uid) {\n if (!uid) return;\n\n UIUtils.loading.show();\n\n return wallet.self(uid)\n .then(function() {\n $scope.updateView();\n UIUtils.loading.hide();\n })\n .catch(function(err){\n UIUtils.onError('ERROR.SEND_IDENTITY_FAILED')(err)\n .then(function() {\n $scope.self(); // loop\n });\n });\n });\n };\n\n $scope.doMembershipIn = function(retryCount) {\n return wallet.membership.inside()\n .then(function() {\n $scope.updateView();\n UIUtils.loading.hide();\n })\n .catch(function(err) {\n if (err === 'CANCELLED') throw err;\n if (err && err.ucode != BMA.errorCodes.MEMBERSHIP_ALREADY_SEND) {\n console.error(\"[wallet] Node: already membership\", err);\n UIUtils.loading.hide();\n return; // OK\n }\n if (!retryCount || retryCount <= 2) {\n return $timeout(function() {\n return $scope.doMembershipIn((retryCount||0) + 1);\n }, 1000);\n }\n throw err;\n });\n };\n\n\n // Send membership IN\n $scope.membershipIn = function(keepSelf) {\n $scope.hideActionsPopover();\n\n if (wallet.isMember()) {\n return UIUtils.alert.info(\"INFO.NOT_NEED_MEMBERSHIP\");\n }\n\n var uid = angular.isDefined($scope.formData.blockUid) && $scope.formData.uid || undefined;\n\n // Approve the license\n return Modals.showJoinMember({\n uid : uid,\n blockUid: uid && $scope.formData.blockUid,\n pubkey: $scope.formData.pubkey\n })\n .catch(function(err) {\n if (err === 'CANCELLED') return;\n if (!wallet.data.uid) {\n UIUtils.onError('ERROR.SEND_IDENTITY_FAILED')(err);\n }\n else {\n UIUtils.onError('ERROR.SEND_MEMBERSHIP_IN_FAILED')(err);\n }\n });\n };\n\n // Send membership OUT\n $scope.membershipOut = function(confirm, confirmAgain) {\n $scope.hideActionsPopover();\n\n // Ask user confirmation\n if (!confirm) {\n return UIUtils.alert.confirm('CONFIRM.MEMBERSHIP_OUT', 'CONFIRM.POPUP_WARNING_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_YES',\n okType: 'button-assertive'\n })\n .then(function(confirm) {\n if (confirm) $scope.membershipOut(true); // loop with confirmation\n });\n }\n\n if (!confirmAgain) {\n return UIUtils.alert.confirm(\"CONFIRM.MEMBERSHIP_OUT_2\", 'CONFIRM.POPUP_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_YES',\n okType: 'button-assertive'\n })\n .then(function (confirm) {\n if (confirm) $scope.membershipOut(true, true); // loop with all confirmations\n });\n }\n\n UIUtils.loading.show();\n return wallet.membership.out()\n .then(function() {\n UIUtils.loading.hide();\n UIUtils.toast.show('INFO.MEMBERSHIP_OUT_SENT');\n })\n .catch(UIUtils.onError('ERROR.SEND_MEMBERSHIP_OUT_FAILED'));\n };\n\n // Updating wallet data\n $scope.doUpdate = function(silent) {\n console.debug('[wallet] Refreshing data...');\n return (silent ?\n wallet.refreshData() :\n UIUtils.loading.show()\n .then(wallet.refreshData)\n .then(UIUtils.loading.hide)\n )\n .then($scope.updateView)\n .catch(UIUtils.onError('ERROR.REFRESH_WALLET_DATA'));\n };\n\n /**\n * Renew membership\n */\n $scope.renewMembership = function(confirm) {\n\n // Make sure user is (or was) a member\n if (!wallet.isMember() && !$scope.formData.requirements.wasMember) {\n return UIUtils.alert.error(\"ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION\");\n }\n\n // If renew is not need, ask confirmation\n if (!confirm && !$scope.formData.requirements.needRenew) {\n return $translate(\"CONFIRM.NOT_NEED_RENEW_MEMBERSHIP\", {membershipExpiresIn: $scope.formData.requirements.membershipExpiresIn})\n .then(function(message) {\n return UIUtils.alert.confirm(message);\n })\n .then(function(confirm) {\n if (confirm) {\n // loop with confirm\n return $scope.renewMembership(true);\n }\n });\n }\n\n return wallet.auth({minData: true}) // Ask user to auth, before confirmation - fix #508\n .then(function() {\n UIUtils.loading.hide();\n return UIUtils.alert.confirm(\"CONFIRM.RENEW_MEMBERSHIP\");\n })\n .then(function(confirm) {\n if (confirm) {\n UIUtils.loading.show();\n return $scope.doMembershipIn();\n }\n })\n .catch(function(err){\n if (err === 'CANCELLED') return;\n UIUtils.loading.hide();\n UIUtils.alert.error(err);\n });\n };\n\n\n /**\n * Fix identity (e.g. when identity expired)\n */\n $scope.fixIdentity = function() {\n if (!$scope.formData.uid) return;\n\n return $q.all([\n wallet.auth(),\n $translate('CONFIRM.FIX_IDENTITY', {uid: $scope.formData.uid})\n ])\n .then(function(res) {\n return UIUtils.alert.confirm(res[1]);\n })\n .then(function(confirm) {\n if (!confirm) return;\n UIUtils.loading.show();\n // Reset self data\n $scope.formData.blockUid = null;\n // Reset membership data\n $scope.formData.sigDate = null;\n return wallet.self($scope.formData.uid);\n })\n .then($scope.doMembershipIn)\n .catch(function(err){\n if (err === 'CANCELLED') return;\n UIUtils.loading.hide();\n UIUtils.alert.error(err);\n });\n };\n\n /**\n * Fix membership, when existing MS reference an invalid block\n */\n $scope.fixMembership = function() {\n if (!$scope.formData.uid) return;\n\n if (wallet.isMember()) {\n return UIUtils.alert.info(\"INFO.NOT_NEED_MEMBERSHIP\");\n }\n\n $scope.hideActionsPopover();\n\n return wallet.auth({silent: true})\n .then(function() {\n UIUtils.alert.confirm(\"CONFIRM.FIX_MEMBERSHIP\");\n })\n .then(function(confirm) {\n if (!confirm) return;\n UIUtils.loading.show();\n // Reset self data\n $scope.formData.blockUid = null;\n // Reset membership data\n $scope.formData.sigDate = null;\n return wallet.self($scope.formData.uid, false/*do NOT load membership here*/);\n })\n .then($scope.doMembershipIn)\n .catch(function(err){\n if (err === 'CANCELLED') return;\n UIUtils.loading.hide();\n UIUtils.alert.error(err);\n });\n };\n\n /**\n * Catch click for quick fix\n * @param fix\n */\n $scope.doQuickFix = function(event) {\n if (event === 'renew') {\n $scope.renewMembership();\n }\n else if (event === 'membership') {\n $scope.membershipIn(true/*keep self*/);\n }\n else if (event === 'fixMembership') {\n $scope.fixMembership(false);\n }\n else if (event === 'fixIdentity') {\n $scope.fixIdentity();\n }\n };\n\n /* -- UI actions -- */\n\n var inheritedLogout = $scope.logout;\n $scope.logout = function(options) {\n if ($scope.isDefaultWallet) {\n return inheritedLogout(options);\n }\n };\n\n $scope.startWalletTour = function() {\n $scope.hideActionsPopover();\n return csHelp.wallet.tour();\n };\n\n $scope.showHelpTip = function() {\n return csHelp.wallet.helptip();\n };\n\n $scope.showQRCode = function(timeout) {\n if (!wallet || !$scope.qrcodeId) return; // Skip\n\n // Get the DIV element\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId + ' .content'));\n if (!element) {\n console.error(\"[wallet-controller] Cannot found div #{0} for the QRCode. Skipping.\".format($scope.qrcodeId));\n return;\n }\n\n wallet.loadQrCode()\n .then(function(svg) {\n element.html(svg);\n UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);\n });\n };\n\n $scope.hideQRCode = function() {\n if (!$scope.qrcodeId) return;\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId));\n if (element) {\n UIUtils.motion.toggleOff({selector: '#'+$scope.qrcodeId});\n }\n };\n\n $scope.showCertifications = function() {\n // Warn: do not use a simple link here (a ng-click is mandatory for help tour)\n if ($scope.isDefaultWallet) {\n $state.go(UIUtils.screen.isSmall() ? 'app.wallet_cert' : 'app.wallet_cert_lg', {\n type: 'received'\n });\n }\n else {\n $state.go(UIUtils.screen.isSmall() ? 'app.wallet_cert_by_id' : 'app.wallet_cert_lg_by_id', {\n id: $scope.walletId,\n type: 'received'\n });\n }\n };\n\n $scope.showGivenCertifications = function() {\n // Warn: do not use a simple link here (a ng-click is mandatory for help tour)\n if ($scope.isDefaultWallet) {\n $state.go(UIUtils.screen.isSmall() ? 'app.wallet_cert' : 'app.wallet_cert_lg', {\n type: 'given'\n });\n }\n else {\n $state.go(UIUtils.screen.isSmall() ? 'app.wallet_cert_by_id' : 'app.wallet_cert_lg_by_id', {\n id: $scope.walletId,\n type: 'given'\n });\n }\n };\n\n $scope.showTxHistory = function() {\n $state.go($scope.isDefaultWallet ? 'app.view_wallet_tx' : 'app.view_wallet_tx_by_id', {\n id: $scope.walletId\n });\n };\n\n $scope.showLicenseModal = function() {\n return ModalUtils.show('templates/currency/modal_license.html','CurrencyLicenseModalCtrl');\n };\n\n /* -- modals -- */\n\n // Transfer\n $scope.showTransferModal = function() {\n var hasCredit = (!!$scope.formData.balance && $scope.formData.balance > 0);\n if (!hasCredit && !csWallet.children.count()) {\n UIUtils.alert.info('INFO.NOT_ENOUGH_CREDIT');\n return;\n }\n return Modals.showTransfer({wallet: wallet.id})\n .then(function(done){\n if (done) {\n UIUtils.toast.show('INFO.TRANSFER_SENT');\n $scope.$broadcast('$$rebind::balance'); // force rebind balance\n $scope.motion.show({selector: '.item-pending'});\n }\n });\n };\n\n $scope.showSecurityModal = function(){\n $scope.hideActionsPopover();\n return Modals.showAccountSecurity({wallet: wallet})\n .then(function(res) {\n if (!res) return;\n\n if (res === 'self') {\n return $scope.self();\n }\n else if (res === 'membershipIn') {\n return $scope.membershipIn();\n }\n });\n };\n\n $scope.showSelectIdentitiesModal = function(){\n $scope.hideActionsPopover();\n\n return Modals.showSelectPubkeyIdentity({\n identities: [$scope.formData.requirements].concat($scope.formData.requirements.alternatives)\n })\n .then(function(idty) {\n if (!idty || !idty.uid) return;\n\n $scope.loading = true;\n\n // Set self (= uid + blockUid)\n return wallet.setSelf(idty.uid, idty.blockUid)\n .then(function() {\n $scope.loading=false;\n $scope.updateView();\n UIUtils.loading.hide();\n });\n });\n };\n\n $scope.showSelectWalletModal = function() {\n if (!csWallet.children.count()) return;\n\n return Modals.showSelectWallet({\n parameters: {\n showDefault: true,\n showBalance: false,\n excludedWalletId: $scope.walletId\n }\n })\n .then(function(newWallet) {\n if (!newWallet || wallet && newWallet.id === wallet.id) return;\n $scope.removeListeners();\n $scope.loading = true;\n wallet = newWallet;\n console.debug(\"[transfer] Using wallet {\" + wallet.id + \"}\");\n $scope.formData = {};\n return $scope.load();\n });\n };\n\n /* -- popovers -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/wallet/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n $scope.showSharePopover = function(event) {\n $scope.hideActionsPopover();\n\n var title = $scope.formData.name || $scope.formData.uid || $scope.formData.pubkey;\n // Use shareBasePath (fix #530) or rootPath (fix #390)\n var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.wot_identity', {pubkey: $scope.formData.pubkey, uid: $scope.formData.uid});\n\n // Override default position, is small screen - fix #545\n if (UIUtils.screen.isSmall()) {\n event = angular.element(document.querySelector('#wallet-share-anchor')) || event;\n }\n\n UIUtils.popover.share(event, {\n bindings: {\n url: url,\n titleKey: 'WOT.VIEW.POPOVER_SHARE_TITLE',\n titleValues: {title: title},\n postMessage: title\n }\n });\n };\n\n $scope.showSelectWalletPopover = function(event) {\n\n return csPopovers.showSelectWallet(event, {\n parameters: {\n excludedWalletId: $scope.walletId\n }})\n .then(function(newWallet) {\n if (!newWallet || newWallet.id === $scope.walletId) return; // nothing changed\n if (newWallet.isDefault()) {\n return $state.go('app.view_wallet');\n }\n return $state.go('app.view_wallet_by_id', {id: newWallet.id});\n });\n };\n\n // remove '?refresh' from the location URI\n $scope.cleanLocationHref = function(state) {\n if (state && state.stateParams && state.stateParams.refresh) {\n $timeout(function() {\n var stateParams = angular.copy(state.stateParams);\n delete stateParams.refresh;\n delete stateParams.id;\n $location.search(stateParams).replace();\n }, 300);\n }\n };\n}\n\n\nfunction WalletTxController($scope, $ionicPopover, $state, $timeout, $location,\n UIUtils, Modals, csPopovers, BMA, csHttp, csSettings, csCurrency, csWallet, csTx) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.settings = csSettings.data;\n $scope.listeners = [];\n $scope.qrcodeId = 'qrcode-wallet-tx-' + $scope.$id;\n\n var wallet;\n\n $scope.enter = function(e, state) {\n $scope.loading = $scope.loading || (state.stateParams && state.stateParams.refresh);\n $scope.enableSelectWallet = csWallet.children.count() > 0;\n if ($scope.loading) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.walletId = wallet.id;\n\n $scope.cleanLocationHref(state);\n\n return $scope.load();\n }\n else {\n $scope.addListeners();\n // Make sure to display new pending (e.g. sending using another screen button)\n $timeout($scope.updateView, 300);\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.leave = function() {\n $scope.removeListeners();\n };\n $scope.$on('$ionicView.leave', $scope.leave);\n\n $scope.load = function() {\n if (!wallet) return $q.reject('Missing wallet');\n\n var hasMinData = wallet.isDataLoaded({minData: true});\n var options = {\n requirements: !hasMinData, // load requirements (=minData) once\n minData: !hasMinData,\n sources: true,\n tx: {\n enable: true\n }\n };\n\n return wallet.login(options)\n .then(function(walletData) {\n $scope.formData = walletData;\n $scope.loading = false; // very important, to avoid TX to be display before wallet.currentUd is loaded\n $scope.updateView();\n $scope.addListeners();\n\n $scope.showFab('fab-transfer');\n $scope.showQRCode();\n if (wallet.isDefault()) $scope.showHelpTip();\n\n return UIUtils.loading.hide(10); // loading could have be open (e.g. during login phase)\n })\n .catch(function(err){\n if (err === 'CANCELLED') {\n $scope.showHome();\n return;\n }\n console.error(err);\n UIUtils.onError('ERROR.LOAD_WALLET_DATA_ERROR')(err);\n });\n };\n\n // remove '?refresh' from the location URI\n $scope.cleanLocationHref = function(state) {\n if (state && state.stateParams && state.stateParams.refresh) {\n $timeout(function() {\n var stateParams = angular.copy(state.stateParams);\n delete stateParams.refresh;\n delete stateParams.id;\n $location.search(stateParams).replace();\n }, 300);\n }\n };\n\n // Update view\n $scope.updateView = function() {\n if (!$scope.formData || $scope.loading) return;\n $scope.$broadcast('$$rebind::balance'); // force rebind balance\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n $scope.motion.show({selector: '.view-wallet-tx .item', ink: false});\n };\n\n $scope.downloadHistoryFile = function(options) {\n options = options || {};\n options.fromTime = options.fromTime || -1; // default: full history\n var pubkey = $scope.formData.pubkey;\n csTx.downloadHistoryFile(pubkey, options);\n };\n\n // Updating wallet data\n $scope.doUpdate = function(silent) {\n console.debug('[wallet] TX history reloading...');\n var fromTime = $scope.formData && $scope.formData.tx && $scope.formData.tx.fromTime || undefined;\n var options = {\n sources: true,\n tx: {\n enable: true,\n fromTime: fromTime\n },\n api: false\n };\n return (silent ?\n // If silent: just refresh\n wallet.refreshData(options) :\n // If not silent: show/hide loading indicator\n UIUtils.loading.show()\n .then(function() {\n return wallet.refreshData(options);\n })\n .then(UIUtils.loading.hide)\n )\n .then($scope.updateView)\n .catch(UIUtils.onError('ERROR.REFRESH_WALLET_DATA'));\n };\n\n $scope.showQRCode = function(timeout) {\n if (!wallet || !$scope.qrcodeId) return; // Skip\n\n // Get the DIV element\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId + ' .content'));\n if (!element) {\n console.error(\"[wallet-controller] Cannot found div #{0} for the QRCode. Skipping.\".format($scope.qrcodeId));\n return;\n }\n\n wallet.loadQrCode()\n .then(function(svg) {\n element.html(svg);\n UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);\n });\n };\n\n $scope.hideQRCode = function() {\n if (!$scope.qrcodeId) return;\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId));\n if (element) {\n UIUtils.motion.toggleOff({selector: '#'+$scope.qrcodeId});\n }\n };\n\n /* -- add listeners -- */\n\n $scope.addListeners = function() {\n $scope.listeners = [\n // Reload if wallet balanced changed\n wallet.api.data.on.balanceChanged($scope, $scope.updateView),\n // Reload if useRelative changed\n $scope.$watch('settings.useRelative', $scope.updateView, true),\n // Reload if showUDHistory changed\n $scope.$watch('settings.showUDHistory', function(newVal, oldVal) {\n if (!$scope.formData || $scope.loading || (newVal === oldVal)) return;\n $scope.doUpdate();\n }, true)\n ];\n\n // Listening new block (if auto refresh enable)\n if ($scope.settings.walletHistoryAutoRefresh) {\n $scope.listeners.push(\n csCurrency.api.data.on.newBlock($scope, function(block) {\n if ($scope.loading) return;\n console.debug(\"[wallet] Received new block. Will reload history.\");\n $timeout(function() {\n $scope.doUpdate(true);\n }, 500/*waiting for block propagation*/);\n })\n );\n }\n };\n\n $scope.removeListeners = function() {\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n };\n\n /* -- popup / UI -- */\n\n // Transfer\n $scope.showTransferModal = function() {\n var hasCredit = (!!$scope.formData.balance && $scope.formData.balance > 0);\n if (!hasCredit && !csWallet.children.count()) {\n UIUtils.alert.info('INFO.NOT_ENOUGH_CREDIT');\n return;\n }\n return Modals.showTransfer({wallet: wallet.id})\n .then(function(done){\n if (done) {\n UIUtils.toast.show('INFO.TRANSFER_SENT');\n $scope.$broadcast('$$rebind::balance'); // force rebind balance\n $scope.motion.show({selector: '.item-pending'});\n }\n });\n };\n\n $scope.showHelpTip = function(index, isTour) {\n // TODO\n };\n\n $scope.showTxErrors = function(event) {\n if (wallet.isDefault()) {\n return $scope.goState('app.view_wallet_tx_errors');\n }\n return $scope.goState('app.view_wallet_tx_errors_by_id', {id: wallet.id});\n };\n\n $scope.showMoreTx = function(fromTime) {\n\n fromTime = fromTime ||\n ($scope.formData.tx.fromTime - csSettings.data.walletHistoryTimeSecond) ||\n (csHttp.date.now() - 2 * csSettings.data.walletHistoryTimeSecond);\n\n UIUtils.loading.show();\n return wallet.refreshData({tx: {enable: true, fromTime: fromTime}})\n .then(function() {\n $scope.updateView();\n UIUtils.loading.hide();\n })\n .catch(function(err) {\n // If http rest limitation: wait then retry\n if (err.ucode == BMA.errorCodes.HTTP_LIMITATION) {\n $timeout(function() {\n return $scope.showMoreTx(fromTime);\n }, 2000);\n }\n else {\n UIUtils.onError('ERROR.REFRESH_WALLET_DATA')(err);\n }\n });\n };\n\n $scope.showSelectWalletModal = function() {\n if (!csWallet.children.count()) return;\n\n return Modals.showSelectWallet({\n parameters: {\n showDefault: true,\n showBalance: false,\n excludedWalletId: $scope.walletId\n }\n })\n .then(function(newWallet) {\n if (!newWallet || wallet && newWallet.id === wallet.id) return;\n $scope.removeListeners();\n $scope.loading = true;\n wallet = newWallet;\n console.debug(\"[transfer] Using wallet {\" + wallet.id + \"}\");\n $scope.formData = {};\n return $scope.load();\n });\n };\n\n /* -- popover -- */\n\n var paddingIndent = 10;\n\n $scope.toUnlockUIArray = function(unlockTreeItem, leftPadding, operator) {\n leftPadding = leftPadding || 0;\n\n // If operator (AND, OR)\n if (unlockTreeItem.children && (unlockTreeItem.type == 'AND' || unlockTreeItem.type == 'OR')) {\n return unlockTreeItem.children.reduce(function(res, child, index){\n if (child.children && index > 0) {\n // Add space between expression block\n res = res.concat({\n style: {\n 'padding-left': leftPadding + 'px',\n 'padding-top': '10px',\n 'padding-bottom': '10px'\n },\n operator: unlockTreeItem.type\n });\n\n return res.concat($scope.toUnlockUIArray(child, leftPadding + paddingIndent));\n }\n return res.concat($scope.toUnlockUIArray(child, leftPadding + paddingIndent, index && unlockTreeItem.type));\n }, []);\n }\n\n return {\n style: {\n 'padding-left': leftPadding + 'px'\n },\n operator: operator,\n type: unlockTreeItem.type,\n value: unlockTreeItem.value\n };\n };\n\n $scope.showLockedOutputsPopover = function(tx, event) {\n if (!tx.lockedOutputs) return;\n\n // Convert condition into UI array\n $scope.popoverData = $scope.popoverData || {};\n $scope.popoverData.lockedOuputs = tx.lockedOutputs.reduce(function(res, lockedOutput){\n return res.concat({\n amount: lockedOutput.amount,\n unlockFunctions: lockedOutput.unlockFunctions,\n unlockConditions: $scope.toUnlockUIArray(lockedOutput.unlockTree)\n });\n }, []);\n\n // Open popover\n UIUtils.popover.show(event, {\n templateUrl: 'templates/wallet/tx_locked_outputs_popover.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideLockedOutputsPopover = function() {\n if ($scope.lockedOutputsPopover) {\n $scope.lockedOutputsPopover.hide();\n if ($scope.popoverData) {\n delete $scope.popoverData.unlockConditions;\n }\n $scope.lockedOutputsPopover = null;\n }\n };\n\n $scope.showSelectWalletPopover = function(event) {\n return csPopovers.showSelectWallet(event, {\n scope: $scope\n })\n .then(function(newWallet) {\n if (!newWallet || newWallet.id === wallet.id) return;\n if (newWallet.isDefault()) {\n return $scope.goState('app.view_wallet_tx');\n }\n return $scope.goState('app.view_wallet_tx_by_id', {id: newWallet.id});\n });\n };\n\n $scope.goState = function(stateName, stateParams) {\n $scope.hideLockedOutputsPopover();\n return $state.go(stateName, stateParams);\n };\n}\n\nfunction WalletTxErrorController($scope, UIUtils, csSettings, csWallet) {\n 'ngInject';\n\n var wallet;\n $scope.settings = csSettings.data;\n $scope.loading = true;\n $scope.formData = {};\n\n $scope.$on('$ionicView.enter', function(e, state) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n return $scope.load();\n });\n\n $scope.load = function() {\n if (!wallet) return;\n\n return wallet.login()\n .then(function(walletData) {\n $scope.formData = walletData;\n $scope.loading = false;\n $scope.doMotion();\n //$scope.showFab('fab-redo-transfer');\n UIUtils.loading.hide();\n });\n };\n\n // Updating wallet data\n $scope.doUpdate = function(silent) {\n\n $scope.loading = true;\n return (silent ?\n wallet.refreshData() :\n UIUtils.loading.show()\n .then(csWallet.refreshData)\n .then(UIUtils.loading.hide)\n )\n .then(function() {\n $scope.doMotion();\n $scope.loading = false;\n })\n .catch(function(err) {\n UIUtils.onError('ERROR.REFRESH_WALLET_DATA')(err);\n $scope.loading = false;\n });\n };\n\n $scope.filterReceivedTx = function(tx){\n return tx.amount && tx.amount > 0;\n };\n\n $scope.filterSentTx = function(tx){\n return tx.amount && tx.amount < 0;\n };\n\n $scope.hasReceivedTx = function(){\n return $scope.formData.tx && _($scope.formData.tx.errors || []).find($scope.filterReceivedTx) && true;\n };\n\n $scope.hasSentTx = function(){\n return $scope.formData.tx && _($scope.formData.tx.errors || []).find($scope.filterSentTx) && true;\n };\n\n}\n\nfunction WalletSecurityModalController($scope, UIUtils, csWallet, $translate, parameters){\n\n var wallet = parameters && parameters.wallet || csWallet;\n\n $scope.slides = {\n slider: null,\n options: {\n loop: false,\n effect: 'slide',\n speed: 500\n }\n };\n $scope.isLastSlide = false;\n $scope.smallscreen = UIUtils.screen.isSmall();\n\n $scope.recover = {};\n $scope.isValidFile = false;\n\n\n $scope.login = wallet.isLogin();\n $scope.hasSelf = wallet.hasSelf();\n $scope.needSelf = $scope.login && wallet.data.requirements.needSelf;\n $scope.canRevoke = $scope.login && $scope.hasSelf && !wallet.data.requirements.revoked;\n $scope.needMembership = $scope.login && wallet.data.requirements.needMembership;\n $scope.option = $scope.login ? 'saveID' : 'recoverID';\n\n $scope.formData = {\n addQuestion: '',\n level: '4',\n questions : []\n };\n var questions = [];\n for (var i = 1; i<20; i++) {\n questions.push('ACCOUNT.SECURITY.QUESTION_' + i.toString());\n }\n $translate(questions)\n .then(function(translations){\n _.each(translations, function(translation){\n $scope.formData.questions.push({value: translation , checked: false});\n });\n });\n\n\n $scope.slidePrev = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slidePrev();\n $scope.slides.slider.lockSwipes();\n $scope.isLastSlide = false;\n\n };\n\n $scope.slideNext = function() {\n $scope.slides.slider.unlockSwipes();\n $scope.slides.slider.slideNext();\n $scope.slides.slider.lockSwipes();\n $scope.isLastSlide = ($scope.slides.slider.activeIndex === 3 && ($scope.option == \"saveID\" || $scope.option == \"recoverID\")) || ($scope.slides.slider.activeIndex === 2 && $scope.option == \"revocation\");\n };\n\n\n $scope.doNext = function(formName) {\n if (!formName) {\n switch ($scope.slides.slider.activeIndex) {\n case 1:\n switch ($scope.option) {\n case \"saveID\":\n formName = \"questionsForm\";\n break;\n case \"recoverID\":\n if ($scope.isValidFile) {\n $scope.slideNext();\n $scope.hasContent = false;\n $scope.fileData = '';\n\n }\n else {\n UIUtils.alert.error(\"ERROR.NOT_VALID_SAVE_ID_FILE\", \"ERROR.LOAD_FILE_FAILED\");\n }\n break;\n }\n break;\n\n case 2:\n switch ($scope.option) {\n case \"recoverID\":\n formName = \"recoverForm\";\n break;\n case \"saveID\":\n formName = \"answersForm\";\n break;\n }\n }\n }\n\n if (formName) {\n $scope[formName].$submitted = true;\n if (!$scope[formName].$valid) {\n return;\n }\n switch (formName) {\n case \"recoverForm\":\n $scope.recoverId();\n break;\n case \"answersForm\":\n $scope.downloadSaveIDFile();\n break;\n default:\n $scope.slideNext();\n }\n }\n };\n\n $scope.selectOption = function(option){\n $scope.option = option;\n $scope.slideNext();\n };\n\n $scope.restore = function(){\n if ($scope.slides.slider.activeIndex === 1 && $scope.option === 'saveID') {\n $scope.formData = {\n addQuestion: '',\n level: '4',\n questions: []\n };\n $translate(questions)\n .then(function (translations) {\n _.each(translations, function (translation) {\n $scope.formData.questions.push({value: translation, checked: false});\n });\n });\n }\n\n else if ($scope.slides.slider.activeIndex === 2 && $scope.option === 'saveID') {\n _.each($scope.formData.questions, function(question){\n question.answer = undefined;\n });\n }\n\n else if ($scope.slides.slider.activeIndex === 1 && $scope.option === 'recoverID'){\n $scope.hasContent = false;\n $scope.recover = {};\n $scope.fileData = '';\n $scope.isValidFile = false;\n }\n\n else if ($scope.slides.slider.activeIndex === 2 && $scope.option === 'recoverID'){\n _.each($scope.recover.questions, function(element){\n element.answer = undefined;\n });\n }\n\n else if ($scope.slides.slider.activeIndex === 2 && $scope.option === 'revocation'){\n $scope.isValidFile = false;\n $scope.hasContent = false;\n $scope.revocation = undefined;\n }\n };\n\n /**\n * Set the file content\n */\n $scope.onFileChanged = function(file) {\n $scope.hasContent = angular.isDefined(file) && file !== '';\n $scope.fileData = file.fileData ? file.fileData : '';\n $scope.isValidFile = $scope.fileData !== '' && $scope.fileData.type === 'text/plain';\n\n if ($scope.isValidFile && $scope.option === 'recoverID') {\n $scope.content = file.fileContent.split('\\n');\n var indexOfQuestions = _.indexOf($scope.content, 'Questions: ');\n var LastIndexQuestions = -1;\n _.each($scope.content, function (element, index) {\n if (/^Issuer:/.test(element)) {\n LastIndexQuestions = index;\n }\n else if (/^Crypted-Nonce:/.test(element)) {\n $scope.recover.cypherNonce = element.split(' ')[1];\n }\n else if (/^Crypted-Pubkey:/.test(element)) {\n $scope.recover.cypherPubkey = element.split(' ')[1];\n }\n else if (/^Crypted-Salt:/.test(element)) {\n $scope.recover.cypherSalt = element.split(' ')[1];\n }\n else if (/^Crypted-Pwd:/.test(element)) {\n $scope.recover.cypherPwd = element.split(' ')[1];\n }\n });\n $scope.recover.questions = [];\n for (var i = indexOfQuestions + 1; i < LastIndexQuestions; i++) {\n $scope.recover.questions.push({value: $scope.content[i]});\n }\n }\n else if ($scope.isValidFile && $scope.option === \"revocation\"){\n $scope.revocation = file.fileContent;\n }\n };\n\n $scope.recoverId = function(){\n if(!$scope.recoverForm.$valid){\n return;\n }\n\n $scope.recover.answer = '';\n _.each($scope.recover.questions, function(element){\n $scope.recover.answer += element.answer;\n });\n\n return wallet.recoverId($scope.recover)\n .then(function (recover){\n if (angular.isDefined(recover)) {\n $scope.recover = recover;\n $scope.slideNext();\n }\n else {\n UIUtils.alert.error('ERROR.RECOVER_ID_FAILED');\n }\n })\n .catch(UIUtils.onError('ERROR.RECOVER_ID_FAILED'));\n\n };\n\n /**\n * Save Id\n */\n $scope.addQuestion = function(){\n if ($scope.formData.addQuestion !== '') {\n $scope.formData.questions.push({value: $scope.formData.addQuestion, checked: true});\n $scope.formData.addQuestion = '';\n }\n };\n\n $scope.downloadSaveIDFile = function(){\n // Force user re-auth\n var loginData;\n return wallet.auth({\n forceAuth: true,\n expectedPubkey: $scope.pubkey,\n silent: true,\n success: function(values) {\n loginData = values;\n }\n })\n .catch(function(err) {\n if (err && err === 'CANCELLED') return;\n UIUtils.alert.error('ERROR.SALT_OR_PASSWORD_NOT_CONFIRMED', 'ERROR.LOGIN_FAILED');\n return;\n })\n .then(function(res) {\n if (!res) return;\n var file = {\n file: _.filter($scope.formData.questions, function (question) {\n return question.checked;\n })\n };\n var record = {\n salt: loginData.username,\n pwd: loginData.password,\n questions: '',\n answer: ''\n };\n _.each(file.file, function (question) {\n record.questions += question.value + '\\n';\n record.answer += question.answer;\n });\n\n return wallet.getCryptedId(record)\n .then(function(record){\n wallet.downloadSaveId(record);\n $scope.closeModal();\n });\n })\n ;\n };\n\n $scope.isRequired = function(){\n var questionChecked = _.filter($scope.formData.questions, function(question) {\n return question.checked;\n });\n return questionChecked.length < $scope.formData.level;\n };\n\n $scope.revokeWithFile = function(){\n if ($scope.isValidFile) {\n $scope.revokeIdentity();\n }\n else {\n UIUtils.alert.error(\"ERROR.NOT_VALID_REVOCATION_FILE\", \"ERROR.LOAD_FILE_FAILED\");\n }\n };\n\n /**\n * Download revocation file\n */\n $scope.downloadRevokeFile = function () {\n // Force re-authentication\n return wallet.auth({forceAuth: true})\n\n // Download file\n .then(function() {\n return wallet.downloadRevocation();\n })\n\n .then(function() {\n UIUtils.loading.hide();\n })\n\n .catch(function(err){\n if (err && err === 'CANCELLED') return;\n UIUtils.onError('ERROR.DOWNLOAD_REVOCATION_FAILED')(err);\n })\n ;\n\n };\n\n /**\n * Revoke wallet identity\n */\n $scope.revokeWalletIdentity = function () {\n if (!$scope.hasSelf) {\n return UIUtils.alert.error(\"ERROR.ONLY_SELF_CAN_EXECUTE_THIS_ACTION\");\n }\n\n // Make sure user re-auth\n return wallet.auth({forceAuth: true})\n .then(function(confirm) {\n UIUtils.loading.hide();\n if (!confirm) return;\n return $scope.revokeIdentity();\n })\n .catch(function (err) {\n if (err === 'CANCELLED') return;\n UIUtils.onError('ERROR.REVOCATION_FAILED')(err);\n });\n };\n\n /**\n * Revoke identity\n */\n $scope.revokeIdentity = function (confirm) {\n\n // Make sure user re-auth + confirm\n if (!confirm) {\n return UIUtils.alert.confirm(\"CONFIRM.REVOKE_IDENTITY\", 'CONFIRM.POPUP_WARNING_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_YES',\n okType: 'button-assertive'\n })\n .then(function (confirm) {\n if (!confirm) return;\n return UIUtils.alert.confirm(\"CONFIRM.REVOKE_IDENTITY_2\", 'CONFIRM.POPUP_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_YES',\n okType: 'button-assertive'\n });\n })\n .then(function (confirm) {\n if (confirm) $scope.revokeIdentity(true, true); // loop with confirmation\n });\n }\n\n return UIUtils.loading.show()\n .then(function () {\n if (!$scope.revocation){\n return wallet.revoke();\n }\n else {\n return wallet.revokeWithFile($scope.revocation);\n }\n })\n .then(function () {\n UIUtils.toast.show(\"INFO.REVOCATION_SENT\");\n $scope.closeModal();\n return UIUtils.loading.hide();\n })\n .catch(function(err) {\n if ($scope.revocation){\n $scope.isValidFile = false;\n $scope.revocationError = err && err.message || err || 'ERROR.REVOCATION_FAILED';\n UIUtils.loading.hide(10);\n }\n else {\n UIUtils.onError('ERROR.REVOCATION_FAILED')(err);\n }\n });\n };\n\n\n /**\n * Ask self (= send identity)\n */\n $scope.self = function () {\n return $scope.closeModal('self');\n };\n\n /**\n * Ask membership in\n */\n $scope.membershipIn = function () {\n return $scope.closeModal('membershipIn');\n };\n\n /**\n * Generate keyfile\n */\n $scope.downloadKeyFile = function (format) {\n // Force re-authentication\n return wallet.auth({forceAuth: true})\n\n // Download file\n .then(function() {\n return wallet.downloadKeyFile(format);\n })\n\n .then(function() {\n UIUtils.loading.hide();\n return $scope.closeModal();\n })\n\n .catch(function(err){\n if (err && err === 'CANCELLED') {\n UIUtils.loading.hide();\n return;\n }\n UIUtils.onError('ERROR.DOWNLOAD_KEYFILE_FAILED')(err);\n })\n ;\n };\n}\n","\nWalletListAbstractController.$inject = ['$scope', '$q', '$timeout', 'UIUtils', 'filterTranslations', 'csSettings', 'csCurrency', 'csWallet'];\nWalletListViewController.$inject = ['$scope', '$controller', '$state', '$timeout', '$q', '$translate', '$ionicPopover', '$ionicPopup', 'ModalUtils', 'UIUtils', 'Modals', 'csCurrency', 'csSettings', 'csWallet'];\nWalletSelectModalController.$inject = ['$scope', '$controller', 'parameters'];\nWalletListImportModalController.$inject = ['$scope', '$timeout', 'BMA', 'csWallet'];\nWalletSelectPopoverController.$inject = ['$scope', '$controller', 'UIUtils', 'parameters'];angular.module('cesium.wallets.controllers', ['cesium.services', 'cesium.currency.controllers'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n $stateProvider\n\n .state('app.view_wallets', {\n url: \"/wallets\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/list/view_wallets.html\",\n controller: 'WalletListViewCtrl'\n }\n },\n data: {\n login: true\n }\n })\n\n .state('app.view_wallet_by_id', {\n url: \"/wallets/:id?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet.html\",\n controller: 'WalletCtrl'\n }\n },\n data: {\n login: true,\n silentLocationChange: true\n }\n })\n\n .state('app.view_wallet_tx_by_id', {\n url: \"/history/wallets/:id?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet_tx.html\",\n controller: 'WalletTxCtrl'\n }\n },\n data: {\n login: true,\n silentLocationChange: true\n }\n })\n\n .state('app.view_wallet_tx_errors_by_id', {\n url: \"/history/wallets/:id/errors\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/view_wallet_tx_error.html\",\n controller: 'WalletTxErrorCtrl'\n }\n },\n data: {\n login: true\n }\n })\n ;\n }])\n .controller('WalletListAbstractCtrl', WalletListAbstractController)\n\n .controller('WalletListViewCtrl', WalletListViewController)\n\n .controller('WalletSelectModalCtrl', WalletSelectModalController)\n\n .controller('WalletListImportModalCtrl', WalletListImportModalController)\n\n .controller('WalletSelectPopoverCtrl', WalletSelectPopoverController)\n;\n\n\nfunction WalletListAbstractController($scope, $q, $timeout, UIUtils, filterTranslations, csSettings, csCurrency, csWallet) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.wallets = null;\n $scope.formData = {\n useRelative: csSettings.data.useRelative,\n showDefault: true,\n showBalance: false,\n balance: undefined,\n updatingWalletId: undefined,\n stopped: false,\n minData: true\n };\n $scope.motion = null; // no animation\n\n $scope.setParameters = function(parameters) {\n parameters = parameters || {};\n\n $scope.formData.useRelative = angular.isDefined(parameters.useRelative) ? parameters.useRelative : $scope.formData.useRelative;\n $scope.formData.showBalance = angular.isDefined(parameters.showBalance) ? parameters.showBalance : $scope.formData.showBalance;\n $scope.formData.minData = angular.isDefined(parameters.minData) ? parameters.minData : $scope.formData.minData;\n $scope.formData.excludedWalletId = parameters.excludedWalletId;\n $scope.formData.showDefault = (angular.isDefined(parameters.showDefault) ? parameters.showDefault : $scope.formData.showDefault) &&\n ($scope.formData.excludedWalletId !== 'default');\n\n };\n\n $scope.load = function(options) {\n\n options = options || {};\n $scope.loading = (options.silent !== false);\n $scope.formData.balance = undefined;\n $scope.formData.updatingWalletId = undefined;\n $scope.formData.stopped = false;\n\n // Load currency, and filter translations (need by 'formatAmount' filter)\n var jobs = [];\n\n jobs.push(csCurrency.name()\n .then(function(currency) {\n $scope.currency = currency;\n return filterTranslations.ready();\n }));\n\n // Get children wallets\n $scope.defaultWallet = $scope.formData.showDefault ? csWallet : undefined;\n if (!$scope.wallets) {\n jobs.push(\n csWallet.children.all()\n .then(function(children) {\n $scope.wallets=children;\n UIUtils.loading.hide();\n })\n );\n }\n\n // Prepare load options\n var walletLoadOptions = {\n silent: true,\n minData: $scope.formData.minData,\n sources: $scope.formData.showBalance,\n tx: {\n enable: false\n },\n api: true\n };\n var hasLoadError = false;\n var loadCounter = 0;\n var now = Date.now();\n var balance = 0;\n return (jobs.length ? $q.all(jobs) : $q.when())\n // Load wallet data (apply a timeout between each wallet)\n .then(function() {\n var wallets = $scope.formData.showDefault ? [csWallet].concat($scope.wallets) : $scope.wallets;\n if (!wallets.length) return;\n console.debug(\"[wallets] Loading {0} wallets...\".format(wallets.length));\n return wallets.reduce(function(res, wallet) {\n var skip= !options.refresh && wallet.isDataLoaded(walletLoadOptions);\n if (skip) {\n console.debug(\"[wallets] Wallet #{0} already loaded. Skipping\".format(wallet.id));\n return res.then(function(){\n balance += wallet.data.balance;\n $scope.updateWalletView(wallet.id);\n });\n }\n loadCounter++;\n return res.then(function() {\n if ($scope.formData.stopped) return; // skip if stopped\n // Loading next wallet, after waiting some time\n $scope.formData.updatingWalletId = wallet.id;\n var loadPromise;\n if (options.refresh && wallet.data.loaded) {\n var refreshOptions = angular.merge({\n // Refresh requirements if member account\n requirements: (!wallet.data.requirements.loaded || wallet.data.requirements.isMember || wallet.data.requirements.wasMember || wallet.data.requirements.pendingMembership)\n }, walletLoadOptions);\n loadPromise = wallet.refreshData(refreshOptions);\n }\n else {\n loadPromise = wallet.loadData(walletLoadOptions);\n }\n\n loadPromise.then(function(walletData) {\n balance += walletData.balance;\n $scope.updateWalletView(wallet.id);\n })\n .catch(function(err) {\n console.error(\"[wallets] Error while loading data of wallet #{0}\".format(wallet.id), err);\n hasLoadError = true;\n });\n return loadPromise;\n });\n }, $q.when());\n })\n .then(function() {\n if (hasLoadError) {\n return UIUtils.alert.error('ERROR.LOAD_WALLET_LIST_FAILED')\n .then(function() {\n $scope.resetData();\n $scope.cancel();\n });\n }\n // Stop\n if ($scope.formData.stopped) return;\n if (loadCounter) {\n console.debug(\"[wallets] Loaded data of {0} wallet(s) in {1}ms\".format(loadCounter, (Date.now() - now)));\n }\n $scope.formData.balance = balance;\n $scope.formData.updatingWalletId = undefined;\n $scope.loading = false;\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.resetData();\n if (err && err === 'CANCELLED') {\n $scope.cancel();\n throw err;\n }\n return UIUtils.onError('ERROR.LOAD_WALLET_LIST_FAILED')(err);\n });\n };\n\n $scope.filterFn = function(parameters) {\n return function(wallet) {\n return !parameters || wallet.id !== parameters.excludedWalletId;\n };\n };\n\n\n // Clean controller data\n $scope.resetData = function() {\n console.debug(\"[wallets] Cleaning wallet list\");\n $scope.wallets = null;\n $scope.loading = true;\n $scope.entered = false;\n $scope.formData.balance = undefined;\n $scope.formData.updatingWalletId = undefined;\n };\n\n $scope.updateView = function(walletId) {\n if (!$scope.wallets || !$scope.wallets.length) return;\n\n var selectorSuffix = walletId && (' #wallet-' + walletId) || '';\n\n if ($scope.motion) {\n $scope.motion.show({selector: '.list .item.item-wallet' + selectorSuffix, ink: true});\n }\n else {\n UIUtils.ink({selector: '.list .item.item-wallet' + selectorSuffix});\n }\n };\n\n $scope.updateWalletView = function(walletId) {\n if ($scope.motion) {\n $scope.motion.show({selector: '.list #wallet-' + walletId, ink: true});\n }\n else {\n UIUtils.ink({selector: '.list #wallet-' + walletId});\n }\n };\n\n $scope.doUpdate = function(silent) {\n if ($scope.loading || !$scope.wallets || !$scope.wallets.length || $scope.formData.updatingWalletId) return $q.when();\n\n $scope.selectPrevented = true;\n $timeout(function() {\n $scope.selectPrevented = false;\n }, 1000);\n\n return $scope.load({silent: silent, refresh: true})\n .then(function() {\n $scope.loading = false;\n $scope.selectPrevented = false;\n if (silent) {\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n }\n $scope.updateView();\n });\n };\n\n $scope.addNewWallet = function(wallet) {\n\n if (!wallet) return $q.reject(\"Missing 'wallet' argument\");\n\n // Make sure auth on the main wallet\n if (csSettings.data.useLocalStorageEncryption && !csWallet.isAuth()) {\n return csWallet.auth({minData: true})\n .then(function() {\n return $scope.addNewWallet(wallet); // loop\n })\n .catch(function(err) {\n if (err === 'CANCELLED') {\n return UIUtils.loading.hide();\n }\n UIUtils.onError('ERROR.ADD_SECONDARY_WALLET_FAILED')(err);\n });\n }\n\n // Call API extension on child wallet\n return csWallet.api.data.raisePromise.load(wallet.data)\n // continue, when plugins extension failed (just log in console)\n .catch(console.error)\n .then(function() {\n $scope.addListenersOnWallet(wallet);\n csWallet.children.add(wallet);\n });\n };\n\n /* -- modals -- */\n\n $scope.showNewWalletModal = function() {\n\n var wallet = csWallet.children.instance();\n return wallet.login({\n showNewAccountLink: false,\n title: 'ACCOUNT.WALLET_LIST.BTN_NEW',\n okText: 'COMMON.BTN_ADD',\n // Load data options :\n minData: true,\n sources: true,\n api: false,\n success: UIUtils.loading.show,\n method: 'PUBKEY' // Default method - fix #767\n })\n .then(function(walletData) {\n if (!walletData || !walletData.pubkey) { // User cancelled\n UIUtils.loading.hide(100);\n return;\n }\n\n // Avoid to add main wallet again\n if (csWallet.isUserPubkey(walletData.pubkey)) {\n UIUtils.loading.hide();\n UIUtils.alert.error('ERROR.COULD_NOT_ADD_MAIN_WALLET');\n return;\n }\n\n // Avoid to add exists wallet again\n if (csWallet.children.hasPubkey(walletData.pubkey)) {\n UIUtils.loading.hide();\n UIUtils.alert.error('ERROR.COULD_NOT_ADD_EXISTING_WALLET');\n return;\n }\n\n console.debug(\"[wallet] Adding secondary wallet {{0}}\".format(walletData.pubkey.substring(0,8)));\n\n // Add the child wallet\n return $scope.addNewWallet(wallet)\n .then(function() {\n UIUtils.loading.hide();\n $scope.updateView();\n });\n })\n .catch(function(err) {\n if (err === 'CANCELLED') {\n // Silent\n UIUtils.loading.hide();\n }\n });\n };\n\n /* -- Method to override by subclasses-- */\n\n $scope.addListenersOnWallet = function(wallet) {\n // Can be override by subclass\n };\n\n $scope.cancel = function() {\n console.warn(\"cancel() must be implement by subclass\");\n };\n\n $scope.select = function(event, wallet) {\n console.warn(\"select() must be implement by subclass\");\n };\n}\n\nfunction WalletSelectModalController($scope, $controller, parameters) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope}));\n\n $scope.$on('modal.shown', function() {\n $scope.setParameters(parameters);\n $scope.load();\n });\n\n $scope.cancel = function() {\n $scope.closeModal();\n };\n\n $scope.select = function(event, wallet) {\n if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;\n $scope.closeModal(wallet);\n };\n\n // Default actions\n if (parameters) {\n $scope.setParameters(parameters);\n }\n}\n\nfunction WalletListViewController($scope, $controller, $state, $timeout, $q, $translate, $ionicPopover, $ionicPopup,\n ModalUtils, UIUtils, Modals, csCurrency, csSettings, csWallet){\n 'ngInject';\n\n $scope.settings = csSettings.data;\n $scope.listeners = [];\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope, parameters: {}}));\n\n // Override defaults\n $scope.formData.name = undefined;\n $scope.motion = UIUtils.motion.default;\n $scope.entered = false;\n\n $scope.enter = function(e, state) {\n // First enter\n if (!$scope.entered) {\n $scope.entered = true;\n $scope.setParameters({\n showDefault: true,\n showBalance: true,\n minData: false\n });\n\n return $scope.load()\n .then(function() {\n UIUtils.loading.hide();\n if (!$scope.wallets) return; // user cancel, or error\n $scope.addListeners();\n $scope.showFab('fab-add-wallet');\n });\n }\n // If already enter\n else {\n // Re-add listeners\n $scope.addListeners();\n if ($scope.formData.stopped) {\n $scope.loading = false;\n $scope.formData.stopped = false;\n $scope.formData.updatingWalletId = undefined;\n $scope.updateView();\n }\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.leave = function() {\n $scope.formData.stopped = true;\n $scope.formData.updatingWalletId = undefined;\n $scope.loading = false;\n $scope.removeListeners();\n };\n $scope.$on('$ionicView.leave', $scope.leave);\n\n $scope.cancel = function() {\n $scope.showHome();\n };\n\n $scope.select = function(event, wallet) {\n if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return;\n if (wallet.isDefault()) {\n $state.go('app.view_wallet');\n }\n else {\n $state.go('app.view_wallet_by_id', {id: wallet.id});\n }\n event.preventDefault();\n };\n\n $scope.editWallet = function(event, wallet) {\n\n event.preventDefault();\n\n return $scope.showEditPopup(wallet)\n .then(function(newName) {\n if (!newName) return;\n\n // Auth (if encryption is need)\n return (csSettings.data.useLocalStorageEncryption ? csWallet.auth({minData: true}) : $q.when())\n\n // Save changes\n .then(function() {\n wallet.data.localName = newName;\n csWallet.storeData();\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(function(err) {\n if (err === 'CANCELLED') {\n return UIUtils.loading.hide();\n }\n UIUtils.onError('ERROR.SAVE_WALLET_LIST_FAILED')(err);\n });\n });\n };\n\n $scope.downloadAsFile = function() {\n if (!$scope.wallets) return; // user cancel\n return csWallet.children.downloadFile();\n };\n\n\n\n $scope.selectAndRemoveWallet = function() {\n $scope.hideActionsPopover();\n return Modals.showSelectWallet({\n wallets: $scope.wallets,\n showDefault: false\n })\n .then(function(wallet) {\n if (!wallet || !wallet.id) return;\n\n // Auth (if encryption is need))\n return (csSettings.data.useLocalStorageEncryption ? csWallet.auth({minData: true}) : $q.when())\n\n // Remove the wallet\n .then(function() {\n csWallet.children.remove(wallet.id);\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(function(err) {\n if (err === 'CANCELLED') {\n return UIUtils.loading.hide();\n }\n UIUtils.onError('ERROR.ADD_SECONDARY_WALLET_FAILED')(err);\n });\n });\n };\n\n $scope.showImportFileModal = function() {\n $scope.hideActionsPopover();\n\n var loginAndAddWallet = function(authData) {\n if (!authData || !authData.pubkey) return $q.reject('Invalid authentication data');\n console.debug(\"[wallet] Adding secondary wallet {\"+authData.pubkey.substring(0,8)+\"}\");\n var wallet = csWallet.children.instance();\n return wallet.login({\n authData: authData,\n // Load data options :\n minData: true,\n sources: true,\n api: false,\n success: UIUtils.loading.show\n })\n .then(function(walletData) {\n walletData.localName = authData.localName;\n return $scope.addNewWallet(wallet);\n });\n };\n\n return ModalUtils.show(\n 'templates/wallet/list/modal_import_file.html',\n 'WalletListImportModalCtrl'\n )\n .then(function(items){\n if (!items || !items.length) return; // User cancel\n\n UIUtils.loading.show();\n\n // Auth (if encryption is need)\n return (csSettings.data.useLocalStorageEncryption ? csWallet.auth({minData: true}) : $q.when())\n .then(function() {\n // Add wallet one after one\n return items.reduce(function(promise, authData){\n return promise.then(function() {\n return loginAndAddWallet(authData);\n });\n }, $q.when());\n })\n .then(function() {\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(function(err) {\n if (err === 'CANCELLED') {\n return UIUtils.loading.hide();\n }\n UIUtils.onError('ERROR.ADD_SECONDARY_WALLET_FAILED')(err);\n });\n });\n };\n\n /* -- popups -- */\n\n $scope.setEditForm = function(editForm) {\n $scope.editForm = editForm;\n };\n\n $scope.showEditPopup = function(wallet) {\n return $q(function(resolve, reject) {\n $translate(['ACCOUNT.WALLET_LIST.EDIT_POPOVER.TITLE', 'ACCOUNT.WALLET_LIST.EDIT_POPOVER.HELP', 'COMMON.BTN_OK', 'COMMON.BTN_CANCEL'])\n .then(function (translations) {\n $scope.formData.name = wallet.data.localName || wallet.data.name || wallet.data.uid || (wallet.data.pubkey && wallet.data.pubkey.substring(0, 8)) || '';\n\n // Choose UID popup\n $ionicPopup.show({\n templateUrl: 'templates/wallet/list/popup_edit_name.html',\n title: translations['ACCOUNT.WALLET_LIST.EDIT_POPOVER.TITLE'],\n subTitle: translations['ACCOUNT.WALLET_LIST.EDIT_POPOVER.HELP'],\n scope: $scope,\n buttons: [\n { text: translations['COMMON.BTN_CANCEL'] },\n {\n text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: function(e) {\n $scope.editForm.$submitted=true;\n if(!$scope.editForm.$valid || !$scope.formData.name) {\n //don't allow the user to close unless he enters a name\n e.preventDefault();\n } else {\n return $scope.formData.name;\n }\n }\n }\n ]\n })\n .then(function(name) {\n if (!name) { // user cancel\n delete $scope.formData.name;\n UIUtils.loading.hide();\n return;\n }\n resolve(name);\n });\n });\n });\n };\n\n /* -- popovers -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/wallet/list/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- listeners -- */\n\n // Clean controller data when logout\n $scope.onWalletLogout = function() {\n $scope.resetData();\n $scope.removeListeners();\n };\n\n $scope.addListeners = function() {\n\n // First remove lod listeners, if any\n $scope.removeListeners();\n\n $scope.listeners = [\n csWallet.api.data.on.logout($scope, $scope.onWalletLogout)\n ];\n\n // Auto-update on new block\n if (csSettings.data.walletHistoryAutoRefresh) {\n $scope.listeners.push(\n csCurrency.api.data.on.newBlock($scope, function (block) {\n if ($scope.loading) return;\n console.debug(\"[wallet-list] Received new block. Will reload list.\");\n $timeout(function () {\n $scope.doUpdate(true);\n }, 300/*waiting for node cache propagation*/);\n }));\n }\n\n // Listen auth events on each wallet\n _.forEach($scope.wallets||[], $scope.addListenersOnWallet);\n };\n\n $scope.addListenersOnWallet = function(wallet) {\n if (!wallet) return;\n $scope.listeners.push(wallet.api.data.on.unauth($scope, $scope.updateView));\n $scope.listeners.push(wallet.api.data.on.auth($scope, function (data, deferred) {\n $timeout($scope.updateView);\n return deferred ? deferred.resolve() : $q.when();\n }));\n };\n\n $scope.removeListeners = function() {\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n };\n\n var inheritedUpdateView = $scope.updateView;\n $scope.updateView = function() {\n inheritedUpdateView();\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n };\n\n var inheritedUpdateWalletView = $scope.updateWalletView;\n $scope.updateWalletView = function(walletId) {\n inheritedUpdateWalletView(walletId);\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n };\n\n // Detect changes in settings useRelative\n $scope.$watch('settings.useRelative', function(newVal, oldVal) {\n if (!$scope.formData || $scope.loading || (newVal === oldVal)) return;\n $scope.formData.useRelative = csSettings.data.useRelative;\n $scope.updateView();\n }, true);\n}\n\n\nfunction WalletSelectPopoverController($scope, $controller, UIUtils, parameters) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WalletListAbstractCtrl', {$scope: $scope}));\n\n // Disable list motion\n $scope.motion = null;\n\n $scope.$on('popover.shown', function() {\n if ($scope.loading) {\n $scope.setParameters(parameters);\n $scope.load();\n }\n });\n\n $scope.updateView = function() {\n if (!$scope.wallets || !$scope.wallets.length) return;\n\n UIUtils.ink({selector: '.popover-wallets .list .item'});\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n };\n\n $scope.select = function(event, wallet) {\n if (event.isDefaultPrevented() || !wallet || $scope.selectPrevented) return; // no selection\n $scope.closePopover(wallet);\n };\n\n}\n\nfunction WalletListImportModalController($scope, $timeout, BMA, csWallet) {\n 'ngInject';\n\n $scope.hasContent = false;\n $scope.content = null;\n $scope.fileData = '';\n $scope.isValidFile = false;\n $scope.validatingFile = false;\n\n $scope.onFileChanged = function(file) {\n console.log(file);\n $scope.validatingFile = true;\n\n $scope.hasContent = angular.isDefined(file) && file !== '';\n $scope.fileData = file.fileData ? file.fileData : '';\n var isValidFile = $scope.fileData !== '' &&\n ($scope.fileData.type == 'text/csv' || $scope.fileData.type == 'text/plain' || 'application/vnd.ms-excel' /*fix issue #810*/);\n\n // Bad file type: invalid file\n if (!isValidFile) {\n console.error(\"[wallet] Import failed. Invalid file type: \" + $scope.fileData.type);\n $scope.isValidFile = false;\n $scope.validatingFile = false;\n return;\n }\n\n // Parse file\n console.debug(\"[wallet] Parsing file to import...\");\n var rows = file.fileContent.split('\\n');\n $scope.content = rows.reduce(function(res, row) {\n // Skip empty row\n if (!row || !row.trim().length) return res;\n\n // Split\n var cols = row.split('\\t', 3) || undefined;\n\n // Invalid column count: mark file as invalid\n if (cols && cols.length != 3) {\n console.debug(\"[wallet] Import: skip invalid row: \" + row);\n isValidFile = false;\n return res;\n }\n\n var item = {\n pubkey: cols[0],\n uid: cols[1],\n localName: cols[2]\n };\n\n // Check pubkey validity\n if (!BMA.regexp.PUBKEY.test(item.pubkey)) {\n console.debug(\"[wallet] Invalid pubkey, found in this row: \", row);\n isValidFile = false;\n return res;\n }\n\n // Ignore if same as current wallet\n if (csWallet.isUserPubkey(item.pubkey)) {\n console.debug(\"[wallet] Pubkey equals to main wallet. Skip this row: \", row);\n return res;\n }\n\n // Ignore if already in children wallet\n if (csWallet.children.hasPubkey(item.pubkey)) {\n console.debug(\"[wallet] Pubkey already in wallet list. Skip this row\", row);\n return res;\n }\n\n // OK: add it to result\n return res.concat(item);\n }, []);\n\n $scope.isValidFile = isValidFile;\n\n $timeout(function() {\n $scope.validatingFile = false;\n }, 250); // need to have a loading effect\n };\n\n $scope.removeFile = function() {\n $scope.hasContent = false;\n $scope.content = null;\n $scope.fileData = '';\n $scope.isValidFile = false;\n $scope.validatingFile = false;\n };\n}\n","\nangular.module('cesium.settings.services', ['ngApi', 'cesium.config'])\n\n.factory('csSettings', ['$rootScope', '$q', '$window', 'Api', 'localStorage', '$translate', 'csConfig', function($rootScope, $q, $window, Api, localStorage, $translate, csConfig) {\n 'ngInject';\n\n // Define app locales\n var locales = [\n {id:'en', label:'English', flag: 'us'},\n {id:'en-GB', label:'English (UK)', flag: 'gb'},\n {id:'eo-EO', label:'Esperanto', flag: 'eo'},\n {id:'fr-FR', label:'Français', flag: 'fr'},\n {id:'nl-NL', label:'Nederlands', flag: 'nl'},\n {id:'es-ES', label:'Spanish', flag: 'es'},\n {id:'it-IT', label:'Italiano', flag: 'it'}\n ];\n var fallbackLocale = csConfig.fallbackLanguage ? fixLocale(csConfig.fallbackLanguage) : 'en';\n\n // Convert browser locale to app locale (fix #140)\n function fixLocale (locale) {\n if (!locale) return fallbackLocale;\n\n // exists in app locales: use it\n if (_.findWhere(locales, {id: locale})) return locale;\n\n // not exists: reiterate with the root (e.g. 'fr-XX' -> 'fr')\n var localeParts = locale.split('-');\n if (localeParts.length > 1) {\n return fixLocale(localeParts[0]);\n }\n\n // If another locale exists with the same root: use it\n var similarLocale = _.find(locales, function(l) {\n return String.prototype.startsWith.call(l.id, locale);\n });\n if (similarLocale) return similarLocale.id;\n\n return fallbackLocale;\n }\n\n // Convert browser locale to app locale (fix #140)\n function fixLocaleWithLog (locale) {\n var fixedLocale = fixLocale(locale);\n if (locale !== fixedLocale) {\n console.debug('[settings] Fix locale [{0}] -> [{1}]'.format(locale, fixedLocale));\n }\n return fixedLocale;\n }\n\n var\n constants = {\n STORAGE_KEY: 'settings', // for version >= v1.1.0\n KEEP_AUTH_IDLE_SESSION: 9999\n },\n // Settings that user cannot change himself (only config can override this values)\n fixedSettings = {\n timeout : 4000,\n cacheTimeMs: 60000, /*1 min*/\n timeWarningExpireMembership: 2592000 * 2 /*=2 mois*/,\n timeWarningExpire: 2592000 * 3 /*=3 mois*/,\n minVersion: '1.1.0',\n newIssueUrl: \"https://git.duniter.org/clients/cesium-grp/cesium/issues/new\",\n userForumUrl: \"https://forum.monnaie-libre.fr\",\n latestReleaseUrl: \"https://api.github.com/repos/duniter/cesium/releases/latest\",\n duniterLatestReleaseUrl: \"https://api.github.com/repos/duniter/duniter/releases/latest\",\n httpsMode: false\n },\n defaultSettings = angular.merge({\n useRelative: false,\n useLocalStorage: !!$window.localStorage, // override to false if no device\n useLocalStorageEncryption: false,\n persistCache: false, // disable by default (waiting resolution of issue #885)\n walletHistoryTimeSecond: 30 * 24 * 60 * 60 /*30 days*/,\n walletHistorySliceSecond: 5 * 24 * 60 * 60 /*download using 5 days slice*/,\n walletHistoryAutoRefresh: true, // override to false if device\n rememberMe: true,\n keepAuthIdle: 10 * 60,\n showUDHistory: true,\n expertMode: false,\n decimalCount: 4,\n uiEffects: true,\n blockValidityWindow: 6,\n helptip: {\n enable: true,\n installDocUrl: \"https://duniter.org/en/wiki/duniter/install/\",\n currency: 0,\n network: 0,\n wotLookup: 0,\n wot: 0,\n wotCerts: 0,\n wallet: 0,\n walletCerts: 0,\n wallets: 0,\n header: 0,\n settings: 0\n },\n currency: {\n allRules: false,\n allWotRules: false\n },\n wallet: {\n showPubkey: true,\n alertIfUnusedWallet: true\n },\n locale: {\n id: fixLocaleWithLog(csConfig.defaultLanguage || $translate.use()) // use config locale if set, or browser default\n },\n license: {\n \"en\": \"license/license_g1-en\",\n \"fr-FR\": \"license/license_g1-fr-FR\",\n \"es-ES\": \"license/license_g1-es-ES\"\n }\n },\n fixedSettings,\n csConfig),\n\n data = {},\n previousData,\n started = false,\n startPromise,\n api = new Api(this, \"csSettings\");\n\n var\n reset = function() {\n _.keys(data).forEach(function(key){\n delete data[key];\n });\n\n applyData(defaultSettings);\n\n return api.data.raisePromise.reset(data)\n .then(store);\n },\n\n getByPath = function(path, defaultValue) {\n var obj = data;\n _.each(path.split('.'), function(key) {\n obj = obj[key];\n if (angular.isUndefined(obj)) {\n obj = defaultValue;\n return; // stop\n }\n });\n\n return obj;\n },\n\n emitChangedEvent = function() {\n var hasChanged = angular.isUndefined(previousData) || !angular.equals(previousData, data);\n if (hasChanged) {\n previousData = angular.copy(data);\n return api.data.raise.changed(data);\n }\n },\n\n store = function() {\n if (!started) {\n console.debug('[setting] Waiting start finished...');\n return (startPromise || start()).then(store);\n }\n\n var promise;\n if (data.useLocalStorage) {\n // When node is temporary (fallback node): keep previous node address - issue #476\n if (data.node.temporary === true) {\n promise = localStorage.getObject(constants.STORAGE_KEY)\n .then(function(previousSettings) {\n var savedData = angular.copy(data);\n savedData.node = previousSettings && previousSettings.node || {};\n delete savedData.temporary; // never store temporary flag\n return localStorage.setObject(constants.STORAGE_KEY, savedData);\n });\n }\n else {\n promise = localStorage.setObject(constants.STORAGE_KEY, data);\n }\n }\n else {\n promise = localStorage.setObject(constants.STORAGE_KEY, null);\n }\n\n return promise\n .then(function() {\n if (data.useLocalStorage) {\n console.debug('[setting] Saved locally');\n }\n\n // Emit event on store\n return api.data.raisePromise.store(data);\n })\n\n // Emit event on store\n .then(emitChangedEvent);\n },\n\n /**\n * Apply new settings (can be partial)\n * @param newData\n */\n applyData = function(newData) {\n if (!newData) return; // skip empty\n\n var localeChanged = false;\n if (newData.locale && newData.locale.id) {\n // Fix previously stored locale (could use bad format)\n var localeId = fixLocale(newData.locale.id);\n newData.locale = _.findWhere(locales, {id: localeId});\n localeChanged = !data.locale || newData.locale.id !== data.locale.id || newData.locale.id !== $translate.use();\n }\n\n // Force some fixed settings, before merging\n _.keys(fixedSettings).forEach(function(key) {\n newData[key] = defaultSettings[key]; // This will apply fixed value (override by config.js file)\n });\n\n // Apply new settings\n angular.merge(data, newData);\n\n // Delete temporary properties, if false\n if (newData && newData.node && !newData.node.temporary || !data.node.temporary) delete data.node.temporary;\n\n // Apply the new locale (only if need)\n // will produce an event cached by onLocaleChange();\n if (localeChanged) {\n $translate.use(data.locale.id);\n }\n\n },\n\n restore = function() {\n var now = Date.now();\n\n return localStorage.getObject(constants.STORAGE_KEY)\n .then(function(storedData) {\n // No settings stored\n if (!storedData) {\n console.debug(\"[settings] No settings in local storage. Using defaults.\");\n applyData(defaultSettings);\n emitChangedEvent();\n return;\n }\n\n // Apply stored data\n applyData(storedData);\n\n console.debug('[settings] Loaded from local storage in '+(Date.now()-now)+'ms');\n emitChangedEvent();\n });\n },\n\n getLicenseUrl = function() {\n var locale = data.locale && data.locale.id || csConfig.defaultLanguage || 'en';\n return (csConfig.license) ?\n (csConfig.license[locale] ? csConfig.license[locale] : defaultSettings.license[csConfig.defaultLanguage || 'en'] || csConfig.license) : undefined;\n },\n\n getFeedUrl = function() {\n var locale = data.locale && data.locale.id || csConfig.defaultLanguage || 'en';\n return (csConfig.feed && csConfig.feed.jsonFeed) ?\n (csConfig.feed.jsonFeed[locale] ? csConfig.feed.jsonFeed[locale] : defaultSettings.feed.jsonFeed[csConfig.defaultLanguage || 'en'] || csConfig.feed) : undefined;\n },\n\n // Detect locale successful changes, then apply to vendor libs\n onLocaleChange = function() {\n var locale = $translate.use();\n console.debug('[settings] Locale ['+locale+']');\n\n // config moment lib\n try {\n moment.locale(locale.toLowerCase());\n }\n catch(err) {\n try {\n moment.locale(locale.substr(0,2));\n }\n catch(err) {\n moment.locale('en-gb');\n console.warn('[settings] Unknown local for moment lib. Using default [en]');\n }\n }\n\n // config numeral lib\n try {\n numeral.language(locale.toLowerCase());\n }\n catch(err) {\n try {\n numeral.language(locale.substring(0, 2));\n }\n catch(err) {\n numeral.language('en-gb');\n console.warn('[settings] Unknown local for numeral lib. Using default [en]');\n }\n }\n\n // Emit event\n api.locale.raise.changed(locale);\n },\n\n isStarted = function() {\n return started;\n },\n\n ready = function() {\n if (started) return $q.when();\n return startPromise || start();\n },\n\n start = function() {\n console.debug('[settings] Starting...');\n\n startPromise = localStorage.ready()\n\n // Restore\n .then(restore)\n\n // Emit ready event\n .then(function() {\n console.debug('[settings] Started');\n started = true;\n startPromise = null;\n // Emit event (used by plugins)\n api.data.raise.ready(data);\n });\n\n return startPromise;\n };\n\n $rootScope.$on('$translateChangeSuccess', onLocaleChange);\n\n api.registerEvent('data', 'reset');\n api.registerEvent('data', 'changed');\n api.registerEvent('data', 'store');\n api.registerEvent('data', 'ready');\n api.registerEvent('locale', 'changed');\n\n // Apply default settings. This is required on some browser (web or mobile - see #361)\n applyData(defaultSettings);\n\n // Default action\n //start();\n\n return {\n isStarted: isStarted,\n ready: ready,\n start: start,\n data: data,\n apply: applyData,\n getByPath: getByPath,\n reset: reset,\n store: store,\n restore: restore,\n getLicenseUrl: getLicenseUrl,\n getFeedUrl: getFeedUrl,\n defaultSettings: defaultSettings,\n // api extension\n api: api,\n locales: locales,\n constants: constants\n };\n}]);\n","\nWotLookupController.$inject = ['$scope', '$state', '$q', '$timeout', '$focus', '$location', '$ionicPopover', '$ionicHistory', 'UIUtils', 'csConfig', 'csCurrency', 'csSettings', 'Device', 'BMA', 'csWallet', 'csWot'];\nWotLookupModalController.$inject = ['$scope', '$controller', '$focus', 'csWallet', 'parameters'];\nWotIdentityAbstractController.$inject = ['$scope', '$rootScope', '$state', '$translate', '$ionicHistory', '$q', 'UIUtils', 'Modals', 'csConfig', 'csSettings', 'csCurrency', 'csWot', 'csWallet'];\nWotIdentityViewController.$inject = ['$scope', '$rootScope', '$controller', '$timeout', '$state', 'UIUtils', 'Modals', 'csWallet'];\nWotIdentityTxViewController.$inject = ['$scope', '$timeout', '$q', 'BMA', 'csSettings', 'csWot', 'csTx', 'UIUtils'];\nWotCertificationsViewController.$inject = ['$scope', '$rootScope', '$controller', 'csSettings', 'csWallet', 'UIUtils'];\nWotSelectPubkeyIdentityModalController.$inject = ['$scope', '$q', 'csWot', 'parameters'];angular.module('cesium.wot.controllers', ['cesium.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n $stateProvider\n\n .state('app.wot_lookup', {\n url: \"/wot\",\n abstract: true,\n enableBack: false, // Workaround need for navigation outside tabs (enableBack is forced to 'true' in ViewXXXCtrl)\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/lookup.html\"\n }\n }\n })\n\n .state('app.wot_lookup.tab_search', {\n url: \"/search?q&type&hash\",\n views: {\n 'tab': {\n templateUrl: \"templates/wot/tabs/tab_lookup.html\",\n controller: 'WotLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true,\n large: 'app.wot_lookup_lg'\n }\n })\n\n .state('app.wot_lookup_lg', {\n url: \"/wot/lg?q&type&hash\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/lookup_lg.html\",\n controller: 'WotLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n\n .state('app.wot_identity', {\n url: \"/wot/:pubkey/:uid?action&block\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_identity.html\",\n controller: 'WotIdentityViewCtrl'\n }\n }\n })\n\n .state('app.wot_identity_uid', {\n url: \"/lookup/:uid?action\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_identity.html\",\n controller: 'WotIdentityViewCtrl'\n }\n }\n })\n\n .state('app.wot_identity_tx_uid', {\n url: \"/wot/tx/:pubkey/:uid?action\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_identity_tx.html\",\n controller: 'WotIdentityTxViewCtrl'\n }\n }\n })\n\n .state('app.wot_cert', {\n url: \"/wot/:pubkey/:uid/:type?block\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n },\n data: {\n large: 'app.wot_cert_lg'\n }\n })\n\n .state('app.wot_cert_lg', {\n url: \"/wot/cert/lg/:pubkey/:uid?block\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n }\n })\n\n // wallet cert\n .state('app.wallet_cert', {\n url: \"/account/cert/:type\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n },\n data: {\n large: 'app.wallet_cert_lg'\n }\n })\n\n .state('app.wallet_cert_lg', {\n url: \"/account/cert/lg\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n }\n })\n\n // wallet cert\n .state('app.wallet_cert_by_id', {\n url: \"/wallets/:id/cert/:type\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n },\n data: {\n large: 'app.wallet_cert_lg_by_id'\n }\n })\n\n .state('app.wallet_cert_lg_by_id', {\n url: \"/wallets/:id/cert/lg\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wot/view_certifications.html\",\n controller: 'WotCertificationsViewCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('WotLookupCtrl', WotLookupController)\n\n .controller('WotLookupModalCtrl', WotLookupModalController)\n\n .controller('WotIdentityAbstractCtrl', WotIdentityAbstractController)\n\n .controller('WotIdentityViewCtrl', WotIdentityViewController)\n\n .controller('WotIdentityTxViewCtrl', WotIdentityTxViewController)\n\n .controller('WotCertificationsViewCtrl', WotCertificationsViewController)\n\n .controller('WotSelectPubkeyIdentityModalCtrl', WotSelectPubkeyIdentityModalController)\n\n;\n\nfunction WotLookupController($scope, $state, $q, $timeout, $focus, $location, $ionicPopover, $ionicHistory,\n UIUtils, csConfig, csCurrency, csSettings, Device, BMA, csWallet, csWot) {\n 'ngInject';\n\n var defaultSearchLimit = 10;\n\n $scope.search = {\n text: '',\n loading: true,\n type: null,\n results: []\n };\n $scope.entered = false;\n $scope.wotSearchTextId = 'wotSearchText';\n $scope.enableFilter = true;\n $scope.enableWallets = false;\n $scope.allowMultiple = false;\n $scope.selection = [];\n $scope.showResultLabel = true;\n $scope.parameters = {}; // override in the modal controller\n\n $scope.enter = function(e, state) {\n if (!$scope.entered) {\n var params = angular.merge({}, $scope.parameters, state && state.stateParams);\n if (params && params.q) { // Query parameter\n $scope.search.text = params.q;\n $timeout(function() {\n $scope.doSearch();\n }, 100);\n }\n else if (params && params.hash) { // hash tag parameter\n $scope.search.text = '#' + params.hash;\n $timeout(function() {\n $scope.doSearch();\n }, 100);\n }\n else {\n $timeout(function() {\n // Init phase\n if (csCurrency.data.initPhase && !params.type) {\n $scope.doGetPending(0, undefined, true/*skipLocationUpdate*/);\n }\n // get new comers\n else if (params.type == 'newcomers' || (!csConfig.initPhase && !params.type)) {\n $scope.doGetNewcomers(0, undefined, true/*skipLocationUpdate*/);\n }\n else if (params.type == 'pending') {\n $scope.doGetPending(0, undefined, true/*skipLocationUpdate*/);\n }\n else if (params.type == 'wallets') {\n $scope.doGetWallets(0, undefined, true/*skipLocationUpdate*/);\n }\n\n }, 100);\n }\n // removeIf(device)\n // Focus on search text (only if NOT device, to avoid keyboard opening)\n $focus($scope.wotSearchTextId);\n // endRemoveIf(device)\n\n $scope.entered = true;\n\n $timeout(UIUtils.ink, 100);\n\n $scope.showHelpTip();\n }\n else {\n\n $scope.updateLocationHref();\n if ($scope.search.results && $scope.search.results.length) {\n $scope.motion.show({selector: '.lookupForm .list .item', ink: true});\n }\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.resetWotSearch = function() {\n $scope.search = {\n text: null,\n loading: false,\n type: 'newcomers',\n results: []\n };\n };\n\n $scope.updateLocationHref = function() {\n // removeIf(device)\n var stateParams = {\n q: undefined,\n hash: undefined,\n type: undefined\n };\n\n if ($scope.search.type === 'text') {\n var text = $scope.search.text.trim();\n if (text.match(/^#[\\wḡĞǦğàáâãäåçèéêëìíîïðòóôõöùúûüýÿ]+$/)) {\n stateParams.hash = text.substr(1);\n }\n else {\n stateParams.q = text;\n }\n }\n else if ($scope.search.type != 'last') {\n stateParams.type = $scope.search.type;\n }\n\n // Update location href\n $location.search(stateParams).replace();\n // endRemoveIf(device)\n };\n\n $scope.doSearchText = function() {\n\n $scope.doSearch();\n $scope.updateLocationHref();\n\n };\n\n $scope.doSearch = function() {\n var text = $scope.search.text.trim();\n if ((UIUtils.screen.isSmall() && text.length < 3) || !text.length) {\n $scope.search.results = undefined;\n $scope.search.type = 'none';\n $scope.search.total = undefined;\n return $q.when();\n }\n\n $scope.search.loading = true;\n $scope.search.type = 'text';\n return csWot.search(text)\n .then(function(idties){\n if ($scope.search.type != 'text') return; // could have change\n if ($scope.search.text.trim() !== text) return; // search text has changed before received response\n\n if ((!idties || !idties.length) && (BMA.regexp.PUBKEY.test(text) || BMA.regexp.PUBKEY_WITH_CHECKSUM.test(text))) {\n return BMA.uri.parse(text)\n .then(function(data) {\n $scope.doDisplayResult([data]);\n });\n }\n else {\n $scope.doDisplayResult(idties);\n\n // count, skipping divider\n var countBy = _.countBy(idties, function(hit) {\n return hit.divider && 'divider' || 'results';\n });\n $scope.search.total = countBy && countBy.results || 0;\n }\n })\n .catch(UIUtils.onError('ERROR.WOT_LOOKUP_FAILED'));\n };\n\n $scope.doGetNewcomers = function(offset, size, skipLocationUpdate) {\n offset = offset || 0;\n size = size || defaultSearchLimit;\n if (size < defaultSearchLimit) size = defaultSearchLimit;\n\n $scope.hideActionsPopover();\n $scope.search.loading = (offset === 0);\n $scope.search.type = 'newcomers';\n\n // Update location href\n if (!offset && !skipLocationUpdate) {\n $scope.updateLocationHref();\n }\n\n return csWot.newcomers(offset, size)\n .then(function(res){\n if ($scope.search.type !== 'newcomers') return false; // could have change\n $scope.doDisplayResult(res && res.hits, offset, size, res && res.total);\n return true;\n })\n .catch(function(err) {\n $scope.search.loading = false;\n $scope.search.results = (offset > 0) ? $scope.search.results : [];\n $scope.search.hasMore = false;\n $scope.search.total = undefined;\n UIUtils.onError('ERROR.LOAD_NEWCOMERS_FAILED')(err);\n });\n };\n\n $scope.doGetPending = function(offset, size, skipLocationUpdate) {\n offset = offset || 0;\n size = size || defaultSearchLimit;\n if (size < defaultSearchLimit) size = defaultSearchLimit;\n\n $scope.hideActionsPopover();\n $scope.search.loading = (offset === 0);\n $scope.search.type = 'pending';\n\n var searchFunction = csCurrency.data.initPhase ?\n csWot.all :\n csWot.pending;\n\n // Update location href\n if (!offset && !skipLocationUpdate) {\n $scope.updateLocationHref();\n }\n\n return searchFunction(offset, size)\n .then(function(res){\n if ($scope.search.type != 'pending') return false; // could have change\n $scope.doDisplayResult(res && res.hits, offset, size, res && res.total);\n // Always disable \"more\" on initphase\n $scope.search.hasMore = !csCurrency.data.initPhase && $scope.search.hasMore;\n return true;\n })\n .catch(function(err) {\n $scope.search.loading = false;\n $scope.search.results = (offset > 0) ? $scope.search.results : [];\n $scope.search.total = undefined;\n $scope.search.hasMore = false;\n UIUtils.onError('ERROR.LOAD_PENDING_FAILED')(err);\n });\n };\n\n $scope.doGetWallets = function(offset, size, skipLocationUpdate) {\n offset = offset || 0;\n size = size || defaultSearchLimit;\n if (size < defaultSearchLimit) size = defaultSearchLimit;\n\n $scope.hideActionsPopover();\n $scope.search.loading = (offset === 0);\n $scope.search.type = 'wallets';\n\n // Update location href\n if (!offset && !skipLocationUpdate) {\n $scope.updateLocationHref();\n }\n\n return csWallet.children.all()\n .then(function(children) {\n if (!children || $scope.search.type != 'wallets') return false; // could have change\n var res = [csWallet].concat(children).reduce(function(res, wallet, index) {\n var item = {\n id: index,\n pubkey: wallet.data.pubkey,\n uid: wallet.data.uid,\n name: wallet.data.localName || wallet.data.name,\n avatar: wallet.data.avatar\n };\n return res.concat(item);\n }, []);\n\n $scope.doDisplayResult(res, offset, size, res.length);\n $scope.search.hasMore = false;\n return true;\n });\n\n\n };\n\n $scope.showMore = function() {\n var offset = $scope.search.results ? $scope.search.results.length : 0;\n\n $scope.search.loadingMore = true;\n var searchFunction = ($scope.search.type == 'newcomers') ?\n $scope.doGetNewcomers :\n $scope.doGetPending;\n\n return searchFunction(offset)\n .then(function(ok) {\n if (ok) {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n }\n })\n .catch(function(err) {\n console.error(err);\n $scope.search.loadingMore = false;\n $scope.search.hasMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.select = function(item) {\n var state = item.state;\n\n // Identity\n if (!state && item.pubkey) {\n // identity = self -> open the user wallet\n state = csWallet.isUserPubkey(item.pubkey) ? 'app.view_wallet' : 'app.wot_identity';\n }\n\n if (state) {\n // Need to have a back button outside tabs\n $ionicHistory.nextViewOptions({\n historyRoot: false,\n disableAnimate: false,\n expire: 300\n });\n\n $state.go(state, item.stateParams||item);\n }\n };\n\n $scope.next = function() {\n // This method should be override by sub controller (e.g. modal controller)\n console.warn('Selected identities (should be override):', $scope.selection);\n };\n\n $scope.toggleCheck = function(index, e) {\n var identity = $scope.search.results[index];\n if (identity.checked) {\n $scope.addToSelection(identity);\n }\n else {\n $scope.removeSelection(identity, e);\n }\n };\n\n $scope.toggleSelect = function(identity){\n identity.selected = !identity.selected;\n };\n\n $scope.addToSelection = function(identity) {\n\n var copyIdty = angular.copy(identity);\n if (copyIdty.name) {\n copyIdty.name = copyIdty.name.replace('', '').replace('', ''); // remove highlight\n }\n\n $scope.selection.push(copyIdty);\n };\n\n $scope.removeSelection = function(identity, e) {\n\n // Remove from selection array\n var identityInSelection = _.findWhere($scope.selection, {id: identity.id});\n if (identityInSelection) {\n $scope.selection.splice($scope.selection.indexOf(identityInSelection), 1);\n }\n\n // Uncheck in result array, if exists\n if (!$scope.search.loading) {\n var existIdtyInResult = _.findWhere($scope.search.results, {id: identity.id});\n if (existIdtyInResult && existIdtyInResult.checked) {\n existIdtyInResult.checked = false;\n }\n }\n //e.preventDefault();\n };\n\n $scope.scanQrCode = function(){\n if (!Device.barcode.enable) {\n return;\n }\n Device.barcode.scan()\n .then(function(result) {\n if (!result) {\n return;\n }\n BMA.uri.parse(result)\n .then(function(obj){\n if (obj.pubkey) {\n $scope.search.text = obj.pubkey;\n }\n else if (result.uid) {\n $scope.search.text = obj.uid;\n }\n else {\n $scope.search.text = result;\n }\n $scope.doSearch();\n });\n })\n .catch(UIUtils.onError('ERROR.SCAN_FAILED'));\n };\n\n // Show help tip (show only not already shown)\n $scope.showHelpTip = function(index) {\n if (!$scope.isLogin()) return;\n index = angular.isDefined(index) ? index : csSettings.data.helptip.wotLookup;\n if (index < 0) return;\n if (index === 0) index = 1; // skip first step\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope();\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n return helptipScope.startWotLookupTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n csSettings.data.helptip.wotLookup = endIndex;\n csSettings.store();\n });\n };\n\n $scope.doDisplayResult = function(res, offset, size, total) {\n res = res || [];\n\n // pre-check result if already in selection\n if ($scope.allowMultiple && res.length && $scope.selection.length) {\n _.forEach($scope.selection, function(identity) {\n var identityInRes = _.findWhere(res, {id: identity.id});\n if (identityInRes) {\n identityInRes.checked = true;\n }\n });\n }\n\n if (!offset) {\n $scope.search.results = res || [];\n }\n else {\n $scope.search.results = $scope.search.results.concat(res);\n }\n $scope.search.total = angular.isDefined(total) ? total : undefined;\n $scope.search.loading = false;\n $scope.search.hasMore = $scope.search.results.length >= offset + size;\n\n $scope.smallscreen = UIUtils.screen.isSmall();\n\n if (!$scope.search.results.length) return;\n\n // Motion\n if (res.length > 0 && $scope.motion) {\n $scope.motion.show({selector: '.lookupForm .list .item', ink: true});\n }\n };\n\n /* -- show/hide popup -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/wot/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n}\n\nfunction WotLookupModalController($scope, $controller, $focus, csWallet, parameters){\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WotLookupCtrl', {$scope: $scope}));\n\n parameters = parameters || {};\n $scope.search.loading = false;\n $scope.enableFilter = angular.isDefined(parameters.enableFilter) ? parameters.enableFilter : false;\n $scope.enableWallets = angular.isDefined(parameters.enableWallets) ? (csWallet.isLogin() && csWallet.children.count() && parameters.enableWallets) : false;\n $scope.allowMultiple = angular.isDefined(parameters.allowMultiple) ? parameters.allowMultiple : false;\n $scope.parameters = parameters;\n $scope.showResultLabel = false;\n\n $scope.wotSearchTextId = 'wotSearchTextModal';\n\n if ($scope.allowMultiple && parameters.selection) {\n $scope.selection = parameters.selection;\n }\n\n var superEnter = $scope.enter;\n $scope.enter = function(e) {\n if ($scope.parameters && $scope.parameters.q) {\n $scope.search.text=$scope.parameters.q;\n if ($scope.parameters.q.trim().length > 2) {\n superEnter(e); // call enter, that launch the search\n }\n }\n };\n $scope.$on('modal.shown', $scope.enter);\n\n $scope.cancel = function(){\n $scope.closeModal();\n };\n\n $scope.select = function(identity){\n $scope.closeModal({\n pubkey: identity.pubkey,\n uid: identity.uid,\n name: identity.name && identity.name.replace(/<\\/?em>/ig, '')\n });\n };\n\n $scope.next = function() {\n $scope.closeModal($scope.selection);\n };\n\n $scope.updateLocationHref = function() {\n // Do NOT change location href\n };\n\n $scope.showHelpTip = function() {\n // silent\n };\n\n // removeIf(device)\n // Focus on search text (only if NOT device, to avoid keyboard opening)\n $focus($scope.wotSearchTextId);\n // endRemoveIf(device)\n}\n\n/**\n * Abtract controller that load identity, that expose some useful methods in $scope, like 'certify()'\n * @param $scope\n * @param $state\n * @param $timeout\n * @param UIUtils\n * @param Modals\n * @param csConfig\n * @param csWot\n * @param csWallet\n * @constructor\n */\nfunction WotIdentityAbstractController($scope, $rootScope, $state, $translate, $ionicHistory, $q,\n UIUtils, Modals, csConfig, csSettings, csCurrency, csWot, csWallet) {\n 'ngInject';\n\n $scope.formData = {\n hasSelf: true\n };\n $scope.disableCertifyButton = true;\n $scope.loading = true;\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.load = function(pubkey, uid, options) {\n return csWot.load(pubkey, uid, options)\n .then(function(identity){\n if (!identity) return UIUtils.onError('ERROR.IDENTITY_NOT_FOUND')().then($scope.showHome);\n $scope.formData = identity;\n var isLogin = csWallet.isLogin();\n $scope.revoked = identity.requirements && (identity.requirements.revoked || identity.requirements.pendingRevocation);\n $scope.canCertify = identity.hasSelf && !$scope.revoked && (!isLogin || !csWallet.isUserPubkey(pubkey) || csWallet.children.count() > 0);\n $scope.canSelectAndCertify = identity.hasSelf && (csWallet.isUserPubkey(pubkey) || csWallet.children.hasPubkey(pubkey));\n var cert = isLogin && _.find((identity.received_cert||[]).concat(identity.received_cert_pending||[]), function (cert) {\n return cert.pubkey === csWallet.data.pubkey && cert.valid && cert.expiresIn > csSettings.data.timeWarningExpire;\n });\n $scope.alreadyCertified = (!$scope.canCertify || !isLogin || csWallet.children.count() > 0) ? false : !!cert;\n $scope.disableCertifyButton = $scope.alreadyCertified || $scope.revoked;\n $scope.loading = false;\n })\n .catch(function(err) {\n $scope.loading = false;\n UIUtils.onError('ERROR.LOAD_IDENTITY_FAILED')(err);\n });\n };\n\n\n $scope.doUpdate = function(silent) {\n if (!silent) {\n $scope.loading = true;\n UIUtils.loading.show();\n }\n var options = {\n cache: false, // No cache\n blockUid: $scope.formData.blockUid || undefined\n };\n return $scope.load($scope.formData.pubkey, $scope.formData.uid, options)\n .then(UIUtils.loading.hide);\n };\n\n // Certify the current identity\n $scope.certify = function() {\n\n // Select wallet, if many\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n if (!wallet) return; // user cancelled\n\n // Need user auth - fix #513\n return wallet.auth({minData: true})\n .then(function(walletData) {\n UIUtils.loading.hide();\n\n if (!csCurrency.data.initPhase && !walletData.isMember) {\n UIUtils.alert.error(walletData.requirements.needSelf ?\n 'ERROR.NEED_MEMBER_ACCOUNT_TO_CERTIFY' : 'ERROR.NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF');\n return;\n }\n\n if (!csCurrency.data.initPhase && !$scope.formData.hasSelf) {\n UIUtils.alert.error('ERROR.IDENTITY_TO_CERTIFY_HAS_NO_SELF');\n return;\n }\n\n // Check identity not expired\n if ($scope.formData.requirements.expired) {\n UIUtils.alert.error('ERROR.IDENTITY_EXPIRED');\n return;\n }\n\n // Check not already certified\n var previousCert = _.find($scope.formData.received_cert, function(cert) {\n return cert.pubkey === wallet.data.pubkey && cert.valid && cert.expiresIn > csSettings.data.timeWarningExpire;\n });\n if (previousCert) {\n $translate('ERROR.IDENTITY_ALREADY_CERTIFY', previousCert)\n .then(function(message) {\n UIUtils.alert.error(message, 'ERROR.UNABLE_TO_CERTIFY_TITLE');\n });\n return;\n }\n\n // Check no pending certification\n previousCert = _.findWhere($scope.formData.received_cert_pending, { pubkey: wallet.data.pubkey, valid: true});\n if (previousCert) {\n $translate('ERROR.IDENTITY_ALREADY_CERTIFY_PENDING', previousCert)\n .then(function(message) {\n UIUtils.alert.error(message, 'ERROR.UNABLE_TO_CERTIFY_TITLE');\n });\n return;\n }\n\n UIUtils.alert.confirm('CONFIRM.CERTIFY_RULES', 'CONFIRM.POPUP_SECURITY_WARNING_TITLE', {\n cssClass: 'warning',\n okText: 'WOT.BTN_YES_CERTIFY',\n okType: 'button-assertive'\n })\n .then(function(confirm){\n if (!confirm) {\n return;\n }\n UIUtils.loading.show();\n wallet.certify($scope.formData.uid,\n $scope.formData.pubkey,\n $scope.formData.blockUid || ($scope.formData.requirements && $scope.formData.requirements.meta && $scope.formData.requirements.meta.timestamp),\n $scope.formData.requirements && $scope.formData.requirements.meta && $scope.formData.requirements.meta.sig,\n $scope.formData.isMember,\n $scope.formData.wasMember)\n .then(function(cert) {\n UIUtils.loading.hide();\n if (cert) {\n $scope.prepareNewCert(wallet, cert);\n $scope.alreadyCertified = true;\n UIUtils.toast.show('INFO.CERTIFICATION_DONE');\n $scope.formData.received_cert_pending.unshift(cert);\n $scope.formData.requirements.pendingCertificationCount++;\n $scope.doMotion();\n }\n })\n .catch(UIUtils.onError('ERROR.SEND_CERTIFICATION_FAILED'));\n });\n })\n .catch(function(err) {\n if (err === 'CANCELLED') return;\n UIUtils.onError('ERROR.LOGIN_FAILED')(err);\n });\n });\n };\n\n // Select an identity and certify\n $scope.selectAndCertify = function() {\n\n // Select wallet, if many\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n // Need user auth - fix #513\n return wallet.auth({minData: true})\n .then(function (walletData) {\n if (!csCurrency.data.initPhase && !walletData.isMember) {\n UIUtils.alert.error(walletData.requirements.needSelf || walletData.requirements.needMembership ?\n 'ERROR.NEED_MEMBER_ACCOUNT_TO_CERTIFY' : 'ERROR.NEED_MEMBER_ACCOUNT_TO_CERTIFY_HAS_SELF');\n return;\n }\n UIUtils.loading.hide();\n // Open Wot lookup modal\n return Modals.showWotLookup();\n })\n .then(function (idty) {\n if (!idty || !idty.pubkey) {\n return; // cancelled\n }\n if (!idty.uid) { // not a member\n UIUtils.alert.error('ERROR.IDENTITY_TO_CERTIFY_HAS_NO_SELF');\n return;\n }\n\n UIUtils.loading.show();\n\n var options = {cache: false, blockUid: idty.blockUid};\n\n // load selected identity\n return csWot.load(idty.pubkey, idty.uid, options);\n })\n\n .then(function (identity) {\n if (!identity) return; // cancelled\n UIUtils.loading.hide();\n if (!identity || !identity.hasSelf) {\n UIUtils.alert.error('ERROR.IDENTITY_TO_CERTIFY_HAS_NO_SELF');\n return;\n }\n\n // Check identity not expired\n if (identity.requirements.expired) {\n UIUtils.alert.error('ERROR.IDENTITY_EXPIRED');\n return;\n }\n\n // Check not already certified\n var previousCert = _.findWhere(identity.received_cert, {pubkey: wallet.data.pubkey, valid: true});\n if (previousCert) {\n $translate('ERROR.IDENTITY_ALREADY_CERTIFY', previousCert)\n .then(function (message) {\n UIUtils.alert.error(message, 'ERROR.UNABLE_TO_CERTIFY_TITLE');\n });\n return;\n }\n\n // Check not pending certification\n previousCert = _.findWhere(identity.received_cert_pending, {pubkey: wallet.data.pubkey, valid: true});\n if (previousCert) {\n $translate('ERROR.IDENTITY_ALREADY_CERTIFY_PENDING', previousCert)\n .then(function (message) {\n UIUtils.alert.error(message, 'ERROR.UNABLE_TO_CERTIFY_TITLE');\n });\n return;\n }\n\n // Ask confirmation\n $translate('CONFIRM.CERTIFY_RULES_TITLE_UID', {uid: identity.uid})\n .then(function (confirmTitle) {\n return UIUtils.alert.confirm('CONFIRM.CERTIFY_RULES', confirmTitle);\n })\n .then(function (confirm) {\n if (!confirm) {\n return;\n }\n UIUtils.loading.show();\n\n // Send certification\n wallet.certify(identity.uid,\n identity.pubkey,\n identity.blockUid || (identity.requirements && identity.requirements.meta && identity.requirements.meta.timestamp),\n identity.requirements && identity.requirements.meta && identity.requirements.meta.sig,\n identity.isMember,\n identity.wasMember)\n .then(function (cert) {\n UIUtils.loading.hide();\n if (!cert) return;\n return csWot.extendAll([cert], 'pubkey')\n .then(function () {\n UIUtils.toast.show('INFO.CERTIFICATION_DONE');\n $scope.formData.given_cert_pending.unshift(cert);\n $scope.doMotion();\n });\n })\n .catch(UIUtils.onError('ERROR.SEND_CERTIFICATION_FAILED'));\n });\n })\n .catch(function (err) {\n if (err === 'CANCELLED') return;\n UIUtils.onError('ERROR.LOAD_IDENTITY_FAILED')(err);\n });\n });\n };\n\n // Add wallet's data to a new cert\n $scope.prepareNewCert = function(wallet, cert) {\n cert.uid = wallet.data.uid;\n cert.pubkey = wallet.data.pubkey;\n cert.isMember = wallet.data.isMember;\n cert.avatar = wallet.data.avatar;\n cert.name = wallet.data.name;\n };\n\n $scope.removeActionParamInLocationHref = function(state) {\n if (!state || !state.stateParams || !state.stateParams.action) return;\n\n var stateParams = angular.copy(state.stateParams);\n\n // Reset action param\n stateParams.action = null;\n\n // Update location href\n $ionicHistory.nextViewOptions({\n disableAnimate: true,\n disableBack: false,\n historyRoot: false\n });\n $state.go(state.stateName, stateParams,\n {\n reload: false,\n inherit: true,\n notify: false\n });\n };\n\n $scope.doAction = function(action, options) {\n if (action == 'certify') {\n return $scope.certify();\n }\n if (action == 'transfer') {\n $scope.showTransferModal(options);\n }\n };\n\n /* -- open screens -- */\n\n $scope.showCertifications = function() {\n var block = $scope.formData.requirements && $scope.formData.requirements.alternatives && $scope.formData.blockUid || undefined;\n // Warn: do not use a simple link here (a ng-click is mandatory for help tour)\n if (UIUtils.screen.isSmall() ) {\n $state.go('app.wot_cert', {\n pubkey: $scope.formData.pubkey,\n uid: $scope.formData.uid,\n type: 'received',\n block: block\n });\n }\n else {\n $state.go('app.wot_cert_lg', {\n pubkey: $scope.formData.pubkey,\n uid: $scope.formData.uid,\n block: block\n });\n }\n };\n\n $scope.showGivenCertifications = function() {\n var block = $scope.formData.requirements && $scope.formData.requirements.alternatives && $scope.formData.blockUid || undefined;\n // Warn: do not use a simple link here (a ng-click is mandatory for help tour)\n if (UIUtils.screen.isSmall() ) {\n $state.go('app.wot_cert', {\n pubkey: $scope.formData.pubkey,\n uid: $scope.formData.uid,\n type: 'given',\n block: block\n });\n }\n else {\n $state.go('app.wot_cert_lg', {\n pubkey: $scope.formData.pubkey,\n uid: $scope.formData.uid,\n block: block\n });\n }\n };\n\n $scope.showSharePopover = function(event) {\n var title = $scope.formData.name || $scope.formData.uid || $scope.formData.pubkey;\n // Use shareBasePath (fix #530) or rootPath (fix #390)\n var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.wot_identity', {pubkey: $scope.formData.pubkey, uid: $scope.formData.uid});\n // Override default position, is small screen - fix #545\n if (UIUtils.screen.isSmall()) {\n event = angular.element(document.querySelector('#wot-share-anchor-'+$scope.formData.pubkey)) || event;\n }\n UIUtils.popover.share(event, {\n bindings: {\n url: url,\n titleKey: 'WOT.VIEW.POPOVER_SHARE_TITLE',\n titleValues: {title: title},\n postMessage: title\n }\n });\n };\n}\n\n/**\n * Identity view controller - should extend WotIdentityAbstractCtrl\n */\nfunction WotIdentityViewController($scope, $rootScope, $controller, $timeout, $state, UIUtils, Modals, csWallet) {\n 'ngInject';\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WotIdentityAbstractCtrl', {$scope: $scope}));\n\n $scope.motion = UIUtils.motion.fadeSlideInRight;\n $scope.qrcodeId = 'qrcode-wot-' + $scope.$id;\n\n // Init likes here, to be able to use in extension\n $scope.options = $scope.options || {};\n $scope.options.like = {\n kinds: ['LIKE', 'ABUSE'],\n index: 'user',\n type: 'profile'\n };\n $scope.likeData = {\n likes: {},\n abuses: {}\n };\n\n $scope.$on('$ionicView.enter', function(e, state) {\n\n var onLoadSuccess = function() {\n $scope.doMotion();\n if (state.stateParams && state.stateParams.action) {\n $timeout(function() {\n $scope.doAction(state.stateParams.action.trim());\n }, 100);\n\n $scope.removeActionParamInLocationHref(state);\n\n // Need by like controller\n $scope.likeData.id = $scope.formData.pubkey;\n }\n\n $scope.showQRCode();\n };\n var options = {\n cache: true,\n blockUid: state.stateParams && state.stateParams.block || undefined\n };\n\n if (state.stateParams &&\n state.stateParams.pubkey &&\n state.stateParams.pubkey.trim().length > 0) {\n if ($scope.loading) { // load once\n\n return $scope.load(state.stateParams.pubkey.trim(), state.stateParams.uid, options)\n .then(onLoadSuccess)\n .catch(UIUtils.onError(\"ERROR.LOAD_IDENTITY_FAILED\"));\n }\n }\n\n else if (state.stateParams &&\n state.stateParams.uid &&\n state.stateParams.uid.trim().length > 0) {\n if ($scope.loading) { // load once\n return $scope.load(null, state.stateParams.uid, options)\n .then(onLoadSuccess);\n }\n }\n\n // Redirect to home\n else {\n $scope.showHome();\n }\n\n });\n\n $scope.doMotion = function() {\n $scope.motion.show({selector: '.view-identity .list .item'});\n\n // Transfer button\n $scope.showFab('fab-transfer');\n\n // Certify button\n if (($scope.canCertify && !$scope.alreadyCertified) || $rootScope.tour) {\n $scope.showFab('fab-certify-' + $scope.formData.uid);\n }\n\n $scope.$broadcast('$csExtension.motion');\n };\n\n $scope.doQuickFix = function(event) {\n if (event === 'showSelectIdentities') {\n return $scope.showSelectIdentities();\n }\n };\n\n $scope.showSelectIdentities = function() {\n if (!$scope.formData.requirements || !$scope.formData.requirements.alternatives) return;\n\n return Modals.showSelectPubkeyIdentity({\n identities: [$scope.formData.requirements].concat($scope.formData.requirements.alternatives)\n })\n .then(function(res) {\n if (!res || !res.pubkey) return; // Skip if cancelled\n // open the identity\n return $state.go('app.wot_identity', {\n pubkey: res.pubkey,\n uid: res.uid,\n block: res.meta && res.meta.timestamp || res.blockUid\n });\n });\n };\n\n $scope.showQRCode = function(timeout) {\n if (!$scope.qrcodeId || !$scope.formData.pubkey) return; // Skip\n\n // Get the DIV element\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId + ' .content'));\n if (!element) {\n console.error(\"[wot-controller] Cannot found div #{0} for the QRCode. Skipping.\".format($scope.qrcodeId));\n return;\n }\n\n console.debug(\"[wot-controller] Generating QR code for identity...\");\n $timeout(function() {\n var svg = UIUtils.qrcode.svg($scope.formData.pubkey);\n element.html(svg);\n UIUtils.motion.toggleOn({selector: '#'+$scope.qrcodeId}, timeout || 1100);\n });\n };\n\n $scope.hideQRCode = function() {\n if (!$scope.qrcodeId) return;\n var element = angular.element(document.querySelector('#' + $scope.qrcodeId));\n if (element) {\n UIUtils.motion.toggleOff({selector: '#'+$scope.qrcodeId});\n }\n };\n}\n\n/**\n * Identity tx view controller\n */\nfunction WotIdentityTxViewController($scope, $timeout, $q, BMA, csSettings, csWot, csTx, UIUtils) {\n 'ngInject';\n\n $scope.formData= {};\n $scope.loading = true;\n $scope.motion = UIUtils.motion.fadeSlideInRight;\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if ($scope.loading) {\n $scope.pubkey = state.stateParams.pubkey;\n $scope.uid = state.stateParams.uid;\n $scope.load();\n }\n else {\n // update view\n $scope.updateView();\n }\n });\n\n // Load data\n $scope.load = function(fromTime) {\n return $q.all([\n csWot.extend({pubkey: $scope.pubkey}),\n csTx.load($scope.pubkey, fromTime)\n ])\n .then(function(res) {\n $scope.formData = angular.merge(res[0], res[1]);\n $scope.loading = false;\n $scope.updateView();\n });\n };\n\n // Updating data\n $scope.doUpdate = function(silent) {\n console.debug('[wot] TX history reloading...');\n $scope.formData = {};\n return (silent ?\n $scope.load() :\n UIUtils.loading.show()\n .then($scope.load)\n .then(UIUtils.loading.hide)\n )\n .then($scope.updateView)\n .catch(UIUtils.onError('ERROR.IDENTITY_TX_FAILED'));\n };\n\n // Update view\n $scope.updateView = function() {\n $scope.$broadcast('$$rebind::balance'); // force rebind balance\n $scope.$broadcast('$$rebind::rebind'); // force rebind\n $scope.motion.show();\n };\n\n $scope.downloadHistoryFile = function(options) {\n options = options || {};\n options.fromTime = options.fromTime || -1; // default: full history\n csTx.downloadHistoryFile($scope.pubkey, options);\n };\n\n $scope.showMoreTx = function(fromTime) {\n\n fromTime = fromTime ||\n ($scope.formData.tx.fromTime - csSettings.data.walletHistoryTimeSecond) ||\n (moment().utc().unix() - 2 * csSettings.data.walletHistoryTimeSecond);\n\n UIUtils.loading.show();\n return csTx.load($scope.pubkey, fromTime)\n .then(function(res) {\n angular.merge($scope.formData, res);\n $scope.updateView();\n UIUtils.loading.hide();\n })\n .catch(function(err) {\n // If http rest limitation: wait then retry\n if (err.ucode == BMA.errorCodes.HTTP_LIMITATION) {\n $timeout(function() {\n return $scope.showMoreTx(fromTime);\n }, 2000);\n }\n else {\n UIUtils.onError('ERROR.IDENTITY_TX_FAILED')(err);\n }\n });\n };\n\n}\n\n\n/**\n * Certifications controller - extend WotIdentityAbstractCtrl\n */\nfunction WotCertificationsViewController($scope, $rootScope, $controller, csSettings, csWallet, UIUtils) {\n 'ngInject';\n\n var wallet;\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('WotIdentityAbstractCtrl', {$scope: $scope}));\n\n // Values overwritten in tab controller (for small screen)\n $scope.motions = {\n receivedCertifications: angular.copy(UIUtils.motion.fadeSlideIn),\n givenCertifications: angular.copy(UIUtils.motion.fadeSlideInRight),\n avatar: angular.copy(UIUtils.motion.fadeIn),\n };\n $scope.motions.receivedCertifications.enable = true;\n $scope.motions.givenCertifications.enable = true;\n $scope.motions.avatar.enable = true;\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if (state.stateParams && state.stateParams.type) {\n $scope.motions.receivedCertifications.enable = (state.stateParams.type != 'given');\n $scope.motions.givenCertifications.enable = (state.stateParams.type == 'given');\n $scope.motions.avatar.enable = false;\n }\n\n // First load\n if ($scope.loading) {\n var options = {\n cache: true,\n blockUid: state.stateParams && state.stateParams.block || undefined\n };\n\n if (state.stateParams &&\n state.stateParams.pubkey &&\n state.stateParams.pubkey.trim().length > 0) {\n\n return $scope.load(state.stateParams.pubkey.trim(), state.stateParams.uid, options)\n .then(function () {\n $scope.doMotion();\n $scope.showHelpTip();\n });\n }\n\n else {\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n if (!wallet.isLogin()) {\n return $scope.showHome();\n }\n return $scope.load(wallet.data.pubkey, wallet.data.uid, options)\n .then(function () {\n $scope.doMotion();\n $scope.showHelpTip();\n });\n }\n }\n\n else {\n $scope.doMotion();\n }\n });\n\n $scope.$on('$ionicView.leave', function() {\n $scope.loading = true;\n });\n\n // Updating data\n $scope.doUpdate = function() {\n var options = {\n cache: false, // No cache\n blockUid: $scope.formData.blockUid || undefined\n };\n return $scope.load($scope.formData.pubkey, $scope.formData.uid, options)\n .then(function() {\n $scope.doMotion();\n $scope.showHelpTip();\n });\n };\n\n $scope.doMotion = function(skipItems) {\n\n // Motions received certifications part\n $scope.doMotionReceivedCertifications(0, skipItems);\n\n // Motion on avatar part\n if ($scope.motions.avatar.enable) {\n $scope.motions.avatar.show({selector: '.col-avatar .' + $scope.motions.avatar.ionListClass});\n }\n\n // Motion on given certification part\n $scope.doMotionGivenCertifications($scope.motions.receivedCertifications.enable ? 100 : 10, skipItems);\n };\n\n // Effects on received certifcations\n $scope.doMotionReceivedCertifications = function(timeout, skipItems) {\n if ($scope.motions.receivedCertifications.enable) {\n if (!skipItems) {\n $scope.motions.receivedCertifications.show({selector: '.list.certifications .item', timeout: timeout});\n }\n\n // Fab button\n if (($scope.canCertify && !$scope.alreadyCertified) || $rootScope.tour) {\n $scope.showFab('fab-certify', timeout);\n }\n }\n // If not enable, make sure to hide fab button\n else {\n // Hide fab button\n if ($scope.canCertify || $rootScope.tour) {\n $scope.hideFab('fab-certify', 0);\n }\n }\n };\n\n // Effects on given certifcations\n $scope.doMotionGivenCertifications = function(timeout, skipItems) {\n\n if ($scope.motions.givenCertifications.enable) {\n if (!skipItems) {\n $scope.motions.givenCertifications.show({selector: '.list.given-certifications .item', timeout: timeout});\n }\n // Fab button\n if ($scope.canSelectAndCertify || $rootScope.tour) {\n $scope.showFab('fab-select-certify');\n }\n }\n\n // If not enable, make sure to hide fab button\n else {\n // Hide fab button\n if ($scope.canSelectAndCertify || $rootScope.tour) {\n $scope.hideFab('fab-select-certify', 0);\n }\n }\n };\n\n // Show help tip\n $scope.showHelpTip = function() {\n if (!$scope.isLogin()) return;\n if (!csSettings.data.helptip.enable) return;\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope();\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n var isWallet = csWallet.isUserPubkey($scope.formData.pubkey);\n var index = isWallet ? csSettings.data.helptip.walletCerts : csSettings.data.helptip.wotCerts;\n if (index < 0) return;\n\n var startFunc = isWallet ?\n helptipScope.startWalletCertTour(index, false) :\n helptipScope.startWotCertTour(index, false);\n\n return startFunc.then(function(endIndex) {\n helptipScope.$destroy();\n if (isWallet) {\n csSettings.data.helptip.walletCerts = endIndex;\n }\n else {\n csSettings.data.helptip.wotCerts = endIndex;\n }\n csSettings.store();\n });\n };\n}\n\n\n/**\n * Select identities from a pubkey (useful when many self on the same pubkey)\n * @param $scope\n * @param $q\n * @param csWot\n * @param parameters\n * @constructor\n */\nfunction WotSelectPubkeyIdentityModalController($scope, $q, csWot, parameters) {\n\n $scope.loading = true;\n\n $scope.load = function() {\n // If list of identities given by parameters: use it\n if (parameters && parameters.identities) {\n $scope.identities = parameters.identities;\n $scope.pubkey = $scope.identities[0].pubkey;\n $scope.loading = false;\n return $q.when();\n }\n\n // Or load from pubkey\n $scope.pubkey = parameters && parameters.pubkey;\n if (!pubkey) {\n return $q.reject('Missing parameters: [pubkey] or [identities]');\n }\n\n return csWot.loadRequirements({pubkey: pubkey, uid: uid})\n .then(function(data) {\n if (data && data.requirements) {\n $scope.identities = data.requirements;\n if (data.requirements.alternatives) {\n $scope.identities = [data.requirements].concat(data.requirements.alternatives);\n }\n else {\n $scope.identities = [data.requirements];\n }\n }\n $scope.loading = false;\n });\n };\n $scope.$on('modal.shown', $scope.load);\n}\n","\nNetworkLookupController.$inject = ['$scope', '$state', '$location', '$ionicPopover', '$window', '$translate', 'BMA', 'UIUtils', 'csConfig', 'csSettings', 'csCurrency', 'csNetwork', 'csWot'];\nPeerViewController.$inject = ['$scope', '$q', '$window', '$state', 'UIUtils', 'csWot', 'BMA'];\nNetworkLookupModalController.$inject = ['$scope', '$controller', 'parameters'];\nNetworkLookupPopoverController.$inject = ['$scope', '$controller'];\nPeerInfoPopoverController.$inject = ['$scope', '$q', 'csSettings', 'csCurrency', 'csHttp', 'BMA'];\nangular.module('cesium.network.controllers', ['cesium.services'])\n\n.config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.network', {\n url: \"/network?type&expert\",\n cache: false, // fix #766\n views: {\n 'menuContent': {\n templateUrl: \"templates/network/view_network.html\",\n controller: 'NetworkLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n\n .state('app.view_peer', {\n url: \"/network/peer/:server?ssl&tor\",\n cache: false,\n views: {\n 'menuContent': {\n templateUrl: \"templates/network/view_peer.html\",\n controller: 'PeerViewCtrl'\n }\n },\n data: {\n preferHttp: true // avoid HTTPS if config has httpsMode=clever\n }\n });\n}])\n\n.controller('NetworkLookupCtrl', NetworkLookupController)\n\n.controller('PeerViewCtrl', PeerViewController)\n\n.controller('NetworkLookupModalCtrl', NetworkLookupModalController)\n\n.controller('NetworkLookupPopoverCtrl', NetworkLookupPopoverController)\n\n.controller('PeerInfoPopoverCtrl', PeerInfoPopoverController)\n\n;\n\nfunction NetworkLookupController($scope, $state, $location, $ionicPopover, $window, $translate,\n BMA, UIUtils, csConfig, csSettings, csCurrency, csNetwork, csWot) {\n 'ngInject';\n\n $scope.networkStarted = false;\n $scope.ionItemClass = '';\n $scope.expertMode = csSettings.data.expertMode && !UIUtils.screen.isSmall();\n $scope.isHttps = ($window.location.protocol === 'https:');\n $scope.search = {\n text: '',\n loading: true,\n type: undefined,\n results: [],\n endpoint: null,\n bma: undefined,\n ssl: undefined,\n ws2p: undefined,\n sort : undefined,\n asc: true\n };\n $scope.compactMode = true;\n $scope.listeners = [];\n $scope.helptipPrefix = 'helptip-network';\n $scope.enableLocationHref = true; // can be overrided by sub-controller (e.g. popup)\n\n $scope.removeListeners = function() {\n if ($scope.listeners.length) {\n console.debug(\"[network] Closing listeners\");\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n }\n };\n\n /**\n * Enter in view\n */\n $scope.enter = function(e, state) {\n if ($scope.networkStarted) return;\n $scope.networkStarted = true;\n $scope.search.loading = true;\n csCurrency.get()\n .then(function (currency) {\n if (currency) {\n var isDefaultNode = BMA.node.same(currency.node);\n $scope.node = isDefaultNode ? BMA :\n BMA.instance(currency.node.host, currency.node.port);\n if (state && state.stateParams) {\n if (state.stateParams.type && ['mirror', 'member', 'offline'].indexOf(state.stateParams.type) != -1) {\n $scope.search.type = state.stateParams.type;\n }\n if (state.stateParams.expert) {\n $scope.expertMode = (state.stateParams.expert == 'true');\n }\n }\n $scope.load();\n }\n })\n .catch(function(err) {\n UIUtils.onError('ERROR.GET_CURRENCY_FAILED')(err);\n $scope.networkStarted = false;\n });\n };\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n /**\n * Leave the view\n */\n $scope.leave = function() {\n // Close node, if not the default BMA\n if ($scope.node !== BMA) {\n $scope.node.close();\n }\n if (!$scope.networkStarted) return;\n $scope.removeListeners();\n csNetwork.close();\n $scope.networkStarted = false;\n $scope.search.loading = true;\n };\n $scope.$on('$ionicView.beforeLeave', $scope.leave);\n $scope.$on('$ionicParentView.beforeLeave', $scope.leave);\n $scope.$on('$destroy', $scope.leave);\n\n\n $scope.computeOptions = function() {\n var options = {\n filter: {\n member: (!$scope.search.type || $scope.search.type === 'member'),\n mirror: (!$scope.search.type || $scope.search.type === 'mirror'),\n endpoint : (angular.isDefined($scope.search.endpoint) ? $scope.search.endpoint : null),\n bma : $scope.search.bma,\n ssl : $scope.search.ssl,\n ws2p : $scope.search.ws2p,\n online: !($scope.search.type && $scope.search.type === 'offline')\n },\n sort: {\n type : $scope.search.sort,\n asc : $scope.search.asc\n },\n expertMode: $scope.expertMode,\n // larger timeout when on expert mode\n timeout: csConfig.timeout && ($scope.expertMode ? (csConfig.timeout / 10) : (csConfig.timeout / 100))\n };\n return options;\n };\n\n $scope.load = function() {\n\n if ($scope.search.loading){\n // Start network scan\n csNetwork.start($scope.node, $scope.computeOptions());\n\n // Catch event on new peers\n $scope.refreshing = false;\n $scope.listeners.push(\n csNetwork.api.data.on.changed($scope, function(data){\n if (!$scope.refreshing) {\n $scope.refreshing = true;\n csWot.extendAll(data.peers)\n .then(function() {\n // Avoid to refresh if view has been leaving\n if ($scope.networkStarted) {\n $scope.updateView(data);\n }\n $scope.refreshing = false;\n });\n }\n }));\n }\n\n // Show help tip\n $scope.showHelpTip();\n };\n\n $scope.updateView = function(data) {\n console.debug(\"[peers] Updating UI\");\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n $scope.search.results = data.peers;\n $scope.search.memberPeersCount = data.memberPeersCount;\n // Always tru if network not started (e.g. after leave+renter the view)\n $scope.search.loading = !$scope.networkStarted || csNetwork.isBusy();\n if (!$scope.loading) {\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n }\n if ($scope.motion && $scope.search.results && $scope.search.results.length > 0) {\n $scope.motion.show({selector: '.item-peer'});\n }\n };\n\n $scope.refresh = function() {\n // Network\n $scope.search.loading = true;\n csNetwork.loadPeers();\n };\n\n $scope.sort = function() {\n $scope.search.loading = true;\n $scope.refreshing = true;\n csNetwork.sort($scope.computeOptions());\n $scope.updateView(csNetwork.data);\n };\n\n $scope.toggleSearchType = function(type){\n $scope.hideActionsPopover();\n if ($scope.search.type === type || type === 'none') {\n $scope.search.type = undefined;\n }\n else {\n $scope.search.type = type;\n }\n csNetwork.close();\n $scope.search.loading = true;\n $scope.load();\n\n // Update location href\n if ($scope.enableLocationHref) {\n $location.search({type: $scope.search.type}).replace();\n }\n };\n\n $scope.toggleSearchEndpoint = function(endpoint){\n $scope.hideActionsPopover();\n if ($scope.search.endpoint === endpoint || endpoint === null) {\n $scope.search.endpoint = null;\n }\n else {\n $scope.search.endpoint = endpoint;\n }\n $scope.sort();\n };\n\n $scope.toggleSort = function(sort){\n if ($scope.search.sort === sort && !$scope.search.asc) {\n $scope.search.asc = undefined;\n $scope.search.sort = undefined;\n }\n else {\n $scope.search.asc = ($scope.search.sort === sort) ? !$scope.search.asc : true;\n $scope.search.sort = sort;\n }\n $scope.sort();\n };\n\n $scope.toggleCompactMode = function() {\n $scope.compactMode = !$scope.compactMode;\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n };\n\n $scope.selectPeer = function(peer) {\n if (peer.compacted && $scope.compactMode) {\n $scope.toggleCompactMode();\n return;\n }\n\n // Skip offline or not a BMA peer\n if (!peer.online || !peer.hasBma()) return;\n\n var stateParams = {server: peer.getServer()};\n if (peer.isSsl()) {\n stateParams.ssl = true;\n }\n if (peer.isTor()) {\n stateParams.tor = true;\n }\n $state.go('app.view_peer', stateParams);\n };\n\n $scope.$on('csView.action.refresh', function(event, context) {\n if (context === 'peers') {\n $scope.refresh();\n }\n });\n\n $scope.$on('csView.action.showActionsPopover', function(event, clickEvent) {\n $scope.showActionsPopover(clickEvent);\n });\n\n /* -- popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/network/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n $scope.showEndpointsPopover = function($event, peer, endpointName) {\n $event.preventDefault();\n $event.stopPropagation();\n\n var endpoints = peer.getEndpoints(endpointName);\n endpoints = (endpoints||[]).reduce(function(res, ep) {\n var bma = BMA.node.parseEndPoint(ep) || BMA.node.parseEndPoint(ep, endpointName);\n return res.concat({\n label: 'NETWORK.VIEW.NODE_ADDRESS',\n value: peer.getServer(bma) + (bma && bma.path||'')\n });\n }, []);\n if (!endpoints.length) return;\n\n // Call extension points\n UIUtils.popover.show($event, {\n templateUrl: 'templates/network/popover_endpoints.html',\n bindings: {\n titleKey: 'NETWORK.VIEW.ENDPOINTS.' + endpointName,\n items: endpoints\n }\n });\n };\n\n $scope.showWs2pPopover = function($event, peer) {\n $event.stopPropagation();\n\n return $translate('NETWORK.VIEW.PRIVATE_ACCESS')\n .then(function(privateAccessMessage) {\n UIUtils.popover.show($event, {\n templateUrl: 'templates/network/popover_endpoints.html',\n bindings: {\n titleKey: 'NETWORK.VIEW.ENDPOINTS.WS2P',\n valueKey: 'NETWORK.VIEW.NODE_ADDRESS',\n items: [\n {\n label: 'NETWORK.VIEW.NODE_ADDRESS',\n value: !peer.bma.private ? (peer.getServer() + (peer.bma.path||'')) : privateAccessMessage\n },\n {\n label: 'NETWORK.VIEW.WS2PID',\n value: peer.bma.ws2pid\n },\n {\n label: 'NETWORK.VIEW.POW_PREFIX',\n value: peer.powPrefix\n }]\n }\n });\n });\n };\n\n\n\n /* -- help tip -- */\n\n // Show help tip\n $scope.showHelpTip = function(index, isTour) {\n index = angular.isDefined(index) ? index : csSettings.data.helptip.network;\n isTour = angular.isDefined(isTour) ? isTour : false;\n if (index < 0) return;\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope();\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n helptipScope.tour = isTour;\n\n return helptipScope.startNetworkTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n if (!isTour) {\n csSettings.data.helptip.network = endIndex;\n csSettings.store();\n }\n });\n };\n}\n\n\nfunction NetworkLookupModalController($scope, $controller, parameters) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('NetworkLookupCtrl', {$scope: $scope}));\n\n // Read parameters\n parameters = parameters || {};\n $scope.enableFilter = angular.isDefined(parameters.enableFilter) ? parameters.enableFilter : true;\n $scope.search.type = angular.isDefined(parameters.type) ? parameters.type : $scope.search.type;\n $scope.search.endpoint = angular.isDefined(parameters.endpoint) ? parameters.endpoint : $scope.search.endpoint;\n $scope.search.bma = angular.isDefined(parameters.bma) ? parameters.bma : $scope.search.bma;\n $scope.search.ssl = angular.isDefined(parameters.ssl) ? parameters.ssl : $scope.search.ssl;\n $scope.search.ws2p = angular.isDefined(parameters.ws2p) ? parameters.ws2p : $scope.search.ws2p;\n $scope.expertMode = angular.isDefined(parameters.expertMode) ? parameters.expertMode : $scope.expertMode;\n $scope.ionItemClass = parameters.ionItemClass || 'item-border-large';\n $scope.enableLocationHref = false;\n $scope.helptipPrefix = '';\n\n $scope.selectPeer = function(peer) {\n $scope.closeModal(peer);\n };\n\n $scope.$on('modal.hidden', function(){\n $scope.leave();\n });\n\n // Disable this unsed method - called by load()\n $scope.showHelpTip = function() {};\n\n // Enter the modal\n $scope.enter();\n}\n\n\nfunction NetworkLookupPopoverController($scope, $controller) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('NetworkLookupCtrl', {$scope: $scope}));\n\n // Read parameters\n var parameters = parameters || {};\n $scope.enableFilter = angular.isDefined(parameters.enableFilter) ? parameters.enableFilter : true;\n $scope.search.type = angular.isDefined(parameters.type) ? parameters.type : $scope.search.type;\n $scope.search.endpoint = angular.isDefined(parameters.endpoint) ? parameters.endpoint : $scope.search.endpoint;\n $scope.expertMode = angular.isDefined(parameters.expertMode) ? parameters.expertMode : $scope.expertMode;\n $scope.ionItemClass = parameters.ionItemClass || 'item-border-large';\n $scope.helptipPrefix = '';\n\n $scope.selectPeer = function(peer) {\n $scope.closePopover(peer);\n };\n\n $scope.$on('popover.hidden', function(){\n $scope.leave();\n });\n\n // Disable this unsed method - called by load()\n $scope.showHelpTip = function() {};\n\n // Enter the popover\n $scope.enter();\n}\n\nfunction PeerInfoPopoverController($scope, $q, csSettings, csCurrency, csHttp, BMA) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.formData = {};\n\n $scope.load = function() {\n\n console.debug(\"[peer-popover] Loading peer info...\");\n $scope.loading = true;\n $scope.formData = {};\n\n return $q.all([\n // get current block\n csCurrency.blockchain.current()\n .then(function(block) {\n $scope.formData.number = block.number;\n $scope.formData.medianTime = block.medianTime;\n $scope.formData.powMin = block.powMin;\n $scope.formData.useSsl = BMA.useSsl;\n })\n .catch(function() {\n delete $scope.formData.number;\n delete $scope.formData.medianTime;\n delete $scope.formData.powMin;\n delete $scope.formData.useSsl;\n // continue\n }),\n\n // Get node current version\n BMA.node.summary()\n .then(function(res){\n $scope.formData.version = res && res.duniter && res.duniter.version;\n $scope.formData.software = res && res.duniter && res.duniter.software;\n })\n .catch(function() {\n delete $scope.formData.version;\n delete $scope.formData.software;\n // continue\n }),\n\n // Get latest version\n BMA.version.latest()\n .then(function(latestRelease){\n $scope.formData.latestRelease = latestRelease;\n })\n .catch(function() {\n delete $scope.formData.latestRelease;\n // continue\n })\n ])\n .then(function() {\n // Compare, to check if newer\n if ($scope.formData.latestRelease && $scope.formData.software == 'duniter') {\n var compare = csHttp.version.compare($scope.formData.version, $scope.formData.latestRelease.version);\n $scope.formData.isPreRelease = compare > 0;\n $scope.formData.hasNewRelease = compare < 0;\n }\n else {\n $scope.formData.isPreRelease = false;\n $scope.formData.hasNewRelease = false;\n }\n $scope.loading = false;\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n });\n };\n\n // Update UI on new block\n csCurrency.api.data.on.newBlock($scope, function(block) {\n if ($scope.loading) return;\n console.debug(\"[peer info] Received new block. Reload content\");\n $scope.load();\n });\n\n // Update UI on settings changed\n csSettings.api.data.on.changed($scope, function(data) {\n if ($scope.loading) return;\n console.debug(\"[peer info] Peer settings changed. Reload content\");\n $scope.load();\n });\n\n // Load data when enter\n $scope.load();\n}\n\nfunction PeerViewController($scope, $q, $window, $state, UIUtils, csWot, BMA) {\n 'ngInject';\n\n $scope.node = {};\n $scope.loading = true;\n $scope.isHttps = ($window.location.protocol === 'https:');\n $scope.isReachable = true;\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.$on('$ionicView.enter', function(e, state) {\n var isDefaultNode = !state.stateParams || !state.stateParams.server;\n var server = state.stateParams && state.stateParams.server || BMA.server;\n var useSsl = state.stateParams && state.stateParams.ssl == \"true\" || (isDefaultNode ? BMA.useSsl : false);\n var useTor = state.stateParams.tor == \"true\" || (isDefaultNode ? BMA.useTor : false);\n\n return $scope.load(server, useSsl, useTor)\n .then(function() {\n return $scope.$broadcast('$csExtension.enter', e, state);\n })\n .then(function(){\n $scope.loading = false;\n })\n .catch(function() {\n $scope.loading = false;\n });\n });\n\n $scope.load = function(server, useSsl, useTor) {\n var node = {\n server: server,\n host: server,\n useSsl: useSsl,\n useTor: useTor\n };\n var serverParts = server.split(':');\n if (serverParts.length === 2) {\n node.host = serverParts[0];\n node.port = serverParts[1];\n }\n\n angular.merge($scope.node,\n useTor ?\n // For TOR, use a web2tor to access the endpoint\n BMA.lightInstance(node.host + \".to\", 443, true/*ssl*/, 60000 /*long timeout*/) :\n BMA.lightInstance(node.host, node.port, node.useSsl),\n node);\n\n $scope.isReachable = !$scope.isHttps || useSsl;\n if (!$scope.isReachable) {\n // Get node from the default BMA node\n return BMA.network.peers()\n .then(function(res) {\n // find the current peer\n var peers = (res && res.peers || []).reduce(function(res, json) {\n var peer = new Peer(json);\n return (peer.getEndpoints('BASIC_MERKLED_API') || []).reduce(function(res, ep) {\n var bma = BMA.node.parseEndPoint(ep);\n if((bma.dns === node.host || bma.ipv4 === node.host || bma.ipv6 === node.host) && (\n bma.port == node.port)) {\n peer.bma = bma;\n return res.concat(peer);\n }\n return res;\n }, res);\n }, []);\n var peer = peers.length && peers[0];\n\n // Current node found\n if (peer) {\n $scope.node.pubkey = peer.pubkey;\n $scope.node.currency = peer.currency;\n return csWot.extend($scope.node);\n }\n else {\n console.warn('Could not get peer from /network/peers');\n }\n });\n }\n\n return $q.all([\n\n // Get node peer info\n $scope.node.network.peering.self()\n .then(function(json) {\n $scope.node.pubkey = json.pubkey;\n $scope.node.currency = json.currency;\n })\n .catch(function(err){\n console.error(err && err.message || err);\n }),\n\n // Get known peers\n $scope.node.network.peers()\n .then(function(json) {\n var peers = (json && json.peers || []).map(function (p) {\n var peer = new Peer(p);\n peer.online = p.status === 'UP';\n peer.buid = peer.block;\n peer.blockNumber = peer.buid && peer.buid.split('-')[0];\n peer.dns = peer.getDns();\n peer.id = peer.keyID();\n peer.server = peer.getServer();\n return peer;\n });\n\n // Extend (add uid+name+avatar)\n return csWot.extendAll([$scope.node].concat(peers))\n .then(function() {\n // Final sort\n $scope.peers = _.sortBy(peers, function(p) {\n var score = 1;\n score += 10000 * (p.online ? 1 : 0);\n score += 1000 * (p.hasMainConsensusBlock ? 1 : 0);\n score += 100 * (p.uid ? 1 : 0);\n return -score;\n });\n $scope.motion.show({selector: '.item-peer'});\n });\n }),\n\n // Get current block\n $scope.node.blockchain.current()\n .then(function(json) {\n $scope.current = json;\n })\n ])\n .catch(function(err) {\n console.error(err && err.message || err);\n UIUtils.onError(useTor ? \"PEER.VIEW.ERROR.LOADING_TOR_NODE_ERROR\" : \"PEER.VIEW.ERROR.LOADING_NODE_ERROR\")(err);\n throw err;\n });\n };\n\n $scope.selectPeer = function(peer) {\n // Skipp offline or WS2P node\n if (!peer.online || peer.isWs2p()) return;\n\n var stateParams = {server: peer.getServer()};\n if (peer.isSsl()) {\n stateParams.ssl = true;\n }\n if (peer.isTor()) {\n stateParams.tor = true;\n }\n $state.go('app.view_peer', stateParams);\n };\n\n /* -- manage link to raw document -- */\n\n $scope.openRawPeering = function(event) {\n return $scope.openLink(event, $scope.node.url + '/network/peering');\n };\n\n $scope.openRawCurrentBlock = function(event) {\n return $scope.openLink(event, $scope.node.url + '/blockchain/current');\n };\n}\n","\nCurrencyViewController.$inject = ['$scope', '$q', '$timeout', '$ionicPopover', 'Modals', 'BMA', 'UIUtils', 'csSettings', 'csCurrency', 'csNetwork', 'ModalUtils'];\nCurrencyLicenseModalController.$inject = ['$scope', '$http', 'UIUtils', 'csSettings', 'FileSaver'];\nangular.module('cesium.currency.controllers', ['ngFileSaver', 'cesium.services'])\n\n.config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.currency', {\n url: \"/currency\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/currency/view_currency.html\",\n controller: 'CurrencyViewCtrl'\n }\n },\n data: {\n large: 'app.currency_lg'\n }\n })\n\n .state('app.currency.tab_parameters', {\n url: \"/parameters\",\n views: {\n 'tab-parameters': {\n templateUrl: \"templates/currency/tabs/tab_parameters.html\"\n }\n }\n })\n\n .state('app.currency.tab_wot', {\n url: \"/community\",\n views: {\n 'tab-wot': {\n templateUrl: \"templates/currency/tabs/tab_wot.html\"\n }\n }\n })\n\n .state('app.currency.tab_network', {\n url: \"/network\",\n views: {\n 'tab-network': {\n templateUrl: \"templates/currency/tabs/tab_network.html\",\n controller: 'NetworkLookupCtrl'\n }\n }\n })\n\n .state('app.currency.tab_blocks', {\n url: \"/blocks\",\n views: {\n 'tab-blocks': {\n templateUrl: \"templates/currency/tabs/tab_blocks.html\",\n controller: 'BlockLookupCtrl'\n }\n }\n })\n\n .state('app.currency_lg', {\n url: \"/currency/lg\",\n cache: false,\n views: {\n 'menuContent': {\n templateUrl: \"templates/currency/view_currency_lg.html\",\n controller: 'CurrencyViewCtrl'\n }\n }\n })\n ;\n\n}])\n\n .controller('CurrencyViewCtrl', CurrencyViewController)\n\n .controller('CurrencyLicenseModalCtrl', CurrencyLicenseModalController)\n;\n\nfunction CurrencyViewController($scope, $q, $timeout, $ionicPopover, Modals, BMA, UIUtils, csSettings, csCurrency, csNetwork, ModalUtils) {\n 'ngInject';\n\n $scope.formData = {\n useRelative: false, // Override in enter()\n currency: '',\n M: 0,\n MoverN: 0,\n UD: 0,\n cactual: 0,\n c: 0,\n dt: 0,\n sigQty: 0,\n sigStock: 0,\n msWindow: 0,\n msValidity: 0,\n sigWindow: 0,\n sigValidity: 0,\n sigPeriod: 0,\n medianTime : 0,\n difficulty : 0,\n Nprev: 0,\n stepMax: 0,\n sentries: 0,\n xpercent: 0,\n durationFromLastUD: 0,\n blockUid: null,\n dtReeval: 0,\n udReevalTime0: 0,\n allRules: angular.isDefined(csSettings.data.currency && csSettings.data.currency.allRules) ?\n csSettings.data.currency.allRules :\n csSettings.data.expertMode,\n allWotRules: angular.isDefined(csSettings.data.currency && csSettings.data.currency.allWotRules) ?\n csSettings.data.currency.allWotRules :\n csSettings.data.expertMode,\n licenseUrl: csSettings.getLicenseUrl()\n };\n $scope.loading = true;\n $scope.screen = UIUtils.screen;\n\n $scope.enter = function(e, state) {\n if ($scope.loading) { // run only once (first enter)\n $scope.formData.useRelative = csSettings.data.useRelative;\n csCurrency.get()\n .then($scope.load)\n .then(function() {\n // Show help tip, if login\n if ($scope.isLogin()) {\n $scope.showHelpTip();\n }\n })\n .catch(UIUtils.onError('ERROR.GET_CURRENCY_FAILED'));\n\n csNetwork.api.data.on.mainBlockChanged($scope, function(mainBlock) {\n if ($scope.loading) return;\n if ($scope.formData.blockUid !== mainBlock.buid) {\n console.debug(\"[currency] Updating parameters UI (new main block detected)\");\n $timeout($scope.load, 1000 /*waiting propagation to requested node*/);\n }\n });\n }\n // Notify extensions\n $scope.$broadcast('$csExtension.enter', state);\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function() {\n // Load data from node\n var data = {}, M, lastUDTime, now = Date.now();\n return $q.all([\n\n // Get the currency parameters\n BMA.blockchain.parameters()\n .then(function(json){\n data.currency = json.currency;\n data.c = json.c;\n data.dt = json.dt;\n data.sigQty = json.sigQty;\n data.sigStock = json.sigStock;\n data.msWindow = json.msWindow;\n data.msValidity = json.msValidity;\n data.sigWindow = json.sigWindow;\n data.sigValidity = json.sigValidity;\n data.sigPeriod = json.sigPeriod;\n data.stepMax = json.stepMax;\n data.xpercent = json.xpercent;\n data.avgGenTime = json.avgGenTime;\n data.dtReeval = json.dtReeval;\n data.udTime0 = json.udTime0;\n data.udReevalTime0 = json.udReevalTime0;\n\n // Compat with Duniter < 1.0\n if (!data.dtReeval) {\n data.dtReeval = data.dt;\n }\n }),\n\n // Get the current block information\n csCurrency.blockchain.current()\n .then(function(block){\n M = block.monetaryMass;\n data.N = block.membersCount;\n data.medianTime = block.medianTime;\n data.difficulty = block.powMin;\n data.blockUid = [block.number, block.hash].join('-');\n })\n .catch(function(err){\n // Special case for currency init (root block not exists): use fixed values\n if (err && err.ucode == BMA.errorCodes.NO_CURRENT_BLOCK) {\n M = 0;\n data.N = 0;\n data.medianTime = moment().utc().unix();\n data.difficulty = 0;\n data.blockUid = null;\n return;\n }\n throw err;\n }),\n\n // Get the UD informations\n BMA.blockchain.stats.ud()\n .then(function(res){\n if (res.result.blocks.length) {\n var lastBlockWithUD = res.result.blocks[res.result.blocks.length - 1];\n return BMA.blockchain.block({ block: lastBlockWithUD })\n .then(function(block){\n data.currentUD = (block.unitbase > 0) ? block.dividend * Math.pow(10, block.unitbase) : block.dividend;\n lastUDTime = block.medianTime;\n data.Nprev = block.membersCount;\n });\n }\n // block #0\n else {\n lastUDTime=0;\n data.Nprev=0;\n return BMA.blockchain.parameters()\n .then(function(json){\n data.currentUD = json.ud0;\n });\n }\n })\n ])\n\n // Process loaded data\n .then(function(){\n var Mprev = M - data.currentUD * data.Nprev; // remove fresh money\n var MoverNprev = data.Nprev ? (Mprev / data.Nprev) : 0;\n data.cactual = MoverNprev ? 100 * data.currentUD / MoverNprev : 0;\n data.M = M;\n data.MoverN = data.Nprev ? ((Mprev ? Mprev : M/*need at currency start only*/) / data.Nprev) : 0;\n data.UD = data.currentUD;\n data.durationFromLastUD = lastUDTime ? data.medianTime - lastUDTime : 0;\n data.sentries = Math.ceil(Math.pow(data.N, 1/ data.stepMax));\n\n // Apply to formData\n angular.extend($scope.formData, data);\n\n console.debug(\"[currency] Parameters loaded in \" + (Date.now() - now) + 'ms' );\n $scope.loading = false;\n $scope.$broadcast('$$rebind::rebind'); // force bind of currency name\n\n // Set Ink\n UIUtils.ink();\n\n return UIUtils.loading.hide();\n })\n .catch(function(err) {\n $scope.loading = false;\n UIUtils.onError('ERROR.LOAD_PEER_DATA_FAILED')(err);\n });\n };\n\n $scope.refresh = function() {\n if ($scope.loading) return;\n\n $scope.loading= true;\n UIUtils.loading.show();\n\n // Load data\n return $scope.load()\n .then(function() {\n // Notify extensions\n $scope.$broadcast('csView.action.refresh', 'currency');\n });\n };\n\n $scope.refreshPeers = function() {\n $scope.$broadcast('csView.action.refresh', 'peers');\n return $q.when(); // need by 'ion-refresher'\n };\n\n $scope.showExtendActionsPopover = function(event) {\n $scope.$broadcast('csView.action.showActionsPopover', event);\n };\n\n $scope.onAllRulesChange = function() {\n csSettings.data.currency = csSettings.data.currency || {};\n if (csSettings.data.currency.allRules !== $scope.formData.allRules) {\n csSettings.data.currency.allRules = $scope.formData.allRules;\n csSettings.store();\n }\n };\n $scope.$watch('formData.allRules', $scope.onAllRulesChange);\n\n $scope.onAllWotRulesChange = function() {\n csSettings.data.currency = csSettings.data.currency || {};\n if (csSettings.data.currency.allWotRules !== $scope.formData.allWotRules) {\n csSettings.data.currency.allWotRules = $scope.formData.allWotRules;\n csSettings.store();\n }\n };\n $scope.$watch('formData.allWotRules', $scope.onAllWotRulesChange);\n\n /* -- help tip -- */\n\n\n $scope.startCurrencyTour = function() {\n $scope.hideActionsPopover();\n return $scope.showHelpTip(0, true);\n };\n\n $scope.showHelpTip = function(index, isTour) {\n index = angular.isDefined(index) ? index : csSettings.data.helptip.currency;\n isTour = angular.isDefined(isTour) ? isTour : false;\n if (index < 0) return;\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope(isTour);\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n helptipScope.tour = isTour;\n\n return helptipScope.startCurrencyTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n csSettings.data.helptip.currency = endIndex;\n csSettings.store();\n });\n };\n\n /* -- modals -- */\n\n $scope.showLicenseModal = function() {\n return ModalUtils.show('templates/currency/modal_license.html','CurrencyLicenseModalCtrl');\n };\n\n $scope.showHelpModal = function(helpAnchor) {\n Modals.showHelp({anchor: helpAnchor});\n };\n\n /* -- popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/currency/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n}\n\n\nfunction CurrencyLicenseModalController($scope, $http, UIUtils, csSettings, FileSaver) {\n 'ngInject';\n\n $scope.loading = true;\n\n $scope.load = function() {\n if ($scope.loading) {\n $scope.licenseUrl = csSettings.getLicenseUrl();\n // Use HTML in iframe, when original file is markdown (fix #538)\n if ($scope.licenseUrl && $scope.licenseUrl.substring($scope.licenseUrl.length - 3) != '.txt') {\n $scope.licenseUrlHtml = $scope.licenseUrl + '.html';\n $scope.licenseUrl = $scope.licenseUrl +'.txt';\n }\n $scope.loading = false;\n }\n };\n $scope.$on('modal.shown', $scope.load);\n\n $scope.downloadFile = function() {\n if (!$scope.licenseUrl) return;\n return $http.get($scope.licenseUrl)\n .success(function(data){\n var file = new Blob([data], {type: 'text/plain; charset=utf-8'});\n FileSaver.saveAs(file, 'license.txt');\n }).error(function(){\n UIUtils.onError('ERROR.GET_LICENSE_FILE_FAILED')();\n });\n\n };\n}\n","\nTransferController.$inject = ['$scope', '$controller', 'UIUtils'];\nTransferModalController.$inject = ['$scope', '$q', '$translate', '$timeout', '$filter', '$focus', 'Device', 'BMA', 'UIUtils', 'Modals', 'csWallet', 'csWot', 'csCurrency', 'csSettings', 'parameters'];angular.module('cesium.transfer.controllers', ['cesium.services', 'cesium.currency.controllers'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n $stateProvider\n\n .state('app.new_transfer', {\n cache: false,\n url: \"/transfer?amount&udAmount&comment&restPub&all&wallet\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/new_transfer.html\",\n controller: 'TransferCtrl'\n }\n }\n })\n\n .state('app.new_transfer_pubkey_uid', {\n cache: false,\n url: \"/transfer/:pubkey/:uid?amount&udAmount&comment&restPub&all&wallet\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/new_transfer.html\",\n controller: 'TransferCtrl'\n }\n }\n })\n\n .state('app.new_transfer_pubkey', {\n cache: false,\n url: \"/transfer/:pubkey?amount&udAmount&comment&restPub&all&wallet\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/wallet/new_transfer.html\",\n controller: 'TransferCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('TransferCtrl', TransferController)\n\n .controller('TransferModalCtrl', TransferModalController)\n;\n\nfunction TransferController($scope, $controller, UIUtils) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('TransferModalCtrl', {$scope: $scope, parameters: {}}));\n\n $scope.enter = function(e, state) {\n\n // Apply state parameters\n if (state && state.stateParams) {\n $scope.setParameters(state.stateParams);\n }\n\n // Load wallet\n return $scope.load()\n .then(UIUtils.loading.hide);\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n // override modal close\n $scope.closeModal = function() {\n return $scope.showHome();\n };\n}\n\nfunction TransferModalController($scope, $q, $translate, $timeout, $filter, $focus, Device, BMA, UIUtils, Modals,\n csWallet, csWot, csCurrency, csSettings, parameters) {\n 'ngInject';\n\n var\n wallet,\n minQuantitativeAmount = 0.01;\n\n $scope.convertedBalance = 0;\n $scope.formData = {\n destPub: null,\n amount: null,\n comment: null,\n useRelative: csSettings.data.useRelative,\n useComment: false,\n all: false,\n restPub: null,\n restAmount: null,\n walletId: null\n };\n $scope.udAmount = null;\n $scope.minAmount = minQuantitativeAmount;\n $scope.commentPattern = BMA.regexp.COMMENT;\n $scope.currency = csCurrency.data.name;\n $scope.loading = true;\n $scope.commentInputId = 'transferComment-' + $scope.$id;\n $scope.enableSelectWallet = true;\n\n // Define keyboard settings, to bind with model (If small screen AND mobile devices)\n $scope.smallscreen = angular.isDefined($scope.smallscreen) ? $scope.smallscreen : UIUtils.screen.isSmall();\n if ($scope.smallscreen || Device.enable) {\n $scope.digitKeyboardSettings = $scope.digitKeyboardSettings || Device.keyboard.digit.settings.bindModel(\n $scope,\n 'formData.amount',\n {\n decimal: true,\n decimalSeparator: '.',\n resizeContent:false\n });\n $scope.digitKeyboardVisible = false;\n }\n\n $scope.setParameters = function(parameters) {\n if (!parameters) return;\n if (parameters.pubkey) {\n $scope.formData.destPub = parameters.pubkey;\n }\n if (parameters.uid) {\n $scope.destUid = parameters.uid;\n $scope.destPub = '';\n }\n else {\n $scope.destUid = '';\n $scope.destPub = parameters.pubkey;\n }\n if (parameters.amount) {\n $scope.formData.amount = parameters.amount;\n $scope.formData.useRelative=false;\n }\n else if (parameters.udAmount) {\n $scope.formData.amount = parameters.udAmount;\n $scope.formData.useRelative=true;\n }\n if (parameters.comment) {\n $scope.formData.useComment=true;\n $scope.formData.comment = parameters.comment;\n }\n if (parameters.restPub || parameters.all) {\n $scope.restUid = '';\n $scope.restPub = parameters.restPub;\n $scope.formData.restPub = parameters.restPub;\n $scope.formData.all = true;\n }\n else {\n $scope.formData.all = false;\n }\n if (!parameters.wallet || parameters.wallet === \"default\") {\n $scope.formData.walletId = csWallet.id;\n }\n else {\n $scope.formData.walletId = parameters.wallet;\n }\n };\n // Read default parameters\n $scope.setParameters(parameters);\n\n $scope.load = function() {\n $scope.enableSelectWallet = csWallet.children.count() > 0;\n\n wallet = $scope.enableSelectWallet && ($scope.formData.walletId ? csWallet.children.get($scope.formData.walletId) : csWallet) || csWallet;\n if (!wallet.isDefault()) {\n console.debug(\"[transfer] Using wallet {\" + wallet.id + \"}\");\n }\n // Make to sure to load full wallet data (balance)\n return wallet.login({sources: true, silent: true})\n .then(function(data) {\n if (!wallet || $scope.$$destroyed) return; // user have cancelled before end of load\n $scope.walletData = data;\n $scope.formData.walletId = wallet.id;\n $scope.onUseRelativeChanged();\n $scope.onAmountChanged();\n\n $scope.$watch('walletData.balance', $scope.onAmountChanged, true);\n $scope.$watch('formData.amount', $scope.onAmountChanged, true);\n\n $scope.$watch('formData.useRelative', $scope.onUseRelativeChanged, true);\n $scope.$watch('walletData.balance', $scope.onUseRelativeChanged, true);\n\n UIUtils.ink({selector: '.modal-transfer .ink'});\n\n if (!$scope.destPub || $scope.destUid) {\n $scope.loading = false;\n }\n else {\n // Fill the uid from the pubkey\n return csWot.extend({pubkey: $scope.destPub})\n .then(function(res) {\n $scope.destUid = res && (res.name || res.uid);\n if ($scope.destUid) {\n $scope.destPub = '';\n }\n $scope.loading = false;\n });\n }\n })\n .catch(function(err){\n if (err === 'CANCELLED') return $scope.cancel(); // close the modal\n UIUtils.onError('ERROR.LOGIN_FAILED')(err);\n });\n };\n $scope.$on('modal.shown', $scope.load);\n\n $scope.cancel = function() {\n $scope.closeModal();\n wallet = null;\n };\n\n // When changing use relative UD\n $scope.onUseRelativeChanged = function() {\n $scope.currency = csCurrency.data.name;\n if ($scope.formData.useRelative) {\n $scope.convertedBalance = $scope.walletData.balance / csCurrency.data.currentUD;\n $scope.minAmount = minQuantitativeAmount / (csCurrency.data.currentUD / 100);\n } else {\n $scope.convertedBalance = $scope.walletData.balance / 100;\n $scope.minAmount = minQuantitativeAmount;\n }\n if ($scope.form && !$scope.loading) {\n $scope.form.$setPristine(true);\n }\n };\n\n $scope.onAmountChanged = function() {\n if ($scope.sending) return; // skip if sending TX\n\n var amount = $scope.formData.amount;\n if (amount && typeof amount === \"string\") {\n amount = parseFloat(amount.replace(new RegExp('[.,]'), '.'));\n }\n\n var valid = true;\n\n // Avoid amount less than the minimal - fix #373\n if (amount && amount < $scope.minAmount) {\n valid = false;\n $scope.form.amount.$error = $scope.form.amount.$error || {};\n $scope.form.amount.$error.min = true;\n }\n else if ($scope.form.amount && $scope.form.amount.$error && $scope.form.amount.$error.min){\n delete $scope.form.amount.$error.min;\n }\n\n // Avoid amount greater than the balance\n if (amount && amount > $scope.convertedBalance){\n $scope.form.$valid = false;\n $scope.form.amount.$invalid = true;\n $scope.form.amount.$error = $scope.form.amount.$error || {};\n $scope.form.amount.$error = {max: true};\n }\n else if ($scope.form.amount && $scope.form.amount.$error && $scope.form.amount.$error.max){\n delete $scope.form.amount.$error.max;\n }\n\n $scope.form.$valid = valid;\n if ($scope.form.amount) $scope.form.amount.$invalid = !valid;\n\n if (!valid || !$scope.formData.all || !amount) {\n $scope.formData.restAmount = undefined;\n }\n else {\n if ($scope.formData.useRelative) {\n $scope.formData.restAmount = $scope.walletData.balance - amount * csCurrency.data.currentUD;\n if ($scope.formData.restAmount < minQuantitativeAmount) {\n $scope.formData.restAmount = 0;\n }\n } else {\n $scope.formData.restAmount = $scope.walletData.balance - amount * 100;\n }\n }\n };\n\n $scope.doTransfer = function() {\n $scope.form.$submitted=true;\n\n if(!$scope.form.$valid || !$scope.formData.destPub || !$scope.formData.amount) {\n return;\n }\n var amount = $scope.formData.amount;\n if (typeof amount === \"string\") {\n amount = parseFloat(amount.replace(new RegExp('[.,]'), '.'));\n }\n\n // Avoid multiple call\n if ($scope.sending) return;\n $scope.sending = true;\n\n var currentUD;\n return $q.all([\n // Make sure user is auth\n wallet.auth({silent: true}),\n\n // Get current UD\n csCurrency.currentUD()\n .then(function(res) {\n currentUD = res;\n }),\n\n // Hide digit keyboard\n $scope.hideDigitKeyboard(300)\n ])\n .then($scope.askTransferConfirm)\n .then(function(confirm){\n if (!confirm) {\n $scope.sending = false;\n return;\n }\n\n return UIUtils.loading.show()\n .then(function(){\n // convert amount\n if ($scope.formData.useRelative) {\n amount = currentUD * amount;\n }\n else {\n amount = amount.toFixed(2) * 100; // remove 2 decimals on quantitative mode\n }\n\n // convert comment: trim, then null if empty\n var comment = $scope.formData.comment && $scope.formData.comment.trim();\n if (comment && !comment.length) {\n comment = null;\n }\n var hasRest = $scope.formData.all && $scope.formData.restAmount > 0;\n if (hasRest) {\n return wallet.transferAll($scope.formData.destPub, amount, comment, $scope.formData.useRelative, $scope.formData.restPub);\n }\n else {\n return wallet.transfer($scope.formData.destPub, amount, comment, $scope.formData.useRelative);\n }\n })\n .then(function() {\n UIUtils.loading.hide();\n return $scope.closeModal(true);\n })\n .then(function(res) {\n $timeout(function() {\n $scope.sending = false;\n UIUtils.toast.show('INFO.TRANSFER_SENT');\n }, 500);\n return res;\n });\n })\n .catch(function(err) {\n $scope.sending = false;\n // Wallet auth cancelled by user\n if (err === 'CANCELLED') return;\n UIUtils.onError('ERROR.SEND_TX_FAILED')(err);\n });\n };\n\n $scope.askTransferConfirm = function() {\n return $translate(['COMMON.UD', 'COMMON.EMPTY_PARENTHESIS'])\n .then(function(translations) {\n var hasRest = $scope.formData.all && $scope.formData.restAmount > 0;\n return $translate(hasRest ? 'CONFIRM.TRANSFER_ALL' : 'CONFIRM.TRANSFER', {\n from: $scope.walletData.isMember ? $scope.walletData.uid : $filter('formatPubkey')($scope.walletData.pubkey),\n to: $scope.destUid || $scope.destPub,\n amount: $scope.formData.amount,\n unit: $scope.formData.useRelative ? translations['COMMON.UD'] : $filter('abbreviate')($scope.currency),\n comment: (!$scope.formData.comment || $scope.formData.comment.trim().length === 0) ? translations['COMMON.EMPTY_PARENTHESIS'] : $scope.formData.comment,\n restAmount: hasRest && $filter('formatAmount')($scope.formData.restAmount, {useRelative: $scope.formData.useRelative}),\n restTo: hasRest && ($scope.restUid || $scope.restPub)\n });\n })\n .then(UIUtils.alert.confirm);\n };\n\n $scope.addComment = function() {\n $scope.formData.useComment = true;\n // Focus on comment field\n // removeIf(device)\n if ($scope.commentInputId) {\n $timeout(function() {\n $focus($scope.commentInputId);\n }, 200);\n }\n // endRemoveIf(device)\n };\n\n /* -- modals -- */\n $scope.showWotLookupModal = function(formDataField) {\n\n formDataField = formDataField || 'destPub';\n\n // Hide numerical keyboard\n $scope.hideDigitKeyboard(0);\n\n return Modals.showWotLookup({enableWallets: true})\n .then(function(result){\n if (result) {\n if (formDataField === 'destPub') {\n $scope.destUid = result.uid;\n $scope.destPub = result.uid ? '' : result.pubkey;\n $scope.formData.destPub = result.pubkey;\n }\n else if (formDataField === 'restPub') {\n $scope.restUid = result.uid;\n $scope.restPub = result.uid ? '' : result.pubkey;\n $scope.formData.restPub = result.pubkey;\n }\n }\n });\n };\n\n $scope.showSelectWalletModal = function() {\n if (!$scope.enableSelectWallet) return;\n\n return Modals.showSelectWallet({\n useRelative: $scope.formData.useRelative,\n showDefault: true,\n showBalance: true\n })\n .then(function(newWallet) {\n if (!newWallet || (wallet && wallet.id === newWallet.id)) return;\n wallet = newWallet;\n $scope.walletData = wallet.data;\n console.debug(\"[transfer] Using wallet {\" + wallet.id + \"}\");\n $scope.onAmountChanged();\n });\n };\n\n /* -- popover -- */\n\n $scope.showUnitPopover = function($event) {\n UIUtils.popover.show($event, {\n templateUrl: 'templates/wallet/popover_unit.html',\n scope: $scope\n })\n .then(function(useRelative) {\n $scope.formData.useRelative = useRelative;\n });\n };\n\n /* -- keyboard -- */\n $scope.showDigitKeyboard = function() {\n // No keyboard settings, or already visible: skip\n if (!$scope.digitKeyboardSettings || $scope.digitKeyboardVisible) return;\n\n // Device enable: hide OS keyboard\n if (Device.enable) {\n\n // Hide device keyboard\n Device.keyboard.close();\n\n // Open the digit keyboard (with a delay)\n return $timeout(function() {\n $scope.digitKeyboardVisible = true;\n }, 200);\n }\n\n // Open the digit keyboard\n $scope.digitKeyboardVisible = true;\n return $q.when();\n };\n\n $scope.hideDigitKeyboard = function(timeout) {\n if (!$scope.digitKeyboardVisible) return $q.when();\n $scope.digitKeyboardVisible = false;\n return $timeout(function() {}, timeout||200);\n };\n}\n\n","\nSettingsController.$inject = ['$scope', '$q', '$window', '$ionicHistory', '$ionicPopup', '$timeout', '$translate', '$ionicPopover', 'UIUtils', 'Modals', 'BMA', 'csHttp', 'csConfig', 'csCurrency', 'csSettings', 'csPlatform'];\nangular.module('cesium.settings.controllers', ['cesium.services', 'cesium.currency.controllers'])\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.settings', {\n url: \"/settings\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/settings/settings.html\",\n controller: 'SettingsCtrl'\n }\n }\n })\n ;\n }])\n\n .controller('SettingsCtrl', SettingsController)\n;\n\nfunction SettingsController($scope, $q, $window, $ionicHistory, $ionicPopup, $timeout, $translate, $ionicPopover,\n UIUtils, Modals, BMA, csHttp, csConfig, csCurrency, csSettings, csPlatform) {\n 'ngInject';\n\n $scope.formData = angular.copy(csSettings.data);\n $scope.popupData = {}; // need for the node popup\n $scope.loading = true;\n $scope.nodePopup = {};\n $scope.bma = BMA;\n\n\n $scope.keepAuthIdleLabels = {\n /*0: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.NEVER'\n },*/\n 10: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.SECONDS',\n labelParams: {value: 10}\n },\n 30: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.SECONDS',\n labelParams: {value: 30}\n },\n 60: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.MINUTE',\n labelParams: {value: 1}\n },\n 600: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.MINUTES',\n labelParams: {value: 10}\n },\n 3600: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.HOUR',\n labelParams: {value: 1}\n },\n 9999: {\n labelKey: 'SETTINGS.KEEP_AUTH_OPTION.ALWAYS'\n }\n };\n $scope.keepAuthIdles = _.keys($scope.keepAuthIdleLabels);\n\n $scope.blockValidityWindowLabels = {\n 0: {\n labelKey: 'SETTINGS.BLOCK_VALIDITY_OPTION.NONE'\n },\n 6: {\n labelKey: 'SETTINGS.BLOCK_VALIDITY_OPTION.N',\n labelParams: {count: 6, time: undefined /*defined in enter*/}\n },\n 12: {\n labelKey: 'SETTINGS.BLOCK_VALIDITY_OPTION.N',\n labelParams: {count: 12, time: undefined /*defined in enter*/}\n },\n 24: {\n labelKey: 'SETTINGS.BLOCK_VALIDITY_OPTION.N',\n labelParams: {count: 24, time: undefined /*defined in enter*/}\n }\n };\n $scope.blockValidityWindows = _.keys($scope.blockValidityWindowLabels);\n\n $scope.$on('$ionicView.enter', function() {\n $q.all([\n csSettings.ready(),\n csCurrency.parameters()\n .catch(function(err) {\n // Continue (will use default value)\n // Make sure to continue even if node is down - Fix #788\n })\n .then(function(parameters) {\n var avgGenTime = parameters && parameters.avgGenTime;\n if (!avgGenTime || avgGenTime < 0) {\n console.warn(\"[settings] Could not not currency parameters. Using default G1 'avgGenTime' (300s)\");\n avgGenTime = 300; /* = G1 value = 5min */\n }\n _.each($scope.blockValidityWindows, function(blockCount) {\n if (blockCount > 0) {\n $scope.blockValidityWindowLabels[blockCount].labelParams.time = avgGenTime * blockCount;\n }\n });\n })\n ])\n .then($scope.load);\n });\n\n $scope.setPopupForm = function(popupForm) {\n $scope.popupForm = popupForm;\n };\n\n $scope.load = function() {\n $scope.loading = true; // to avoid the call of csWallet.store()\n\n // Fill locales\n $scope.locales = angular.copy(csSettings.locales);\n\n // Apply settings\n angular.merge($scope.formData, csSettings.data);\n\n // Make sure to use full locale object (id+name)\n $scope.formData.locale = (csSettings.data.locale && csSettings.data.locale.id && _.findWhere($scope.locales, {id: csSettings.data.locale.id})) ||\n _.findWhere($scope.locales, {id: csSettings.defaultSettings.locale.id});\n\n\n return $timeout(function() {\n $scope.loading = false;\n // Set Ink\n UIUtils.ink({selector: '.item'});\n $scope.showHelpTip();\n }, 100);\n };\n\n $scope.reset = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n }\n $scope.pendingSaving = true;\n csSettings.reset()\n .then(csPlatform.restart)\n .then(function() {\n // reload\n $scope.load();\n $scope.pendingSaving = false;\n });\n };\n\n $scope.changeLanguage = function(langKey) {\n $translate.use(langKey);\n };\n\n // Change node\n $scope.changeNode= function(node) {\n var port = !!$scope.formData.node.port && $scope.formData.node.port != 80 && $scope.formData.node.port != 443 ? $scope.formData.node.port : undefined;\n node = node || {\n host: $scope.formData.node.host,\n port: port,\n useSsl: angular.isDefined($scope.formData.node.useSsl) ?\n $scope.formData.node.useSsl :\n ($scope.formData.node.port == 443)\n };\n $scope.showNodePopup(node)\n .then(function(newNode) {\n if (newNode.host === $scope.formData.node.host &&\n newNode.port === $scope.formData.node.port &&\n newNode.useSsl === $scope.formData.node.useSsl && !$scope.formData.node.temporary) {\n return; // same node = nothing to do\n }\n UIUtils.loading.show();\n\n BMA.isAlive(newNode)\n .then(function(alive) {\n if (!alive) {\n UIUtils.loading.hide();\n return UIUtils.alert.error('ERROR.INVALID_NODE_SUMMARY')\n .then(function(){\n $scope.changeNode(newNode); // loop\n });\n }\n UIUtils.loading.hide();\n angular.merge($scope.formData.node, newNode);\n delete $scope.formData.node.temporary;\n BMA.stop();\n BMA.copy(newNode);\n $scope.bma = BMA;\n\n // Restart platform (or start if not already started)\n csPlatform.restart();\n\n // Reset history cache\n return $ionicHistory.clearCache();\n });\n });\n };\n\n $scope.showNodeList = function() {\n // Check if need a filter on SSL node\n var forceUseSsl = (csConfig.httpsMode === 'true' || csConfig.httpsMode === true || csConfig.httpsMode === 'force') ||\n ($window.location && $window.location.protocol === 'https:') ? true : false;\n\n $ionicPopup._popupStack[0].responseDeferred.promise.close();\n return Modals.showNetworkLookup({\n enableFilter: true, // enable filter button\n bma: true, // only BMA node\n ssl: forceUseSsl ? true : undefined\n })\n .then(function (peer) {\n if (peer) {\n var bma = peer.getBMA();\n return {\n host: (bma.dns ? bma.dns :\n (peer.hasValid4(bma) ? bma.ipv4 : bma.ipv6)),\n port: bma.port || 80,\n useSsl: bma.useSsl || bma.port == 443\n };\n }\n })\n .then(function(newNode) {\n $scope.changeNode(newNode);\n });\n };\n\n // Show node popup\n $scope.showNodePopup = function(node) {\n return $q(function(resolve, reject) {\n $scope.popupData.newNode = node.port ? [node.host, node.port].join(':') : node.host;\n $scope.popupData.useSsl = node.useSsl;\n if (!!$scope.popupForm) {\n $scope.popupForm.$setPristine();\n }\n $translate(['SETTINGS.POPUP_PEER.TITLE', 'COMMON.BTN_OK', 'COMMON.BTN_CANCEL'])\n .then(function (translations) {\n // Choose UID popup\n $ionicPopup.show({\n templateUrl: 'templates/settings/popup_node.html',\n title: translations['SETTINGS.POPUP_PEER.TITLE'],\n scope: $scope,\n buttons: [\n { text: translations['COMMON.BTN_CANCEL'] },\n {\n text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: function(e) {\n $scope.popupForm.$submitted=true;\n if(!$scope.popupForm.$valid || !$scope.popupForm.newNode) {\n //don't allow the user to close unless he enters a node\n e.preventDefault();\n } else {\n return {\n server: $scope.popupData.newNode,\n useSsl: $scope.popupData.useSsl\n };\n }\n }\n }\n ]\n })\n .then(function(res) {\n if (!res) { // user cancel\n UIUtils.loading.hide();\n return;\n }\n var parts = res.server.split(':');\n parts[1] = parts[1] ? parts[1] : 80;\n resolve({\n host: parts[0],\n port: parts[1],\n useSsl: res.useSsl\n });\n });\n });\n });\n };\n\n $scope.save = function() {\n if ($scope.loading || $scope.pendingSaving) return $q.when();\n if ($scope.saving) {\n $scope.pendingSaving = true;\n // Retry later\n return $timeout(function() {\n $scope.pendingSaving = false;\n return $scope.save();\n }, 500);\n }\n $scope.saving = true;\n\n // Async - to avoid UI lock\n return $timeout(function() {\n // Make sure to format helptip\n $scope.cleanupHelpTip();\n\n // Applying\n csSettings.apply($scope.formData);\n\n // Store\n return csSettings.store();\n\n }, 100)\n .then(function() {\n //return $timeout(function() {\n $scope.saving = false;\n //}, 100);\n });\n };\n\n $scope.onDataChanged = function(oldValue, newValue, scope) {\n if ($scope.loading || $scope.pendingSaving) return $q.when();\n if ($scope.saving) {\n $scope.pendingSaving = true;\n // Retry later\n return $timeout(function() {\n $scope.pendingSaving = false;\n return $scope.onDataChanged(oldValue, newValue, scope);\n }, 500);\n }\n\n // Changes from the current scope: save changes\n if ((scope === $scope) && !angular.equals(oldValue, newValue)) {\n $scope.save();\n }\n };\n $scope.$watch('formData', $scope.onDataChanged, true);\n\n // Detected changes from outside (e.g. enabling encryption on wallet can be rollback if user cancel auth)\n csSettings.api.data.on.changed($scope, function(data) {\n if ($scope.loading || $scope.saving || $scope.pendingSaving) return;\n\n var updated = !angular.equals(data.useLocalStorageEncryption, $scope.formData.useLocalStorageEncryption);\n if (updated) {\n console.debug('[settings] Settings changed (outside the settings page). Reloading...');\n $scope.load();\n }\n });\n\n $scope.getServer = function() {\n if (!$scope.formData.node || !$scope.formData.node.host) return '';\n return csHttp.getServer($scope.formData.node.host, $scope.formData.node.port);\n };\n\n $scope.cleanupHelpTip = function() {\n var helptipChanged = $scope.formData.helptip.enable !== csSettings.data.helptip.enable;\n if (helptipChanged) {\n var enable = $scope.formData.helptip.enable;\n // Apply default values\n $scope.formData.helptip = angular.merge({}, csSettings.defaultSettings.helptip);\n // Then restore the enable flag\n $scope.formData.helptip.enable = enable;\n }\n };\n\n /* -- modals & popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'templates/settings/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n $scope.startSettingsTour = function() {\n $scope.hideActionsPopover();\n\n return $scope.showHelpTip(0, true);\n };\n\n // Show help tip (show only not already shown)\n $scope.showHelpTip = function(index, tour) {\n if (!$scope.isLogin() && !tour) return;\n index = angular.isDefined(index) ? index : csSettings.data.helptip.settings;\n if (index < 0) return;\n if (index === 0) index = 1; // skip first step\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope(tour);\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n return helptipScope.startSettingsTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n csSettings.data.helptip.settings = endIndex;\n csSettings.store();\n });\n };\n}\n","\nBlockLookupController.$inject = ['$scope', '$timeout', '$focus', '$filter', '$state', '$anchorScroll', 'UIUtils', 'BMA', 'csCurrency', 'csWot', 'csSettings'];\nBlockViewController.$inject = ['$scope', '$ionicPopover', '$state', 'UIUtils', 'BMA', 'csCurrency', 'csWot'];\nangular.module('cesium.blockchain.controllers', ['cesium.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.blockchain', {\n url: \"/blockchain\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/lookup.html\",\n controller: 'BlockLookupCtrl'\n }\n },\n data: {\n large: 'app.blockchain_lg'\n }\n })\n\n .state('app.blockchain_lg', {\n url: \"/blockchain/lg\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/lookup_lg.html\",\n controller: 'BlockLookupCtrl'\n }\n }\n })\n\n .state('app.server_blockchain', {\n url: \"/network/peer/:server/blockchain?ssl&tor\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/lookup.html\",\n controller: 'BlockLookupCtrl'\n }\n },\n data: {\n large: 'app.server_blockchain_lg'\n }\n })\n\n .state('app.server_blockchain_lg', {\n url: \"/network/peer/:server/blockchain/lg?ssl&tor\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/lookup_lg.html\",\n controller: 'BlockLookupCtrl'\n }\n }\n })\n\n .state('app.view_block', {\n url: \"/block/:number\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/view_block.html\",\n controller: 'BlockViewCtrl'\n }\n }\n })\n\n .state('app.view_block_hash', {\n url: \"/block/:number/:hash\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/view_block.html\",\n controller: 'BlockViewCtrl'\n }\n }\n })\n\n .state('app.view_server_block_hash', {\n url: \"/network/peer/:server/block/:number/:hash?ssl&tor\",\n views: {\n 'menuContent': {\n templateUrl: \"templates/blockchain/view_block.html\",\n controller: 'BlockViewCtrl'\n }\n }\n });\n }])\n\n .controller('BlockLookupCtrl', BlockLookupController)\n\n .controller('BlockViewCtrl', BlockViewController)\n\n;\n\nfunction BlockLookupController($scope, $timeout, $focus, $filter, $state, $anchorScroll, UIUtils, BMA, csCurrency, csWot, csSettings) {\n 'ngInject';\n\n $scope.search = {\n result: [],\n total: 0,\n loading: true,\n loadingMore: false,\n hasMore: false,\n type: 'last'\n };\n $scope.node = {};\n $scope.currency = false;\n $scope.entered = false;\n $scope.searchTextId = null;\n $scope.ionItemClass = 'item-border-large';\n $scope.defaultSizeLimit = UIUtils.screen.isSmall() ? 50 : 100;\n $scope.helptipPrefix = 'helptip-network';\n $scope.listeners = [];\n\n /**\n * Enter into the view\n * @param e\n * @param state\n */\n $scope.enter = function(e, state) {\n if (!$scope.entered) {\n if (state && state.stateParams && state.stateParams.q) { // Query parameter\n $scope.search.text = state.stateParams.q;\n if ($scope.search.text && $scope.search.text.trim().length) {\n $scope.search.type='text';\n }\n }\n\n // Load from server if need\n if (state && state.stateParams && state.stateParams.server) {\n var useSsl = state.stateParams.ssl == \"true\";\n var useTor = state.stateParams.tor == \"true\";\n\n var node = {\n server: state.stateParams.server,\n host: state.stateParams.server,\n useSsl: useSsl,\n useTor: useTor\n };\n var serverParts = state.stateParams.server.split(':');\n if (serverParts.length === 2) {\n node.host = serverParts[0];\n node.port = serverParts[1];\n }\n\n if (BMA.node.same(node)) {\n $scope.node = BMA;\n }\n else {\n $scope.node = useTor ?\n // For TOR, use a web2tor to access the endpoint\n BMA.instance(node.host + \".to\", 443, true/*ssl*/, 600000 /*long timeout*/) :\n BMA.instance(node.host, node.port, node.useSsl);\n return $scope.node.blockchain.parameters()\n .then(function(json) {\n $scope.currency = json.currency;\n $scope.enter(); // back to enter()\n });\n }\n }\n\n // Load currency if need\n if (!$scope.currency) {\n return csCurrency.get()\n .then(function(currency) {\n $scope.currency = currency ? currency.name : null;\n $scope.node = currency.node ? currency.node : BMA;\n\n if (!$scope.currency) {\n UIUtils.alert.error('ERROR.GET_CURRENCY_FAILED');\n return;\n }\n $scope.enter(); // back to enter(), with no stateParams\n })\n .catch(UIUtils.onError('ERROR.GET_CURRENCY_FAILED'));\n }\n\n $scope.compactMode = angular.isDefined($scope.compactMode) ? $scope.compactMode : true;\n $scope.expertMode = angular.isDefined($scope.expertMode) ? $scope.expertMode : !UIUtils.screen.isSmall() && csSettings.data.expertMode;\n\n $scope.doSearch();\n\n // removeIf(device)\n // Focus on search text (only if NOT device, to avoid keyboard opening)\n if ($scope.searchTextId) {\n $timeout(function(){\n $focus($scope.searchTextId);\n }, 100);\n }\n // endRemoveIf(device)\n\n $scope.addListeners();\n\n $scope.entered = true;\n\n $scope.showHelpTip();\n }\n else {\n $scope.addListeners();\n }\n };\n //$scope.$on('$ionicView.enter', $scope.enter);\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n\n /**\n * Leave the view\n * @param e\n * @param state\n */\n $scope.leave = function() {\n $scope.removeListeners();\n };\n //$scope.$on('$ionicView.leave', $scope.leave);\n $scope.$on('$ionicParentView.leave', $scope.leave);\n $scope.$on('$destroy', $scope.leave);\n\n $scope.doSearchLast = function() {\n $scope.search.type = 'last';\n return $scope.doSearch();\n };\n\n $scope.doSearch = function(from) {\n from = angular.isDefined(from) ? from : 0;\n\n $scope.search.loading = (from === 0);\n $scope.search.hasMore = false;\n\n var promise;\n\n // get blocks\n if (from === 0) {\n promise = $scope.node.blockchain.current(false)\n .then(function(current) {\n var size = current.number < $scope.defaultSizeLimit ? current.number : $scope.defaultSizeLimit;\n return $scope.node.blockchain.blocksSlice({count: size, from: current.number-size})\n .then(function(blocks) {\n if (!!blocks) blocks.splice(0,0,current);\n return blocks;\n });\n })\n .catch(function(err) {\n // Special case when block #0 not written yet\n if (err && err.ucode == BMA.errorCodes.NO_CURRENT_BLOCK) {\n return [];\n }\n throw err;\n });\n }\n else {\n var oldestNumber = $scope.search.results[$scope.search.results.length-1].number;\n var size = oldestNumber < $scope.defaultSizeLimit ? oldestNumber : $scope.defaultSizeLimit;\n promise = $scope.node.blockchain.blocksSlice({count: size, from: oldestNumber-size});\n }\n\n // process blocks\n return promise\n .then(function(blocks) {\n // If no result\n if (!blocks || !blocks.length) {\n $scope.doDisplayResult([], from, 0);\n $scope.search.loading = false;\n return;\n }\n\n // Transform to entities\n blocks = blocks.reduce(function(res, json){\n var block = new Block(json);\n block.cleanData(); // release arrays content\n return res.concat(block);\n }, []);\n\n // Order by number (desc)\n blocks = _.sortBy(blocks, function(b) {\n return -1 * b.number;\n });\n\n // Prepare then display results\n var total = ((from===0) ? blocks[0].number: $scope.search.results[0].number) + 1;\n return $scope.doPrepareResult(blocks, from)\n .then(function() {\n $scope.doDisplayResult(blocks, from, total);\n $scope.search.loading = false;\n });\n })\n\n .catch(function(err) {\n UIUtils.onError('BLOCKCHAIN.ERROR.SEARCH_BLOCKS_FAILED')(err);\n $scope.search.loading = false;\n });\n };\n\n var formatDateShort = $filter('formatDateShort');\n\n $scope.doPrepareResult = function(blocks, offset) {\n offset = angular.isDefined(offset) ? offset : 0;\n\n if ($scope.search.type=='last') {\n\n var previousEmptyBlockDay;\n if (offset > 0 && $scope.search.results.length) {\n var lastBlock = $scope.search.results[$scope.search.results.length-1];\n previousEmptyBlockDay = lastBlock.empty ? lastBlock.day : undefined;\n }\n\n _.forEach(blocks, function(block, index){\n // If empty\n if (block.empty) {\n // compute the day\n var blockDay = formatDateShort(block.medianTime);\n var notFirstEmpty = (index !== 0) || (offset !== 0);\n var previousNotEmptyOrSameDay = !previousEmptyBlockDay || (previousEmptyBlockDay == blockDay);\n block.compacted = notFirstEmpty && previousNotEmptyOrSameDay;\n previousEmptyBlockDay = blockDay;\n }\n else {\n previousEmptyBlockDay = undefined;\n }\n });\n }\n\n return csWot.extendAll(blocks, 'issuer');\n };\n\n $scope.doDisplayResult = function(res, offset, total) {\n if (!offset) {\n $scope.search.results = res || [];\n }\n else {\n $scope.search.results = $scope.search.results.concat(res);\n }\n $scope.search.hasMore = total && $scope.search.results.length < total;\n $scope.search.total = total || $scope.search.total;\n\n $scope.smallscreen = UIUtils.screen.isSmall();\n\n $scope.$broadcast('$$rebind::rebind'); // notify binder\n\n // Set Motion\n if (res && res.length) {\n $scope.motion.show({selector: '.list-blocks .item-block'});\n }\n };\n\n $scope.showMore = function() {\n var from = $scope.search.results ? $scope.search.results.length : 0;\n\n $scope.search.loadingMore = true;\n\n return $scope.doSearch(from)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n })\n .catch(function(err) {\n console.error(err);\n $scope.search.loadingMore = false;\n $scope.search.hasMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.removeListeners = function() {\n if ($scope.listeners.length) {\n console.debug(\"[block] Closing listeners\");\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n }\n };\n\n $scope.addListeners = function() {\n if ($scope.listeners.length) return; // already started\n\n console.debug(\"[block] Starting listeners\");\n if ($scope.node === BMA) {\n $scope.listeners = [\n csCurrency.api.data.on.newBlock($scope, $scope.onBlock)\n ];\n }\n else {\n $scope.listeners = [\n $scope.node.websocket.block().onListener(function(json) {\n // Skip if WS closed (after leave view - should never happen) or invalid json\n if (!json) return;\n var block = new Block(json);\n block.cleanData(); // Remove unused content (arrays...)\n $scope.onBlock(block);\n })\n ];\n }\n };\n\n $scope.onBlock = function(block) {\n // Skip if still loading or if filter/sort is not the default (not last blocks)\n if ($scope.search.loading || $scope.search.type !== 'last' ||\n ($scope.search.sort && $scope.search.sort !== 'desc')) return; // skip\n\n // Make sure results is init\n $scope.search.results = $scope.search.results || [];\n\n if (!$scope.search.results.length) {\n console.debug('[blockchain] new block #{0} received (by websocket)'.format(block.number));\n // add it to result\n $scope.search.total++;\n $scope.search.results.push(block);\n\n // Prepare the new block, then show it\n $scope.doPrepareResult([block])\n .then(function() {\n return $scope.showBlock(block);\n });\n }\n else {\n // Find existing block, by number\n var existingBlock = _.findWhere($scope.search.results, {number: block.number});\n\n // replace existing block (fork could have replaced previous block)\n if (existingBlock) {\n if (existingBlock.hash !== block.hash) {\n console.debug('[blockchain] block #{0} updated (by websocket)'.format(block.number));\n // Replace existing content\n angular.copy(block, existingBlock);\n // Prepare the new block, then show it\n $scope.doPrepareResult([block, $scope.search.results[1]])\n .then(function() {\n return $scope.showBlock(existingBlock);\n });\n }\n }\n else {\n console.debug('[blockchain] new block #{0} received (by websocket)'.format(block.number));\n // Insert at index 0\n $scope.search.total++;\n $scope.search.results.splice(0, 0, block);\n\n // Prepare the new block, then show it\n $scope.doPrepareResult([block, $scope.search.results[1]])\n .then(function() {\n return $scope.showBlock(block);\n });\n }\n }\n };\n\n $scope.showBlock = function(block){\n // Force rebind\n $scope.$broadcast('$$rebind::rebind');\n $scope.motion.show({selector: '#block-'+block.number});\n };\n\n $scope.selectBlock = function(block) {\n if (block.compacted && $scope.compactMode) {\n $scope.toggleCompactMode();\n $timeout(function(){\n $anchorScroll('block-' + block.number);\n }, 900);\n }\n else if (BMA.node.same($scope.node)) {\n $state.go('app.view_block_hash', {number: block.number, hash: block.hash});\n }\n else {\n $state.go('app.view_server_block_hash', {server: $scope.node.server, ssl: $scope.node.useSsl, number: block.number, hash: block.hash});\n }\n };\n\n $scope.toggleCompactMode = function() {\n $scope.compactMode = !$scope.compactMode;\n $scope.doDisplayResult($scope.search.results, 0, $scope.search.total/*keep previous total*/);\n\n // Workaround to re-initialized the \n if (!$scope.search.hasMore && $scope.search.results.length && $scope.search.type == 'last') {\n var lastBlock = $scope.search.results[$scope.search.results.length-1];\n if (lastBlock && lastBlock.number > 0) {\n $timeout(function() {\n $scope.search.hasMore = true;\n }, 500);\n }\n }\n };\n\n $scope.toggleSort = function(sort){\n if ($scope.search.sort === sort && !$scope.search.asc) {\n $scope.search.asc = undefined;\n $scope.search.sort = undefined;\n }\n else {\n $scope.search.asc = ($scope.search.sort === sort) ? !$scope.search.asc : true;\n $scope.search.sort = sort;\n }\n $scope.doSearch();\n };\n\n $scope.showHelpTip = function() {\n // TODO\n };\n}\n\n\nfunction BlockViewController($scope, $ionicPopover, $state, UIUtils, BMA, csCurrency, csWot) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.formData = {};\n $scope.compactMode = true; // TODO change to true\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n /**\n * Enter on view\n */\n $scope.enter = function(e, state) {\n if (!$scope.loading) return; // call once\n\n if (state) {\n $scope.number = state.stateParams && angular.isDefined(state.stateParams.number) ? state.stateParams.number : 'current';\n $scope.hash = state.stateParams && state.stateParams.hash ? state.stateParams.hash : undefined;\n\n // Load from server if need\n if (state.stateParams && state.stateParams.server) {\n var useSsl = state.stateParams.ssl == \"true\";\n var useTor = state.stateParams.tor == \"true\";\n\n var node = {\n server: state.stateParams.server,\n host: state.stateParams.server,\n useSsl: useSsl,\n useTor: useTor\n };\n var serverParts = state.stateParams.server.split(':');\n if (serverParts.length == 2) {\n node.host = serverParts[0];\n node.port = serverParts[1];\n }\n\n if (BMA.node.same(node)) {\n $scope.node = BMA;\n }\n else {\n $scope.node = useTor ?\n // For TOR, use a web2tor to access the endpoint\n BMA.instance(node.host + \".to\", 443, true/*ssl*/, 600000 /*long timeout*/) :\n BMA.instance(node.host, node.port, node.useSsl);\n return $scope.node.blockchain.parameters()\n .then(function (json) {\n $scope.currency = json.currency;\n $scope.enter(); // back to enter(), with no stateParams\n });\n }\n }\n }\n\n if (!$scope.currency || !$scope.node) {\n csCurrency.get()\n .then(function (currency) {\n if (currency) {\n $scope.currency = currency.name;\n $scope.node = currency.node;\n $scope.load();\n }\n })\n .catch(UIUtils.onError('ERROR.GET_CURRENCY_FAILED'));\n }\n else {\n $scope.load();\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n /**\n * Leave the view\n */\n $scope.leave = function() {\n //console.debug(\"Leaving view peer...\");\n };\n $scope.$on('$ionicParentView.beforeLeave', $scope.leave);\n\n $scope.load = function() {\n if (!$scope.number) return;\n\n var promise = $scope.number == 'current' ?\n $scope.node.blockchain.current() :\n $scope.node.blockchain.block({block: $scope.number});\n\n return promise\n .then(function(json) {\n var block = new Block(json);\n block.parseData();\n if (!block || !angular.isDefined(block.number) || !block.hash) {\n $scope.loading = false;\n UIUtils.alert.error('ERROR.GET_BLOCK_FAILED');\n return;\n }\n if ($scope.hash && block.hash != $scope.hash) {\n $scope.loading = false;\n UIUtils.alert.error('ERROR.INVALID_BLOCK_HASH');\n return;\n }\n\n var users = [];\n if (block.joiners.length) {\n users = users.concat(block.joiners);\n }\n if (block.certifications.length) {\n users = block.certifications.reduce(function(res, cert) {\n cert.to = {\n pubkey: cert.to\n };\n cert.from = {\n pubkey: cert.from\n };\n return res.concat(cert.to , cert.from);\n }, users);\n block.certifications = _.groupBy(block.certifications, function(cert) {\n return cert.to.pubkey;\n });\n }\n if (block.transactions.length) {\n users = block.transactions.reduce(function(res, tx) {\n tx.issuers = tx.issuers.reduce(function(res, issuer) {\n return res.concat({pubkey: issuer});\n }, []);\n\n // Parse unlockConditions\n _.forEach(tx.outputs||[], function(output) {\n if (output.unlockCondition) {\n angular.merge(output, BMA.tx.parseUnlockCondition(output.unlockCondition));\n }\n });\n\n return res.concat(tx.issuers.concat(tx.outputs||[]));\n }, users);\n }\n\n var issuer = {pubkey: block.issuer};\n users.push(issuer);\n return csWot.extendAll(users)\n .then(function() {\n $scope.updateView({block: block, issuer: issuer});\n });\n })\n .catch(function(err) {\n $scope.loading = false;\n UIUtils.onError('ERROR.GET_BLOCK_FAILED')(err);\n });\n };\n\n $scope.updateView = function(data) {\n $scope.formData = data.block;\n //angular.copy(data.block, $scope.formData);\n $scope.issuer = data.issuer;\n $scope.loading = false;\n };\n\n $scope.toggleCompactMode = function() {\n $scope.compactMode = !$scope.compactMode;\n };\n\n /* -- popover -- */\n\n var paddingIndent = 10;\n\n $scope.toUnlockUIArray = function(unlockTreeItem, leftPadding, operator) {\n leftPadding = leftPadding || paddingIndent;\n\n // If operator (AND, OR)\n if (unlockTreeItem.children && (unlockTreeItem.type == 'AND' || unlockTreeItem.type == 'OR')) {\n return unlockTreeItem.children.reduce(function(res, child, index){\n if (child.children && index > 0) {\n // Add space between expression block\n res = res.concat({\n style: {\n 'padding-left': leftPadding + 'px',\n 'padding-top': '10px',\n 'padding-bottom': '10px'\n },\n operator: unlockTreeItem.type\n });\n\n return res.concat($scope.toUnlockUIArray(child, leftPadding + paddingIndent));\n }\n return res.concat($scope.toUnlockUIArray(child, leftPadding + paddingIndent, index && unlockTreeItem.type));\n }, []);\n }\n\n return {\n style: {\n 'padding-left': leftPadding + 'px'\n },\n operator: operator,\n type: unlockTreeItem.type,\n value: unlockTreeItem.value\n };\n };\n\n $scope.showUnlockConditionPopover = function(output, event) {\n if (!output.unlockTree) return;\n\n // Convert condition into UI array\n $scope.popoverData = $scope.popoverData || {};\n $scope.popoverData.unlockConditions = $scope.toUnlockUIArray(output.unlockTree);\n\n // Open popover\n UIUtils.popover.show(event, {\n templateUrl: 'templates/blockchain/unlock_condition_popover.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.unlockConditionPopover = popover;\n }\n });\n };\n\n $scope.hideUnlockConditionsPopover = function() {\n if ($scope.unlockConditionPopover) {\n $scope.unlockConditionPopover.hide();\n $scope.unlockConditionPopover = null;\n }\n };\n\n $scope.goState = function(stateName, stateParams) {\n $scope.hideUnlockConditionsPopover();\n $state.go(stateName, stateParams);\n };\n\n /* -- manage link to raw document -- */\n\n $scope.openRawBlock = function(event) {\n return $scope.openLink(event, $scope.node.url + '/blockchain/block/' + $scope.formData.number);\n };\n\n /* -- help tip -- */\n\n // Show help tip\n $scope.showHelpTip = function(index) {\n // No helptip here (done in network controller)\n };\n}\n\n","\nfunction EsNotification(json, markAsReadCallback) {\n\n var messagePrefixes = {\n 'user': 'EVENT.USER.',\n 'page': 'EVENT.PAGE.'\n };\n\n var that = this;\n\n // Avoid undefined errors\n json = json || {};\n\n that.id = json.id || ('' + Date.now()); // Keep id if exists, otherwise create it from timestamp\n that.type = json.type && json.type.toLowerCase();\n that.time = json.time;\n that.hash = json.hash;\n that.read = json.read_signature ? true : false;\n\n that.message = json.code && (json.reference && messagePrefixes[json.reference.index] ?\n messagePrefixes[json.reference.index] + json.code :\n 'EVENT.' + json.code) || json.message;\n that.params = json.params;\n\n if (markAsReadCallback && (typeof markAsReadCallback === \"function\") ) {\n that.markAsReadCallback = markAsReadCallback;\n }\n\n function _formatHash(input) {\n return input ? input.substr(0,4) + input.substr(input.length-4) : '';\n }\n\n that.markAsRead = function() {\n if (that.markAsReadCallback) {\n that.markAsReadCallback(that);\n }\n };\n\n var pubkeys;\n\n json.code = json.code || '';\n\n // Membership\n if (json.code.startsWith('MEMBER_')) {\n that.avatarIcon = 'ion-person';\n that.icon = 'ion-information-circled positive';\n that.state = 'app.view_wallet';\n that.medianTime = that.time;\n }\n\n // TX\n else if (json.code.startsWith('TX_')) {\n that.avatarIcon = 'ion-card';\n that.icon = (json.code === 'TX_SENT') ? 'ion-paper-airplane dark' : 'ion-archive balanced';\n that.medianTime = that.time;\n pubkeys = json.params.length > 0 ? json.params[0] : null;\n if (pubkeys && pubkeys.indexOf(',') == -1) {\n that.pubkey = pubkeys;\n }\n that.state = 'app.view_wallet_tx';\n that.stateParams = {refresh: true};\n }\n\n // Certifications\n else if (json.code.startsWith('CERT_')) {\n that.avatarIcon = (json.code === 'CERT_RECEIVED') ? 'ion-ribbon-b' : 'ion-ribbon-a';\n that.icon = (json.code === 'CERT_RECEIVED') ? 'ion-ribbon-b balanced' : 'ion-ribbon-a gray';\n that.pubkey = json.params.length > 0 ? json.params[0] : null;\n that.medianTime = that.time;\n that.state = 'app.wallet_cert';\n that.stateParams = {\n type: (json.code === 'CERT_RECEIVED') ? 'received' : 'given'\n };\n }\n\n // Message\n else if (json.code.startsWith('MESSAGE_')) {\n that.avatarIcon = 'ion-email';\n that.icon = 'ion-email dark';\n pubkeys = json.params.length > 0 ? json.params[0] : null;\n if (pubkeys && pubkeys.indexOf(',') === -1) {\n that.pubkey = pubkeys;\n }\n that.id = json.reference.id; // Do not care about notification ID, because notification screen use message _id\n }\n\n // user profile record\n else if (json.reference && json.reference.index === 'user' && json.reference.type === 'profile') {\n that.pubkey = json.params.length > 0 ? json.params[0] : null;\n that.state = 'app.wot_identity';\n that.stateParams = {\n pubkey: that.pubkey,\n uid: json.params && json.params[3],\n };\n if (json.code.startsWith('LIKE_')) {\n that.avatarIcon = 'ion-person';\n that.icon = 'ion-ios-heart positive';\n }\n else if (json.code.startsWith('STAR_')) {\n that.avatarIcon = 'ion-person';\n that.icon = 'ion-star gray';\n }\n else if (json.code.startsWith('FOLLOW_')) {\n that.avatarIcon = 'ion-person';\n that.icon = 'ion-ios-people gray';\n }\n else if (json.code.startsWith('ABUSE_')) {\n that.avatarIcon = 'ion-person';\n that.icon = 'ion-android-warning assertive';\n }\n else if (json.code.startsWith('MODERATION_')) {\n that.state = 'app.wot_identity';\n that.stateParams = {\n pubkey: json.reference.id,\n uid: json.params && json.params[3],\n };\n that.avatarIcon = 'ion-alert-circled';\n that.icon = 'ion-alert-circled energized';\n\n // If deletion has been asked, change the message\n var level = json.params && json.params[4] || 0;\n if (json.code === 'MODERATION_RECEIVED' && level == 5) {\n that.message = 'EVENT.USER.DELETION_RECEIVED';\n that.icon = 'ion-trash-a assertive';\n }\n }\n else {\n that.icon = 'ion-person dark';\n }\n\n }\n\n // page record\n else if (json.reference && json.reference.index === 'page') {\n that.pubkey = json.params.length > 0 ? json.params[0] : null;\n that.avatarIcon = 'ion-social-buffer';\n if (json.reference.anchor) {\n that.icon = 'ion-ios-chatbubble-outline dark';\n that.state = 'app.view_page_anchor';\n that.stateParams = {\n id: json.reference.id,\n title: json.params[1],\n anchor: _formatHash(json.reference.anchor)\n };\n }\n else {\n that.icon = 'ion-social-buffer dark';\n that.state = 'app.view_page';\n that.stateParams = {\n id: json.reference.id,\n title: json.params[1]\n };\n }\n\n if (json.code.startsWith('LIKE_')) {\n that.icon = 'ion-ios-heart positive';\n }\n else if (json.code.startsWith('FOLLOW_')) {\n that.avatarIcon = 'ion-person';\n }\n else if (json.code.startsWith('ABUSE_')) {\n that.icon = 'ion-alert-circled energized';\n }\n else if (json.code.startsWith('MODERATION_')) {\n that.avatarIcon = 'ion-alert-circled';\n that.icon = 'ion-alert-circled energized';\n\n // If deletion has been asked, change the message\n if (json.code === 'MODERATION_RECEIVED' && level == 5) {\n that.message = 'EVENT.PAGE.DELETION_RECEIVED';\n that.icon = 'ion-trash-a assertive';\n }\n }\n }\n\n // info message\n else if (json.type === 'INFO') {\n that.avatarIcon = 'ion-information';\n that.icon = 'ion-information-circled positive';\n }\n // warn message\n else if (json.type === 'WARN') {\n that.avatarIcon = 'ion-alert-circled';\n that.icon = 'ion-alert-circled energized';\n }\n // error message\n else if (json.type === 'ERROR') {\n that.avatarIcon = 'ion-close';\n that.icon = 'ion-close-circled assertive';\n }\n\n return that;\n}\n","\nfunction Comment(id, json) {\n\n var that = this;\n\n that.id = id;\n that.message = null; // set in copyFromJson()\n that.html = null; // set in copyFromJson()\n that.issuer = null; // set in copyFromJson()\n that.time = null; // set in copyFromJson()\n that.creationTime = null; // set in copyFromJson()\n that.reply_to = null; // set in copyFromJson()\n\n that.replyCount = 0;\n that.parent = null;\n that.replies = [];\n that.onRemoveListeners = [];\n\n that.copy = function(otherComment) {\n // Mandatory fields\n that.message = otherComment.message;\n that.html = otherComment.html;\n that.issuer = otherComment.issuer;\n that.time = otherComment.time;\n that.creationTime = otherComment.creationTime || that.time; // fill using time, for backward compatibility\n\n // Optional fields\n that.id = otherComment.id || that.id;\n that.reply_to = otherComment.reply_to || that.reply_to;\n that.uid = otherComment.uid || that.uid;\n that.name = otherComment.name || that.name;\n that.avatarStyle = otherComment.avatarStyle || that.avatarStyle;\n if (otherComment.parent) {\n that.parent = otherComment.parent;\n }\n if (otherComment.replies) that.setReplies(otherComment.replies);\n };\n\n that.copyFromJson = function(json) {\n that.message = json.message;\n that.issuer = json.issuer;\n that.time = json.time;\n that.creationTime = json.creationTime || that.time;\n that.reply_to = json.reply_to;\n };\n\n that.addOnRemoveListener = function(listener) {\n if (listener && (typeof listener === \"function\") ) {\n that.onRemoveListeners.push(listener);\n }\n };\n\n that.cleanAllListeners = function() {\n that.onRemoveListeners = [];\n };\n\n that.setReplies = function(replies) {\n that.removeAllReplies();\n that.addReplies(replies);\n };\n\n that.addReplies = function(replies) {\n if (!replies || !replies.length) return;\n replies = replies.sort(function(cm1, cm2) {\n return (cm1.time - cm2.time);\n });\n _.forEach(replies, function(reply) {\n reply.parent = that;\n that.replies.push(reply);\n });\n that.replyCount += replies.length;\n };\n\n that.containsReply = function(reply) {\n return that.replies.indexOf(reply) != -1;\n };\n\n that.addReply = function(reply) {\n that.replyCount += 1;\n that.replies.push(reply);\n that.replies = that.replies.sort(function(cm1, cm2) {\n return (cm1.time - cm2.time);\n });\n reply.parent = that;\n };\n\n that.removeAllReplies = function() {\n if (that.replyCount) {\n var replies = that.replies.splice(0, that.replies.length);\n that.replyCount = 0;\n _.forEach(replies, function (reply) {\n reply.remove();\n });\n }\n };\n\n that.removeReply = function(replyId) {\n var index = _.findIndex(that.replies, {id: replyId});\n if (index != -1) {\n that.replyCount--;\n var reply = that.replies.splice(index, 1)[0];\n delete reply.parent;\n }\n };\n\n that.remove = function() {\n if (that.parent) {\n that.parent.removeReply(that.id);\n delete that.parent;\n }\n //that.removeAllReplies();\n if (that.onRemoveListeners.length) {\n _.forEach(that.onRemoveListeners, function(listener) {\n listener(that);\n });\n that.issuer = null;\n that.message = null;\n that.cleanAllListeners();\n }\n };\n\n // Init from json\n if (json && typeof json === \"object\") {\n that.copyFromJson(json);\n }\n}\n","\nfunction Invitation(json) {\n\n var that = this;\n\n // Avoid undefined errors\n json = json || {};\n\n that.type = json.type && json.type.toLowerCase();\n that.time = json.time;\n that.id = json.id;\n\n // Invitation to certify\n if (that.type == 'certification') {\n\n that.comment = json.comment;\n that.icon = 'ion-ribbon-a';\n that.okText= 'WOT.BTN_CERTIFY';\n\n // read the identity to certify\n if (!json.content || json.content.indexOf('-') == -1) {\n console.error('[invitation] Empty content for invitation [{0}]'.format(that.id));\n that.message = 'INVITATION.ERROR.BAD_INVITATION_FORMAT';\n that.pubkey = json.issuer;\n return;\n }\n\n var separatorIndex = json.content.lastIndexOf('-');\n if (separatorIndex == -1) {\n console.error('[invitation] Bad content format for invitation [{0}]: {1}'.format(that.id, json.content));\n that.message = 'INVITATION.ERROR.BAD_INVITATION_FORMAT';\n that.pubkey = json.issuer;\n return;\n }\n\n var identity = {\n uid: json.content.substr(0, separatorIndex),\n pubkey: json.content.substr(separatorIndex+1)\n };\n\n // Prepare the state action\n that.state = 'app.wot_identity';\n that.stateParams = {\n pubkey: identity.pubkey,\n uid: identity.uid,\n action: 'certify'\n };\n\n // Ask certification to himself\n if (identity.pubkey == json.issuer) {\n that.pubkey = json.issuer;\n that.uid = identity.uid;\n that.message = 'INVITATION.ASK_CERTIFICATION';\n }\n\n // Ask certification to someone else\n else {\n that.issuer = {\n pubkey: json.issuer\n };\n that.message = 'INVITATION.SUGGESTION_CERTIFICATION';\n that.pubkey = identity.pubkey;\n that.uid = identity.uid;\n }\n\n }\n\n}\n","\n\nfunction EsPeer(json) {\n\n var that = this;\n\n Object.keys(json).forEach(function (key) {\n that[key] = json[key];\n });\n\n that.endpoints = that.endpoints || [];\n}\n\n\nEsPeer.prototype.regexp = {\n API_REGEXP: /^([A-Z_]+)(?:[ ]+([a-z_][a-z0-9-_.ğĞ]*))?(?:[ ]+([0-9.]+))?(?:[ ]+([0-9a-f:]+))?(?:[ ]+([0-9]+))(?:\\/[^\\/]+)?$/,\n LOCAL_IP_ADDRESS: /^127[.]0[.]0.|192[.]168[.]|10[.]0[.]0[.]|172[.]16[.]/\n};\n\nEsPeer.prototype.keyID = function () {\n var ep = this.ep || this.getEP();\n if (ep.useBma) {\n return [this.pubkey || \"Unknown\", ep.dns, ep.ipv4, ep.ipv6, ep.port, ep.useSsl, ep.path].join('-');\n }\n return [this.pubkey || \"Unknown\", ep.ws2pid, ep.path].join('-');\n};\n\nEsPeer.prototype.copyValues = function(to) {\n var obj = this;\n [\"version\", \"currency\", \"pub\", \"endpoints\", \"hash\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n to[key] = obj[key];\n });\n};\n\nEsPeer.prototype.copyValuesFrom = function(from) {\n var obj = this;\n [\"version\", \"currency\", \"pub\", \"endpoints\", \"block\", \"signature\"].forEach(function (key) {\n obj[key] = from[key];\n });\n};\n\nEsPeer.prototype.json = function() {\n var obj = this;\n var json = {};\n [\"version\", \"currency\", \"endpoints\", \"status\", \"block\", \"signature\"].forEach(function (key) {\n json[key] = obj[key];\n });\n json.raw = this.raw && this.getRaw();\n json.pubkey = this.pubkey;\n return json;\n};\n\nEsPeer.prototype.getEP = function() {\n if (this.ep) return this.ep;\n var ep = null;\n var epRegex = this.regexp.API_REGEXP;\n this.endpoints.forEach(function(epStr){\n var matches = !ep && epRegex.exec(epStr);\n if (matches) {\n ep = {\n \"api\": matches[1] || '',\n \"dns\": matches[2] || '',\n \"ipv4\": matches[3] || '',\n \"ipv6\": matches[4] || '',\n \"port\": matches[5] || 80,\n \"path\": matches[6] || '',\n \"useSsl\": matches[5] == 443\n };\n }\n });\n return ep || {};\n};\n\nEsPeer.prototype.getEndpoints = function(regexp) {\n if (!regexp) return this.endpoints;\n if (typeof regexp === 'string') regexp = new RegExp('^' + regexp);\n return this.endpoints.reduce(function(res, ep){\n return ep.match(regexp) ? res.concat(ep) : res;\n }, []);\n};\n\nEsPeer.prototype.hasEndpoint = function(endpoint){\n var regExp = this.regexp[endpoint] || new RegExp('^' + endpoint);\n var endpoints = this.getEndpoints(regExp);\n return endpoints && endpoints.length > 0;\n};\n\nEsPeer.prototype.hasEsEndpoint = function() {\n var endpoints = this.getEsEndpoints();\n return endpoints && endpoints.length > 0;\n};\n\nEsPeer.prototype.getEsEndpoints = function() {\n return this.getEndpoints(/^(ES_CORE_API|ES_USER_API|ES_SUBSCRIPTION_API|GCHANGE_API)/);\n};\n\nEsPeer.prototype.getDns = function() {\n var ep = this.ep || this.getEP();\n return ep.dns ? ep.dns : null;\n};\n\nEsPeer.prototype.getIPv4 = function() {\n var ep = this.ep || this.getEP();\n return ep.ipv4 ? ep.ipv4 : null;\n};\n\nEsPeer.prototype.getIPv6 = function() {\n var ep = this.ep || this.getEP();\n return ep.ipv6 ? ep.ipv6 : null;\n};\n\nEsPeer.prototype.getPort = function() {\n var ep = this.ep || this.getEP();\n return ep.port ? ep.port : null;\n};\n\nEsPeer.prototype.getHost = function() {\n var ep = this.ep || this.getEP();\n return ((ep.port == 443 || ep.useSsl) && ep.dns) ? ep.dns :\n (this.hasValid4(ep) ? ep.ipv4 :\n (ep.dns ? ep.dns :\n (ep.ipv6 ? '[' + ep.ipv6 + ']' :'')));\n};\n\nEsPeer.prototype.getURL = function() {\n var ep = this.ep || this.getEP();\n var host = this.getHost();\n var protocol = (ep.port == 443 || ep.useSsl) ? 'https' : 'http';\n return protocol + '://' + host + (ep.port ? (':' + ep.port) : '');\n};\n\nEsPeer.prototype.getServer = function() {\n var ep = this.ep || this.getEP();\n var host = this.getHost();\n return host + (host && ep.port ? (':' + ep.port) : '');\n};\n\nEsPeer.prototype.hasValid4 = function(ep) {\n return ep.ipv4 &&\n /* exclude private address - see https://fr.wikipedia.org/wiki/Adresse_IP */\n !ep.ipv4.match(this.regexp.LOCAL_IP_ADDRESS) ?\n true : false;\n};\n\nEsPeer.prototype.isReachable = function () {\n return !!this.getServer();\n};\n\nEsPeer.prototype.isSsl = function() {\n var ep = this.ep || this.getEP();\n return ep.useSsl;\n};\n\nEsPeer.prototype.isTor = function() {\n var ep = this.ep || this.getEP();\n return ep.useTor;\n};\n\nEsPeer.prototype.isHttp = function() {\n var ep = this.ep || this.getEP();\n return !bma.useTor;\n};\n\n","\nESPicturesEditController.$inject = ['$scope', 'UIUtils', '$q', 'Device'];\nESSocialsEditController.$inject = ['$scope', '$focus', '$filter', 'UIUtils', 'SocialUtils'];\nESSocialsViewController.$inject = ['$scope'];\nESCommentsController.$inject = ['$scope', '$filter', '$state', '$focus', '$timeout', '$anchorScroll', 'UIUtils'];\nESCategoryModalController.$inject = ['$scope', 'UIUtils', '$timeout', 'parameters'];\nESAvatarModalController.$inject = ['$scope'];\nESPositionEditController.$inject = ['$scope', 'csConfig', 'esGeo', 'ModalUtils'];\nESLookupPositionController.$inject = ['$scope', '$q', 'csConfig', 'esGeo', 'ModalUtils'];\nESSearchPositionItemController.$inject = ['$scope', '$timeout', 'ModalUtils', 'csConfig', 'esGeo'];\nESSearchPositionModalController.$inject = ['$scope', '$q', '$translate', 'esGeo', 'parameters'];angular.module('cesium.es.common.controllers', ['ngResource', 'cesium.es.services'])\n\n .controller('ESPicturesEditCtrl', ESPicturesEditController)\n\n .controller('ESPicturesEditCtrl', ESPicturesEditController)\n\n .controller('ESSocialsEditCtrl', ESSocialsEditController)\n\n .controller('ESSocialsViewCtrl', ESSocialsViewController)\n\n .controller('ESCommentsCtrl', ESCommentsController)\n\n .controller('ESCategoryModalCtrl', ESCategoryModalController)\n\n .controller('ESAvatarModalCtrl', ESAvatarModalController)\n\n .controller('ESPositionEditCtrl', ESPositionEditController)\n\n .controller('ESLookupPositionCtrl', ESLookupPositionController)\n\n .controller('ESSearchPositionItemCtrl', ESSearchPositionItemController)\n\n .controller('ESSearchPositionModalCtrl', ESSearchPositionModalController)\n;\n\n\nfunction ESPicturesEditController($scope, UIUtils, $q, Device) {\n 'ngInject';\n\n $scope.selectNewPicture = function(inputSelector) {\n if (Device.enable){\n $scope.openPicturePopup();\n }\n else {\n var fileInput = angular.element(document.querySelector(inputSelector||'#pictureFile'));\n if (fileInput && fileInput.length > 0) {\n fileInput[0].click();\n }\n }\n };\n\n $scope.openPicturePopup = function() {\n Device.camera.getPicture()\n .then(function(imageData) {\n $scope.pictures.push({\n src: \"data:image/png;base64,\" + imageData,\n isnew: true // use to prevent visibility hidden (if animation)\n });\n })\n .catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));\n };\n\n $scope.fileChanged = function(event) {\n if (!event.target.files || !event.target.files.length) return;\n UIUtils.loading.show();\n var file = event.target.files[0];\n return UIUtils.image.resizeFile(file)\n .then(function(imageData) {\n $scope.pictures.push({\n src: imageData,\n isnew: true // use to prevent visibility hidden (if animation)\n });\n event.target.value = \"\"; // reset input[type=file]\n UIUtils.loading.hide(100);\n })\n .catch(function(err) {\n console.error(err);\n event.target.value = \"\"; // reset input[type=file]\n UIUtils.loading.hide();\n });\n };\n\n $scope.removePicture = function(index){\n $scope.pictures.splice(index, 1);\n };\n\n $scope.favoritePicture = function(index){\n if (index > 0) {\n var item = $scope.pictures[index];\n $scope.pictures.splice(index, 1);\n $scope.pictures.splice(0, 0, item);\n }\n };\n\n $scope.rotatePicture = function(index){\n var item = $scope.pictures[index];\n UIUtils.image.rotateSrc(item.src)\n .then(function(dataURL){\n item.src = dataURL;\n });\n };\n}\n\n\nfunction ESCategoryModalController($scope, UIUtils, $timeout, parameters) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.allCategories = [];\n $scope.categories = [];\n this.searchText = '';\n\n // modal title\n this.title = parameters && parameters.title;\n\n $scope.afterLoad = function(result) {\n $scope.categories = result;\n $scope.allCategories = result;\n $scope.loading = false;\n $timeout(function() {\n UIUtils.ink();\n }, 10);\n };\n\n this.doSearch = function() {\n var searchText = this.searchText.toLowerCase().trim();\n if (searchText.length > 1) {\n $scope.loading = true;\n $scope.categories = $scope.allCategories.reduce(function(result, cat) {\n if (cat.parent && cat.name.toLowerCase().search(searchText) != -1) {\n return result.concat(cat);\n }\n return result;\n }, []);\n\n $scope.loading = false;\n }\n else {\n $scope.categories = $scope.allCategories;\n }\n };\n\n // load categories\n if (parameters && parameters.categories) {\n $scope.afterLoad(parameters.categories);\n }\n else if (parameters && parameters.load) {\n parameters.load()\n .then(function(res){\n $scope.afterLoad(res);\n });\n }\n\n}\n\n\n\nfunction ESCommentsController($scope, $filter, $state, $focus, $timeout, $anchorScroll, UIUtils) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.defaultCommentSize = 5;\n $scope.formData = {};\n $scope.comments = {};\n\n $scope.$on('$recordView.enter', function(e, state) {\n // First enter\n if ($scope.loading) {\n $scope.anchor = state && state.stateParams.anchor;\n }\n // second call (when using cached view)\n else if (!$scope.loading && $scope.id) {\n $scope.load($scope.id, {animate: false});\n }\n });\n\n $scope.$on('$recordView.load', function(event, id, service) {\n $scope.id = id || $scope.id;\n $scope.service = service || $scope.service;\n console.debug(\"[ES] [comment] Will use {\" + service.index + \"} service\");\n if ($scope.id) {\n $scope.load($scope.id)\n .then(function() {\n // Scroll to anchor\n $scope.scrollToAnchor();\n });\n }\n });\n\n $scope.load = function(id, options) {\n options = options || {};\n options.from = options.from || 0;\n // If anchor has been defined, load all comments\n options.size = options.size || ($scope.anchor && -1/*all*/);\n options.size = options.size || $scope.defaultCommentSize;\n options.animate = angular.isDefined(options.animate) ? options.animate : true;\n options.loadAvatarAllParent = angular.isDefined(options.loadAvatarAllParent) ? options.loadAvatarAllParent : true;\n $scope.loading = true;\n return $scope.service.load(id, options)\n .then(function(data) {\n if (!options.animate && data.result.length) {\n _.forEach(data.result, function(cmt) {\n cmt.isnew = true;\n });\n }\n $scope.comments = data;\n $scope.comments.hasMore = (data.total > data.result.length);\n $scope.loading = false;\n $scope.service.changes.start(id, data, $scope);\n\n // Set Motion\n $scope.motion.show({\n selector: '.comments .item',\n ink: false\n });\n });\n };\n\n $scope.$on('$recordView.beforeLeave', function(){\n if ($scope.comments) {\n if (!$scope.service) {\n console.error('[comment] Comment controller has no service ! Unable to listen changes...');\n return;\n }\n $scope.service.changes.stop($scope.comments);\n }\n });\n\n $scope.scrollToAnchor = function() {\n if (!$scope.anchor) return;\n var elemList = document.getElementsByName($scope.anchor);\n // Waiting for the element\n if (!elemList || !elemList.length) {\n return $timeout($scope.scrollToAnchor, 500);\n }\n // If many, remove all anchor except the last one\n for (var i = 0; i 0) {\n fileInput[0].click();\n }\n };\n\n $scope.fileChanged = function(e) {\n\n var files = e.target.files;\n var fileReader = new FileReader();\n fileReader.readAsDataURL(files[0]);\n\n fileReader.onload = function(e) {\n var res = this.result;\n $scope.$applyAsync(function() {\n $scope.formData.imgSrc = res;\n });\n };\n };\n\n $scope.doNext = function() {\n if ($scope.formData.imageCropStep == 2) {\n $scope.doCrop();\n }\n else if ($scope.formData.imageCropStep == 3) {\n $scope.closeModal($scope.formData.result);\n }\n };\n\n $scope.doCrop = function() {\n $scope.formData.initCrop = true;\n };\n\n $scope.clear = function() {\n $scope.formData = {\n initCrop: false,\n imageCropStep: 1,\n imgSrc: undefined,\n result: undefined,\n resultBlob: undefined\n };\n };\n\n}\n\n\nfunction ESPositionEditController($scope, csConfig, esGeo, ModalUtils) {\n 'ngInject';\n\n // The default country used for address localisation\n var defaultCountry = csConfig.plugins && csConfig.plugins.es && csConfig.plugins.es.defaultCountry;\n\n var loadingCurrentPosition = false;\n $scope.formPosition = {\n loading: false,\n enable: undefined\n };\n $scope.searchModalOpened = false;\n\n $scope.tryToLocalize = function() {\n if ($scope.formPosition.loading || loadingCurrentPosition) return;\n\n var searchText = $scope.getAddressToSearch();\n\n // No address, so try to localize by device\n if (!searchText) {\n loadingCurrentPosition = true;\n return esGeo.point.current()\n .then($scope.updateGeoPoint)\n .then(function() {\n loadingCurrentPosition = false;\n })\n .catch(function(err) {\n console.error(err); // Silent\n loadingCurrentPosition = false;\n });\n }\n\n $scope.formPosition.loading = true;\n return esGeo.point.searchByAddress(searchText)\n .then(function(res) {\n if (res && res.length == 1) {\n return $scope.updateGeoPoint(res[0]);\n }\n return $scope.openSearchLocationModal({\n text: searchText,\n results: res||[],\n forceFallback: !res || !res.length // force fallback search first\n });\n })\n .then(function() {\n $scope.formPosition.loading = false;\n })\n .catch(function(err) {\n console.error(err); // Silent\n $scope.formPosition.loading = false;\n });\n };\n\n $scope.onCityChanged = function() {\n if ($scope.loading) return;\n if ($scope.formPosition.enable) {\n if ($scope.formData.geoPoint) {\n // Invalidate the position\n $scope.formData.geoPoint.lat = undefined;\n $scope.formData.geoPoint.lon = undefined;\n }\n return $scope.tryToLocalize();\n }\n };\n\n $scope.onUseGeopointChanged = function() {\n if ($scope.loading) return;\n if (!$scope.formPosition.enable) {\n if ($scope.formData.geoPoint) {\n $scope.formData.geoPoint.lat = undefined;\n $scope.formData.geoPoint.lon = undefined;\n $scope.dirty = true;\n }\n }\n else {\n $scope.tryToLocalize();\n }\n };\n\n $scope.onGeopointChanged = function() {\n if ($scope.loading) {\n $scope.formPosition.enable = $scope.formData.geoPoint && !!$scope.formData.geoPoint.lat && !!$scope.formData.geoPoint.lon;\n }\n };\n $scope.$watch('formData.geoPoint', $scope.onGeopointChanged);\n\n $scope.getAddressToSearch = function() {\n return $scope.formData.address && $scope.formData.city ?\n [$scope.formData.address.trim(), $scope.formData.city.trim()].join(', ') :\n $scope.formData.city || $scope.formData.address || $scope.formData.location ;\n };\n\n $scope.updateGeoPoint = function(res) {\n // user cancel\n if (!res || !res.lat || !res.lon) {\n // nothing to do\n return;\n }\n\n $scope.dirty = true;\n $scope.formData.geoPoint = $scope.formData.geoPoint || {};\n $scope.formData.geoPoint.lat = parseFloat(res.lat);\n $scope.formData.geoPoint.lon = parseFloat(res.lon);\n\n if (res.address && res.address.city) {\n var cityParts = [res.address.city];\n if (res.address.postcode) {\n cityParts.push(res.address.postcode);\n }\n if (res.address.country != defaultCountry) {\n cityParts.push(res.address.country);\n }\n $scope.formData.city = cityParts.join(', ');\n }\n };\n\n /* -- modal -- */\n\n $scope.openSearchLocationModal = function(options) {\n\n if ($scope.searchModalOpened) return; // Skip\n\n $scope.searchModalOpened = true;\n options = options || {};\n\n var parameters = {\n text: options.text || $scope.getAddressToSearch(),\n results: options.results,\n fallbackText: options.fallbackText || $scope.formData.city,\n forceFallback: angular.isDefined(options.forceFallback) ? options.forceFallback : undefined\n };\n\n return ModalUtils.show(\n 'plugins/es/templates/common/modal_location.html',\n 'ESSearchPositionModalCtrl',\n parameters,\n {\n focusFirstInput: true\n }\n )\n .then(function(res) {\n $scope.searchModalOpened = false;\n $scope.updateGeoPoint(res);\n })\n .catch(function() {\n console.error(err);\n $scope.searchModalOpened = false;\n });\n };\n}\n\n\nfunction ESLookupPositionController($scope, $q, csConfig, esGeo, ModalUtils) {\n 'ngInject';\n\n // The default country used for address localisation\n var defaultCountry = csConfig.plugins && csConfig.plugins.es && csConfig.plugins.es.defaultCountry;\n var loadingPosition = false;\n\n $scope.geoDistanceLabels = [5,10,20,50,100,250,500].reduce(function(res, distance){\n res[distance] = {\n labelKey: 'LOCATION.DISTANCE_OPTION',\n labelParams: {value: distance}\n };\n return res;\n }, {});\n $scope.geoDistances = _.keys($scope.geoDistanceLabels);\n\n $scope.searchPosition = function(searchText) {\n if (loadingPosition) return $q.when();\n\n loadingPosition = true;\n\n // No address, so try to localize by device\n var promise = !searchText ?\n esGeo.point.current() :\n esGeo.point.searchByAddress(searchText)\n .then(function(res) {\n if (res && res.length == 1) {\n res[0].exact = true;\n return res[0];\n }\n return $scope.openSearchLocationModal({\n text: searchText,\n results: res||[],\n forceFallback: !res || !res.length // force fallback search first\n })\n .then(function(res) {\n // Compute point name\n if (res && res.address && res.address.city) {\n var cityParts = [res.address.city];\n if (res.address.postcode) {\n cityParts.push(res.address.postcode);\n }\n if (res.address.country != defaultCountry) {\n cityParts.push(res.address.country);\n }\n res.shortName = cityParts.join(', ');\n }\n return res;\n });\n });\n\n promise\n .then(function(res) {\n\n loadingPosition = false;\n\n // user cancel\n if (!res || !res.lat || !res.lon) return;\n\n return {\n lat: parseFloat(res.lat),\n lon: parseFloat(res.lon),\n name: res.shortName,\n exact: res.exact\n };\n\n })\n .catch(function(err) {\n console.error(err); // Silent\n loadingPosition = false;\n });\n\n return promise;\n };\n\n\n /* -- modal -- */\n\n $scope.openSearchLocationModal = function(options) {\n\n options = options || {};\n\n var parameters = {\n text: options.text || $scope.getAddressToSearch(),\n results: options.results,\n fallbackText: options.fallbackText || $scope.search.location,\n forceFallback: angular.isDefined(options.forceFallback) ? options.forceFallback : undefined\n };\n\n return ModalUtils.show(\n 'plugins/es/templates/common/modal_location.html',\n 'ESSearchPositionModalCtrl',\n parameters,\n {\n focusFirstInput: true\n //,scope: $scope\n }\n );\n };\n}\n\nfunction ESSearchPositionItemController($scope, $timeout, ModalUtils, csConfig, esGeo) {\n 'ngInject';\n\n // The default country used for address localisation\n var defaultCountry = csConfig.plugins && csConfig.plugins.es && csConfig.plugins.es.defaultCountry;\n //$scope.smallscreen = angular.isDefined($scope.smallscreen) ? $scope.smallscreen : UIUtils.screen.isSmall();\n\n var loadingPosition = false;\n var minLength = 3;\n $scope.locations = undefined;\n $scope.selectLocationIndex = -1;\n\n $scope.onKeydown = function(e) {\n\n switch(e.keyCode)\n {\n case 27://Esc\n $scope.hideDropdown();\n break;\n case 13://Enter\n if($scope.locations && $scope.locations.length)\n $scope.onEnter();\n break;\n case 38://Up\n $scope.onArrowUpOrDown(-1);\n e.preventDefault();\n break;\n case 40://Down\n $scope.onArrowUpOrDown(1);\n e.preventDefault();\n break;\n case 8://Backspace\n case 45://Insert\n case 46://Delete\n break;\n case 37://Left\n case 39://Right\n case 16://Shift\n case 17://Ctrl\n case 35://End\n case 36://Home\n break;\n default://All keys\n $scope.showDropdown();\n }\n };\n\n $scope.onEnter = function() {\n if ($scope.selectLocationIndex > -1) {\n $scope.selectLocation($scope.locations[$scope.selectLocationIndex]);\n }\n else {\n $scope.selectLocation($scope.locations[0]);\n }\n };\n\n $scope.onArrowUpOrDown = function(velocity) {\n if (!$scope.locations) return;\n\n $scope.selectLocationIndex+=velocity;\n if ($scope.selectLocationIndex >= $scope.locations.length) {\n $scope.selectLocationIndex = 0;\n }\n if ($scope.selectLocationIndex < 0) {\n $scope.selectLocationIndex = $scope.locations.length-1;\n }\n\n _.forEach($scope.locations||[], function(item, index) {\n item.selected = (index == $scope.selectLocationIndex);\n });\n\n // TODO: scroll to item ?\n };\n\n $scope.onLocationChanged = function() {\n if (loadingPosition || $scope.search.loading) return;\n $scope.search.geoPoint = undefined; // reset geo point\n\n $scope.showDropdown();\n };\n\n $scope.showDropdown = function() {\n var text = $scope.search.location && $scope.search.location.trim();\n if (!text || text.length < minLength) {\n return $scope.hideDropdown(true/*force, if still loading*/);\n }\n\n // Compute a request id, to apply response only if current request\n var requestId = ($scope.requestId && $scope.requestId + 1) || 1;\n $scope.requestId = requestId;\n\n loadingPosition = true;\n\n // Execute the given query\n return esGeo.point.searchByAddress(text)\n .then(function(res) {\n if ($scope.requestId != requestId) return; // Skip apply if not same request:\n\n loadingPosition = false;\n $scope.locations = res||[];\n $scope.license = res && res.length && res[0].license;\n })\n .catch(function(err) {\n $scope.hideDropdown();\n throw err;\n });\n };\n\n $scope.hideDropdown = function(force) {\n // force, even if still loading\n if (force) {\n $scope.locations = undefined;\n $scope.selectLocationIndex = -1;\n $scope.license = undefined;\n loadingPosition = false;\n return;\n }\n\n return $timeout(function() {\n if (loadingPosition) return;\n $scope.locations = undefined;\n $scope.license = undefined;\n loadingPosition = false;\n }, 500);\n };\n\n $scope.selectLocation = function(res, exactMatch) {\n loadingPosition = true; // avoid event\n if (res) {\n // Update position\n $scope.search.geoPoint = $scope.search.geoPoint || {};\n $scope.search.geoPoint.lat = parseFloat(res.lat);\n $scope.search.geoPoint.lon = parseFloat(res.lon);\n\n if (exactMatch) {\n $scope.search.geoPoint.exact = true;\n }\n else {\n // Update location name\n if (res && res.address && res.address.city) {\n var cityParts = [res.address.city];\n if (res.address.postcode) {\n cityParts.push(res.address.postcode);\n }\n if (res.address.country != defaultCountry) {\n cityParts.push(res.address.country);\n }\n $scope.search.location = cityParts.join(', ');\n }\n }\n }\n\n $scope.hideDropdown(true);\n };\n\n /* -- modal -- */\n\n $scope.openSearchLocationModal = function(options) {\n\n options = options || {\n text: $scope.search.location\n };\n\n var parameters = {\n text: options.text || $scope.search.location\n };\n\n return ModalUtils.show(\n 'plugins/es/templates/common/modal_location.html',\n 'ESSearchPositionModalCtrl',\n parameters,\n {\n focusFirstInput: true\n }\n )\n .then($scope.selectLocation);\n };\n\n}\n\nfunction ESSearchPositionModalController($scope, $q, $translate, esGeo, parameters) {\n 'ngInject';\n\n $scope.search = {\n text: parameters.text || '',\n fallbackText: parameters.fallbackText || undefined,\n forceFallback: angular.isDefined(parameters.forceFallback) ? parameters.forceFallback : false,\n loading: false,\n results: parameters.results || undefined\n };\n\n $scope.$on('modal.shown', function() {\n // Load search\n $scope.doSearch(true/*first search*/);\n });\n\n $scope.doSearch = function(firstSearch) {\n\n var text = $scope.search.text && $scope.search.text.trim();\n if (!text) {\n return $q.when(); // nothing to search\n }\n\n $scope.search.loading = true;\n\n // Compute alternative query text\n var fallbackText = firstSearch && $scope.search.fallbackText && $scope.search.fallbackText.trim();\n fallbackText = fallbackText && fallbackText != text ? fallbackText : undefined;\n\n // Execute the given query\n return ((firstSearch && $scope.search.forceFallback && $scope.search.results) ?\n $q.when($scope.search.results) :\n esGeo.point.searchByAddress(text)\n )\n .then(function(res) {\n if (res && res.length || !fallbackText) return res;\n\n // Fallback search\n return $q.all([\n $translate('LOCATION.MODAL.ALTERNATIVE_RESULT_DIVIDER', {address: fallbackText}),\n esGeo.point.searchByAddress(fallbackText)\n ])\n .then(function (res) {\n var dividerText = res[0];\n res = res[1];\n if (!res || !res.length) return res;\n\n return [{name: dividerText}].concat(res);\n });\n })\n .then(function(res) {\n $scope.search.loading = false;\n $scope.search.results = res||[];\n\n $scope.license = res && res.length && res[0].license;\n })\n .catch(function(err) {\n $scope.search.loading = false;\n $scope.search.results = [];\n $scope.license = undefined;\n throw err;\n })\n ;\n };\n\n}\n","\nESExtensionController.$inject = ['$scope', 'esSettings', 'PluginService'];\nESMenuExtendController.$inject = ['$scope', '$state', '$controller', 'UIUtils', 'csWallet'];\nESProfilePopoverExtendController.$inject = ['$scope', '$q', '$state', 'esSettings', 'csWallet'];angular.module('cesium.es.app.controllers', ['ngResource', 'cesium.es.services'])\n\n // Configure menu items\n .config(['PluginServiceProvider', 'csConfig', function(PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n // Menu extension points\n PluginServiceProvider.extendState('app', {\n points: {\n // removeIf(device)\n 'nav-buttons-right': {\n templateUrl: \"plugins/es/templates/menu_extend.html\",\n controller: \"ESMenuExtendCtrl\"\n },\n // endRemoveIf(device)\n 'menu-user': {\n templateUrl: \"plugins/es/templates/menu_extend.html\",\n controller: \"ESMenuExtendCtrl\"\n }\n }\n });\n\n // Profile popover extension points\n PluginServiceProvider.extendState('app', {\n points: {\n 'profile-popover-user': {\n templateUrl: \"plugins/es/templates/common/popover_profile_extend.html\",\n controller: \"ESProfilePopoverExtendCtrl\"\n }\n }\n });\n }\n }])\n\n .controller('ESExtensionCtrl', ESExtensionController)\n\n .controller('ESMenuExtendCtrl', ESMenuExtendController)\n\n .controller('ESProfilePopoverExtendCtrl', ESProfilePopoverExtendController)\n\n\n;\n\n\n/**\n * Generic controller, that enable/disable depending on esSettings enable/disable\n */\nfunction ESExtensionController($scope, esSettings, PluginService) {\n 'ngInject';\n $scope.extensionPoint = PluginService.extensions.points.current.get();\n $scope.enable = esSettings.isEnable();\n esSettings.api.state.on.changed($scope, function(enable) {\n $scope.enable = enable;\n $scope.$broadcast('$$rebind::state');\n });\n}\n\n/**\n * Control menu extension\n */\nfunction ESMenuExtendController($scope, $state, $controller, UIUtils, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));\n\n $scope.showRegistryLookupView = function() {\n $state.go(UIUtils.screen.isSmall() ? 'app.wot_lookup.tab_registry': 'app.registry_lookup_lg');\n };\n\n $scope.showNotificationsPopover = function(event) {\n return UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/notification/popover_notification.html',\n scope: $scope,\n autoremove: false, // reuse popover\n // Auto-close if open when un-authenticate\n afterShow: function(popover) {\n var listener = csWallet.api.data.on.unauth(popover.scope, function() {\n popover.scope.closePopover();\n listener();\n });\n }\n });\n };\n\n $scope.showMessagesPopover = function(event) {\n // Make sure tobe auth before opening this popover\n if (!csWallet.isAuth()) {\n return csWallet.auth({minData: true}).then(function(){\n UIUtils.loading.hide();\n return $scope.showMessagesPopover(event); // loop\n });\n }\n\n return UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/message/popover_message.html',\n scope: $scope,\n autoremove: false, // reuse popover\n // Auto-close if open when un-authenticate\n afterShow: function(popover) {\n var listener = csWallet.api.data.on.unauth(popover.scope, function() {\n popover.scope.closePopover();\n listener();\n });\n }\n });\n };\n\n $scope.showInvitationsPopover = function(event) {\n // Make sure tobe auth before opening this popover\n if (!csWallet.isAuth()) {\n return csWallet.auth().then(function(){\n UIUtils.loading.hide();\n return $scope.showInvitationsPopover(event); // loop\n });\n }\n\n return UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/invitation/popover_invitation.html',\n scope: $scope,\n autoremove: false, // reuse popover\n // Auto-close if open when un-authenticate\n afterShow: function(popover) {\n var listener = csWallet.api.data.on.unauth(popover.scope, function() {\n popover.scope.closePopover();\n listener();\n });\n }\n });\n };\n}\n\n/**\n * Control profile popover extension\n */\nfunction ESProfilePopoverExtendController($scope, $q, $state, esSettings, csWallet) {\n 'ngInject';\n\n $scope.updateView = function() {\n $scope.enable = csWallet.isLogin() && esSettings.isEnable();\n };\n\n $scope.showEditUserProfile = function() {\n $scope.closeProfilePopover();\n $state.go('app.edit_profile');\n };\n\n esSettings.api.state.on.changed($scope, $scope.updateView);\n csWallet.api.data.on.login($scope, function(data, deferred){\n $scope.enable = esSettings.isEnable();\n return deferred && deferred.resolve() || $q.when();\n });\n csWallet.api.data.on.logout($scope, function() {\n $scope.enable = false;\n });\n\n // Default action\n $scope.updateView();\n\n}\n","\nESPluginSettingsController.$inject = ['$scope', '$window', '$q', '$translate', '$ionicPopup', 'UIUtils', 'Modals', 'csHttp', 'csConfig', 'csSettings', 'esHttp', 'esSettings', 'esModals'];angular.module('cesium.es.settings.controllers', ['cesium.es.services'])\n\n // Configure menu items\n .config(['PluginServiceProvider', '$stateProvider', 'csConfig', function(PluginServiceProvider, $stateProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n // Extend settings via extension points\n PluginServiceProvider.extendState('app.settings', {\n points: {\n 'plugins': {\n templateUrl: \"plugins/es/templates/settings/settings_extend.html\",\n controller: \"ESExtensionCtrl\"\n }\n }\n });\n\n $stateProvider\n .state('app.es_settings', {\n url: \"/settings/es\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/settings/plugin_settings.html\",\n controller: 'ESPluginSettingsCtrl'\n }\n }\n });\n }\n }])\n\n .controller('ESPluginSettingsCtrl', ESPluginSettingsController)\n;\n\n\n/*\n * Settings extend controller\n */\nfunction ESPluginSettingsController ($scope, $window, $q, $translate, $ionicPopup,\n UIUtils, Modals, csHttp, csConfig, csSettings, esHttp, esSettings, esModals) {\n 'ngInject';\n\n $scope.hasWindowNotification = !!(\"Notification\" in window);\n $scope.formData = {};\n $scope.popupData = {}; // need for the node popup\n $scope.loading = true;\n\n $scope.enter= function(e, state) {\n $scope.load();\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function(keepEnableState) {\n $scope.loading = true;\n\n var wasEnable = $scope.formData.enable;\n $scope.formData = csSettings.data.plugins && csSettings.data.plugins.es ?\n angular.copy(csSettings.data.plugins.es) : {\n enable: false,\n host: undefined,\n port: undefined\n };\n if (keepEnableState && wasEnable) {\n $scope.formData.enable = wasEnable;\n }\n\n $scope.isFallbackNode = $scope.formData.enable && esHttp.node.isFallback();\n $scope.server = $scope.getServer(esHttp);\n\n $scope.loading = false;\n };\n\n esSettings.api.state.on.changed($scope, function(enable) {\n $scope.load(true);\n });\n\n $scope.setPopupForm = function(popupForm) {\n $scope.popupForm = popupForm;\n };\n\n // Change ESnode\n $scope.changeEsNode= function(node) {\n node = node || {\n host: $scope.formData.host,\n port: $scope.formData.port && $scope.formData.port != 80 && $scope.formData.port != 443 ? $scope.formData.port : undefined,\n useSsl: angular.isDefined($scope.formData.useSsl) ?\n $scope.formData.useSsl :\n ($scope.formData.port == 443)\n };\n\n $scope.showNodePopup(node)\n .then(function(newNode) {\n if (newNode.host === $scope.formData.host &&\n newNode.port == $scope.formData.port &&\n newNode.useSsl == $scope.formData.useSsl) {\n UIUtils.loading.hide();\n return; // same node = nothing to do\n }\n UIUtils.loading.show();\n\n var newEsNode = esHttp.instance(newNode.host, newNode.port, newNode.useSsl);\n return newEsNode.isAlive() // ping the node\n .then(function(alive) {\n if (!alive) {\n UIUtils.loading.hide();\n return UIUtils.alert.error('ERROR.INVALID_NODE_SUMMARY')\n .then(function(){\n $scope.changeEsNode(newNode); // loop\n });\n }\n\n $scope.formData.host = newEsNode.host;\n $scope.formData.port = newEsNode.port;\n $scope.formData.useSsl = newEsNode.useSsl;\n\n return esHttp.copy(newEsNode);\n })\n .then(function() {\n $scope.server = $scope.getServer(esHttp);\n $scope.isFallbackNode = false;\n UIUtils.loading.hide();\n });\n });\n };\n\n // Show node popup\n $scope.showNodePopup = function(node) {\n\n return $q(function(resolve, reject) {\n var parts = [node.host];\n if (node.port && node.port != 80) {\n parts.push(node.port);\n }\n $scope.popupData.newNode = parts.join(':');\n $scope.popupData.useSsl = angular.isDefined(node.useSsl) ? node.useSsl : (node.port == 443);\n if (!!$scope.popupForm) {\n $scope.popupForm.$setPristine();\n }\n $translate(['ES_SETTINGS.POPUP_PEER.TITLE', 'ES_SETTINGS.POPUP_PEER.HELP', 'COMMON.BTN_OK', 'COMMON.BTN_CANCEL'])\n .then(function (translations) {\n // Choose UID popup\n $ionicPopup.show({\n templateUrl: 'templates/settings/popup_node.html',\n title: translations['ES_SETTINGS.POPUP_PEER.TITLE'],\n subTitle: translations['ES_SETTINGS.POPUP_PEER.HELP'],\n scope: $scope,\n buttons: [\n { text: translations['COMMON.BTN_CANCEL'] },\n {\n text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: function(e) {\n $scope.popupForm.$submitted=true;\n if(!$scope.popupForm.$valid || !$scope.popupForm.newNode) {\n //don't allow the user to close unless he enters a node\n e.preventDefault();\n } else {\n return {\n server: $scope.popupData.newNode,\n useSsl: $scope.popupData.useSsl\n };\n }\n }\n }\n ]\n })\n .then(function(res) {\n if (!res) { // user cancel\n UIUtils.loading.hide();\n return;\n }\n var parts = res.server.split(':');\n parts[1] = parts[1] ? parts[1] : (res.useSsl ? 443 : 80);\n resolve({\n host: parts[0],\n port: parts[1],\n useSsl: res.useSsl\n });\n });\n });\n });\n };\n\n $scope.showNodeList = function() {\n // Check if need a filter on SSL node\n var forceUseSsl = (csConfig.httpsMode === 'true' || csConfig.httpsMode === true || csConfig.httpsMode === 'force') ||\n ($window.location && $window.location.protocol === 'https:') ? true : false;\n\n $ionicPopup._popupStack[0].responseDeferred.promise.close();\n return esModals.showNetworkLookup({\n enableFilter: true,\n endpoint: esHttp.constants.ES_USER_API_ENDPOINT,\n ssl: forceUseSsl ? true: undefined\n })\n .then(function (peer) {\n if (!peer) return;\n var esEps = (peer.getEsEndpoints() || []).reduce(function(res, ep){\n var esEp = esHttp.node.parseEndPoint(ep);\n return esEp ? res.concat(esEp) : res;\n }, []);\n if (!esEps.length) return;\n var ep = esEps[0];\n return {\n host: (ep.dns ? ep.dns :\n (peer.hasValid4(ep) ? ep.ipv4 : ep.ipv6)),\n port: ep.port || 80,\n useSsl: ep.useSsl || ep.port == 443\n };\n })\n .then(function(newEsNode) {\n $scope.changeEsNode(newEsNode); // get back to node popup\n });\n };\n\n $scope.onFormChanged = function() {\n if ($scope.loading) return;\n\n if ($scope.hasWindowNotification &&\n $scope.formData.notifications.emitHtml5 !== (window.Notification.permission === \"granted\")){\n window.Notification.requestPermission(function (permission) {\n // If the user accepts, let's create a notification\n $scope.formData.notifications.emitHtml5 = (permission === \"granted\"); // revert to false if permission not granted\n $scope.onFormChanged(); // Loop\n });\n return;\n }\n\n $scope.loading = true;\n csSettings.data.plugins = csSettings.data.plugins || {};\n csSettings.data.plugins.es = csSettings.data.plugins.es ?\n angular.merge(csSettings.data.plugins.es, $scope.formData) :\n $scope.formData;\n\n // Fix old settings (unused)\n delete csSettings.data.plugins.es.newNode;\n\n csSettings.store()\n .then(function() {\n $scope.loading = false;\n });\n };\n $scope.$watch('formData', $scope.onFormChanged, true);\n\n $scope.getServer = function(node) {\n node = node || $scope.formData;\n if (!node.host) return undefined;\n return csHttp.getServer(node.host, node.port);\n };\n}\n","\nESWalletViewController.$inject = ['$scope', '$controller', '$state', 'csWallet', 'esModals'];\nESWalletLikesController.$inject = ['$scope', '$controller', 'UIUtils', 'esHttp', 'esProfile'];angular.module('cesium.es.wallet.controllers', ['cesium.es.services'])\n\n .config(['PluginServiceProvider', 'csConfig', function(PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n PluginServiceProvider\n .extendStates(['app.view_wallet', 'app.view_wallet_by_id'], {\n points: {\n 'hero': {\n templateUrl: \"plugins/es/templates/wallet/view_wallet_extend.html\",\n controller: 'ESWalletLikesCtrl'\n },\n 'after-general': {\n templateUrl: \"plugins/es/templates/wallet/view_wallet_extend.html\",\n controller: 'ESWalletViewCtrl'\n }\n }\n })\n\n .extendState('app.view_wallets', {\n points: {\n 'item-wallet': {\n templateUrl: \"plugins/es/templates/wallet/item_wallet_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n\n ;\n }\n\n }])\n\n\n .controller('ESWalletViewCtrl', ESWalletViewController)\n\n .controller('ESWalletLikesCtrl', ESWalletLikesController)\n\n;\n\nfunction ESWalletViewController($scope, $controller, $state, csWallet, esModals) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));\n\n $scope.showProfileHelp = false;\n\n /* -- modals -- */\n\n $scope.showNewPageModal = function(event) {\n var wallet = ($state.params && $state.params.id) ? csWallet.children.get($state.params.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return;\n }\n\n return esModals.showNewPage({wallet: wallet});\n };\n}\n\n\nfunction ESWalletLikesController($scope, $controller, UIUtils, esHttp, esProfile) {\n 'ngInject';\n\n $scope.options = $scope.options || {};\n $scope.options.like = $scope.options.like || {\n index: 'user',\n type: 'profile',\n service: esProfile.like\n };\n $scope.canEdit = true; // Avoid to change like counter itself\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESLikesCtrl', {$scope: $scope}));\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));\n\n // Load likes, when profile loaded\n $scope.$watch('formData.pubkey', function(pubkey) {\n if (pubkey) {\n $scope.loadLikes(pubkey);\n }\n });\n}\n","\nESWotLookupExtendController.$inject = ['$scope', '$controller', '$state'];\nESWotIdentityViewController.$inject = ['$scope', '$ionicPopover', '$q', '$controller', '$timeout', 'UIUtils', 'Modals', 'csWallet', 'esHttp', 'esLike', 'esModals', 'esWallet', 'esProfile', 'esInvitation'];angular.module('cesium.es.wot.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n PluginServiceProvider\n\n .extendState('app.wot_lookup', {\n points: {\n 'tabs': {\n templateUrl: \"plugins/es/templates/wot/lookup_extend.html\",\n controller: \"ESExtensionCtrl\"\n }\n }\n })\n\n .extendState('app.wot_lookup_lg', {\n points: {\n 'top': {\n templateUrl: \"plugins/es/templates/wot/lookup_lg_extend.html\",\n controller: \"ESWotLookupExtendCtrl\"\n }\n }\n })\n\n .extendStates(['app.wot_identity', 'app.wot_identity_uid'], {\n points: {\n 'hero': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'general': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'after-general': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'buttons': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'after-buttons': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'buttons-top-fab': {\n templateUrl: \"plugins/es/templates/wot/view_identity_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n }\n }\n })\n\n .extendStates(['app.wot_cert', 'app.wot_cert_lg', 'app.wallet_cert', 'app.wallet_cert_lg'], {\n points: {\n 'nav-buttons': {\n templateUrl: \"plugins/es/templates/wot/view_certifications_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n },\n 'buttons': {\n templateUrl: \"plugins/es/templates/wot/view_certifications_extend.html\",\n controller: 'ESWotIdentityViewCtrl'\n }\n }\n })\n ;\n }\n\n }])\n\n\n .controller('ESWotLookupExtendCtrl', ESWotLookupExtendController)\n\n .controller('ESWotIdentityViewCtrl', ESWotIdentityViewController)\n\n;\n\nfunction ESWotLookupExtendController($scope, $controller, $state) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));\n\n $scope.openRegistryLookup = function() {\n\n var text = $scope.search.text && $scope.search.text.trim() || '';\n var location = $scope.search.location && $scope.search.location.trim() || '';\n var stateParams = {\n q: text.length ? text : undefined,\n location: location.length ? location : undefined\n };\n\n $state.go('app.wot_lookup.tab_registry', stateParams);\n };\n}\n\nfunction ESWotIdentityViewController($scope, $ionicPopover, $q, $controller, $timeout, UIUtils, Modals, csWallet,\n esHttp, esLike, esModals, esWallet, esProfile, esInvitation) {\n 'ngInject';\n\n $scope.options = $scope.options || {};\n $scope.options.like = $scope.options.like || {\n kinds: esLike.constants.KINDS,\n index: 'user',\n type: 'profile',\n service: esProfile.like\n };\n $scope.smallscreen = angular.isDefined($scope.smallscreen) ? $scope.smallscreen : UIUtils.screen.isSmall();\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESLikesCtrl', {$scope: $scope}));\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESExtensionCtrl', {$scope: $scope}));\n\n $scope.canCertify = false; // disable certify on the popover (by default - override by the wot map controller)\n\n /* -- modals -- */\n\n $scope.showNewMessageModal = function(confirm) {\n\n // note: not need to select wallet here, because message modal will do it, if need\n return csWallet.login({minData: true, method: 'default'})\n .then(function() {\n UIUtils.loading.hide();\n\n // Ask confirmation, if user has no Cesium+ profil\n if (!confirm && !$scope.formData.profile) {\n return UIUtils.alert.confirm('MESSAGE.CONFIRM.USER_HAS_NO_PROFILE')\n .then(function (confirm) {\n // Recursive call (with confirm flag)\n if (confirm) return true;\n });\n }\n return true;\n })\n // Open modal\n .then(function(confirm) {\n if (!confirm) return false;\n\n return esModals.showMessageCompose({\n destPub: $scope.formData.pubkey,\n destUid: $scope.formData.name||$scope.formData.uid\n })\n .then(function(sent) {\n if (sent) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');\n });\n });\n };\n\n $scope.showSuggestCertificationModal = function() {\n\n $scope.hideCertificationActionsPopover();\n\n var identities;\n\n return csWallet.auth({minData: true})\n .then(function(walletData) {\n UIUtils.loading.hide();\n if (!walletData) return;\n\n // Not allow for non-member - issue #561\n if (!walletData.isMember) {\n return UIUtils.alert.error('ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION');\n }\n\n return Modals.showWotLookup({\n allowMultiple: true,\n enableFilter: true,\n title: 'WOT.SUGGEST_CERTIFICATIONS_MODAL.TITLE',\n help: 'WOT.SUGGEST_CERTIFICATIONS_MODAL.HELP',\n okText: 'COMMON.BTN_NEXT',\n okType: 'button-positive'\n })\n .then(function(res) {\n if (!res || !res.length) return; // user cancelled\n identities = res;\n\n return $q.all([\n // Get keypair only once (if not done here, certification.send() with compute it many times)\n esWallet.box.getKeypair(walletData.keypair),\n // Ask confirmation\n UIUtils.alert.confirm('WOT.CONFIRM.SUGGEST_CERTIFICATIONS', undefined, {okText: 'COMMON.BTN_SEND'})\n ])\n .then(function(res) {\n if (!res) return;\n var keypair = res[0];\n var confirm = res[1];\n if (!confirm) return;\n var time = moment().utc().unix(); // use same date for each invitation\n return $q.all(\n identities.reduce(function(res, identity){\n return res.concat(\n esInvitation.send({\n issuer: walletData.pubkey,\n recipient: $scope.formData.pubkey,\n time: time,\n content: [identity.uid, identity.pubkey].join('-')\n }, keypair, 'certification')\n );\n }, [])\n );\n })\n .then(function() {\n UIUtils.toast.show('INVITATION.INFO.INVITATION_SENT');\n })\n .catch(UIUtils.onError('INVITATION.ERROR.SEND_INVITATION_FAILED'));\n });\n });\n };\n\n $scope.showAskCertificationModal = function() {\n\n $scope.hideCertificationActionsPopover();\n\n var identities;\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n if (!wallet) throw 'CANCELLED';\n return wallet.auth({minData: true});\n })\n .then(function(walletData) {\n UIUtils.loading.hide();\n if (!walletData) return;\n\n // Not allow for non-member - issue #561\n if (!walletData.isMember) {\n return UIUtils.alert.error('ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION');\n }\n\n return Modals.showWotLookup({\n allowMultiple: true,\n enableFilter: false,\n title: 'WOT.ASK_CERTIFICATIONS_MODAL.TITLE',\n help: 'WOT.ASK_CERTIFICATIONS_MODAL.HELP',\n okText: 'COMMON.BTN_NEXT',\n okType: 'button-positive'\n })\n .then(function(res) {\n if (!res || !res.length) return; // user cancelled\n identities = res;\n\n return $q.all([\n // Get keypair only once (if not done here, certification.send() with compute it many times)\n esWallet.box.getKeypair(walletData.keypair),\n // Ask confirmation\n UIUtils.alert.confirm('WOT.CONFIRM.ASK_CERTIFICATIONS', undefined, {okText: 'COMMON.BTN_SEND'})\n ])\n .then(function(res) {\n var keypair = res && res[0];\n var confirm = res && res[1];\n if (!keypair || !confirm) return;\n var time = moment().utc().unix(); // use same date for each invitation\n return $q.all(identities.reduce(function(res, identity){\n return res.concat(\n esInvitation.send({\n issuer: walletData.pubkey,\n recipient: identity.pubkey,\n time: time,\n content: [walletData.uid, walletData.pubkey].join('-')\n }, keypair, 'certification')\n );\n }, []))\n .then(function() {\n UIUtils.toast.show('INVITATION.INFO.INVITATION_SENT');\n })\n .catch(UIUtils.onError('INVITATION.ERROR.SEND_INVITATION_FAILED'));\n });\n });\n });\n };\n\n $scope.askCertification = function() {\n $scope.hideCertificationActionsPopover();\n\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n return wallet.auth({minData: true});\n })\n .then(function(walletData) {\n UIUtils.loading.hide();\n if (!walletData) return;\n\n // Not allow for non-member - issue #561\n if (!walletData.isMember) {\n return UIUtils.alert.error('ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION');\n }\n // ask confirmation\n return UIUtils.alert.confirm('WOT.CONFIRM.ASK_CERTIFICATION', undefined, {\n okText: 'COMMON.BTN_SEND'\n })\n .then(function(confirm) {\n if (!confirm) return;\n return esInvitation.send({\n issuer: walletData.pubkey,\n recipient: $scope.formData.pubkey,\n content: [walletData.uid, walletData.pubkey].join('-')\n },\n {\n type: 'certification',\n keypair: walletData.keypair\n })\n .then(function() {\n UIUtils.toast.show('INVITATION.INFO.INVITATION_SENT');\n })\n .catch(UIUtils.onError('INVITATION.ERROR.SEND_INVITATION_FAILED'));\n });\n });\n };\n\n /**\n * Delete the user profile (need moderator access, on Cs+ pod)\n * @param confirm\n * @returns {*}\n */\n $scope.delete = function(confirm) {\n\n if (!confirm) {\n $scope.hideActionsPopover();\n if (!$scope.formData.pubkey) return; // Skip\n\n return UIUtils.alert.confirm('PROFILE.CONFIRM.DELETE_BY_MODERATOR')\n .then(function(confirm) {\n if (confirm) return $scope.delete(confirm); // recursive call\n });\n }\n\n // TODO: ask for deletion of all data ? (e.g. message, comment, likes, etc.)\n // if (angular.isUndefined(allData)) {\n // return UIUtils.alert.confirm(...)\n // ...\n // }\n\n return UIUtils.loading.show()\n .then(function() {\n return esProfile.remove($scope.formData.pubkey);\n })\n .then(function() {\n return $scope.doUpdate();\n })\n .then(function() {\n return $timeout(function() {\n UIUtils.toast.show('DOCUMENT.INFO.REMOVED'); // toast\n }, 800);\n })\n .catch(UIUtils.onError(\"PROFILE.ERROR.DELETE_PROFILE_FAILED\"));\n };\n\n /* -- Load data -- */\n\n // Watch when profile loaded\n $scope.$watch('formData.pubkey', function(pubkey) {\n if (pubkey) {\n\n // Load likes,\n $scope.loadLikes(pubkey);\n\n // Enable deletion, if moderator\n $scope.canDelete = $scope.formData.profile && csWallet.isLogin() && csWallet.data.moderator === true;\n }\n\n });\n\n /* -- Popover -- */\n\n $scope.showCertificationActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/wot/popover_certification_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.certificationActionsPopover = popover;\n }\n });\n };\n\n $scope.hideCertificationActionsPopover = function() {\n if ($scope.certificationActionsPopover) {\n $scope.certificationActionsPopover.hide();\n $scope.certificationActionsPopover = null;\n }\n return true;\n };\n\n $scope.showActionsPopover = function (event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/wot/view_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n return true;\n };\n\n if ($scope.extensionPoint === 'buttons-top-fab') {\n // Show fab button, when parent execute motions\n $scope.$on('$csExtension.motion', function(event) {\n var canCompose = !!$scope.formData.profile;\n if (canCompose) {\n $scope.showFab('fab-compose-' + $scope.formData.pubkey);\n }\n });\n }\n\n // TODO : for DEV only\n /*$timeout(function() {\n if ($scope.extensionPoint != 'buttons') return;\n $scope.showSuggestCertificationModal();\n }, 1000);*/\n}\n","\nESRegistryLookupController.$inject = ['$scope', '$focus', '$timeout', '$filter', '$controller', '$location', '$translate', '$ionicPopover', 'Device', 'UIUtils', 'ModalUtils', 'BMA', 'csSettings', 'csWallet', 'esModals', 'esRegistry', 'esHttp'];\nESWalletPagesController.$inject = ['$scope', '$controller', '$timeout', 'UIUtils', 'esModals', 'csWallet'];\nESRegistryRecordViewController.$inject = ['$scope', '$rootScope', '$state', '$q', '$timeout', '$ionicPopover', '$ionicHistory', '$translate', '$controller', '$anchorScroll', 'csConfig', 'csWallet', 'esRegistry', 'UIUtils', 'esHttp'];\nESRegistryRecordEditController.$inject = ['$scope', '$timeout', '$state', '$q', '$ionicHistory', '$focus', '$translate', '$controller', 'Device', 'UIUtils', 'ModalUtils', 'csWallet', 'esHttp', 'esRegistry'];angular.module('cesium.es.registry.controllers', ['cesium.es.services', 'cesium.es.common.controllers'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.wot_lookup.tab_registry', {\n url: \"/page?q&type&hash&category&location&issuer&reload&lat&lon&d&last\",\n views: {\n 'tab_registry': {\n templateUrl: \"plugins/es/templates/registry/tabs/tab_registry.html\",\n controller: 'ESRegistryLookupCtrl'\n }\n },\n data: {\n large: 'app.registry_lookup_lg',\n silentLocationChange: true\n }\n })\n\n .state('app.registry_lookup_lg', {\n url: \"/wot/page/lg?q&type&hash&category&location&issuer&reload&lat&lon&d&last\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/lookup_lg.html\",\n controller: 'ESRegistryLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n\n .state('app.wallet_pages', {\n url: \"/account/pages?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/view_wallet_pages.html\",\n controller: 'ESWalletPagesCtrl'\n }\n },\n data: {\n login: true,\n minData: true,\n silentLocationChange: true\n }\n })\n\n .state('app.wallet_pages_by_id', {\n url: \"/wallets/:id/pages?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/view_wallet_pages.html\",\n controller: 'ESWalletPagesCtrl'\n }\n },\n data: {\n login: true,\n minData: true,\n silentLocationChange: true\n }\n })\n\n .state('app.view_page', {\n url: \"/page/view/:id/:title?refresh\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/view_record.html\",\n controller: 'ESRegistryRecordViewCtrl'\n }\n }\n })\n\n .state('app.view_page_anchor', {\n url: \"/page/view/:id/:title/:anchor\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/view_record.html\",\n controller: 'ESRegistryRecordViewCtrl'\n }\n }\n })\n\n .state('app.registry_add_record', {\n cache: false,\n url: \"/page/add/:type?wallet\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/edit_record.html\",\n controller: 'ESRegistryRecordEditCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n\n .state('app.registry_edit_record', {\n cache: false,\n url: \"/page/edit/:id/:title?wallet\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/registry/edit_record.html\",\n controller: 'ESRegistryRecordEditCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n ;\n }])\n\n .controller('ESRegistryLookupCtrl', ESRegistryLookupController)\n\n .controller('ESWalletPagesCtrl', ESWalletPagesController)\n\n .controller('ESRegistryRecordViewCtrl', ESRegistryRecordViewController)\n\n .controller('ESRegistryRecordEditCtrl', ESRegistryRecordEditController)\n\n;\n\nfunction ESRegistryLookupController($scope, $focus, $timeout, $filter, $controller, $location, $translate, $ionicPopover,\n Device, UIUtils, ModalUtils, BMA, csSettings, csWallet, esModals, esRegistry, esHttp) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESLookupPositionCtrl', {$scope: $scope}));\n\n var defaultSearchLimit = 10;\n\n $scope.search = {\n text: '',\n results: [],\n loading: true,\n lastRecords: true,\n type: null,\n category: null,\n location: null,\n advanced: null,\n issuer: null,\n geoDistance: !isNaN(csSettings.data.plugins.es.geoDistance) ? csSettings.data.plugins.es.geoDistance : 20\n };\n $scope.searchTextId = 'registrySearchText';\n $scope.enableFilter = true;\n $scope.smallscreen = angular.isDefined($scope.smallscreen) ? $scope.smallscreen : UIUtils.screen.isSmall();\n\n $scope.options = angular.merge($scope.options||{}, {\n location: {\n show: true,\n help: 'REGISTRY.SEARCH.LOCATION_HELP'\n }\n });\n\n $scope.enter = function(e, state) {\n if (!$scope.entered || !$scope.search.results || $scope.search.results.length === 0) {\n\n // Resolve distance unit\n if (!$scope.geoUnit) {\n return $translate('LOCATION.DISTANCE_UNIT')\n .then(function(unit) {\n $scope.geoUnit = unit;\n return $scope.enter(e, state); // Loop\n });\n }\n\n var finishEntered = function() {\n // removeIf(device)\n // Focus on search text (only if NOT device, to avoid keyboard opening)\n if ($scope.searchTextId) {\n $focus($scope.searchTextId);\n }\n // endRemoveIf(device)\n\n $scope.entered = true;\n\n $scope.doSearch();\n };\n\n // Search by text\n if (state.stateParams && state.stateParams.q && (typeof state.stateParams.q == 'string')) {\n $scope.search.text=state.stateParams.q;\n }\n\n if (state.stateParams && state.stateParams.hash) { // hash tag parameter\n $scope.search.text = '#' + state.stateParams.hash;\n }\n\n // Search on location\n if (state.stateParams && state.stateParams.location) {\n $scope.search.location = state.stateParams.location;\n if (state.stateParams.lat && state.stateParams.lon) {\n $scope.search.geoPoint = {\n lat: parseFloat(state.stateParams.lat),\n lon: parseFloat(state.stateParams.lon)\n };\n }\n if (state.stateParams.d) {\n $scope.search.geoDistance = state.stateParams.d;\n }\n }\n else {\n var defaultSearch = csSettings.data.plugins.es.registry && csSettings.data.plugins.es.registry.defaultSearch;\n // Apply defaults from settings\n if (defaultSearch) {\n if (defaultSearch.location){\n angular.merge($scope.search, csSettings.data.plugins.es.registry.defaultSearch);\n }\n else {\n defaultSearch = undefined; // invalid\n }\n }\n // First time calling this view: apply profile location (if loaded)\n if (!defaultSearch && csWallet.isLogin() && csWallet.data.profile) {\n if (!csWallet.isDataLoaded()) {\n UIUtils.loading.show();\n return csWallet.loadData()\n .then(function() {\n UIUtils.loading.hide();\n return $scope.enter(e,state); // loop\n });\n }\n $scope.search.geoPoint = csWallet.data.profile.geoPoint;\n $scope.search.location = csWallet.data.profile.city||(csWallet.data.profile.geoPoint ? $translate.instant('LOCATION.PROFILE_POSITION') : undefined);\n }\n }\n\n // Search on type\n if (state.stateParams && (state.stateParams.type || state.stateParams.last)) {\n if (state.stateParams.last || state.stateParams.type == 'last') {\n $scope.search.lastRecords = true;\n $scope.search.type = undefined;\n }\n else {\n $scope.search.type = state.stateParams.type;\n }\n }\n else {\n $scope.search.lastRecords = false;\n }\n\n // Search on issuer\n if (state.stateParams && state.stateParams.issuer) {\n $scope.search.issuer = state.stateParams.issuer;\n }\n\n // Search on category\n if (state.stateParams && state.stateParams.category) {\n esRegistry.category.get({id: state.stateParams.category})\n .then(function(cat) {\n $scope.search.category = cat;\n finishEntered();\n })\n .catch(UIUtils.onError(\"REGISTRY.ERROR.LOAD_CATEGORY_FAILED\"));\n }\n else {\n finishEntered();\n }\n }\n $scope.showFab('fab-add-registry-record');\n\n };\n $scope.$on('$ionicView.enter', function(e, state) {\n // WARN: do not set by reference\n // because it can be overrided by sub controller\n return $scope.enter(e, state);\n });\n\n // Store some search options as settings defaults\n $scope.leave = function() {\n var dirty = false;\n\n csSettings.data.plugins.es.registry = csSettings.data.plugins.es.registry || {};\n csSettings.data.plugins.es.registry.defaultSearch = csSettings.data.plugins.es.registry.defaultSearch || {};\n\n // Check if location changed\n var location = $scope.search.location && $scope.search.location.trim();\n var oldLocation = csSettings.data.plugins.es.registry.defaultSearch.location;\n if (!oldLocation || (oldLocation !== location)) {\n csSettings.data.plugins.es.registry.defaultSearch = {\n location: location,\n geoPoint: location && $scope.search.geoPoint ? angular.copy($scope.search.geoPoint) : undefined\n };\n dirty = true;\n }\n\n // Check if distance changed\n var odlDistance = csSettings.data.plugins.es.geoDistance;\n if (!odlDistance || odlDistance !== $scope.search.geoDistance) {\n csSettings.data.plugins.es.geoDistance = $scope.search.geoDistance;\n dirty = true;\n }\n\n // execute with a delay, for better UI perf\n if (dirty) {\n $timeout(function() {\n csSettings.store();\n });\n }\n };\n $scope.$on('$ionicView.leave', function() {\n // WARN: do not set by reference\n // because it can be overrided by sub controller\n return $scope.leave();\n });\n\n $scope.onGeoPointChanged = function() {\n if ($scope.search.loading) return;\n\n if ($scope.search.geoPoint && $scope.search.geoPoint.lat && $scope.search.geoPoint.lon && !$scope.search.geoPoint.exact) {\n $scope.doSearch();\n $scope.updateLocationHref();\n }\n };\n $scope.$watch('search.geoPoint', $scope.onGeoPointChanged, true);\n\n $scope.resolveLocationPosition = function() {\n if ($scope.search.loadingPosition) return;\n\n $scope.search.loadingPosition = true;\n return $scope.searchPosition($scope.search.location)\n .then(function(res) {\n if (!res) {\n $scope.search.loading = false;\n $scope.search.results = undefined;\n $scope.search.total = 0;\n $scope.search.loadingPosition = false;\n $scope.search.geoPoint = undefined;\n throw 'CANCELLED';\n }\n $scope.search.geoPoint = res;\n if (res.shortName && !res.exact) {\n $scope.search.location = res.shortName;\n }\n $scope.search.loadingPosition = false;\n });\n };\n\n $scope.doGetLastRecords = function(from) {\n $scope.hidePopovers();\n\n $scope.search.text = undefined;\n return $scope.doSearch(from);\n };\n\n $scope.doSearchText = function() {\n $scope.doSearch();\n\n };\n\n $scope.doSearch = function(from) {\n $scope.search.loading = !from;\n\n // Resolve location position\n if ($scope.search.location && $scope.search.location.length >= 3 && !$scope.search.geoPoint) {\n return $scope.resolveLocationPosition()\n .then(function() {\n return $scope.doSearch(from); // Loop\n });\n }\n\n var text = $scope.search.text && $scope.search.text.trim() || '';\n $scope.search.lastRecords = !text || !text.length;\n var matches = [];\n var filters = [];\n if (text && text.length) {\n // pubkey : use a special 'term', because of 'non indexed' field\n if (BMA.regexp.PUBKEY.test(text /*case sensitive*/)) {\n filters.push({term : { pubkey: text}});\n }\n else {\n text = text.toLowerCase();\n var tags = text ? esHttp.util.parseTags(text) : undefined;\n var matchFields = [\"title\", \"description\", \"city\", \"address\"];\n matches.push({multi_match : { query: text,\n fields: matchFields,\n type: \"phrase_prefix\"\n }});\n matches.push({match : { title: {query: text, boost: 2}}});\n matches.push({prefix: {title: text}});\n matches.push({match : { description: text}});\n matches.push({\n nested: {\n path: \"category\",\n query: {\n bool: {\n filter: {\n match: { \"category.name\": text}\n }\n }\n }\n }\n });\n if (tags && tags.length) {\n filters.push({terms: {tags: tags}});\n }\n }\n }\n // issuer: use only on filter\n else if ($scope.search.issuer) {\n filters.push({term : { issuer: $scope.search.issuer}});\n }\n if ($scope.search.type) {\n filters.push({term: { type: $scope.search.type}});\n }\n if ($scope.search.category) {\n filters.push({\n nested: {\n path: \"category\",\n query: {\n bool: {\n filter: {\n term: { \"category.id\": $scope.search.category.id}\n }\n }\n }\n }\n });\n }\n\n var location = $scope.search.location && $scope.search.location.trim().toLowerCase();\n if ($scope.search.geoPoint && $scope.search.geoPoint.lat && $scope.search.geoPoint.lon) {\n\n // match location OR geo distance\n if (location && location.length) {\n var locationCity = location.split(',')[0];\n filters.push({\n or : [\n // No position defined\n {\n and: [\n {not: {exists: { field : \"geoPoint\" }}},\n {match_phrase: { city: locationCity }}\n ]\n },\n // Has position\n {geo_distance: {\n distance: $scope.search.geoDistance + $scope.geoUnit,\n geoPoint: {\n lat: $scope.search.geoPoint.lat,\n lon: $scope.search.geoPoint.lon\n }\n }}\n ]\n });\n }\n\n else {\n filters.push(\n {geo_distance: {\n distance: $scope.search.geoDistance + $scope.geoUnit,\n geoPoint: {\n lat: $scope.search.geoPoint.lat,\n lon: $scope.search.geoPoint.lon\n }\n }});\n }\n }\n\n var request = {\n highlight: {fields : {title : {}, description: {}, tags: {}}},\n from: from\n };\n if (matches.length > 0) {\n request.query = request.query || {bool: {}};\n request.query.bool.should = matches;\n // Exclude result with score=0\n request.query.bool.minimum_should_match = 1;\n }\n if (filters.length > 0) {\n request.query = request.query || {bool: {}};\n request.query.bool.filter = filters;\n }\n if ($scope.search.lastRecords) {\n request.sort = {creationTime : \"desc\"};\n }\n\n // Update href location\n $scope.updateLocationHref();\n\n // Execute the request\n return $scope.doRequest(request);\n };\n\n $scope.doRequest = function(options) {\n options = options || {};\n options.from = options.from || 0;\n options.size = options.size || defaultSearchLimit;\n if (options.size < defaultSearchLimit) options.size = defaultSearchLimit;\n $scope.search.loading = (options.from === 0);\n\n var requestId = ($scope.requestId && $scope.requestId + 1) || 1;\n $scope.requestId = requestId;\n\n return esRegistry.record.search(options)\n .then(function(res) {\n if ($scope.requestId != requestId) return; // Skip apply if not same request:\n\n if (!res || !res.hits || !res.hits.length) {\n $scope.search.results = (options.from > 0) ? $scope.search.results : [];\n $scope.search.total = (options.from > 0) ? $scope.search.total : 0;\n $scope.search.loading = false;\n $scope.search.hasMore = false;\n return;\n }\n var formatSlug = $filter('formatSlug');\n _.forEach(res.hits, function(record) {\n // Compute title for url\n record.urlTitle = formatSlug(record.title);\n });\n\n // Replace results, or append if 'show more' clicked\n if (!options.from) {\n $scope.search.results = res.hits;\n $scope.search.total = res.total;\n }\n else {\n $scope.search.results = $scope.search.results.concat(res.hits);\n }\n $scope.search.hasMore = $scope.search.results.length < res.total;\n $scope.search.loading = false;\n\n $scope.motion.show({selector: '.list .item', ink: true});\n })\n .catch(function(err) {\n $scope.search.loading = false;\n $scope.search.results = (options.from > 0) ? $scope.search.results : [];\n $scope.search.total = (options.from > 0) ? $scope.search.total : 0;\n $scope.search.hasMore = false;\n UIUtils.onError('REGISTRY.ERROR.LOOKUP_RECORDS_FAILED')(err);\n });\n };\n\n $scope.showMore= function() {\n var from = $scope.search.results ? $scope.search.results.length : 0;\n\n $scope.search.loadingMore = true;\n\n var searchFunction = ($scope.search.lastRecords) ?\n $scope.doGetLastRecords :\n $scope.doSearch;\n\n return searchFunction(from)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n })\n .catch(function(err) {\n console.error(err);\n $scope.search.loadingMore = false;\n $scope.search.hasMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.removeType = function() {\n $scope.search.type = null;\n $scope.doSearch();\n $scope.updateLocationHref();\n };\n\n $scope.removeCategory = function() {\n $scope.search.category = null;\n $scope.category = null;\n $scope.doSearch();\n $scope.updateLocationHref();\n };\n\n $scope.removeLocation = function() {\n $scope.search.location = null;\n $scope.search.geoPoint = null;\n $scope.doSearch();\n $scope.updateLocationHref();\n };\n\n // Update location href\n $scope.updateLocationHref = function(from) {\n // removeIf(device)\n // Skip when \"show more\"\n if (from) return;\n\n $timeout(function() {\n var text = $scope.search.text && $scope.search.text.trim();\n var location = $scope.search.location && $scope.search.location.trim();\n var stateParams = {\n location: location && location.length ? location : undefined,\n category: $scope.search.category ? $scope.search.category.id : undefined,\n last: $scope.search.lastRecords ? true : undefined,\n type: $scope.search.type ? $scope.search.type : undefined,\n lat: $scope.search.geoPoint && $scope.search.geoPoint.lat || undefined,\n lon: $scope.search.geoPoint && $scope.search.geoPoint.lon || undefined,\n d: $scope.search.geoPoint && $scope.search.geoDistance || undefined\n };\n if (text && text.match(/^#\\w+$/)) {\n stateParams.hash = text.substr(1);\n }\n else if (text && text.length){\n stateParams.q = text;\n }\n\n $location.search(stateParams).replace();\n });\n // endRemoveIf(device)\n };\n\n\n $scope.onToggleAdvanced = function() {\n if ($scope.search.entered && !$scope.search.lastRecords) {\n $scope.doSearch();\n $scope.updateLocationHref();\n }\n };\n $scope.$watch('search.advanced', $scope.onToggleAdvanced, true);\n\n $scope.toggleAdvanced = function() {\n $scope.search.advanced = !$scope.search.advanced;\n $timeout($scope.hidePopovers, 200);\n };\n\n /* -- modals -- */\n\n $scope.showRecordTypeModal = function(event) {\n $scope.hidePopovers();\n\n $timeout(function() {\n if (event.isDefaultPrevented()) return;\n\n ModalUtils.show('plugins/es/templates/registry/modal_record_type.html')\n .then(function(type){\n if (type) {\n $scope.search.type = type;\n $scope.doSearch();\n $scope.updateLocationHref();\n }\n });\n }, 350); // use timeout to allow event to be prevented in removeType()\n };\n\n $scope.showCategoryModal = function(event) {\n $timeout(function() {\n if (event.isDefaultPrevented()) return;\n\n // load categories\n esRegistry.category.all()\n .then(function (categories) {\n // open modal\n return ModalUtils.show('plugins/es/templates/common/modal_category.html', 'ESCategoryModalCtrl as ctrl',\n {categories: categories}, {focusFirstInput: true});\n })\n .then(function (cat) {\n if (cat && cat.parent) {\n $scope.search.category = cat;\n $scope.doSearch();\n $scope.updateLocationHref();\n }\n });\n }, 350); // use timeout to allow event to be prevented in removeCategory()\n };\n\n $scope.showNewPageModal = function() {\n $scope.hidePopovers();\n return esModals.showNewPage();\n };\n\n /* -- popovers -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/registry/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.filtersPopover = null;\n }\n };\n\n $scope.showFiltersPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/registry/lookup_popover_filters.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.filtersPopover = popover;\n }\n });\n };\n\n $scope.hideFiltersPopover = function() {\n if ($scope.filtersPopover) {\n $scope.filtersPopover.hide();\n $scope.filtersPopover = null;\n }\n };\n\n $scope.hidePopovers = function() {\n $scope.hideActionsPopover();\n $scope.hideFiltersPopover();\n };\n\n\n // TODO: remove auto add account when done\n /* $timeout(function() {\n $scope.search.text='lavenier';\n $scope.doSearch();\n }, 400);\n */\n}\n\n\nfunction ESWalletPagesController($scope, $controller, $timeout, UIUtils, esModals, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESRegistryLookupCtrl', {$scope: $scope}));\n\n $scope.searchTextId = undefined; // avoid focus\n\n var wallet;\n\n // Override the default enter\n $scope.enter = function(e, state) {\n if (!$scope.entered) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n return wallet.login({minData: true})\n .then(function(walletData) {\n UIUtils.loading.hide();\n $scope.search.issuer = walletData.pubkey;\n $scope.search.advanced = true;\n $timeout($scope.doSearch, 100);\n $scope.showFab('fab-wallet-add-registry-record');\n });\n }\n else {\n // Asking refresh\n if (state.stateParams && state.stateParams.refresh) {\n return $timeout($scope.doSearch, 2000 /*waiting for propagation, if deletion*/);\n }\n }\n };\n\n $scope.doUpdate = function() {\n if (!wallet || !wallet.isLogin()) return;\n $scope.search.issuer = csWallet.data.pubkey;\n $scope.search.advanced = true;\n return $scope.doSearch();\n };\n\n // Override inherited, to pass the select wallet\n $scope.showNewPageModal = function() {\n $scope.hidePopovers();\n return esModals.showNewPage({wallet: wallet});\n };\n\n}\n\n\nfunction ESRegistryRecordViewController($scope, $rootScope, $state, $q, $timeout, $ionicPopover, $ionicHistory, $translate, $controller,\n $anchorScroll, csConfig, csWallet, esRegistry, UIUtils, esHttp) {\n 'ngInject';\n\n $scope.formData = {};\n $scope.id = null;\n $scope.category = {};\n $scope.pictures = [];\n $scope.canEdit = false;\n $scope.showTransfer = false;\n $scope.loading = true;\n $scope.motion = UIUtils.motion.fadeSlideIn;\n\n // Init likes here, to be able to use in extension\n $scope.options = $scope.options || {};\n $scope.options.like = {\n kinds: ['LIKE', 'ABUSE'],\n index: 'page',\n type: 'record'\n };\n $scope.likeData = {\n likes: {},\n abuses: {}\n };\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESLikesCtrl', {$scope: $scope}));\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if (state.stateParams && state.stateParams.id) { // Load by id\n if ($scope.loading || state.stateParams.refresh) { // prevent reload if same id (if not forced)\n $scope.load(state.stateParams.id, state.stateParams.anchor);\n }\n $scope.$broadcast('$recordView.enter', state);\n }\n else {\n $state.go('app.wot_lookup.tab_registry');\n }\n });\n\n $scope.$on('$ionicView.beforeLeave', function(event, args){\n $scope.$broadcast('$recordView.beforeLeave', args);\n });\n\n $scope.load = function(id, anchor) {\n id = id || $scope.id;\n $scope.loading = true;\n\n return $q.all([\n esRegistry.record.load(id)\n .then(function (data) {\n $scope.id= data.id;\n $scope.formData = data.record;\n //console.debug('Loading record', $scope.formData);\n $scope.canEdit = csWallet.isUserPubkey($scope.formData.issuer) || csWallet.children.hasPubkey($scope.formData.issuer);\n $scope.showTransfer = !$scope.canEdit && $scope.formData.pubkey;\n $scope.issuer = data.issuer;\n // avatar\n $scope.avatar = $scope.formData.avatar;\n $scope.avatarStyle= $scope.formData.avatar && {'background-image':'url(\"'+$scope.avatar.src+'\")'};\n\n UIUtils.loading.hide();\n $scope.loading = false;\n // Set Motion (only direct children, to exclude .lazy-load children)\n $scope.motion.show({selector: '.list > .item, .list > ng-if > .item'});\n })\n .catch(function(err) {\n // Retry (ES could have error)\n if (!$scope.secondTry) {\n $scope.secondTry = true;\n $q(function() {\n $scope.load(id);\n }, 100);\n }\n else {\n $scope.loading = false;\n if (err && err.ucode === 404) {\n UIUtils.toast.show('REGISTRY.ERROR.RECORD_NOT_EXISTS');\n $state.go('app.wot_lookup.tab_registry');\n }\n else {\n UIUtils.onError('REGISTRY.ERROR.LOAD_RECORD_FAILED')(err);\n }\n }\n }),\n\n // Load pictures\n esRegistry.record.picture.all({id: id})\n .then(function(hit) {\n\n $scope.pictures = hit._source.pictures && hit._source.pictures.reduce(function(res, pic) {\n return res.concat(esHttp.image.fromAttachment(pic.file));\n }, []);\n\n // Set Motion\n if ($scope.pictures.length > 0) {\n $scope.motion.show({\n selector: '.lazy-load .item.card-gallery',\n startVelocity: 3000\n });\n }\n })\n .catch(function() {\n $scope.pictures = [];\n }),\n\n // Load other data (from child controller)\n $timeout(function() {\n return $scope.$broadcast('$recordView.load', id, esRegistry.record.comment);\n })\n ])\n .then(function() {\n // Display items in technical parts\n $scope.motion.show({\n selector: '.lazy-load .item',\n startVelocity: 3000\n });\n\n // scroll (if comment anchor)\n if (anchor) $timeout(function() {\n $anchorScroll(anchor);\n }, 1000);\n });\n };\n\n // Edit click\n $scope.edit = function() {\n var wallet = csWallet.isUserPubkey($scope.formData.issuer) ? csWallet : csWallet.children.getByPubkey($scope.formData.issuer);\n if (!wallet) return;\n UIUtils.loading.show();\n return $state.go('app.registry_edit_record', {id: $scope.id, wallet: wallet.id});\n };\n\n $scope.delete = function() {\n $scope.hideActionsPopover();\n\n var wallet = csWallet.isUserPubkey($scope.formData.issuer) ? csWallet : csWallet.children.getByPubkey($scope.formData.issuer);\n if (!wallet) return;\n\n // translate\n var translations;\n $translate(['REGISTRY.VIEW.REMOVE_CONFIRMATION', 'REGISTRY.INFO.RECORD_REMOVED'])\n .then(function(res) {\n translations = res;\n return UIUtils.alert.confirm(res['REGISTRY.VIEW.REMOVE_CONFIRMATION']);\n })\n .then(function(confirm) {\n if (confirm) {\n esRegistry.record.remove($scope.id, {wallet: wallet})\n .then(function () {\n if (wallet.data.pages && wallet.data.pages.count) {\n wallet.data.pages.count--;\n }\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n if (wallet.isDefault()) {\n $state.go('app.wallet_pages', {refresh: true});\n }\n else {\n $state.go('app.wallet_pages_by_id', {refresh: true, id: wallet.id});\n }\n\n UIUtils.toast.show(translations['REGISTRY.INFO.RECORD_REMOVED']);\n })\n .catch(UIUtils.onError('REGISTRY.ERROR.REMOVE_RECORD_FAILED'));\n }\n });\n };\n\n /* -- modals & popover -- */\n\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/registry/view_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n return true;\n };\n\n $scope.showSharePopover = function(event) {\n $scope.hideActionsPopover();\n var title = $scope.formData.title;\n // Use shareBasePath (fix #530) or rootPath (fix #390)\n var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.view_page', {title: title, id: $scope.id});\n // Override default position, is small screen - fix #545\n if (UIUtils.screen.isSmall()) {\n event = angular.element(document.querySelector('#registry-share-anchor-'+$scope.id)) || event;\n }\n UIUtils.popover.share(event, {\n bindings: {\n url: url,\n titleKey: 'REGISTRY.VIEW.POPOVER_SHARE_TITLE',\n titleValues: {title: title},\n time: $scope.formData.time,\n postMessage: title\n }\n });\n };\n\n}\n\nfunction ESRegistryRecordEditController($scope, $timeout, $state, $q, $ionicHistory, $focus, $translate, $controller,\n Device, UIUtils, ModalUtils, csWallet, esHttp, esRegistry) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESPositionEditCtrl', {$scope: $scope}));\n\n $scope.formData = {\n title: null,\n description: null,\n socials: [],\n geoPoint: null\n };\n\n $scope.loading = true;\n $scope.dirty = false;\n $scope.walletData = null;\n $scope.id = null;\n $scope.avatar = null;\n $scope.pictures = [];\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n var wallet;\n\n $scope.$on('$ionicView.enter', function(e, state) {\n\n if ($scope.loading) {\n wallet = (state.stateParams && state.stateParams.wallet && state.stateParams.wallet != 'default') ? csWallet.children.get(state.stateParams.wallet) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n return wallet.login({minData: true})\n .then(function(walletData) {\n $scope.walletData = walletData;\n if (state.stateParams && state.stateParams.id) { // Load by id\n $scope.load(state.stateParams.id);\n }\n else {\n if (state.stateParams && state.stateParams.type) {\n $scope.updateView({\n record: {\n type: state.stateParams.type\n }\n });\n }\n }\n // removeIf(device)\n $focus('registry-record-title');\n // endRemoveIf(device)\n });\n }\n });\n\n $scope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {\n if ($scope.dirty && !$scope.saving) {\n\n // stop the change state action\n event.preventDefault();\n\n if (!$scope.loading) {\n $scope.loading = true;\n return UIUtils.alert.confirm('CONFIRM.SAVE_BEFORE_LEAVE',\n 'CONFIRM.SAVE_BEFORE_LEAVE_TITLE', {\n cancelText: 'COMMON.BTN_NO',\n okText: 'COMMON.BTN_YES_SAVE'\n })\n .then(function(confirmSave) {\n $scope.loading = false;\n if (confirmSave) {\n $scope.form.$submitted=true;\n return $scope.save(false/*silent*/, true/*haswait debounce*/)\n .then(function(saved){\n if (saved) {\n $scope.dirty = false;\n }\n return saved; // change state only if not error\n });\n }\n else {\n $scope.dirty = false;\n return true; // ok, change state\n }\n })\n .then(function(confirmGo) {\n if (confirmGo) {\n // continue to the order state\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n $state.go(next.name, nextParams);\n }\n })\n .catch(function(err) {\n // Silent\n });\n }\n }\n });\n\n $scope.load = function(id) {\n $scope.loading = true;\n esRegistry.record.load(id, {\n raw: true\n })\n .then(function (data) {\n if (data && data.record) {\n $scope.updateView(data);\n }\n else {\n $scope.updateView({record: {}});\n }\n })\n .catch(function(err) {\n UIUtils.loading.hide(10);\n $scope.loading = false;\n UIUtils.onError('REGISTRY.ERROR.LOAD_RECORD_FAILED')(err);\n });\n };\n\n $scope.updateView = function(data) {\n $scope.formData = data.record || {};\n $scope.id= data.id;\n\n // avatar\n $scope.avatar = $scope.formData.avatar;\n if ($scope.avatar) {\n $scope.avatarStyle = $scope.avatar && {'background-image':'url(\"'+$scope.avatar.src+'\")'};\n $scope.avatarClass = {};\n }\n else {\n $scope.avatarStyle = undefined;\n $scope.avatarClass = {};\n $scope.avatarClass['cion-page-' + $scope.formData.type] = !$scope.avatar;\n }\n\n // pictures\n $scope.pictures = data.record && data.record.pictures || [];\n delete data.record.pictures; // remove, as already stored in $scope.pictures\n\n $scope.motion.show({\n selector: '.animate-ripple .item, .card-gallery',\n startVelocity: 3000\n });\n UIUtils.loading.hide();\n\n // Update loading - done with a delay, to avoid trigger onFormDataChanged()\n $timeout(function() {\n $scope.loading = false;\n }, 1000);\n };\n\n $scope.onFormDataChanged = function() {\n if ($scope.loading) return;\n $scope.dirty = true;\n };\n $scope.$watch('formData', $scope.onFormDataChanged, true);\n\n\n\n $scope.needCategory = function() {\n return $scope.formData.type && ($scope.formData.type=='company' || $scope.formData.type=='shop');\n };\n\n $scope.save = function(silent, hasWaitDebounce) {\n $scope.form.$submitted=true;\n if($scope.saving || // avoid multiple save\n !$scope.form.$valid ||\n (($scope.formData.type === 'shop' || $scope.formData.type === 'company') && (!$scope.formData.category || !$scope.formData.category.id))) {\n return $q.reject();\n }\n\n if (!hasWaitDebounce) {\n console.debug('[ES] [page] Waiting debounce end, before saving...');\n return $timeout(function() {\n return $scope.save(silent, true);\n }, 650);\n }\n\n $scope.saving = true;\n console.debug('[ES] [page] Saving record...');\n\n var showSuccessToast = function() {\n if (!silent) {\n return $translate('REGISTRY.INFO.RECORD_SAVED')\n .then(function(message){\n UIUtils.toast.show(message);\n });\n }\n };\n\n var promise = $q.when();\n return promise\n .then(function(){\n var json = $scope.formData;\n if (!$scope.needCategory()) {\n delete json.category;\n }\n json.time = moment().utc().unix();\n\n // geo point\n if (json.geoPoint && json.geoPoint.lat && json.geoPoint.lon) {\n json.geoPoint.lat = parseFloat(json.geoPoint.lat);\n json.geoPoint.lon = parseFloat(json.geoPoint.lon);\n }\n else{\n json.geoPoint = null;\n }\n\n // Social url must be unique in socials links - Fix #306:\n if (json.socials && json.socials.length) {\n json.socials = _.uniq(json.socials, false, function(social) {\n return social.url;\n });\n }\n\n // Pictures\n json.picturesCount = $scope.pictures.length;\n if (json.picturesCount > 0) {\n json.pictures = $scope.pictures.reduce(function (res, pic) {\n return res.concat({file: esHttp.image.toAttachment(pic)});\n }, []);\n }\n else {\n json.pictures = [];\n }\n\n // Avatar\n if ($scope.avatar && $scope.avatar.src) {\n return UIUtils.image.resizeSrc($scope.avatar.src, true) // resize to avatar\n .then(function(imageSrc) {\n json.avatar = esHttp.image.toAttachment({src: imageSrc});\n return json;\n });\n }\n else {\n // Workaround to allow content deletion, because of a bug in the ES attachment-mapper:\n // get error (in ES node) : MapperParsingException[No content is provided.] - AttachmentMapper.parse(AttachmentMapper.java:471\n json.avatar = {\n _content: '',\n _content_type: ''\n };\n return json;\n }\n })\n .then(function(json){\n // Create\n if (!$scope.id) {\n return esRegistry.record.add(json, {wallet: wallet});\n }\n // Update\n return esRegistry.record.update(json, {id: $scope.id, wallet: wallet});\n })\n\n .then(function(id) {\n console.info(\"[ES] [page] Record successfully saved.\");\n if (!$scope.id && wallet.data.pages && wallet.data.pages.count) {\n csWallet.data.pages.count++;\n }\n $scope.id = $scope.id || id;\n $scope.saving = false;\n $scope.dirty = false;\n\n showSuccessToast();\n\n $ionicHistory.clearCache($ionicHistory.currentView().stateId); // clear current view\n $ionicHistory.nextViewOptions({historyRoot: true});\n return $state.go('app.view_page', {id: $scope.id, refresh: true});\n })\n\n .catch(function(err) {\n $scope.saving = false;\n UIUtils.onError('REGISTRY.ERROR.SAVE_RECORD_FAILED')(err);\n });\n };\n\n $scope.openPicturePopup = function() {\n Device.camera.getPicture()\n .then(function(imageData) {\n if (imageData) {\n $scope.pictures.push({src: \"data:image/png;base64,\" + imageData});\n }\n })\n .catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));\n };\n\n $scope.rotateAvatar = function(){\n if (!$scope.avatar || !$scope.avatar.src || $scope.rotating) return;\n\n $scope.rotating = true;\n\n return UIUtils.image.rotateSrc($scope.avatar.src)\n .then(function(imageData){\n $scope.avatar.src = imageData;\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n $scope.rotating = false;\n })\n .catch(function(err) {\n console.error(err);\n $scope.rotating = false;\n });\n };\n\n $scope.fileChanged = function(event) {\n UIUtils.loading.show();\n return $q(function(resolve, reject) {\n var file = event.target.files[0];\n UIUtils.image.resizeFile(file)\n .then(function(imageData) {\n $scope.pictures.push({src: imageData});\n UIUtils.loading.hide();\n resolve();\n });\n });\n };\n\n $scope.removePicture = function(index){\n $scope.pictures.splice(index, 1);\n };\n\n $scope.favoritePicture = function(index){\n if (index > 0) {\n var item = $scope.pictures[index];\n $scope.pictures.splice(index, 1);\n $scope.pictures.splice(0, 0, item);\n }\n };\n\n $scope.cancel = function() {\n $ionicHistory.goBack();\n };\n\n /* -- modals -- */\n $scope.showAvatarModal = function() {\n if (Device.camera.enable) {\n return Device.camera.getPicture()\n .then(function(imageData) {\n if (!imageData) return;\n $scope.avatar = {src: \"data:image/png;base64,\" + imageData};\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n $scope.avatarClass = {};\n })\n .catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));\n }\n else {\n return ModalUtils.show('plugins/es/templates/common/modal_edit_avatar.html','ESAvatarModalCtrl',\n {})\n .then(function(imageData) {\n if (!imageData) return;\n $scope.avatar = {src: imageData};\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n $scope.avatarClass = {};\n });\n }\n };\n\n $scope.showRecordTypeModal = function() {\n ModalUtils.show('plugins/es/templates/registry/modal_record_type.html')\n .then(function(type){\n if (type) {\n $scope.formData.type = type;\n if (!$scope.avatar) {\n $scope.avatarClass['cion-page-' + type] = true;\n }\n }\n });\n };\n\n $scope.showCategoryModal = function(parameters) {\n // load categories\n esRegistry.category.all()\n .then(function(categories){\n // open modal\n return ModalUtils.show('plugins/es/templates/common/modal_category.html', 'ESCategoryModalCtrl as ctrl',\n {categories: categories}, {focusFirstInput: true});\n })\n .then(function(cat){\n if (cat && cat.parent) {\n $scope.formData.category = cat;\n }\n });\n };\n}\n","\nESViewEditProfileController.$inject = ['$scope', '$q', '$timeout', '$state', '$focus', '$translate', '$controller', '$ionicHistory', '$ionicPopover', 'UIUtils', 'csWallet', 'esHttp', 'esProfile', 'ModalUtils', 'Device'];angular.module('cesium.es.profile.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n\n $stateProvider\n .state('app.edit_profile', {\n url: \"/wallet/profile/edit\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/user/edit_profile.html\",\n controller: 'ESViewEditProfileCtrl'\n }\n },\n cache: false,\n data: {\n auth: true\n }\n })\n\n .state('app.edit_profile_by_id', {\n url: \"/wallets/:id/profile/edit\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/user/edit_profile.html\",\n controller: 'ESViewEditProfileCtrl'\n }\n },\n cache: false,\n data: {\n login: true\n }\n });\n\n }])\n\n .controller('ESViewEditProfileCtrl', ESViewEditProfileController)\n\n\n;\n\nfunction ESViewEditProfileController($scope, $q, $timeout, $state, $focus, $translate, $controller,\n $ionicHistory, $ionicPopover,\n UIUtils, csWallet, esHttp, esProfile, ModalUtils, Device) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESPositionEditCtrl', {$scope: $scope}));\n\n $scope.formData = {\n title: null,\n description: null,\n socials: [],\n geoPoint: null\n };\n $scope.loading = true;\n $scope.dirty = false;\n $scope.walletData = null;\n $scope.avatar = null;\n $scope.existing = false;\n $scope.socialData = {\n url: null\n };\n $scope.socialReorder = true;\n\n var wallet;\n\n $scope.enter = function(e, state) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.walletId = wallet.id;\n\n return wallet.auth({\n minData: true\n })\n .then($scope.load)\n .catch(function(err){\n if (err == 'CANCELLED') {\n UIUtils.loading.hide(10);\n $scope.cancel();\n return;\n }\n UIUtils.onError('PROFILE.ERROR.LOAD_PROFILE_FAILED')(err);\n });\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {\n if ($scope.dirty && !$scope.saving) {\n\n // stop the change state action\n event.preventDefault();\n\n if (!$scope.loading) {\n $scope.loading = true;\n return UIUtils.alert.confirm('CONFIRM.SAVE_BEFORE_LEAVE',\n 'CONFIRM.SAVE_BEFORE_LEAVE_TITLE', {\n cancelText: 'COMMON.BTN_NO',\n okText: 'COMMON.BTN_YES_SAVE'\n })\n .then(function(confirmSave) {\n $scope.loading = false;\n if (confirmSave) {\n $scope.form.$submitted=true;\n return $scope.save(false/*silent*/, true/*haswait debounce*/)\n .then(function(saved){\n if (saved) {\n $scope.dirty = false;\n }\n return saved; // change state only if not error\n });\n }\n else {\n $scope.dirty = false;\n return true; // ok, change state\n }\n })\n .then(function(confirmGo) {\n if (confirmGo) {\n // continue to the order state\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n $state.go(next.name, nextParams);\n }\n })\n .catch(function(err) {\n // Silent\n });\n }\n }\n });\n\n $scope.load = function(walletData) {\n $scope.loading = true; // to avoid the call of doSave()\n return esProfile.get(walletData.pubkey, {\n raw: true\n })\n .then(function(profile) {\n if (profile) {\n $scope.avatar = esHttp.image.fromAttachment(profile.source.avatar);\n $scope.existing = true;\n $scope.updateView(walletData, profile.source);\n }\n else {\n $scope.avatar = undefined;\n $scope.existing = false;\n $scope.updateView(walletData, {});\n }\n\n UIUtils.loading.hide();\n\n // Update loading - done with a delay, to avoid trigger onFormDataChanged()\n return $timeout(function() {\n $scope.loading = false;\n }, 1000);\n })\n .then(function() {\n // removeIf(device)\n $focus('profile-name');\n // endRemoveIf(device)\n })\n .catch(UIUtils.onError('PROFILE.ERROR.LOAD_PROFILE_FAILED'));\n };\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n $scope.updateView = function(walletData, profile) {\n $scope.walletData = walletData;\n $scope.formData = profile;\n if (profile.avatar) {\n $scope.avatarStyle={'background-image':'url(\"'+$scope.avatar.src+'\")'};\n }\n $scope.motion.show();\n };\n\n $scope.onFormDataChanged = function() {\n if ($scope.loading) return;\n $scope.dirty = true;\n };\n $scope.$watch('formData', $scope.onFormDataChanged, true);\n\n $scope.save = function(silent, hasWaitDebounce) {\n if($scope.form.$invalid || !$scope.walletData || ($scope.saving && !hasWaitDebounce)) {\n return $q.reject();\n }\n\n if (!hasWaitDebounce) {\n $scope.saving = true;\n return $timeout(function() {\n return $scope.save(silent, true);\n }, 650);\n }\n\n console.debug('[ES] [profile] Saving user profile...');\n\n var onError = function(message) {\n return function(err) {\n $scope.saving = false;\n UIUtils.onError(message)(err);\n };\n };\n\n var updateWallet = function(formData) {\n if (formData) {\n $scope.walletData.name = formData.title;\n if ($scope.avatar) {\n $scope.walletData.avatar = $scope.avatar;\n }\n else {\n delete $scope.walletData.avatar;\n }\n\n $scope.walletData.profile = angular.copy(formData);\n $scope.walletData.profile.descriptionHtml = esHttp.util.parseAsHtml(formData.description);\n }\n };\n\n var showSuccessToast = function() {\n if (!silent) {\n return $translate('PROFILE.INFO.PROFILE_SAVED')\n .then(function(message){\n UIUtils.toast.show(message);\n });\n }\n };\n\n var doFinishSave = function(formData) {\n // Social url must be unique in socials links - Fix #306:\n if (formData.socials && formData.socials.length) {\n formData.socials = _.uniq(formData.socials, false, function(social) {\n return social.url;\n });\n }\n\n // Workaround for old data\n if (formData.position) {\n formData.position = null;\n }\n\n // Make sure to convert lat/lon to float\n if (formData.geoPoint && formData.geoPoint.lat && formData.geoPoint.lon) {\n formData.geoPoint.lat = parseFloat(formData.geoPoint.lat);\n formData.geoPoint.lon = parseFloat(formData.geoPoint.lon);\n }\n else{\n formData.geoPoint = null; // force to null, need by ES update request\n }\n\n if (!$scope.existing) {\n return esProfile.add(formData, {wallet: wallet})\n .then(function() {\n console.info(\"[ES] [profile] Successfully created.\");\n $scope.existing = true;\n $scope.saving = false;\n $scope.dirty = false;\n updateWallet(formData);\n showSuccessToast();\n return true;\n })\n .catch(onError('PROFILE.ERROR.SAVE_PROFILE_FAILED'));\n }\n else {\n return esProfile.update(formData, {id: $scope.walletData.pubkey, wallet: wallet})\n .then(function() {\n console.info(\"[ES] Profile successfully updated.\");\n $scope.saving = false;\n $scope.dirty = false;\n updateWallet(formData);\n showSuccessToast();\n return true;\n })\n .catch(onError('PROFILE.ERROR.SAVE_PROFILE_FAILED'));\n }\n }; // end of doFinishSave\n\n if ($scope.avatar && $scope.avatar.src) {\n return UIUtils.image.resizeSrc($scope.avatar.src, true) // resize to thumbnail\n .then(function(imageSrc) {\n $scope.formData.avatar = esHttp.image.toAttachment({src: imageSrc});\n return doFinishSave($scope.formData);\n });\n }\n else {\n delete $scope.formData.avatar;\n return doFinishSave($scope.formData);\n }\n };\n\n $scope.saveAndClose = function() {\n return $scope.save()\n .then(function(saved) {\n if (saved) $scope.close();\n });\n };\n\n $scope.submitAndSaveAndClose = function() {\n $scope.form.$submitted=true;\n $scope.saveAndClose();\n };\n\n $scope.cancel = function() {\n $scope.dirty = false; // force not saved\n if (wallet.isDefault()) {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n return $state.go('app.view_wallet');\n }\n else {\n return $state.go('app.view_wallet_by_id', {id: wallet.id});\n }\n };\n\n $scope.close = function() {\n if (wallet.isDefault()) {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n return $state.go('app.view_wallet', {refresh: true});\n }\n else {\n return $state.go('app.view_wallet_by_id', {refresh: true, id: wallet.id});\n }\n };\n\n $scope.showAvatarModal = function() {\n if (Device.camera.enable) {\n return Device.camera.getPicture()\n .then(function(imageData) {\n if (!imageData) return;\n $scope.avatar = {src: \"data:image/png;base64,\" + imageData};\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n })\n .catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));\n }\n else {\n return ModalUtils.show('plugins/es/templates/common/modal_edit_avatar.html','ESAvatarModalCtrl',\n {})\n .then(function(imageData) {\n if (!imageData) return;\n $scope.avatar = {src: imageData};\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n });\n }\n };\n\n $scope.rotateAvatar = function(){\n if (!$scope.avatar || !$scope.avatar.src || $scope.rotating) return;\n\n $scope.rotating = true;\n\n return UIUtils.image.rotateSrc($scope.avatar.src)\n .then(function(imageData){\n $scope.avatar.src = imageData;\n $scope.avatarStyle={'background-image':'url(\"'+imageData+'\")'};\n $scope.dirty = true;\n $scope.rotating = false;\n })\n .catch(function(err) {\n console.error(err);\n $scope.rotating = false;\n });\n };\n\n $scope.removeProfile = function(){\n // Hide popover if need\n $scope.hideActionsPopover();\n\n return $scope.existing && wallet.auth({minData: true})\n .then(function(walletData) {\n\n UIUtils.loading.hide();\n UIUtils.alert.confirm('PROFILE.CONFIRM.DELETE', undefined, {okText: 'COMMON.BTN_DELETE'})\n .then(function(confirm) {\n if (confirm){\n\n console.debug('[ES] [profile] Deleting user profile...');\n return esProfile.remove(walletData.pubkey, {wallet: wallet})\n .then(function () {\n if (wallet.isDefault()) {\n walletData.name=null; // keep local name, on children wallets\n }\n walletData.profile = null;\n walletData.avatar = null;\n console.debug('[ES] [profile] Successfully deleted');\n $scope.dirty = false;\n return $scope.close();\n })\n .then(function() {\n return $timeout(function() {\n UIUtils.toast.show('PROFILE.INFO.PROFILE_REMOVED');\n }, 750);\n })\n .catch(UIUtils.onError('PROFILE.ERROR.REMOVE_PROFILE_FAILED'));\n }\n });\n });\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/user/edit_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n}\n\n\n","\nESMessageAbstractListController.$inject = ['$scope', '$state', '$translate', '$ionicHistory', '$ionicPopover', '$timeout', 'csWallet', 'esModals', 'UIUtils', 'esMessage'];\nESMessageInboxListController.$inject = ['$scope', '$controller'];\nESMessageOutboxListController.$inject = ['$scope', '$controller'];\nESMessageComposeController.$inject = ['$scope', '$controller'];\nESMessageComposeModalController.$inject = ['$scope', 'Modals', 'UIUtils', 'csWallet', 'esHttp', 'esMessage', 'parameters'];\nESMessageViewController.$inject = ['$scope', '$state', '$timeout', '$translate', '$ionicHistory', '$ionicPopover', 'UIUtils', 'esModals', 'esMessage', 'csWallet'];\nPopoverMessageController.$inject = ['$scope', 'UIUtils', '$state', 'csWallet', 'esHttp', 'esMessage', 'esModals', '$timeout'];angular.module('cesium.es.message.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.user_message', {\n url: \"/user/message\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup.html\"\n }\n }\n })\n\n .state('app.user_message.tab_inbox', {\n url: \"/inbox\",\n views: {\n 'tab_inbox': {\n controller: 'ESMessageInboxListCtrl',\n templateUrl: \"plugins/es/templates/message/tabs/tab_list.html\"\n }\n },\n data: {\n auth: true,\n minData: true,\n large: 'app.user_messages_lg_inbox'\n }\n })\n\n .state('app.user_message.tab_outbox', {\n url: \"/outbox\",\n views: {\n 'tab_outbox': {\n controller: 'ESMessageOutboxListCtrl',\n templateUrl: \"plugins/es/templates/message/tabs/tab_list.html\"\n }\n },\n data: {\n auth: true,\n minData: true,\n large: 'app.user_messages_lg_outbox'\n }\n })\n\n .state('app.user_messages_lg_inbox', {\n url: \"/user/message/lg/inbox\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup_lg.html\",\n controller: 'ESMessageInboxListCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n\n .state('app.user_messages_by_id', {\n url: \"/wallets/:id/message\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup_by_id.html\"\n }\n }\n })\n\n .state('app.user_messages_by_id.tab_inbox', {\n url: \"/inbox\",\n views: {\n 'tab_inbox': {\n controller: 'ESMessageInboxListCtrl',\n templateUrl: \"plugins/es/templates/message/tabs/tab_list.html\"\n }\n },\n data: {\n large: 'app.user_messages_lg_inbox_by_id'\n }\n })\n\n .state('app.user_messages_by_id.tab_outbox', {\n url: \"/outbox\",\n views: {\n 'tab_outbox': {\n controller: 'ESMessageOutboxListCtrl',\n templateUrl: \"plugins/es/templates/message/tabs/tab_list.html\"\n }\n },\n data: {\n large: 'app.user_messages_lg_outbox_by_id'\n }\n })\n\n .state('app.user_messages_lg_inbox_by_id', {\n url: \"/wallets/:id/message/lg/inbox\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup_lg.html\",\n controller: 'ESMessageInboxListCtrl'\n }\n }\n })\n\n .state('app.user_messages_lg_outbox', {\n url: \"/user/message/lg/outbox\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup_lg.html\",\n controller: 'ESMessageOutboxListCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n\n .state('app.user_messages_lg_outbox_by_id', {\n url: \"/wallets/:id/message/lg/outbox\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/lookup_lg.html\",\n controller: 'ESMessageOutboxListCtrl'\n }\n }\n })\n\n .state('app.user_new_message', {\n cache: false,\n url: \"/user/message/new?pubkey&uid&title&content&isReply\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/compose.html\",\n controller: 'ESMessageComposeCtrl'\n }\n }\n })\n\n .state('app.user_view_message', {\n cache: false,\n url: \"/user/message/view/:type/:messageId\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/view_message.html\",\n controller: 'ESMessageViewCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n\n .state('app.user_view_message_by_id', {\n cache: false,\n url: \"/wallets/:id/message/view/:type/:messageId\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/message/view_message.html\",\n controller: 'ESMessageViewCtrl'\n }\n }\n })\n\n ;\n }])\n\n .controller('ESMessageAbstractListCtrl', ESMessageAbstractListController)\n\n .controller('ESMessageInboxListCtrl', ESMessageInboxListController)\n\n .controller('ESMessageOutboxListCtrl', ESMessageOutboxListController)\n\n .controller('ESMessageComposeCtrl', ESMessageComposeController)\n\n .controller('ESMessageComposeModalCtrl', ESMessageComposeModalController)\n\n .controller('ESMessageViewCtrl', ESMessageViewController)\n\n .controller('PopoverMessageCtrl', PopoverMessageController)\n\n;\n\nfunction ESMessageAbstractListController($scope, $state, $translate, $ionicHistory, $ionicPopover, $timeout,\n csWallet, esModals, UIUtils, esMessage) {\n 'ngInject';\n\n var defaultSearchLimit = 40;\n var wallet;\n var selectPrevented = false;\n\n $scope.search = {\n loading: true,\n results: [],\n hasMore : false,\n loadingMore : false,\n limit: defaultSearchLimit,\n type: 'last',\n text: null,\n options: {\n }\n };\n\n $scope.fabButtonNewMessageId = undefined;\n\n $scope.enter = function(s, state) {\n // First enter\n if ($scope.search.loading) {\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.isDefaultWallet = wallet.isDefault();\n $scope.walletId = wallet.id;\n\n wallet.auth({minData: true})\n .then(function() {\n if (!$scope.entered) {\n $scope.entered = true;\n $scope.type = $scope.type || state.stateParams && state.stateParams.type || 'inbox';\n $scope.load();\n }\n\n if ($scope.fabButtonNewMessageId) {\n $scope.showFab($scope.fabButtonNewMessageId);\n }\n })\n .catch(function(err) {\n if ('CANCELLED' === err) {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n $scope.showHome();\n }\n });\n }\n // Not first entering: refresh the view\n else {\n $scope.updateView();\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function(from, size, silent) {\n\n var options = angular.copy($scope.search.options);\n options.from = options.from || from || 0;\n options.size = options.size || size || defaultSearchLimit;\n options.type = $scope.type;\n options.summary = false;\n options.filter = ($scope.search.type == 'text' && $scope.search.text && $scope.search.text.trim().length > 0) ?\n $scope.search.text : undefined;\n options.wallet = wallet;\n\n $scope.search.loading = !silent;\n return esMessage.load(options)\n .then(function(res) {\n\n if (!options.from) {\n $scope.search.results = res || [];\n }\n else if (res){\n $scope.search.results = $scope.search.results.concat(res);\n }\n\n UIUtils.loading.hide();\n $scope.search.loading = false;\n $scope.search.hasMore = ($scope.search.results && $scope.search.results.length >= $scope.search.limit);\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.search.loading = false;\n if (!options.from) {\n $scope.search.results = [];\n }\n $scope.search.hasMore = false;\n UIUtils.onError('MESSAGE.ERROR.LOAD_MESSAGES_FAILED')(err);\n });\n };\n\n $scope.updateView = function() {\n if ($scope.motion && $scope.motion.ionListClass && $scope.search.results.length) {\n $scope.motion.show({selector: '.view-messages .list .item'});\n }\n $scope.$broadcast('$$rebind::rebind'); // notifier binder\n };\n\n $scope.showMore = function() {\n $scope.search.limit = $scope.search.limit || defaultSearchLimit;\n $scope.search.limit += defaultSearchLimit;\n if ($scope.search.limit < defaultSearchLimit) {\n $scope.search.limit = defaultSearchLimit;\n }\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.search.limit,\n true /*silent*/)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.markAllAsRead = function() {\n $scope.hideActionsPopover();\n if (!$scope.search.results || !$scope.search.results.length) return;\n\n UIUtils.alert.confirm('MESSAGE.CONFIRM.MARK_ALL_AS_READ')\n .then(function(confirm) {\n if (confirm) {\n esMessage.markAllAsRead()\n .then(function () {\n _.forEach($scope.search.results, function(msg){\n msg.read = true;\n });\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.MARK_ALL_AS_READ_FAILED'));\n }\n });\n };\n\n $scope.delete = function(index) {\n var message = $scope.search.results[index];\n if (!message) return;\n\n UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE')\n .then(function(confirm) {\n if (confirm) {\n esMessage.remove(message.id, $scope.type, {walletId: $scope.walletId})\n .then(function () {\n $scope.search.results.splice(index,1); // remove from messages array\n $scope.updateView();\n UIUtils.toast.show('MESSAGE.INFO.MESSAGE_REMOVED');\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_MESSAGE_FAILED'));\n }\n });\n };\n\n $scope.deleteAll = function() {\n $scope.hideActionsPopover();\n if (!$scope.search.results || !$scope.search.results.length) return;\n\n UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE_ALL')\n .then(function(confirm) {\n if (confirm) {\n esMessage.removeAll($scope.type, {walletId: $scope.walletId})\n .then(function () {\n $scope.search.results.splice(0,$scope.search.results.length); // reset array\n $scope.updateView();\n UIUtils.toast.show('MESSAGE.INFO.All_MESSAGE_REMOVED');\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_All_MESSAGES_FAILED'));\n }\n });\n };\n\n $scope.doSearchLast = function() {\n $scope.search.type='last';\n $scope.search.loadingMore=false;\n $scope.search.limit = defaultSearchLimit;\n return $scope.load();\n };\n\n $scope.doSearch = function() {\n if (!$scope.search.text || $scope.search.text.length < 3) {\n return;\n }\n $scope.search.type='text';\n $scope.search.loadingMore=false;\n $scope.search.results = [];\n $scope.search.limit = defaultSearchLimit;\n\n console.debug('[message] [{0}] Searching for: {1}'.format($scope.type, $scope.search.text));\n return $scope.load();\n };\n\n\n $scope.refresh = function(silent) {\n selectPrevented = true; // Will disable select() to open the message\n return $scope.load(undefined, undefined, silent)\n .then(function() {\n selectPrevented = false;\n })\n .catch(function() {\n selectPrevented = false;\n });\n };\n\n $scope.select = function(message, event) {\n if (event.isDefaultPrevented() || $scope.search.loading || selectPrevented) return; // skip\n\n // Add a timeout, to be sure the refres action was not called before\n return $timeout(function() {\n if (selectPrevented || event.isDefaultPrevented()) return; // skip\n event.preventDefault();\n\n if ($scope.walletId === 'default') {\n return $state.go('app.user_view_message', {type: $scope.type, messageId:message.id});\n }\n else {\n return $state.go('app.user_view_message_by_id', {type: $scope.type, messageId:message.id, id: $scope.walletId});\n }\n }, 200);\n };\n\n /* -- Modals -- */\n\n $scope.showNewMessageModal = function(parameters) {\n return wallet.login({minData: true})\n .then(function() {\n UIUtils.loading.hide();\n\n parameters = parameters || {};\n parameters.wallet = $scope.walletId;\n\n return esModals.showMessageCompose(parameters)\n .then(function(id) {\n if (id) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');\n });\n });\n };\n\n $scope.showReplyModal = function(index) {\n var message = $scope.search.results[index];\n if (!message) return;\n\n $translate('MESSAGE.REPLY_TITLE_PREFIX')\n .then(function (prefix) {\n var content = message.content ? message.content.replace(/^/g, ' > ') : null;\n content = content ? content.replace(/\\n/g, '\\n > ') : null;\n content = content ? content +'\\n' : null;\n return esModals.showMessageCompose({\n destPub: message.issuer,\n destUid: message.name||message.uid,\n title: prefix + message.title,\n content: content,\n isReply: true,\n wallet: $scope.walletId\n });\n })\n .then(function(sent) {\n if (sent) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');\n });\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/message/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- watch events (delete, received, sent) -- */\n\n // Message deletion\n $scope.onMessageDelete = function(id) {\n var index = _.findIndex($scope.search.results, function(msg) {\n return msg.id == id;\n });\n if (index) {\n $scope.search.results.splice(index,1); // remove from messages array\n }\n $scope.updateView();\n };\n esMessage.api.data.on.delete($scope, $scope.onMessageDelete);\n\n // Watch user sent message\n $scope.onNewOutboxMessage = function(id) {\n if ($scope.type !== 'outbox') return;\n // Add message sent to list\n $scope.search.loading = true;\n return $timeout(function() {\n // Load the message sent\n return esMessage.get(id, $scope.type, {summary: true, wallet: wallet});\n }, 500 /*waiting ES propagation*/)\n .then(function(msg) {\n $scope.search.results.splice(0,0,msg);\n $scope.search.loading = false;\n $scope.updateView();\n })\n .catch(function() {\n $scope.loading = false;\n });\n };\n esMessage.api.data.on.sent($scope, $scope.onNewOutboxMessage);\n\n // Watch received message\n $scope.onNewInboxMessage = function(notification) {\n if ($scope.type !== 'inbox' || !$scope.entered || !wallet.isUserPubkey(notification.issuer)) return;\n // Add message sent to list\n $scope.search.loading = true;\n // Load the the message\n return esMessage.get(notification.id, $scope.type, {summary: true, wallet: wallet})\n .then(function(msg) {\n $scope.search.results.splice(0,0,msg);\n $scope.search.loading = false;\n $scope.updateView();\n })\n .catch(function() {\n $scope.search.loading = false;\n });\n };\n esMessage.api.data.on.new($scope, $scope.onNewInboxMessage);\n\n // Watch unauth\n $scope.onUnauth = function() {\n // Reset all data\n $scope.search.results = undefined;\n $scope.search.loading = false;\n $scope.entered = false;\n };\n csWallet.api.data.on.unauth($scope, $scope.onUnauth);\n\n // for DEV only\n /*$timeout(function() {\n $scope.showNewMessageModal();\n }, 900);\n */\n}\n\nfunction ESMessageInboxListController($scope, $controller) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESMessageAbstractListCtrl', {$scope: $scope}));\n\n $scope.type = 'inbox';\n $scope.fabButtonNewMessageId = 'fab-add-message-record-inbox';\n\n}\n\n\nfunction ESMessageOutboxListController($scope, $controller) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESMessageAbstractListCtrl', {$scope: $scope}));\n\n $scope.type = 'outbox';\n $scope.fabButtonNewMessageId = 'fab-add-message-record-outbox';\n}\n\nfunction ESMessageComposeController($scope, $controller) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESMessageComposeModalCtrl', {$scope: $scope, parameters: {}}));\n\n\n $scope.enter = function(e, state) {\n\n // Apply state parameters\n if (state && state.stateParams) {\n $scope.setParameters(state.stateParams);\n }\n\n // Load wallet\n return $scope.load()\n .then(UIUtils.loading.hide);\n };\n $scope.$on('$ionicView.enter',$scope.enter);\n\n $scope.cancel = function() {\n $scope.sending = false;\n $scope.showHome();\n };\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n $scope.closeModal = function() {\n $scope.sending = false;\n $scope.showHome();\n };\n\n}\n\nfunction ESMessageComposeModalController($scope, Modals, UIUtils, csWallet, esHttp, esMessage, parameters) {\n 'ngInject';\n\n var wallet;\n\n $scope.formData = {\n title: null,\n content: null,\n destPub: null,\n walletId: null\n };\n $scope.destUid = null;\n $scope.destPub = null;\n $scope.isReply = false;\n $scope.enableSelectWallet = true;\n $scope.sending = false;\n\n $scope.setParameters = function(parameters) {\n if (!parameters) return;\n\n if (parameters.pubkey || parameters.destPub) {\n $scope.formData.destPub = parameters.pubkey || parameters.destPub;\n if (parameters.uid || parameters.destUid) {\n $scope.destUid = parameters.uid || parameters.destUid;\n $scope.destPub = '';\n }\n else {\n $scope.destUid = '';\n $scope.destPub = $scope.formData.destPub;\n }\n }\n\n if (parameters.title) {\n $scope.formData.title = parameters.title;\n }\n\n if (parameters.content) {\n $scope.formData.content = parameters.content;\n }\n\n $scope.isReply = parameters.isReply || false;\n\n if (parameters.wallet) {\n $scope.formData.walletId = parameters.wallet;\n }\n };\n\n // Read default parameters\n $scope.setParameters(parameters);\n\n $scope.load = function() {\n $scope.enableSelectWallet = csWallet.children.count() > 0;\n\n wallet = $scope.enableSelectWallet && ($scope.formData.walletId ? csWallet.children.get($scope.formData.walletId) : csWallet) || csWallet;\n if (!wallet.isDefault()) {\n console.debug(\"[message] Using {\" + wallet.id + \"} wallet\");\n }\n else {\n console.debug(\"[message] Using default wallet\");\n }\n\n return wallet.login({minData: true, silent: true})\n .then(function(data) {\n $scope.walletData = data;\n })\n .catch(function(err){\n if (err === 'CANCELLED') {\n $scope.cancel();\n }\n });\n };\n $scope.$on('modal.shown', $scope.load);\n\n $scope.doSend = function(forceNoContent) {\n $scope.form.$submitted=true;\n if(!$scope.form.$valid) {\n return;\n }\n\n // Ask user confirmation if no content\n if (!forceNoContent && (!$scope.formData.content || !$scope.formData.content.trim().length)) {\n return UIUtils.alert.confirm('MESSAGE.COMPOSE.CONTENT_CONFIRMATION')\n .then(function(confirm) {\n if (confirm) {\n $scope.doSend(true);\n }\n });\n }\n\n $scope.sending = true;\n UIUtils.loading.show();\n var data = {\n issuer: wallet.data.pubkey,\n recipient: $scope.formData.destPub,\n title: $scope.formData.title,\n content: $scope.formData.content,\n time: moment().utc().unix()\n };\n\n esMessage.send(data, {wallet: wallet})\n .then(function(id) {\n $scope.id=id;\n UIUtils.loading.hide();\n $scope.closeModal(id);\n })\n .catch(function(err) {\n $scope.sending = false;\n // silent, if user cancelled;\n if (err === 'CANCELLED') {\n UIUtils.loading.hide();\n return;\n }\n UIUtils.onError('MESSAGE.ERROR.SEND_MSG_FAILED')(err);\n });\n };\n\n\n $scope.cancel = function() {\n $scope.closeModal();\n };\n\n /* -- Modals -- */\n\n $scope.showWotLookupModal = function() {\n Modals.showWotLookup()\n .then(function(result){\n if (result) {\n if (result.uid) {\n $scope.destUid = result.uid;\n $scope.destPub = '';\n }\n else {\n $scope.destUid = '';\n $scope.destPub = result.pubkey;\n }\n $scope.destName = result.name || result.uid;\n $scope.formData.destPub = result.pubkey;\n // TODO focus on title field\n //$focus('');\n }\n });\n };\n\n $scope.showSelectWalletModal = function() {\n if (!$scope.enableSelectWallet) return;\n\n return Modals.showSelectWallet({\n showDefault: true,\n showBalance: false\n })\n .then(function(newWallet) {\n if (!newWallet || (wallet && wallet.id === newWallet.id)) return;\n wallet = newWallet;\n $scope.walletData = wallet.data;\n console.debug(\"[message] Using {\" + wallet.id + \"} wallet\");\n });\n };\n\n\n\n // TODO : for DEV only\n /*$timeout(function() {\n $scope.formData.destPub = 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU';\n $scope.formData.title = 'test';\n $scope.formData.content = 'test';\n $scope.destPub = $scope.formData.destPub;\n\n $timeout(function() {\n //$scope.doSend();\n }, 800);\n }, 100);\n */\n}\n\n\nfunction ESMessageViewController($scope, $state, $timeout, $translate, $ionicHistory, $ionicPopover,\n UIUtils, esModals, esMessage, csWallet) {\n 'ngInject';\n\n $scope.formData = {};\n $scope.id = null;\n $scope.loading = true;\n\n var wallet;\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.enter = function(e, state) {\n // First enter\n if ($scope.loading) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.isDefaultWallet = wallet.isDefault();\n $scope.walletId = wallet.id;\n\n var messageId = state.stateParams && state.stateParams.messageId;\n $scope.type = state.stateParams.type || 'inbox';\n\n // No message id: redirect\n if (angular.isUndefined(messageId)) {\n $scope.goBack();\n return;\n }\n\n wallet.auth({minData: true})\n .then(function () {\n return $scope.load(messageId, $scope.type);\n })\n .then(function(message) {\n\n UIUtils.loading.hide();\n if (!message) return; // SKip\n\n $scope.updateView(message);\n $scope.showFab('fab-view-message-reply');\n\n // Mark as read\n if (!message.read) {\n $timeout(function() {\n // Message has NOT changed\n if ($scope.id === message.id) {\n esMessage.markAsRead(message, {type: $scope.type, wallet: wallet})\n .then(function() {\n console.debug(\"[message] marked as read\");\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.MARK_AS_READ_FAILED'));\n }\n }, 2000); // 2s\n }\n });\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function(id, type) {\n type = type || 'inbox';\n return esMessage.get(id, type, {wallet: wallet})\n .catch(UIUtils.onError('MESSAGE.ERROR.LOAD_MESSAGE_FAILED'))\n .then(function(message) {\n if (!message.valid) {\n return UIUtils.alert.error(!$scope.isUserPubkey(message.recipient) ? 'MESSAGE.ERROR.USER_NOT_RECIPIENT' : 'MESSAGE.ERROR.NOT_AUTHENTICATED_MESSAGE',\n 'MESSAGE.ERROR.MESSAGE_NOT_READABLE')\n .then(function () {\n $scope.goBack(true/*clear cache*/);\n });\n }\n return message;\n });\n };\n\n $scope.updateView = function(message) {\n $scope.loading = false;\n $scope.id = message.id;\n $scope.formData = message;\n $scope.canDelete = true;\n $scope.motion.show({selector: '.view-message .list .item'});\n };\n\n $scope.delete = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n }\n\n UIUtils.alert.confirm('MESSAGE.CONFIRM.REMOVE')\n .then(function(confirm) {\n if (confirm) {\n return esMessage.remove($scope.id, $scope.type, {wallet: wallet})\n .then(function () {\n $scope.goBack(true/*clear page cache*/);\n UIUtils.toast.show('MESSAGE.INFO.MESSAGE_REMOVED');\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_MESSAGE_FAILED'));\n }\n });\n };\n\n $scope.goBack = function(clearPageCache) {\n if (clearPageCache) {\n $ionicHistory.clearCache($ionicHistory.currentView().stateId); // clear current view\n }\n $ionicHistory.nextViewOptions({historyRoot: true});\n if ($scope.isDefaultWallet) {\n if ($scope.type) {\n $state.go('app.user_message.tab_' + $scope.type, {type: $scope.type});\n }\n }\n else {\n if ($scope.type) {\n $state.go('app.user_messages_by_id.tab_' + $scope.type, {type: $scope.type, id: $scope.walletId});\n }\n }\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/message/view_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- Modals -- */\n\n $scope.showReplyModal = function() {\n var recipientField = ($scope.type === 'inbox') ? 'issuer' : 'recipient';\n $translate('MESSAGE.REPLY_TITLE_PREFIX')\n .then(function (prefix) {\n var content = $scope.formData.content ? $scope.formData.content.replace(/^/g, ' > ') : null;\n content = content ? content.replace(/\\n/g, '\\n > ') : null;\n content = content ? content +'\\n' : null;\n return esModals.showMessageCompose({\n destPub: $scope.formData[recipientField],\n destUid: $scope.formData.name||$scope.formData.uid,\n title: prefix + $scope.formData.title,\n content: content,\n isReply: true,\n walletId: wallet.id\n });\n })\n .then(function(sent) {\n if (sent) {\n UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT')\n .then(function() {\n $ionicHistory.goBack();\n });\n }\n })\n ;\n };\n}\n\nfunction PopoverMessageController($scope, UIUtils, $state, csWallet, esHttp, esMessage, esModals, $timeout) {\n 'ngInject';\n\n var defaultSearchLimit = 40;\n var wallet;\n\n $scope.search = {\n loading : true,\n results: null,\n hasMore : false,\n loadingMore : false,\n limit: defaultSearchLimit\n };\n\n $scope.$on('popover.shown', function() {\n if ($scope.search.loading) {\n // TODO manage secondary wallets\n wallet = $scope.walletId && csWallet.children.get($scope.walletId) || csWallet;\n\n /* -- wallet listeners -- */\n if (wallet.isDefault()) {\n wallet.api.data.on.logout($scope, $scope.resetData);\n esMessage.api.data.on.new($scope, $scope.onNewMessageNotification);\n }\n\n $scope.load();\n }\n });\n\n $scope.load = function(from, size) {\n var options = {};\n options.from = from || 0;\n options.size = size || defaultSearchLimit;\n return esMessage.notifications.load(options)\n .then(function(notifications) {\n if (!from) {\n $scope.search.results = notifications;\n }\n else {\n $scope.search.results = $scope.search.results.concat(notifications);\n }\n $scope.search.loading = false;\n $scope.search.hasMore = ($scope.search.results && $scope.search.results.length >= $scope.search.limit);\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.search.loading = false;\n if (!from) {\n $scope.search.results = [];\n }\n $scope.search.hasMore = false;\n UIUtils.onError('MESSAGE.ERROR.LOAD_NOTIFICATIONS_FAILED')(err);\n });\n };\n\n $scope.updateView = function() {\n if ($scope.motion && $scope.search.results && $scope.search.results.length) {\n $scope.motion.show({selector: '.popover-notification .item'});\n }\n };\n\n $scope.showMore = function() {\n $scope.search.limit = $scope.search.limit || defaultSearchLimit;\n $scope.search.limit = $scope.search.limit * 2;\n if ($scope.search.limit < defaultSearchLimit) {\n $scope.search.limit = defaultSearchLimit;\n }\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.search.limit)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n // Listen notifications changes\n $scope.onNewMessageNotification = function(notification) {\n if ($scope.search.loading || $scope.search.loadingMore) return;\n\n if (!wallet.isUserPubkey(notification.issuer)) return; // skip\n\n // Prepend to list\n $scope.search.results.splice(0,0,notification);\n $scope.updateView();\n };\n\n $scope.select = function(notification) {\n if (!notification.read) notification.read = true;\n if ($scope.walletId === 'default') {\n $state.go('app.user_view_message', {messageId: notification.id});\n }\n else {\n $state.go('app.user_view_message_by_id', {messageId: notification.id, id: $scope.walletId});\n }\n $scope.closePopover(notification);\n };\n\n $scope.resetData = function() {\n if ($scope.search.loading) return;\n console.debug(\"[ES] [messages] Resetting data (settings or account may have changed)\");\n $scope.search.hasMore = false;\n $scope.search.results = [];\n $scope.search.loading = true;\n delete $scope.search.limit;\n };\n\n\n /* -- Modals -- */\n\n $scope.showNewMessageModal = function(parameters) {\n\n $scope.closePopover();\n\n $timeout(function() {\n parameters = parameters || {};\n parameters.walletId = wallet.id;\n\n esModals.showMessageCompose(parameters)\n .then(function(id) {\n if (id) UIUtils.toast.show('MESSAGE.INFO.MESSAGE_SENT');\n });\n }, 500); // Timeout need, to avoid freeze\n };\n\n /* -- listeners -- */\n\n esHttp.api.node.on.stop($scope, $scope.resetData);\n esHttp.api.node.on.start($scope, $scope.load);\n\n}\n","\nNotificationsController.$inject = ['$scope', '$ionicPopover', '$state', '$timeout', 'UIUtils', 'esHttp', 'csWallet', 'esNotification'];\nPopoverNotificationsController.$inject = ['$scope', '$timeout', '$controller', '$state', 'UIUtils', 'csWallet'];\nangular.module('cesium.es.notification.controllers', ['cesium.es.services'])\n\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.view_notifications', {\n url: \"/notifications\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/notification/view_notifications.html\",\n controller: 'NotificationsCtrl'\n }\n },\n data: {\n login: true\n }\n })\n .state('app.view_notifications_by_id', {\n url: \"/wallets/:id/notifications\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/notification/view_notifications.html\",\n controller: 'NotificationsCtrl'\n }\n },\n data: {\n login: true\n }\n })\n ;\n }])\n\n .controller('NotificationsCtrl', NotificationsController)\n\n .controller('PopoverNotificationsCtrl', PopoverNotificationsController)\n\n;\n\nfunction NotificationsController($scope, $ionicPopover, $state, $timeout, UIUtils, esHttp, csWallet, esNotification) {\n 'ngInject';\n\n var defaultSearchLimit = 40;\n\n $scope.preventSelect = false;\n $scope.search = {\n loading : true,\n results: null,\n hasMore : false,\n loadingMore : false,\n limit: defaultSearchLimit,\n options: {\n codes: {\n excludes: esNotification.constants.EXCLUDED_CODES\n }\n }\n };\n $scope.listeners = [];\n\n var wallet;\n\n $scope.setWallet = function(aWallet) {\n wallet = aWallet;\n };\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if ($scope.search.loading) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n wallet.login({\n minData: true\n })\n .then(function() {\n $scope.load();\n UIUtils.loading.hide();\n\n $scope.addListeners();\n\n // Reset unread counter\n return $timeout(function() {\n $scope.resetUnreadCount();\n }, 1000);\n });\n }\n });\n\n $scope.refresh = function(silent) {\n return $scope.load(undefined, undefined, silent);\n };\n\n $scope.load = function(from, size, silent) {\n // Make sure wallet is init (need by PopoverInvitationCtrl)\n wallet = wallet || csWallet;\n\n if (!wallet.data.pubkey) {\n $scope.search.loading = true;\n return;\n }\n\n $scope.search.preventSelect = true;\n\n var options = angular.copy($scope.search.options);\n options.from = options.from || from || 0;\n options.size = options.size || size || defaultSearchLimit;\n options.pubkey = wallet.data.pubkey;\n $scope.search.loading = !silent;\n return esNotification.load(options)\n .then(function(res) {\n if (!options.from) {\n $scope.search.results = res || [];\n }\n else if (res){\n $scope.search.results = $scope.search.results.concat(res);\n }\n $scope.search.loading = false;\n $scope.search.preventSelect = false;\n $scope.search.hasMore = $scope.search.results.length >= $scope.search.limit;\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.search.loading = false;\n if (!options.from) {\n $scope.search.results = [];\n }\n $scope.search.preventSelect = false;\n $scope.search.hasMore = false;\n UIUtils.onError('COMMON.NOTIFICATIONS.LOAD_NOTIFICATIONS_FAILED')(err);\n });\n };\n\n $scope.updateView = function() {\n if ($scope.motion && $scope.motion.ionListClass && $scope.search.results.length) {\n $scope.motion.show({selector: '.view-notification .item'});\n }\n };\n\n $scope.markAllAsRead = function() {\n $scope.hideActionsPopover();\n\n // Make sure to be auth before doing this\n if (!wallet.isAuth()) {\n return wallet.auth().then(function(){\n UIUtils.loading.hide();\n return $scope.markAllAsRead(); // loop\n });\n }\n\n if (!$scope.search.results.length) return;\n\n UIUtils.loading.show()\n .then(function() {\n wallet.data.notifications.unreadCount = 0;\n var lastNotification = $scope.search.results[0];\n wallet.data.notifications.time = lastNotification ? lastNotification.time : 0;\n _.forEach($scope.search.results, function (item) {\n if (item.markAsRead && typeof item.markAsRead == 'function') item.markAsRead();\n });\n\n return UIUtils.loading.hide();\n });\n };\n\n $scope.resetUnreadCount = function() {\n if ($scope.search.loading || !wallet.data.notifications) {\n return $timeout($scope.resetUnreadCount, 2000);\n }\n if (!wallet.data.notifications.unreadCount || !$scope.search.results || !$scope.search.results.length) return;\n wallet.data.notifications.unreadCount = 0;\n var lastNotification = $scope.search.results[0];\n var readTime = lastNotification.time ? lastNotification.time : 0;\n if (readTime && (!wallet.data.notifications.time || wallet.data.notifications.time != readTime)) {\n wallet.data.notifications.time = readTime;\n wallet.storeData();\n }\n };\n\n $scope.select = function(event, item) {\n\n if ($scope.search.loading || event.preventDefault() || $scope.search.preventSelect) return;\n\n if (item.markAsRead && typeof item.markAsRead == 'function') {\n $timeout(item.markAsRead);\n }\n if (item.state) {\n $state.go(item.state, item.stateParams);\n }\n };\n\n $scope.showMore = function() {\n $scope.search.limit = $scope.search.limit || defaultSearchLimit;\n $scope.search.limit += defaultSearchLimit;\n if ($scope.search.limit < defaultSearchLimit) {\n $scope.search.limit = defaultSearchLimit;\n }\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.search.limit)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n // Listen notifications changes\n $scope.onNewNotification = function(notification) {\n if ($scope.search.loading || $scope.search.loadingMore) return;\n\n // Retrieve insertion index\n var nextIndex = _.findIndex($scope.search.results, function(n) {\n return notification.time > n.time;\n });\n if (nextIndex < 0) nextIndex = 0;\n\n // Update the array\n $scope.search.results.splice(nextIndex,0,notification);\n $scope.updateView();\n };\n\n $scope.resetData = function() {\n if ($scope.search.loading) return;\n console.debug(\"[ES] [notifications] Resetting data (settings or account may have changed)\");\n $scope.search.hasMore = false;\n $scope.search.results = [];\n $scope.search.loading = true;\n delete $scope.search.limit;\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl :'plugins/es/templates/notification/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- listeners -- */\n\n $scope.addListeners = function() {\n if (!wallet) throw \"Controller wallet not set !\";\n\n $scope.listeners = [\n esHttp.api.node.on.stop($scope, $scope.resetData),\n esHttp.api.node.on.start($scope, $scope.load),\n wallet.api.data.on.logout($scope, $scope.resetData)\n ];\n\n if (wallet.isDefault()) {\n // Subscribe to new notification\n $scope.listeners.push(\n esNotification.api.data.on.new($scope, $scope.onNewNotification)\n );\n }\n };\n\n $scope.removeListeners = function() {\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n };\n}\n\nfunction PopoverNotificationsController($scope, $timeout, $controller, $state,\n UIUtils, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('NotificationsCtrl', {$scope: $scope}));\n\n // Disable list motion\n $scope.motion = null;\n\n // Set the wallet to use\n $scope.setWallet(csWallet);\n\n $scope.$on('popover.shown', function() {\n if ($scope.search.loading) {\n $scope.addListeners();\n $scope.load();\n }\n });\n\n $scope.updateView = function() {\n if (!$scope.search.results.length) return;\n\n // Set Ink\n $timeout(function() {\n UIUtils.ink({selector: '.popover-notification .item.ink'});\n }, 100);\n };\n\n $scope.$on('popover.hidden', $scope.resetUnreadCount);\n\n $scope.select = function($event, notification) {\n if ($event.preventDefault() || !notification) return; // no selection\n if (notification.markAsRead && typeof notification.markAsRead == 'function') notification.markAsRead();\n if (notification.state) {\n $state.go(notification.state, notification.stateParams);\n }\n $scope.closePopover(notification);\n };\n}\n","\nESBlockLookupController.$inject = ['$scope', '$controller', '$ionicPopover', '$location', 'UIUtils', 'esBlockchain'];\nangular.module('cesium.es.blockchain.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.lookup_blocks_currency', {\n url: \"/currencies/:currency/blocks?q\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/blockchain/lookup.html\",\n controller: 'ESBlockLookupCtrl'\n }\n }\n })\n\n .state('app.blockchain_search', {\n url: \"/blockchain/search?q&type\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/blockchain/lookup.html\",\n controller: 'ESBlockLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n ;\n }])\n\n .controller('ESBlockLookupCtrl', ESBlockLookupController)\n;\n\n\nfunction ESBlockLookupController($scope, $controller, $ionicPopover, $location, UIUtils, esBlockchain) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('BlockLookupCtrl', {$scope: $scope}));\n\n $scope.search.text = null;\n $scope.search.type = 'last';\n $scope.search.sort = undefined;\n $scope.search.asc = true;\n $scope.searchTextId = 'blockchainSearchText';\n $scope.compactMode = true;\n $scope.enableFilter = true;\n\n $scope.doSearchText = function() {\n if ((!$scope.search.text || !$scope.search.text.trim().length) &&\n (!$scope.search.filters || !$scope.search.filters.length) ) {\n return $scope.doSearchLast();\n }\n\n $scope.search.type = 'text';\n\n $scope.doSearch();\n\n // Update location href\n $location.search({q: $scope.search.query}).replace();\n };\n\n $scope.doSearchLast = function() {\n $scope.hideActionsPopover();\n\n $scope.search.type = 'last';\n $scope.search.sort = undefined;\n $scope.doSearch();\n\n $location.search({q: undefined}).replace();\n };\n\n\n // This method override the base class method\n $scope.doSearch = function(from) {\n if ($scope.search.error) return;\n\n from = angular.isDefined(from) ? from : 0;\n var promise;\n var request = {};\n\n $scope.search.loading = (from === 0);\n request.size = $scope.defaultSizeLimit;\n\n // last block\n if ($scope.search.type == 'last') {\n // Add '+1' to skip the indexed block with _id='current'\n request.from = (from === 0) ? 0 : from+1;\n // add sort\n if ($scope.search.sort) {\n request.sort = {};\n request.sort[$scope.search.sort] = !$scope.search.asc ? \"desc\" : \"asc\";\n }\n else { // default sort\n request.sort = {\n \"number\": \"desc\"\n };\n }\n request.excludeCurrent = (from === 0);\n\n promise = esBlockchain.block.search($scope.currency, request);\n }\n\n // Full text search\n else if ($scope.search.type == 'text') {\n\n // Parse text search into filters array\n var res = esBlockchain.block.parseSearchText($scope.search.text, $scope.search.filters);\n $scope.search.filters = res.filters;\n var query = $scope.search.filters.reduce(function(query, filter){\n return query + ' AND ' + filter.text;\n }, '');\n if (res.text.length) {\n query += ' AND ' + res.text;\n }\n\n $scope.search.query = query.substr(5);\n $scope.search.text = res.text;\n\n request.from = from;\n\n // add sort\n if ($scope.search.sort) {\n request.sort = $scope.search.sort + ':' + (!$scope.search.asc ? \"desc\" : \"asc\");\n }\n else { // default sort\n request.sort = \"number:desc\";\n }\n request.excludeCurrent = true;\n\n promise = esBlockchain.block.searchText($scope.currency, $scope.search.query, request);\n }\n\n var now = Date.now();\n return promise\n .then(function(result) {\n // Apply transformation need by UI (e.g add avatar and name...)\n return $scope.doPrepareResult(result.hits)\n .then(function() {\n return result;\n });\n })\n .then(function(result) {\n $scope.showPubkey = ($scope.search.sort == 'issuer');\n // Compute time only once (on first page)\n $scope.search.took = (from === 0) ? (Date.now() - now) : $scope.search.took;\n // Keep previous total, when already computed (because of current, that is excluded only in the first page)\n var total = (from === 0) ? result.total : $scope.search.total;\n $scope.doDisplayResult(result.hits, from, total);\n $scope.search.loading = false;\n })\n .catch(function(err) {\n $scope.search.error = true;\n $scope.search.loading = false;\n UIUtils.onError('BLOCKCHAIN.ERROR.SEARCH_BLOCKS_FAILED')(err)\n .then(function() {\n $scope.search.error = false;\n });\n });\n };\n\n $scope.toggleSort = function(sort){\n if ($scope.search.sort === sort && !$scope.search.asc) {\n $scope.search.asc = undefined;\n $scope.search.sort = undefined;\n }\n else {\n $scope.search.asc = ($scope.search.sort === sort) ? !$scope.search.asc : true;\n $scope.search.sort = sort;\n }\n $scope.doSearch();\n };\n\n $scope.showHelpTip = function() {\n\n };\n\n /* -- popups -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/blockchain/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- manage click -- */\n\n\n // Cancel search filter\n $scope.itemRemove = function(index) {\n $scope.search.filters.splice(index, 1);\n $scope.doSearchText();\n };\n\n //Show the query\n $scope.toggleShowQuery = function() {\n $scope.showQuery = !$scope.showQuery;\n };\n}\n\n","\nESNetworkLookupController.$inject = ['$scope', '$state', '$location', '$ionicPopover', '$window', '$translate', 'esHttp', 'UIUtils', 'csConfig', 'csSettings', 'csCurrency', 'esNetwork', 'csWot'];\nESNetworkLookupModalController.$inject = ['$scope', '$controller', 'parameters'];\nESPeerViewController.$inject = ['$scope', '$q', '$window', '$state', 'UIUtils', 'csWot', 'esHttp', 'csHttp', 'csSettings'];\nESNetworkLookupPopoverController.$inject = ['$scope', '$controller'];\nESPeerInfoPopoverController.$inject = ['$scope', '$q', 'csSettings', 'csCurrency', 'csHttp', 'esHttp'];angular.module('cesium.es.network.controllers', ['cesium.es.services'])\n\n .config(['PluginServiceProvider', 'csConfig', function(PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n PluginServiceProvider.extendState('app.network', {\n points: {\n 'network-buttons': {\n templateUrl: \"plugins/es/templates/network/view_network_extend.html\",\n controller: 'ESExtensionCtrl'\n },\n 'blockchain-buttons': {\n templateUrl: \"plugins/es/templates/network/view_network_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n ;\n }\n }])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.es_network', {\n url: \"/network/data?online&expert\",\n cache: false, // fix #766\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/network/view_es_network.html\",\n controller: 'ESNetworkLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n\n .state('app.view_es_peer', {\n url: \"/network/data/peer/:server?ssl&tor\",\n cache: false,\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/network/view_es_peer.html\",\n controller: 'ESPeerViewCtrl'\n }\n },\n data: {\n preferHttp: true // avoid HTTPS if config has httpsMode=clever\n }\n });\n }])\n\n .controller('ESNetworkLookupCtrl', ESNetworkLookupController)\n\n .controller('ESNetworkLookupModalCtrl', ESNetworkLookupModalController)\n\n .controller('ESPeerViewCtrl', ESPeerViewController)\n\n .controller('ESNetworkLookupPopoverCtrl', ESNetworkLookupPopoverController)\n\n .controller('ESPeerInfoPopoverCtrl', ESPeerInfoPopoverController)\n\n;\n\n\nfunction ESNetworkLookupController($scope, $state, $location, $ionicPopover, $window, $translate,\n esHttp, UIUtils, csConfig, csSettings, csCurrency, esNetwork, csWot) {\n 'ngInject';\n\n $scope.networkStarted = false;\n $scope.ionItemClass = '';\n $scope.expertMode = csSettings.data.expertMode && !UIUtils.screen.isSmall();\n $scope.isHttps = ($window.location.protocol === 'https:');\n $scope.search = {\n text: '',\n loading: true,\n online: true,\n results: [],\n endpointFilter: esHttp.constants.ES_USER_API,\n sort : undefined,\n asc: true\n };\n $scope.compactMode = true;\n $scope.listeners = [];\n $scope.helptipPrefix = 'helptip-network';\n $scope.enableLocationHref = true; // can be overrided by sub-controller (e.g. popup)\n\n $scope.removeListeners = function() {\n if ($scope.listeners.length) {\n console.debug(\"[ES] [network] Closing listeners\");\n _.forEach($scope.listeners, function(remove){\n remove();\n });\n $scope.listeners = [];\n }\n };\n\n /**\n * Enter in view\n */\n $scope.enter = function(e, state) {\n if ($scope.networkStarted) return;\n $scope.networkStarted = true;\n $scope.search.loading = true;\n csCurrency.get()\n .then(function (currency) {\n if (currency) {\n $scope.node = !esHttp.node.same(currency.node.host, currency.node.port) ?\n esHttp.instance(currency.node.host, currency.node.port) : esHttp;\n if (state && state.stateParams) {\n if (state.stateParams.online === 'true') {\n $scope.search.online = true;\n }\n if (state.stateParams.expert) {\n $scope.expertMode = (state.stateParams.expert == 'true');\n }\n }\n $scope.load();\n }\n })\n .catch(function(err) {\n UIUtils.onError('ERROR.GET_CURRENCY_FAILED')(err);\n $scope.networkStarted = false;\n });\n };\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n /**\n * Leave the view\n */\n $scope.leave = function() {\n if (!$scope.networkStarted) return;\n $scope.removeListeners();\n esNetwork.close();\n $scope.networkStarted = false;\n $scope.search.loading = true;\n };\n $scope.$on('$ionicView.beforeLeave', $scope.leave);\n $scope.$on('$ionicParentView.beforeLeave', $scope.leave);\n $scope.$on('$destroy', $scope.leave);\n\n\n $scope.computeOptions = function() {\n var options = {\n filter: {\n member: (!$scope.search.type || $scope.search.type === 'member'),\n mirror: (!$scope.search.type || $scope.search.type === 'mirror'),\n endpointFilter : (angular.isDefined($scope.search.endpointFilter) ? $scope.search.endpointFilter : null),\n online: $scope.search.online && true\n },\n sort: {\n type : $scope.search.sort,\n asc : $scope.search.asc\n },\n expertMode: $scope.expertMode,\n // larger timeout when on expert mode\n timeout: csConfig.timeout && ($scope.expertMode ? (csConfig.timeout / 10) : (csConfig.timeout / 100))\n };\n return options;\n };\n\n $scope.load = function() {\n\n if ($scope.search.loading){\n // Start network scan\n esNetwork.start($scope.node, $scope.computeOptions());\n\n // Catch event on new peers\n $scope.refreshing = false;\n $scope.listeners.push(\n esNetwork.api.data.on.changed($scope, function(data){\n if (!$scope.refreshing) {\n $scope.refreshing = true;\n csWot.extendAll(data.peers)\n .then(function() {\n // Avoid to refresh if view has been leaving\n if ($scope.networkStarted) {\n $scope.updateView(data);\n }\n $scope.refreshing = false;\n });\n }\n }));\n }\n };\n\n $scope.updateView = function(data) {\n console.debug(\"[peers] Updating UI\");\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n $scope.search.results = data.peers;\n $scope.search.memberPeersCount = data.memberPeersCount;\n // Always tru if network not started (e.g. after leave+renter the view)\n $scope.search.loading = !$scope.networkStarted || esNetwork.isBusy();\n if (!$scope.loading) {\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n }\n if ($scope.motion && $scope.search.results && $scope.search.results.length > 0) {\n $scope.motion.show({selector: '.item-peer'});\n }\n };\n\n $scope.refresh = function() {\n // Network\n $scope.search.loading = true;\n esNetwork.loadPeers();\n };\n\n $scope.sort = function() {\n $scope.search.loading = true;\n $scope.refreshing = true;\n esNetwork.sort($scope.computeOptions());\n $scope.updateView(esNetwork.data);\n };\n\n $scope.toggleOnline = function(online){\n $scope.hideActionsPopover();\n $scope.search.online = (online !== false);\n esNetwork.close();\n $scope.search.loading = true;\n $scope.load();\n\n // Update location href\n if ($scope.enableLocationHref) {\n $location.search($scope.search.online ? {} : {online: false}).replace();\n }\n };\n\n $scope.toggleSearchEndpoint = function(endpoint){\n $scope.hideActionsPopover();\n if ($scope.search.endpointFilter === endpoint || endpoint === null) {\n $scope.search.endpointFilter = null;\n }\n else {\n $scope.search.endpointFilter = endpoint;\n }\n $scope.sort();\n };\n\n $scope.toggleSort = function(sort){\n if ($scope.search.sort === sort && !$scope.search.asc) {\n $scope.search.asc = undefined;\n $scope.search.sort = undefined;\n }\n else {\n $scope.search.asc = ($scope.search.sort === sort) ? !$scope.search.asc : true;\n $scope.search.sort = sort;\n }\n $scope.sort();\n };\n\n $scope.selectPeer = function(peer) {\n if (peer.compacted && $scope.compactMode) {\n $scope.toggleCompactMode();\n return;\n }\n\n // Skip offline\n if (!peer.online ) return;\n\n var stateParams = {server: peer.getServer()};\n if (peer.isSsl()) {\n stateParams.ssl = true;\n }\n if (peer.isTor()) {\n stateParams.tor = true;\n }\n $state.go('app.view_es_peer', stateParams);\n };\n\n $scope.$on('csView.action.refresh', function(event, context) {\n if (context === 'peers') {\n $scope.refresh();\n }\n });\n\n $scope.$on('csView.action.showActionsPopover', function(event, clickEvent) {\n $scope.showActionsPopover(clickEvent);\n });\n\n /* -- popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/network/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n $scope.showEndpointsPopover = function($event, peer, endpointFilter) {\n $event.preventDefault();\n $event.stopPropagation();\n\n var endpoints = peer.getEndpoints(endpointFilter);\n endpoints = (endpoints||[]).reduce(function(res, ep) {\n var bma = esHttp.node.parseEndPoint(ep);\n return res.concat({\n label: 'NETWORK.VIEW.NODE_ADDRESS',\n value: peer.getServer() + (bma.path||'')\n });\n }, []);\n if (!endpoints.length) return;\n\n // Call extension points\n UIUtils.popover.show($event, {\n templateUrl: 'templates/network/popover_endpoints.html',\n bindings: {\n titleKey: 'NETWORK.VIEW.ENDPOINTS.' + endpointFilter,\n items: endpoints\n }\n });\n };\n\n $scope.showWs2pPopover = function($event, peer) {\n $event.stopPropagation();\n\n return $translate('NETWORK.VIEW.PRIVATE_ACCESS')\n .then(function(privateAccessMessage) {\n UIUtils.popover.show($event, {\n templateUrl: 'templates/network/popover_endpoints.html',\n bindings: {\n titleKey: 'NETWORK.VIEW.ENDPOINTS.WS2P',\n valueKey: 'NETWORK.VIEW.NODE_ADDRESS',\n items: [\n {\n label: 'NETWORK.VIEW.NODE_ADDRESS',\n value: !peer.bma.private ? (peer.getServer() + (peer.bma.path||'')) : privateAccessMessage\n },\n {\n label: 'NETWORK.VIEW.WS2PID',\n value: peer.bma.ws2pid\n },\n {\n label: 'NETWORK.VIEW.POW_PREFIX',\n value: peer.powPrefix\n }]\n }\n });\n });\n };\n}\n\n\nfunction ESNetworkLookupModalController($scope, $controller, parameters) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESNetworkLookupCtrl', {$scope: $scope}));\n\n // Read parameters\n parameters = parameters || {};\n $scope.enableFilter = angular.isDefined(parameters.enableFilter) ? parameters.enableFilter : true;\n $scope.search.type = angular.isDefined(parameters.type) ? parameters.type : $scope.search.type;\n $scope.search.endpointFilter = angular.isDefined(parameters.endpointFilter) ? parameters.endpointFilter : $scope.search.endpointFilter;\n $scope.expertMode = angular.isDefined(parameters.expertMode) ? parameters.expertMode : $scope.expertMode;\n $scope.ionItemClass = parameters.ionItemClass || 'item-border-large';\n $scope.enableLocationHref = false;\n $scope.helptipPrefix = '';\n\n $scope.selectPeer = function(peer) {\n $scope.closeModal(peer);\n };\n\n $scope.$on('modal.hidden', function(){\n $scope.leave();\n });\n\n // Disable this unsed method - called by load()\n $scope.showHelpTip = function() {};\n\n // Enter the modal\n $scope.enter();\n}\n\n\nfunction ESNetworkLookupPopoverController($scope, $controller) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('NetworkLookupCtrl', {$scope: $scope}));\n\n // Read parameters\n var parameters = parameters || {};\n $scope.enableFilter = angular.isDefined(parameters.enableFilter) ? parameters.enableFilter : true;\n $scope.search.type = angular.isDefined(parameters.type) ? parameters.type : $scope.search.type;\n $scope.search.endpointFilter = angular.isDefined(parameters.endpointFilter) ? parameters.endpointFilter : $scope.search.endpointFilter;\n $scope.expertMode = angular.isDefined(parameters.expertMode) ? parameters.expertMode : $scope.expertMode;\n $scope.ionItemClass = parameters.ionItemClass || 'item-border-large';\n $scope.helptipPrefix = '';\n\n $scope.selectPeer = function(peer) {\n $scope.closePopover(peer);\n };\n\n $scope.$on('popover.hidden', function(){\n $scope.leave();\n });\n\n // Disable this unsed method - called by load()\n $scope.showHelpTip = function() {};\n\n // Enter the popover\n $scope.enter();\n}\n\nfunction ESPeerInfoPopoverController($scope, $q, csSettings, csCurrency, csHttp, esHttp) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.formData = {};\n\n $scope.load = function() {\n\n $scope.loading = true;\n $scope.formData = {};\n\n return $q.all([\n // get current block\n esHttp.blockchain.current()\n .then(function(block) {\n $scope.formData.number = block.number;\n $scope.formData.medianTime = block.medianTime;\n $scope.formData.powMin = block.powMin;\n $scope.formData.useSsl = esHttp.useSsl;\n })\n .catch(function() {\n delete $scope.formData.number;\n delete $scope.formData.medianTime;\n delete $scope.formData.powMin;\n delete $scope.formData.useSsl;\n // continue\n }),\n\n // Get node current version\n esHttp.node.summary()\n .then(function(res){\n $scope.formData.version = res && res.duniter && res.duniter.version;\n $scope.formData.software = res && res.duniter && res.duniter.software;\n })\n .catch(function() {\n delete $scope.formData.version;\n delete $scope.formData.software;\n // continue\n }),\n\n // Get latest version\n esHttp.version.latest()\n .then(function(latestRelease){\n $scope.formData.latestRelease = latestRelease;\n })\n .catch(function() {\n delete $scope.formData.latestRelease;\n // continue\n })\n ])\n .then(function() {\n // Compare, to check if newer\n if ($scope.formData.latestRelease && $scope.formData.software === 'cesium-plus-pod') {\n var compare = csHttp.version.compare($scope.formData.version, $scope.formData.latestRelease.version);\n $scope.formData.isPreRelease = compare > 0;\n $scope.formData.hasNewRelease = compare < 0;\n }\n else {\n $scope.formData.isPreRelease = false;\n $scope.formData.hasNewRelease = false;\n }\n $scope.loading = false;\n $scope.$broadcast('$$rebind::rebind'); // force data binding\n });\n };\n\n // Update UI on new block\n csCurrency.api.data.on.newBlock($scope, function(block) {\n if ($scope.loading) return;\n console.debug(\"[peer info] Received new block. Reload content\");\n $scope.load();\n });\n\n // Update UI on settings changed\n csSettings.api.data.on.changed($scope, function(data) {\n if ($scope.loading) return;\n console.debug(\"[peer info] Peer settings changed. Reload content\");\n $scope.load();\n });\n\n // Load data when enter\n $scope.load();\n}\n\nfunction ESPeerViewController($scope, $q, $window, $state, UIUtils, csWot, esHttp, csHttp, csSettings) {\n 'ngInject';\n\n $scope.node = {};\n $scope.loading = true;\n $scope.isHttps = ($window.location.protocol === 'https:');\n $scope.isReachable = true;\n $scope.options = {\n document: {\n index : csSettings.data.plugins.es && csSettings.data.plugins.es.document && csSettings.data.plugins.es.document.index || 'user',\n type: csSettings.data.plugins.es && csSettings.data.plugins.es.document && csSettings.data.plugins.es.document.type || 'profile'\n }\n };\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.$on('$ionicView.enter', function(e, state) {\n var isDefaultNode = !state.stateParams || !state.stateParams.server;\n var server = state.stateParams && state.stateParams.server || esHttp.server;\n var useSsl = state.stateParams && state.stateParams.ssl == \"true\" || (isDefaultNode ? esHttp.useSsl : false);\n var useTor = state.stateParams.tor == \"true\" || (isDefaultNode ? esHttp.useTor : false);\n\n return $scope.load(server, useSsl, useTor)\n .then(function() {\n return $scope.$broadcast('$csExtension.enter', e, state);\n })\n .then(function(){\n $scope.loading = false;\n })\n .catch(function() {\n $scope.loading = false;\n });\n });\n\n $scope.load = function(server, useSsl, useTor) {\n var node = {\n server: server,\n host: server,\n useSsl: useSsl,\n useTor: useTor\n };\n var serverParts = server.split(':');\n if (serverParts.length === 2) {\n node.host = serverParts[0];\n node.port = serverParts[1];\n }\n node.url = csHttp.getUrl(node.host, node.port, undefined/*path*/, node.useSsl);\n\n angular.merge($scope.node,\n useTor ?\n // For TOR, use a web2tor to access the endpoint\n esHttp.lightInstance(node.host + \".to\", 443, 443, true/*ssl*/, 60000 /*long timeout*/) :\n esHttp.lightInstance(node.host, node.port, node.useSsl),\n node);\n\n $scope.isReachable = !$scope.isHttps || useSsl;\n if (!$scope.isReachable) {\n // Get node from the default node\n return esHttp.network.peers()\n .then(function(res) {\n // find the current peer\n var peers = (res && res.peers || []).reduce(function(res, json) {\n var peer = new EsPeer(json);\n if (!peer.hasEsEndpoint()) return res;\n var ep = esHttp.node.parseEndPoint(peer.getEsEndpoints()[0]);\n if((ep.dns == node.host || ep.ipv4 == node.host || ep.ipv6 == node.host) && (\n ep.port == node.port)) {\n peer.ep = ep;\n return res.concat(peer);\n }\n return res;\n }, []);\n var peer = peers.length && peers[0];\n\n // Current node found\n if (peer) {\n $scope.node.pubkey = peer.pubkey;\n $scope.node.currency = peer.currency;\n return csWot.extend($scope.node);\n }\n else {\n console.warn('Could not get peer from /network/peers');\n }\n });\n }\n\n return $q.all([\n\n // Get node peer info\n $scope.node.network.peering.self()\n .then(function(json) {\n $scope.node.pubkey = json.pubkey;\n $scope.node.currency = json.currency;\n }),\n\n // Get node doc count\n $scope.node.record.count($scope.options.document.index, $scope.options.document.type)\n .then(function(count) {\n $scope.node.docCount = count;\n }),\n\n // Get known peers\n $scope.node.network.peers()\n .then(function(json) {\n var peers = json.peers.reduce(function (res, p) {\n var peer = new EsPeer(p);\n if (!peer.hasEsEndpoint()) return res;\n peer.online = p.status === 'UP';\n peer.blockNumber = peer.block.replace(/-.+$/, '');\n peer.ep = esHttp.node.parseEndPoint(peer.getEsEndpoints()[0]);\n peer.dns = peer.getDns();\n peer.id = peer.keyID();\n peer.server = peer.getServer();\n return res.concat(peer);\n }, []);\n\n // Extend (add uid+name+avatar)\n return csWot.extendAll([$scope.node].concat(peers))\n .then(function() {\n // Final sort\n $scope.peers = _.sortBy(peers, function(p) {\n var score = 1;\n score += 10000 * (p.online ? 1 : 0);\n score += 1000 * (p.hasMainConsensusBlock ? 1 : 0);\n score += 100 * (p.name ? 1 : 0);\n return -score;\n });\n $scope.motion.show({selector: '.item-peer'});\n });\n }),\n\n // Get current block\n $scope.node.blockchain.current()\n .then(function(json) {\n $scope.current = json;\n })\n ])\n .catch(UIUtils.onError(useTor ? \"PEER.VIEW.ERROR.LOADING_TOR_NODE_ERROR\" : \"PEER.VIEW.ERROR.LOADING_NODE_ERROR\"));\n };\n\n $scope.selectPeer = function(peer) {\n // Skip offline\n if (!peer.online ) return;\n\n var stateParams = {server: peer.getServer()};\n if (peer.isSsl()) {\n stateParams.ssl = true;\n }\n if (peer.isTor()) {\n stateParams.tor = true;\n }\n $state.go('app.view_es_peer', stateParams);\n };\n\n /* -- manage link to raw document -- */\n\n $scope.openRawPeering = function(event) {\n return $scope.openLink(event, $scope.node.url + '/network/peering?pretty');\n };\n\n $scope.openRawCurrentBlock = function(event) {\n return $scope.openLink(event, $scope.node.url + '/network/peering?pretty');\n };\n}\n","\nESGroupListController.$inject = ['$scope', 'UIUtils', '$state', 'csWallet', 'esGroup', 'ModalUtils'];\nESGroupViewController.$inject = ['$scope', '$state', '$ionicPopover', '$ionicHistory', '$translate', 'UIUtils', 'csConfig', 'esGroup', 'csWallet'];\nESGroupEditController.$inject = ['$scope', 'esGroup', 'UIUtils', '$state', '$q', 'Device', '$ionicHistory', 'ModalUtils', '$focus', 'esHttp'];angular.module('cesium.es.group.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.groups', {\n url: \"/group?type&location\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/group/lookup.html\",\n controller: 'ESGroupListCtrl'\n }\n }\n })\n\n .state('app.add_group', {\n url: \"/group/add/:type\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/group/edit_group.html\",\n controller: 'ESGroupEditCtrl'\n }\n }\n })\n\n .state('app.edit_group', {\n url: \"/group/edit/:id\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/group/edit_group.html\",\n controller: 'ESGroupEditCtrl'\n }\n }\n })\n\n\n .state('app.view_group', {\n url: \"/group/view/:id\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/group/view_record.html\",\n controller: 'ESGroupViewCtrl'\n }\n }\n })\n\n ;\n }])\n\n .controller('ESGroupListCtrl', ESGroupListController)\n\n .controller('ESGroupViewCtrl', ESGroupViewController)\n\n .controller('ESGroupEditCtrl', ESGroupEditController)\n\n;\n\nfunction ESGroupListController($scope, UIUtils, $state, csWallet, esGroup, ModalUtils) {\n 'ngInject';\n\n var defaultSearchLimit = 40;\n\n $scope.search = {\n loading : true,\n results: null,\n type: 'last',\n hasMore : false,\n loadingMore : false,\n limit: defaultSearchLimit\n };\n $scope.enableFilter = !UIUtils.screen.isSmall();\n $scope.ionItemClass = 'item-border-large';\n\n $scope.$on('$ionicView.enter', function() {\n if ($scope.search.loading) {\n $scope.doSearch();\n }\n });\n\n $scope.doSearchText = function() {\n var text = $scope.search.text && $scope.search.text.trim();\n if (!text || !text.length) {\n return $scope.doSearchLast();\n }\n $scope.search.type='text';\n return $scope.doSearch();\n };\n\n $scope.doSearchLast = function() {\n $scope.search.type = 'last';\n return $scope.doSearch();\n };\n\n $scope.doSearch = function(from, size) {\n var options = {};\n options.from = from || 0;\n options.size = size || defaultSearchLimit;\n\n options.text = $scope.search.type == 'text' && $scope.search.text && $scope.search.text.trim();\n\n $scope.search.loading = true;\n return esGroup.record.search(options)\n .then(function(res) {\n if (!from) {\n $scope.search.results = res || [];\n }\n else if (res){\n $scope.search.results = $scope.search.results.concat(res);\n }\n $scope.search.loading = false;\n $scope.search.hasMore = $scope.search.results.length >= $scope.search.limit;\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.search.loading = false;\n if (!from) {\n $scope.search.results = [];\n }\n $scope.search.hasMore = false;\n UIUtils.onError('GROUP.ERROR.SEARCH_GROUPS_FAILED')(err);\n });\n };\n\n $scope.updateView = function() {\n\n $scope.$broadcast('$$rebind::rebind'); // notify binder\n $scope.motion.show({selector: '.list.{0} .item'.format($scope.motion.ionListClass)});\n };\n\n $scope.select = function(item) {\n if (item && item.id) $state.go('app.view_group', {id: item.id});\n };\n\n $scope.showMore = function() {\n $scope.search.limit = $scope.search.limit || defaultSearchLimit;\n $scope.search.limit += defaultSearchLimit;\n if ($scope.search.limit < defaultSearchLimit) {\n $scope.search.limit = defaultSearchLimit;\n }\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.search.limit)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.resetData = function() {\n if ($scope.search.loading) return;\n console.debug(\"[ES] [group] Resetting data (settings or account may have changed)\");\n $scope.search.hasMore = false;\n $scope.search.results = [];\n $scope.search.loading = true;\n delete $scope.search.limit;\n };\n // When logout: force reload\n csWallet.api.data.on.logout($scope, $scope.resetData);\n\n /* -- modals and views -- */\n\n $scope.showNewRecordModal = function() {\n $scope.loadWallet({minData: true})\n .then(function(walletData) {\n UIUtils.loading.hide();\n $scope.walletData = walletData;\n ModalUtils.show('plugins/es/templates/group/modal_record_type.html')\n .then(function(type){\n if (type) {\n $state.go('app.add_group', {type: type});\n }\n });\n });\n };\n}\n\n\nfunction ESGroupViewController($scope, $state, $ionicPopover, $ionicHistory, $translate,\n UIUtils, csConfig, esGroup, csWallet) {\n 'ngInject';\n\n $scope.formData = {};\n $scope.id = null;\n $scope.pictures = [];\n $scope.canEdit = false;\n $scope.loading = true;\n $scope.motion = UIUtils.motion.fadeSlideIn;\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if (state.stateParams && state.stateParams.id) { // Load by id\n if ($scope.loading || state.stateParams.refresh) { // prevent reload if same id (if not forced)\n $scope.load(state.stateParams.id, state.stateParams.anchor);\n }\n UIUtils.loading.hide();\n $scope.$broadcast('$recordView.enter', state);\n }\n else {\n $state.go('app.groups');\n }\n });\n\n $scope.load = function(id) {\n esGroup.record.load(id, {\n fetchPictures: true\n })\n .then(function (data) {\n $scope.id = data.id;\n $scope.formData = data.record;\n $scope.issuer= data.issuer;\n $scope.canEdit = csWallet.isUserPubkey($scope.formData.issuer) || csWallet.children.hasPubkey($scope.formData.issuer);\n\n $scope.pictures = data.record.pictures || [];\n delete data.record.pictures; // remove, as already stored in $scope.pictures\n\n // Load other data (from child controller)\n $scope.$broadcast('$recordView.load', id, esGroup.record.comment);\n\n $scope.loading = false;\n UIUtils.loading.hide();\n $scope.updateView();\n\n })\n .catch(UIUtils.onError('GROUP.ERROR.LOAD_RECORD_FAILED'));\n };\n\n $scope.updateView = function() {\n $scope.motion.show();\n };\n\n // Edit click\n $scope.edit = function() {\n UIUtils.loading.show();\n $state.go('app.edit_group', {id: $scope.id});\n };\n\n $scope.delete = function() {\n $scope.hideActionsPopover();\n\n // translate\n var translations;\n $translate(['GROUP.VIEW.REMOVE_CONFIRMATION', 'GROUP.INFO.RECORD_REMOVED'])\n .then(function(res) {\n translations = res;\n return UIUtils.alert.confirm(res['GROUP.VIEW.REMOVE_CONFIRMATION']);\n })\n .then(function(confirm) {\n if (confirm) {\n esGroup.record.remove($scope.id)\n .then(function () {\n $ionicHistory.nextViewOptions({\n historyRoot: true\n });\n $state.go('app.groups');\n UIUtils.toast.show(translations['GROUP.INFO.RECORD_REMOVED']);\n })\n .catch(UIUtils.onError('GROUP.ERROR.REMOVE_RECORD_FAILED'));\n }\n });\n };\n\n /* -- modals & popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/group/view_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n $scope.showSharePopover = function(event) {\n $scope.hideActionsPopover();\n\n var title = $scope.formData.title;\n // Use shareBasePath (fix #530) or rootPath (fix #390)\n var url = (csConfig.shareBaseUrl || $rootScope.rootPath) + $state.href('app.view_group', {id: $scope.id});\n // Override default position, is small screen - fix #545\n if (UIUtils.screen.isSmall()) {\n event = angular.element(document.querySelector('#group-share-anchor-'+$scope.id)) || event;\n }\n UIUtils.popover.share(event, {\n bindings: {\n url: url,\n titleKey: 'GROUP.VIEW.POPOVER_SHARE_TITLE',\n titleValues: {title: title},\n time: $scope.formData.time,\n postMessage: title\n }\n });\n };\n}\n\nfunction ESGroupEditController($scope, esGroup, UIUtils, $state, $q, Device,\n $ionicHistory, ModalUtils, $focus, esHttp) {\n 'ngInject';\n\n $scope.walletData = {};\n $scope.formData = {};\n $scope.id = null;\n $scope.pictures = [];\n $scope.loading = true;\n\n $scope.setForm = function(form) {\n $scope.form = form;\n };\n\n $scope.$on('$ionicView.enter', function(e, state) {\n $scope.loadWallet({minData: true})\n .then(function(walletData) {\n $scope.walletData = walletData;\n if (state.stateParams && state.stateParams.id) { // Load by id\n $scope.load(state.stateParams.id);\n }\n else {\n if (state.stateParams && state.stateParams.type) {\n $scope.formData.type=state.stateParams.type;\n }\n $scope.loading = false;\n UIUtils.loading.hide();\n $scope.updateView();\n }\n // removeIf(device)\n $focus('group-record-title');\n // endRemoveIf(device)\n });\n });\n\n $scope.load = function(id) {\n esGroup.record.load(id, {\n fetchPictures: true,\n html: false\n })\n .then(function (data) {\n $scope.formData = data.record;\n $scope.issuer= data.issuer;\n $scope.id= data.id;\n\n $scope.pictures = data.record.pictures || [];\n delete data.record.pictures; // remove, as already stored in $scope.pictures\n\n $scope.loading = false;\n UIUtils.loading.hide();\n $scope.updateView();\n\n })\n .catch(UIUtils.onError('GROUP.ERROR.LOAD_RECORD_FAILED'));\n };\n\n $scope.updateView = function() {\n $scope.motion.show({selector: '.list.{0} .item, .card-gallery'.format($scope.motion.ionListClass)});\n };\n\n $scope.save = function() {\n $scope.form.$submitted=true;\n if($scope.saving || // avoid multiple save\n !$scope.form.$valid ||\n ($scope.formData.type !== 'managed' && $scope.formData.type !== 'open')) {\n return;\n }\n $scope.saving = true;\n return UIUtils.loading.show()\n\n .then(function(){\n var json = $scope.formData;\n json.time = moment().utc().unix();\n\n // Resize pictures\n json.picturesCount = $scope.pictures.length;\n if (json.picturesCount > 0) {\n json.pictures = $scope.pictures.reduce(function(res, pic) {\n return res.concat({file: esHttp.image.toAttachment(pic)});\n }, []);\n return UIUtils.image.resizeSrc($scope.pictures[0].src, true) // resize avatar\n .then(function(imageSrc) {\n json.avatar = esHttp.image.toAttachment({src: imageSrc});\n return json;\n });\n }\n else {\n if (json.avatar) {\n // FIXME: this is a workaround to allow content deletion\n // Is it a bug in the ES attachment-mapper ?\n json.avatar = {\n _content: '',\n _content_type: ''\n };\n }\n json.pictures = [];\n return json;\n }\n })\n .then(function(json){\n // Create\n if (!$scope.id) {\n json.creationTime = moment().utc().unix();\n return esGroup.record.add(json);\n }\n // Update\n return esGroup.record.update(json, {id: $scope.id});\n })\n\n .then(function(id) {\n $scope.id = $scope.id || id;\n $scope.saving = false;\n $ionicHistory.clearCache($ionicHistory.currentView().stateId); // clear current view\n $ionicHistory.nextViewOptions({historyRoot: true});\n return $state.go('app.view_group', {id: $scope.id, refresh: true});\n })\n\n .catch(function(err) {\n $scope.saving = false;\n UIUtils.onError('GROUP.ERROR.SAVE_RECORD_FAILED')(err);\n });\n };\n\n $scope.openPicturePopup = function() {\n Device.camera.getPicture()\n .then(function(imageData) {\n $scope.pictures.push({src: \"data:image/png;base64,\" + imageData});\n })\n .catch(UIUtils.onError('ERROR.TAKE_PICTURE_FAILED'));\n };\n\n $scope.fileChanged = function(event) {\n UIUtils.loading.show();\n return $q(function(resolve, reject) {\n var file = event.target.files[0];\n UIUtils.image.resizeFile(file)\n .then(function(imageData) {\n $scope.pictures.push({src: imageData});\n UIUtils.loading.hide();\n resolve();\n });\n });\n };\n\n $scope.removePicture = function(index){\n $scope.pictures.splice(index, 1);\n };\n\n $scope.favoritePicture = function(index){\n if (index > 0) {\n var item = $scope.pictures[index];\n $scope.pictures.splice(index, 1);\n $scope.pictures.splice(0, 0, item);\n }\n };\n\n $scope.cancel = function() {\n $ionicHistory.goBack();\n };\n\n /* -- modals -- */\n $scope.showRecordTypeModal = function() {\n ModalUtils.show('plugins/es/templates/group/modal_record_type.html')\n .then(function(type){\n if (type) {\n $scope.formData.type = type;\n }\n });\n };\n\n}\n","\nInvitationsController.$inject = ['$scope', '$q', '$ionicPopover', '$state', '$timeout', 'UIUtils', 'csWallet', 'esHttp', 'esModals', 'esNotification', 'esInvitation'];\nPopoverInvitationController.$inject = ['$scope', '$controller', 'csWallet'];\nNewInvitationModalController.$inject = ['$scope', '$q', 'Modals', 'UIUtils', 'csWallet', 'esHttp', 'esWallet', 'esInvitation', 'parameters'];angular.module('cesium.es.invitation.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.view_invitations', {\n url: \"/invitations?id\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/invitation/view_invitations.html\",\n controller: 'InvitationsCtrl'\n }\n },\n data: {\n auth: true\n }\n })\n\n .state('app.view_invitations_by_id', {\n url: \"/wallets/:id/invitations\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/invitation/view_invitations.html\",\n controller: 'InvitationsCtrl'\n }\n },\n data: {\n login: true\n }\n })\n ;\n }])\n\n .controller('InvitationsCtrl', InvitationsController)\n\n .controller('PopoverInvitationCtrl', PopoverInvitationController)\n\n .controller('ESNewInvitationModalCtrl', NewInvitationModalController)\n;\n\nfunction InvitationsController($scope, $q, $ionicPopover, $state, $timeout, UIUtils, csWallet,\n esHttp, esModals, esNotification, esInvitation) {\n 'ngInject';\n\n var defaultSearchLimit = esInvitation.constants.DEFAULT_LOAD_SIZE;\n\n $scope.search = {\n loading : true,\n results: null,\n hasMore : false,\n loadingMore : false,\n limit: defaultSearchLimit,\n options: {\n codes: {\n includes: esNotification.constants.INVITATION_CODES\n }\n }\n };\n\n var wallet;\n\n $scope.setWallet = function(aWallet) {\n wallet = aWallet;\n };\n\n $scope.$on('$ionicView.enter', function(e, state) {\n if ($scope.search.loading) {\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n $scope.loadWallet({\n wallet: wallet,\n minData: true\n })\n .then(function() {\n\n $scope.addListeners();\n\n if (esHttp.isAlive()) {\n $scope.load();\n\n // Reset unread counter\n $scope.resetUnreadCount();\n\n $scope.showFab('fab-new-invitation');\n }\n });\n }\n });\n\n $scope.load = function(from, size) {\n var options = angular.copy($scope.search.options);\n options.from = options.from || from || 0;\n options.size = options.size || size || defaultSearchLimit;\n\n // Make sure wallet is init (need by PopoverInvitationCtrl)\n wallet = wallet || csWallet;\n\n return esInvitation.load(options, wallet.data.keypair)\n .then(function(invitations) {\n $scope.search.results = invitations;\n $scope.search.loading = false;\n $scope.search.hasMore = ($scope.search.results && $scope.search.results.length >= $scope.search.limit);\n $scope.updateView();\n UIUtils.loading.hide();\n })\n .catch(function(err) {\n if (err === 'CANCELLED') return $scope.cancel();\n $scope.search.loading = false;\n if (!from) {\n $scope.search.results = [];\n }\n $scope.search.hasMore = false;\n UIUtils.onError('INVITATION.ERROR.LOAD_INVITATIONS_FAILED')(err);\n });\n };\n\n $scope.cancel = function() {\n\n };\n\n $scope.updateView = function() {\n if ($scope.motion && $scope.search.results && $scope.search.results.length) {\n $scope.motion.show({selector: '.view-invitation .item'});\n }\n };\n $scope.$watchCollection('search.results', $scope.updateView);\n\n $scope.showMore = function() {\n $scope.search.limit = $scope.search.limit || defaultSearchLimit;\n $scope.search.limit = $scope.search.limit * 2;\n if ($scope.search.limit < defaultSearchLimit) {\n $scope.search.limit = defaultSearchLimit;\n }\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.search.limit)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.onNewInvitation = function(invitation) {\n if ($scope.search.loading || $scope.search.loadingMore) return;\n\n // Insert the new invitation (ONLY if not already done by service. May occur when using same array instance)\n if (!$scope.search.results[0] || $scope.search.results[0] !== invitation) {\n $scope.search.results.splice(0,0,invitation);\n }\n };\n\n $scope.resetData = function() {\n if ($scope.search.loading) return;\n console.debug(\"[ES] [invitation] Resetting data (settings or account may have changed)\");\n $scope.search.hasMore = false;\n $scope.search.results = [];\n $scope.search.loading = true;\n delete $scope.search.limit;\n };\n\n $scope.resetUnreadCount = function() {\n if ($scope.search.loading || !wallet.data.invitations) {\n return $timeout($scope.resetUnreadCount, 2000);\n }\n if (!wallet.data.invitations.unreadCount) return;\n console.debug('[ES] [invitation] Resetting unread count');\n wallet.data.invitations.unreadCount = 0;\n if (!$scope.search.results || !$scope.search.results.length) return;\n var lastNotification = $scope.search.results[0];\n var readTime = lastNotification.time ? lastNotification.time : 0;\n if (readTime && (!wallet.data.invitations.readTime || wallet.data.invitations.readTime != readTime)) {\n wallet.data.invitations.readTime = readTime;\n wallet.storeData();\n }\n };\n\n $scope.deleteAll = function(confirm) {\n $scope.hideActionsPopover();\n if (!$scope.search.results.length) return;\n\n if (!confirm) {\n return UIUtils.alert.confirm('INVITATION.CONFIRM.DELETE_ALL_CONFIRMATION')\n .then(function(confirm) {\n if (confirm) return $scope.deleteAll(confirm); // recursive call\n });\n }\n\n return $q.all([\n UIUtils.loading.show(),\n esInvitation.deleteAll(wallet.data.pubkey)\n ])\n .then(function() {\n $scope.search.results.splice(0, $scope.search.results.length); // update list\n return UIUtils.loading.hide();\n })\n .catch(UIUtils.onError('INVITATION.ERROR.REMOVE_ALL_INVITATIONS_FAILED'));\n };\n\n $scope.delete = function(index) {\n var invitation = $scope.search.results[index];\n if (!invitation) return;\n\n return esInvitation.delete(invitation)\n .then(function() {\n // Remove from list (ONLY if not already done by service. May occur when using same array instance)\n if ($scope.search.results[index] && $scope.search.results[index] === invitation) {\n $scope.search.results.splice(index,1);\n }\n })\n .catch(UIUtils.onError('INVITATION.ERROR.REMOVE_INVITATION_FAILED'));\n };\n\n $scope.accept = function(invitation) {\n $scope.hideActionsPopover(); // need when PopoverInvitationController\n\n if (invitation.state) {\n $state.go(invitation.state, invitation.stateParams || {});\n }\n };\n\n /* -- Modal -- */\n\n $scope.showNewInvitationModal = function() {\n $scope.hideActionsPopover();\n\n return $timeout(function() {\n return esModals.showNewInvitation({})\n }, 500); // Timeout need, to avoid freeze\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/invitation/popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n\n // Listeners\n $scope.addListeners = function() {\n if (!wallet) throw \"Controller wallet not set !\";\n\n $scope.listeners = [\n esHttp.api.node.on.stop($scope, $scope.resetData),\n esHttp.api.node.on.start($scope, $scope.load),\n wallet.api.data.on.logout($scope, $scope.resetData)\n ];\n\n if (wallet.isDefault()) {\n // Subscribe to new invitation\n $scope.listeners.push(\n esInvitation.api.data.on.new($scope, $scope.onNewInvitation)\n );\n }\n };\n}\n\nfunction PopoverInvitationController($scope, $controller, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('InvitationsCtrl', {$scope: $scope}));\n\n // Disable list effects\n $scope.motion = null;\n\n // Set the wallet to use\n $scope.setWallet(csWallet);\n\n $scope.$on('popover.shown', function() {\n if ($scope.search.loading) {\n $scope.addListeners();\n $scope.load();\n }\n });\n\n $scope.updateView = function() {\n // no animation\n };\n\n $scope.$on('popover.hidden', $scope.resetUnreadCount);\n\n $scope.hideActionsPopover = function() {\n $scope.closePopover();\n };\n\n $scope.cancel = function() {\n $scope.closePopover();\n };\n}\n\n\nfunction NewInvitationModalController($scope, $q, Modals, UIUtils, csWallet, esHttp, esWallet, esInvitation, parameters) {\n 'ngInject';\n\n // Controller var\n var wallet;\n\n // Scope var\n $scope.recipients = [];\n $scope.suggestions = [];\n $scope.formData = {\n useComment: false,\n walletId: null\n };\n $scope.enableSelectWallet = true;\n\n /* -- scope functions -- */\n\n $scope.setParameters = function(parameters) {\n if (!parameters) return;\n if (!parameters.wallet || parameters.wallet === \"default\") {\n $scope.formData.walletId = csWallet.id;\n }\n else {\n $scope.formData.walletId = parameters.wallet;\n }\n };\n // Read default parameters\n $scope.setParameters(parameters);\n\n $scope.load = function() {\n $scope.enableSelectWallet = csWallet.children.count() > 0;\n\n wallet = $scope.enableSelectWallet && ($scope.formData.walletId ? csWallet.children.get($scope.formData.walletId) : csWallet) || csWallet;\n $scope.formData.walletId = wallet.id; // update the walletId (could have changed)\n if (!wallet.isDefault()) {\n console.debug(\"[transfer] Using {\" + wallet.id + \"} wallet\");\n }\n\n // Make to sure to load full wallet data (balance)\n return wallet.login({sources: true, silent: true})\n .then(function(data) {\n $scope.walletData = data;\n UIUtils.ink({selector: '.modal-invitation .ink'});\n\n if (!$scope.destPub || $scope.destUid) {\n $scope.loading = false;\n }\n else {\n // Fill the uid from the pubkey\n return csWot.extend({pubkey: $scope.destPub})\n .then(function(res) {\n $scope.destUid = res && (res.name || res.uid);\n if ($scope.destUid) {\n $scope.destPub = '';\n }\n $scope.loading = false;\n });\n }\n })\n .catch(function(err){\n if (err === 'CANCELLED') return $scope.cancel(); // close the modal\n UIUtils.onError('ERROR.LOGIN_FAILED')(err);\n });\n };\n $scope.$on('modal.shown', $scope.load);\n\n // When changing use comment\n $scope.onUseCommentChanged = function() {\n if (!$scope.formData.useComment) {\n $scope.formData.comment = null; // reset comment only when disable\n }\n };\n $scope.$watch('formData.useComment', $scope.onUseCommentChanged, true);\n\n\n $scope.removeRecipient= function(index, e) {\n $scope.recipients.splice(index, 1);\n e.preventDefault();\n };\n\n $scope.removeSuggestion = function(index, e) {\n $scope.suggestions.splice(index, 1);\n e.preventDefault();\n };\n\n $scope.cancel = function() {\n $scope.closeModal();\n };\n\n $scope.doSend = function() {\n $scope.form.$submitted=true;\n if(!$scope.form.$valid || !$scope.recipients.length || !$scope.suggestions.length) {\n return;\n }\n\n if (!wallet.isLogin()) return $scope.closeModal(); // should never happen\n\n // Make sure user is still authenticated\n return wallet.auth({silent: true})\n .then(function() {\n return $q.all([\n // Get keypair only once (if not done here, esInvitation.send() with compute it many times)\n esWallet.box.getKeypair(wallet.data.keypair),\n // Ask confirmation\n UIUtils.alert.confirm('INVITATION.CONFIRM.SEND_INVITATIONS_TO_CERTIFY', undefined, {okText: 'COMMON.BTN_SEND'})\n ]);\n })\n .then(function(res) {\n var keypair = res && res[0];\n var confirm = res && res[1];\n if (!keypair || !confirm) return;\n UIUtils.loading.show();\n var time = moment().utc().unix(); // use same date for each invitation\n var comment = $scope.formData.useComment && $scope.formData.comment && $scope.formData.comment.trim();\n return $q.all(\n $scope.recipients.reduce(function (res, recipient) {\n return res.concat($scope.suggestions.reduce(function (res, identity) {\n if (!identity.uid || !identity.pubkey) {\n console.error('Unable to send suggestion for this identity (no uid or pubkey)', identity);\n return res;\n }\n var invitation = {\n issuer: wallet.data.pubkey,\n recipient: recipient.pubkey,\n time: time,\n content: [identity.uid, identity.pubkey].join('-'),\n comment: comment\n };\n return res.concat(\n esInvitation.send(invitation, {\n wallet: wallet,\n type: 'certification'\n }));\n }, []));\n }, []))\n .then(function() {\n $scope.closeModal();\n return UIUtils.loading.hide();\n })\n .then(function() {\n UIUtils.toast.show('INVITATION.INFO.INVITATION_SENT');\n })\n .catch(UIUtils.onError('INVITATION.ERROR.SUGGEST_CERTIFICATIONS_FAILED'));\n });\n };\n\n /* -- Modals -- */\n\n $scope.showSelectRecipientModal = function(e) {\n if (e.isDefaultPrevented()) return;\n\n return Modals.showWotLookup({\n allowMultiple: true,\n enableFilter: true,\n title: 'INVITATION.NEW.RECIPIENTS_MODAL_TITLE',\n help: 'INVITATION.NEW.RECIPIENTS_MODAL_HELP',\n okText: 'COMMON.BTN_OK',\n okType: 'button-positive',\n selection: angular.copy($scope.recipients)\n })\n .then(function(res) {\n if (!res) return; // user cancel\n $scope.recipients = res;\n });\n\n };\n\n $scope.showSelectSuggestionModal = function(e) {\n if (e.isDefaultPrevented()) return;\n\n return Modals.showWotLookup({\n allowMultiple: true,\n enableFilter: true,\n title: 'INVITATION.NEW.SUGGESTION_IDENTITIES_MODAL_TITLE',\n help: 'INVITATION.NEW.SUGGESTION_IDENTITIES_MODAL_HELP',\n okText: 'COMMON.BTN_OK',\n okType: 'button-positive',\n selection: angular.copy($scope.suggestions)\n })\n .then(function(res) {\n if (!res) return; // user cancel\n $scope.suggestions = res;\n });\n };\n\n\n $scope.showSelectWalletModal = function() {\n if (!$scope.enableSelectWallet) return;\n\n return Modals.showSelectWallet()\n .then(function(wallet) {\n if (!wallet || $scope.formData.walletId === wallet.id) return;\n console.debug(\"[transfer] Using {\" + wallet.id + \"} wallet\");\n $scope.wallet = wallet;\n $scope.walletData = wallet.data;\n $scope.formData.walletId = wallet.id;\n $scope.onAmountChanged();\n });\n };\n}\n\n","\nViewSubscriptionsController.$inject = ['$scope', '$q', '$ionicHistory', 'csWot', 'csWallet', 'UIUtils', 'ModalUtils', 'esSubscription'];\nModalEmailSubscriptionsController.$inject = ['$scope', 'Modals', 'csSettings', 'esHttp', 'csWot', 'esModals', 'parameters'];angular.module('cesium.es.subscription.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n\n $stateProvider\n .state('app.edit_subscriptions', {\n cache: false,\n url: \"/wallet/subscriptions\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/subscription/edit_subscriptions.html\",\n controller: 'ViewSubscriptionsCtrl'\n }\n },\n data: {\n auth: true,\n minData: true\n }\n })\n\n .state('app.edit_subscriptions_by_id', {\n cache: false,\n url: \"/wallets/:id/subscriptions\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/subscription/edit_subscriptions.html\",\n controller: 'ViewSubscriptionsCtrl'\n }\n },\n data: {\n login: true,\n minData: true\n }\n });\n\n }])\n\n .controller('ViewSubscriptionsCtrl', ViewSubscriptionsController)\n\n .controller('ModalEmailSubscriptionsCtrl', ModalEmailSubscriptionsController)\n\n;\n\nfunction ViewSubscriptionsController($scope, $q, $ionicHistory, csWot, csWallet, UIUtils, ModalUtils, esSubscription) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.popupData = {}; // need for the node popup\n $scope.search = {\n results: [],\n loading: true\n };\n $scope.emailFrequencies = [\n {id: \"daily\", label: \"daily\"},\n {id: \"weekly\", label: \"weekly\"}\n ];\n\n var wallet;\n\n $scope.enter = function(e, state) {\n\n // First load\n if ($scope.loading) {\n\n wallet = (state.stateParams && state.stateParams.id) ? csWallet.children.get(state.stateParams.id) : csWallet;\n if (!wallet) {\n UIUtils.alert.error('ERROR.UNKNOWN_WALLET_ID');\n return $scope.showHome();\n }\n\n wallet.auth({minData: true})\n .then(function() {\n UIUtils.loading.hide();\n return $scope.load();\n })\n .then(function() {\n $scope.showFab('fab-add-subscription-record');\n })\n .catch(function(err){\n if (err === 'CANCELLED') {\n UIUtils.loading.hide(10);\n $scope.loading=true; // reset for force reload next time\n $ionicHistory.goBack();\n return;\n }\n UIUtils.onError('SUBSCRIPTION.ERROR.LOAD_SUBSCRIPTIONS_FAILED')(err);\n });\n }\n\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.load = function() {\n $scope.loading = true; // to avoid the call of doSave()\n return esSubscription.record.load(wallet.data.pubkey, wallet.data.keypair)\n .then(function(results) {\n // Group by type\n var groups = _.groupBy((results || []), function (record) {\n return [record.type, record.recipient].join('|');\n });\n return _.keys(groups).reduce(function (res, key) {\n var parts = key.split('|');\n return res.concat({\n type: parts[0],\n recipient: parts[1],\n items: groups[key]\n });\n }, []);\n })\n .then(function(results) {\n return csWot.extendAll(results, 'recipient');\n })\n // Display result\n .then($scope.updateView)\n .catch(function(err){\n UIUtils.loading.hide(10);\n if (err && err.ucode == 404) {\n $scope.updateView([]);\n $scope.existing = false;\n }\n else {\n UIUtils.onError('PROFILE.ERROR.LOAD_PROFILE_FAILED')(err);\n }\n });\n };\n\n $scope.updateView = function(results) {\n if (results) {\n $scope.search.results = results;\n }\n\n if ($scope.search.results && $scope.search.results.length) {\n $scope.motion.show();\n }\n $scope.search.loading = false;\n };\n\n $scope.addSubscription = function() {\n var type;\n $scope.showCategoryModal()\n .then(function(cat) {\n if (!cat) return;\n type = cat.id;\n // get subscription parameters\n if (type === 'email') {\n return $scope.showEmailModal();\n }\n else {\n UIUtils.alert.notImplemented();\n }\n })\n .then(function(record) {\n if (!record) return;\n UIUtils.loading.show();\n esSubscription.record.add(record, {wallet: wallet})\n .then($scope.addToUI)\n .then(function() {\n wallet.data.subscriptions = wallet.data.subscriptions || {count: 0};\n wallet.data.subscriptions.count++;\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(UIUtils.onError('SUBSCRIPTION.ERROR.ADD_SUBSCRIPTION_FAILED'));\n });\n };\n\n $scope.editSubscription = function(record) {\n\n // get subscription parameters\n var promise;\n var oldRecord = angular.copy(record);\n if (record.type === 'email') {\n promise = $scope.showEmailModal(record);\n }\n if (!promise) return;\n return promise\n .then(function(res) {\n if (!res) return;\n UIUtils.loading.show();\n record.id = oldRecord.id;\n return esSubscription.record.update(record, wallet)\n .then(function() {\n // If recipient change, update in results\n if (oldRecord.type !== record.type ||\n oldRecord.recipient !== record.recipient) {\n $scope.removeFromUI(oldRecord);\n return $scope.addToUI(record);\n }\n })\n .then(function() {\n UIUtils.loading.hide();\n $scope.updateView();\n })\n .catch(UIUtils.onError('SUBSCRIPTION.ERROR.UPDATE_SUBSCRIPTION_FAILED'));\n });\n };\n\n $scope.deleteSubscription = function(record, confirm) {\n if (!record || !record.id) return;\n\n if (!confirm) {\n return UIUtils.alert.confirm('SUBSCRIPTION.CONFIRM.DELETE_SUBSCRIPTION')\n .then(function(confirm) {\n if (confirm) return $scope.deleteSubscription(record, confirm);\n });\n }\n\n UIUtils.loading.show();\n esSubscription.record.remove(record.id, {wallet: wallet})\n .then(function() {\n wallet.data.subscriptions = wallet.data.subscriptions || {count: 1};\n wallet.data.subscriptions.count--;\n $scope.removeFromUI(record);\n UIUtils.loading.hide();\n })\n .catch(UIUtils.onError('SUBSCRIPTION.ERROR.DELETE_SUBSCRIPTION_FAILED'));\n };\n\n $scope.removeFromUI = function(record) {\n var subscriptions = _.findWhere($scope.search.results, {type: record.type, recipient: record.recipient});\n var index = _.findIndex(subscriptions.items, record);\n if (index >= 0) {\n subscriptions.items.splice(index, 1);\n }\n if (!subscriptions.items.length) {\n index = _.findIndex($scope.search.results, subscriptions);\n $scope.search.results.splice(index, 1);\n }\n };\n\n $scope.addToUI = function(record) {\n $scope.search.results = $scope.search.results || [];\n var subscriptions = _.findWhere($scope.search.results,\n {type: record.type, recipient: record.recipient});\n\n if (!subscriptions) {\n subscriptions = {type: record.type, recipient: record.recipient, items: []};\n return csWot.extendAll([subscriptions], 'recipient')\n .then(function(){\n subscriptions.items.push(record);\n $scope.search.results.push(subscriptions);\n return record;\n });\n }\n\n subscriptions.items.push(record);\n return $q.when(record);\n };\n\n /* -- modals -- */\n\n $scope.showCategoryModal = function() {\n // load categories\n return esSubscription.category.all()\n .then(function(categories){\n return ModalUtils.show('plugins/es/templates/common/modal_category.html', 'ESCategoryModalCtrl as ctrl',\n {categories : categories},\n {focusFirstInput: true}\n );\n })\n .then(function(cat){\n if (cat && cat.parent) {\n return cat;\n }\n });\n };\n\n $scope.showEmailModal = function(parameters) {\n return ModalUtils.show('plugins/es/templates/subscription/modal_email.html','ModalEmailSubscriptionsCtrl',\n parameters, {focusFirstInput: true});\n };\n}\n\n\nfunction ModalEmailSubscriptionsController($scope, Modals, csSettings, esHttp, csWot, esModals, parameters) {\n 'ngInject';\n\n $scope.frequencies = [\n {id: \"daily\", label: \"daily\"},\n {id: \"weekly\", label: \"weekly\"}\n ];\n $scope.formData = parameters || {};\n $scope.formData.content = $scope.formData.content || {};\n $scope.formData.content.frequency = $scope.formData.content.frequency || $scope.frequencies[0].id; // set to first value\n $scope.recipient = {};\n\n $scope.$on('modal.shown', function() {\n // Load recipient (uid, name, avatar...)\n if ($scope.formData.recipient) {\n $scope.recipient = {pubkey: $scope.formData.recipient};\n return csWot.extendAll([$scope.recipient]);\n }\n else {\n return esHttp.network.peering.self()\n .then(function(res){\n if (!res) return;\n $scope.formData.recipient = res.pubkey;\n $scope.recipient = {pubkey: $scope.formData.recipient};\n return csWot.extendAll([$scope.recipient]);\n });\n }\n });\n\n // Submit\n $scope.doSubmit = function() {\n $scope.form.$submitted = true;\n if (!$scope.form.$valid || !$scope.formData.content.email || !$scope.formData.content.frequency) return;\n\n var record = {\n type: 'email',\n recipient: $scope.formData.recipient,\n content: {\n email: $scope.formData.content.email,\n locale: csSettings.data.locale.id,\n frequency: $scope.formData.content.frequency\n }\n };\n $scope.closeModal(record);\n };\n\n $scope.cancel = function() {\n $scope.closeModal();\n };\n\n if (!!$scope.subscriptionForm) {\n $scope.subscriptionForm.$setPristine();\n }\n\n $scope.showNetworkLookup = function() {\n return esModals.showNetworkLookup({\n enableFilter: true,\n endpointFilter: esHttp.constants.ES_SUBSCRIPTION_API\n })\n .then(function (peer) {\n if (peer) {\n $scope.recipient = peer;\n $scope.formData.recipient = peer.pubkey;\n }\n });\n\n };\n}\n","\nESDocumentLookupController.$inject = ['$scope', '$ionicPopover', '$location', '$timeout', 'csSettings', 'csWallet', 'UIUtils', 'esHttp', 'esDocument'];\nESLastDocumentsController.$inject = ['$scope', '$controller', '$timeout', '$state', '$filter'];angular.module('cesium.es.document.controllers', ['cesium.es.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.document_search', {\n url: \"/data/search/:index/:type?q\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/es/templates/document/lookup.html\",\n controller: 'ESDocumentLookupCtrl'\n }\n },\n data: {\n silentLocationChange: true\n }\n })\n ;\n }])\n\n .controller('ESDocumentLookupCtrl', ESDocumentLookupController)\n\n .controller('ESLastDocumentsCtrl', ESLastDocumentsController)\n;\n\nfunction ESDocumentLookupController($scope, $ionicPopover, $location, $timeout,\n csSettings, csWallet, UIUtils, esHttp, esDocument) {\n 'ngInject';\n\n $scope.search = $scope.search || {\n loading: true,\n hasMore: false,\n text: undefined,\n index: 'invitation',\n type: 'certification',\n results: [],\n sort: 'time',\n asc: false,\n loadingMore: false\n };\n $scope.entered = false;\n $scope.searchTextId = 'documentSearchText';\n $scope.ionItemClass = 'item-border-large';\n $scope.defaultSizeLimit = $scope.defaultSizeLimit || (UIUtils.screen.isSmall() ? 50 : 100);\n $scope.helptipPrefix = 'helptip-document';\n $scope.compactMode = angular.isDefined($scope.compactMode) ? $scope.compactMode : true;\n $scope._source = $scope._source || [\"issuer\", \"hash\", \"time\", \"creationTime\", \"title\", \"message\"];\n $scope.showHeaders = angular.isDefined($scope.showHeaders) ? $scope.showHeaders : true;\n\n /**\n * Enter into the view\n * @param e\n * @param state\n */\n $scope.enter = function(e, state) {\n if (!$scope.entered) {\n $scope.entered = true;\n $scope.search.index = state.stateParams && state.stateParams.index || $scope.search.index;\n $scope.search.type = state.stateParams && state.stateParams.type || $scope.search.type;\n $scope.search.text = state.stateParams && state.stateParams.q || $scope.search.text;\n $scope.search.last = !$scope.search.text;\n $scope.load();\n }\n $scope.expertMode = angular.isDefined($scope.expertMode) ? $scope.expertMode : !UIUtils.screen.isSmall() && csSettings.data.expertMode;\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.computeOptions = function(offset, size) {\n var options = {\n index: $scope.search.index,\n type: $scope.search.type,\n from: offset || 0,\n size: size || $scope.defaultSizeLimit\n };\n\n // add sort\n if ($scope.search.sort) {\n options.sort = {};\n options.sort[$scope.search.sort] = (!$scope.search.asc ? \"desc\" : \"asc\");\n }\n else { // default sort\n options.sort = {time:'desc'};\n }\n\n // Included fields\n options._source = options._source || $scope._source;\n\n return options;\n };\n\n $scope.load = function(offset, size, silent) {\n if ($scope.search.error) return;\n\n var options = $scope.computeOptions(offset, size);\n\n $scope.search.loading = !silent;\n\n var searchFn = $scope.search.last ?\n esDocument.search(options) :\n esDocument.searchText($scope.search.text||'', options);\n return searchFn\n .then(function(res) {\n if (!offset) {\n $scope.search.results = res.hits;\n $scope.search.took = res.took;\n }\n else {\n $scope.search.results = $scope.search.results.concat(res.hits);\n }\n $scope.search.total = res.total;\n\n UIUtils.loading.hide();\n $scope.search.loading = false;\n $scope.search.hasMore = res.hits && res.hits.length > 0 && res.total > $scope.search.results.length;\n\n $scope.updateView();\n })\n .catch(function(err) {\n $scope.search.results = [];\n $scope.search.loading = false;\n $scope.search.error = true;\n $scope.search.hasMore = false;\n UIUtils.onError('DOCUMENT.ERROR.LOAD_DOCUMENTS_FAILED')(err)\n .then(function() {\n $scope.search.error = false;\n });\n });\n };\n\n $scope.updateView = function() {\n if ($scope.motion && $scope.search.results && $scope.search.results.length) {\n $scope.motion.show({selector: '.list .item.item-document'});\n }\n $scope.$broadcast('$$rebind::rebind'); // notify binder\n };\n\n $scope.doSearchText = function() {\n $scope.search.last = $scope.search.text ? false : true;\n return $scope.load()\n .then(function() {\n // Update location href\n $location.search({q: $scope.search.text}).replace();\n });\n };\n\n $scope.doSearchLast = function() {\n $scope.search.last = true;\n $scope.search.text = undefined;\n return $scope.load();\n };\n\n $scope.removeAll = function() {\n $scope.hideActionsPopover();\n if (!$scope.search.results || !$scope.search.results.length) return;\n\n return UIUtils.alert.confirm('DOCUMENT.CONFIRM.REMOVE_ALL')\n .then(function(confirm) {\n if (!confirm) return;\n UIUtils.loading.show();\n return esDocument.removeAll($scope.search.results)\n .then(function() {\n $scope.search.loading = false;\n return $timeout(function() {\n UIUtils.toast.show('DOCUMENT.INFO.REMOVED'); // toast\n return $scope.load();\n }, 1000 /*waiting propagation*/);\n })\n .catch(UIUtils.onError('DOCUMENT.ERROR.REMOVE_ALL_FAILED'));\n });\n };\n\n $scope.remove = function($event, index) {\n var doc = $scope.search.results[index];\n if (!doc || $event.defaultPrevented) return;\n $event.stopPropagation();\n\n UIUtils.alert.confirm('DOCUMENT.CONFIRM.REMOVE')\n .then(function(confirm) {\n if (!confirm) return;\n return esDocument.remove(doc)\n .then(function () {\n $scope.search.results.splice(index,1); // remove from messages array\n $scope.$broadcast('$$rebind::rebind'); // notify binder\n UIUtils.toast.show('DOCUMENT.INFO.REMOVED'); // toast\n })\n .catch(UIUtils.onError('MESSAGE.ERROR.REMOVE_FAILED'));\n });\n };\n\n $scope.selectDocument = function(event, doc) {\n console.debug(\"Selected document: \", doc, esHttp);\n\n var url = esHttp.getUrl('/{0}/{1}/_search?pretty&q=_id:{2}'.format(doc.index, doc.type, doc.id));\n return $scope.openLink(event, url);\n };\n\n $scope.toggleCompactMode = function() {\n $scope.compactMode = !$scope.compactMode;\n $scope.updateView();\n\n // Workaround to re-initialized the \n if (!$scope.search.hasMore && $scope.search.results.length && $scope.search.type == 'last') {\n $timeout(function() {\n $scope.search.hasMore = true;\n }, 500);\n }\n };\n\n $scope.toggleSort = function(sort){\n if ($scope.search.sort === sort && !$scope.search.asc) {\n $scope.search.asc = undefined;\n $scope.search.sort = undefined;\n }\n else {\n $scope.search.asc = ($scope.search.sort === sort) ? !$scope.search.asc : true;\n $scope.search.sort = sort;\n }\n $scope.load();\n };\n\n $scope.showMore = function() {\n if ($scope.search.loading) return;\n $scope.search.loadingMore = true;\n $scope.load(\n $scope.search.results.length, // from\n $scope.defaultSizeLimit,\n true/*silent*/)\n .then(function() {\n $scope.search.loadingMore = false;\n $scope.$broadcast('scroll.infiniteScrollComplete');\n });\n };\n\n $scope.startListenChanges = function() {\n var now = Date.now();\n var source = $scope.search.index + '/' + $scope.search.type;\n var wsChanges = esHttp.websocket.changes(source);\n return wsChanges.open()\n .then(function(){\n console.debug(\"[ES] [document] Websocket opened in {0} ms\".format(Date.now()- now));\n wsChanges.on(function(change) {\n if (!$scope.search.last || !change) return; // ignore\n esDocument.fromHit(change)\n .then(function(doc) {\n if (change._operation === 'DELETE') {\n $scope.onDeleteDocument(doc);\n }\n else {\n $scope.onNewDocument(doc);\n }\n });\n });\n });\n };\n\n $scope.onNewDocument = function(document) {\n if (!$scope.search.last || $scope.search.loading) return; // skip\n console.debug(\"[ES] [document] Detected new document: \", document);\n var index = _.findIndex($scope.search.results, {id: document.id, index: document.index, type: document.type});\n if (index < 0) {\n $scope.search.total++;\n $scope.search.results.splice(0, 0, document);\n }\n else {\n document.updated = true;\n $timeout(function() {\n document.updated = false;\n }, 2000);\n $scope.search.results.splice(index, 1, document);\n }\n $scope.updateView();\n };\n\n $scope.onDeleteDocument = function(document) {\n if (!$scope.search.last || $scope.search.loading) return; // skip\n $timeout(function() {\n var index = _.findIndex($scope.search.results, {id: document.id, index: document.index, type: document.type});\n if (index < 0) return; // skip if not found\n console.debug(\"[ES] [document] Detected document deletion: \", document);\n $scope.search.results.splice(index, 1);\n $scope.search.total--;\n $scope.updateView();\n }, 750);\n };\n\n /* -- Modals -- */\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/es/templates/document/lookup_popover_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n /* -- watch events -- */\n\n $scope.resetData = function() {\n if ($scope.search.loading) return;\n console.debug(\"[ES] [document] Resetting data (settings or account may have changed)\");\n // Reset all data\n $scope.search.results = [];\n $scope.search.loading = false;\n $scope.search.total = undefined;\n $scope.search.loadingMore = false;\n $scope.entered = false;\n delete $scope.search.limit;\n };\n\n csWallet.api.data.on.unauth($scope, $scope.resetData);\n\n // for DEV only\n /*$timeout(function() {\n // launch default action fo DEV\n }, 900);\n */\n}\n\n\nfunction ESLastDocumentsController($scope, $controller, $timeout, $state, $filter) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('ESDocumentLookupCtrl', {$scope: $scope}));\n\n $scope.search = {\n loading: true,\n hasMore: true,\n text: undefined,\n index: 'user,page,group', type: 'profile,record,comment',\n results: undefined,\n sort: 'time',\n asc: false\n };\n $scope.expertMode = false;\n $scope.defaultSizeLimit = 20;\n $scope._source = [\"issuer\", \"hash\", \"time\", \"creationTime\", \"title\", \"avatar._content_type\", \"city\", \"message\", \"record\", \"type\"];\n $scope.showHeaders = false;\n\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n $scope.selectDocument = function(event, doc) {\n if (!doc || !event || event.defaultPrevented) return;\n event.stopPropagation();\n\n if (doc.index === \"user\" && doc.type === \"profile\") {\n $state.go('app.wot_identity', {pubkey: doc.pubkey, uid: doc.name});\n }\n else if (doc.index === \"page\" && doc.type === \"record\") {\n $state.go('app.view_page', {title: doc.title, id: doc.id});\n }\n else if (doc.index === \"page\" && doc.type === \"comment\") {\n var anchor = $filter('formatHash')(doc.id);\n $state.go('app.view_page_anchor', {title: doc.title, id: doc.record, anchor: anchor});\n }\n else if (doc.index === \"group\" && doc.type === \"record\") {\n $state.go('app.view_group', {title: doc.title, id: doc.id});\n }\n else if (doc.index === \"group\" && doc.type === \"comment\") {\n var anchor = $filter('formatHash')(doc.id);\n $state.go('app.view_group_anchor', {title: doc.title, id: doc.record, anchor: anchor});\n }\n else {\n console.warn(\"Click on this kind of document not implement yet!\", doc)\n }\n };\n\n // Override parent function computeOptions\n var inheritedComputeOptions = $scope.computeOptions;\n $scope.computeOptions = function(offset, size){\n // Cal inherited function\n var options = inheritedComputeOptions(offset, size);\n\n if (!options.sort || options.sort.time) {\n var side = options.sort && options.sort.time || side;\n options.sort = [\n //{'creationTime': side},\n {'time': side}\n ];\n }\n\n options._source = options._source || $scope._source;\n options.getTimeFunction = function(doc) {\n doc.time = doc.creationTime || doc.time;\n return doc.time;\n };\n return options;\n };\n\n // Listen for changes\n $timeout(function() {\n $scope.startListenChanges();\n }, 1000);\n}\n","\nESLikesController.$inject = ['$scope', '$q', '$timeout', '$translate', '$ionicPopup', 'UIUtils', 'Modals', 'csWallet', 'esHttp', 'esLike'];angular.module('cesium.es.like.controllers', ['ngResource', 'cesium.es.services'])\n\n .controller('ESLikesCtrl', ESLikesController)\n;\n\nfunction ESLikesController($scope, $q, $timeout, $translate, $ionicPopup, UIUtils, Modals, csWallet, esHttp, esLike) {\n 'ngInject';\n\n $scope.entered = false;\n $scope.abuseData = {};\n $scope.abuseLevels = [\n {value: 1, label: 'LOW'},\n {value: 2, label: 'LOW'}\n ];\n $scope.staring = false;\n $scope.options = $scope.options || {};\n $scope.options.like = $scope.options.like || {\n kinds: esLike.constants.KINDS,\n index: undefined,\n type: undefined,\n id: undefined\n };\n\n $scope.$on('$recordView.enter', function(e, state) {\n // First enter\n if (!$scope.entered) {\n $scope.entered = false;\n // Nothing to do: main controller will trigger '$recordView.load' event\n }\n // second call (e.g. if cache)\n else if ($scope.id) {\n $scope.loadLikes($scope.id);\n }\n });\n\n $scope.$on('$recordView.load', function(event, id) {\n $scope.id = id || $scope.id;\n if ($scope.id) {\n $scope.loadLikes($scope.id);\n }\n });\n\n // Init Like service\n $scope.initLikes = function() {\n if (!$scope.likeData) {\n throw new Error(\"Missing 'likeData' in scope. Cannot load likes counter\");\n }\n if (!$scope.options.like.service) {\n if (!$scope.options.like.index || !$scope.options.like.type) {\n throw new Error(\"Missing 'options.like.index' or 'options.like.type' in scope. Cannot load likes counter\");\n }\n $scope.options.like.service = esLike.instance($scope.options.like.index, $scope.options.like.type);\n }\n if (!$scope.options.like.kinds) {\n // Get scope's kinds (e.g. defined in the parent scope)\n $scope.options.like.kinds = _.filter(esLike.constants.KINDS, function (kind) {\n var key = kind.toLowerCase() + 's';\n return angular.isDefined($scope.likeData[key]);\n });\n }\n };\n\n $scope.loadLikes = function(id) {\n if (!$scope.likeData || $scope.likeData.loading) return;// Skip\n\n id = id || $scope.likeData.id;\n $scope.initLikes();\n\n var kinds = $scope.options.like.kinds || [];\n if (!kinds.length) return; // skip\n\n $scope.likeData.loading = true;\n var now = Date.now();\n console.debug(\"[ES] Loading counter of {0}... ({1})\".format(id.substring(0,8), kinds));\n\n var issuers = csWallet.isLogin() ? csWallet.pubkeys() : undefined;\n\n return $q.all(_.map(kinds, function(kind) {\n var key = kind.toLowerCase() + 's';\n return $scope.options.like.service.count(id, {issuers: issuers, kind: kind})\n .then(function (res) {\n // Store result to scope\n if ($scope.likeData[key]) {\n angular.merge($scope.likeData[key], res);\n }\n });\n }))\n .then(function () {\n $scope.likeData.id = id;\n console.debug(\"[ES] Loading counter of {0} [OK] in {1}ms\".format(id.substring(0,8), Date.now()-now));\n\n if (_.contains(kinds, 'VIEW') && !$scope.canEdit) {\n $scope.markAsView();\n }\n\n // Publish to parent scope (to be able to use it in action popover's buttons)\n if ($scope.$parent) {\n console.debug(\"[ES] [likes] Adding data and functions to parent scope\");\n $scope.$parent.toggleLike = $scope.toggleLike;\n $scope.$parent.reportAbuse = $scope.reportAbuse;\n }\n\n $scope.likeData.loading = false;\n })\n .catch(function (err) {\n console.error(err && err.message || err);\n $scope.likeData.loading = false;\n });\n };\n\n $scope.toggleLike = function(event, options) {\n $scope.initLikes();\n if (!$scope.likeData.id) throw new Error(\"Missing 'likeData.id' in scope. Cannot apply toggle\");\n\n options = options || {};\n options.kind = options.kind && options.kind.toUpperCase() || 'LIKE';\n var key = options.kind.toLowerCase() + 's';\n\n $scope.likeData[key] = $scope.likeData[key] || {};\n\n // Avoid too many call\n if ($scope.likeData[key].loading === true || $scope.likeData.loading) {\n event.preventDefault();\n return $q.reject();\n }\n\n // Select the wallet, if many\n if (!options.pubkey) {\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n if (!wallet) throw 'CANCELLED';\n options.pubkey = wallet.data.pubkey;\n return $scope.toggleLike(event, options); // Loop\n });\n }\n\n var wallet = csWallet.getByPubkey(options.pubkey);\n if (!wallet) return;\n\n $scope.likeData[key].loading = true;\n return wallet.auth({minData: true})\n .then(function(walletData) {\n if (!walletData) {\n UIUtils.loading.hide();\n return;\n }\n\n // Check if member account\n if (!walletData.isMember) {\n // TODO: enable this\n //throw {message: \"ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION\"};\n }\n\n // Apply like\n options.id = $scope.likeData.id;\n return $scope.options.like.service.toggle($scope.likeData.id, options);\n })\n .then(function(delta) {\n UIUtils.loading.hide();\n if (delta !== 0) {\n $scope.likeData[key].total = ($scope.likeData[key].total || 0) + delta;\n $scope.likeData[key].wasHitByPubkey = $scope.likeData[key].wasHitByPubkey || {};\n $scope.likeData[key].wasHitByPubkey[options.pubkey] = delta > 0;\n $scope.likeData[key].wasHitCount += delta;\n }\n $timeout(function() {\n $scope.likeData[key].loading = false;\n $scope.$broadcast('$$rebind::like'); // notify binder\n }, 1000);\n })\n .catch(function(err) {\n $scope.likeData[key].loading = false;\n if (err === 'CANCELLED') return; // User cancelled\n console.error(err);\n UIUtils.onError('LIKE.ERROR.FAILED_TOGGLE_LIKE')(err);\n event.preventDefault();\n });\n };\n\n $scope.setAbuseForm = function(form) {\n $scope.abuseForm = form;\n };\n\n $scope.showAbuseCommentPopover = function(event) {\n return $translate(['COMMON.REPORT_ABUSE.TITLE', 'COMMON.REPORT_ABUSE.SUB_TITLE','COMMON.BTN_SEND', 'COMMON.BTN_CANCEL'])\n .then(function(translations) {\n\n UIUtils.loading.hide();\n\n return $ionicPopup.show({\n templateUrl: 'plugins/es/templates/common/popup_report_abuse.html',\n title: translations['COMMON.REPORT_ABUSE.TITLE'],\n subTitle: translations['COMMON.REPORT_ABUSE.SUB_TITLE'],\n cssClass: 'popup-report-abuse',\n scope: $scope,\n buttons: [\n {\n text: translations['COMMON.BTN_CANCEL'],\n type: 'button-stable button-clear gray'\n },\n {\n text: translations['COMMON.BTN_SEND'],\n type: 'button button-positive ink',\n onTap: function(e) {\n $scope.abuseForm.$submitted=true;\n if(!$scope.abuseForm.$valid || !$scope.abuseData.comment) {\n //don't allow the user to close unless he enters a uid\n e.preventDefault();\n } else {\n return $scope.abuseData;\n }\n }\n }\n ]\n });\n })\n .then(function(res) {\n $scope.abuseData = {};\n if (!res || !res.comment) { // user cancel\n UIUtils.loading.hide();\n return undefined;\n }\n return res;\n });\n };\n\n $scope.reportAbuse = function(event, options) {\n if (!$scope.likeData || !$scope.likeData.abuses || $scope.likeData.abuses.wasHitCount) return; // skip\n if ($scope.likeData.abuses.wasHitCount) return; // already report\n\n options = options || {};\n\n // Select the wallet, if many\n if (!options.pubkey) {\n return (csWallet.children.count() ? Modals.showSelectWallet({displayBalance: false}) : $q.when(csWallet))\n .then(function(wallet) {\n if (!wallet) throw 'CANCELLED';\n options.pubkey = wallet.data.pubkey;\n return $scope.reportAbuse(event, options); // Loop\n });\n }\n\n var wallet = csWallet.getByPubkey(options.pubkey);\n\n // Check if member account\n if (!wallet || !wallet.isMember()) {\n UIUtils.alert.info(\"ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION\");\n return;\n }\n\n if (!options.comment) {\n // Ask a comment\n return $scope.showAbuseCommentPopover(event)\n // Loop, with options.comment filled\n .then(function(res) {\n if (!res || !res.comment) return; // Empty comment: skip\n options.comment = res.comment;\n options.level = res.level || (res.delete && 5) || undefined;\n return $scope.reportAbuse(event, options) // Loop, with the comment\n });\n }\n\n // Send abuse report\n options.kind = 'ABUSE';\n return $scope.toggleLike(event, options)\n .then(function() {\n UIUtils.toast.show('COMMON.REPORT_ABUSE.CONFIRM.SENT')\n })\n };\n\n csWallet.api.data.on.reset($scope, function() {\n _.forEach($scope.options.like.kinds||[], function(kind) {\n var key = kind.toLowerCase() + 's';\n if ($scope.likeData[key]) {\n $scope.likeData[key].wasHitByPubkey = {};\n $scope.likeData[key].wasHitCount = 0;\n }\n })\n $scope.$broadcast('$$rebind::like'); // notify binder\n }, this);\n\n}\n","\nGpCurrencyAbstractController.$inject = ['$scope', '$filter', '$ionicPopover', '$ionicHistory', '$state', 'csSettings', 'csCurrency', 'esHttp', 'UIUtils'];\nangular.module('cesium.graph.common.controllers', ['cesium.services'])\n\n .controller('GpCurrencyAbstractCtrl', GpCurrencyAbstractController)\n;\n\nfunction GpCurrencyAbstractController($scope, $filter, $ionicPopover, $ionicHistory, $state, csSettings, csCurrency, esHttp, UIUtils) {\n 'ngInject';\n\n $scope.loading = true;\n $scope.formData = $scope.formData || {\n useRelative: csSettings.data.useRelative,\n timePct: 100,\n rangeDuration: 'day',\n firstBlockTime: 0,\n scale: 'linear',\n hide: [],\n beginAtZero: true\n };\n $scope.formData.useRelative = false; /*angular.isDefined($scope.formData.useRelative) ?\n $scope.formData.useRelative : csSettings.data.useRelative;*/\n $scope.scale = 'linear';\n $scope.height = undefined;\n $scope.width = undefined;\n $scope.maintainAspectRatio = true;\n $scope.times = [];\n\n function _truncDate(time) {\n return moment.unix(time).utc().startOf($scope.formData.rangeDuration).unix();\n }\n\n $scope.enter = function (e, state) {\n if ($scope.loading) {\n\n if (state && state.stateParams) {\n // remember state, to be able to refresh location\n $scope.stateName = state && state.stateName;\n $scope.stateParams = angular.copy(state && state.stateParams||{});\n\n if (!$scope.formData.currency && state && state.stateParams && state.stateParams.currency) { // Currency parameter\n $scope.formData.currency = state.stateParams.currency;\n }\n if (state.stateParams.t) {\n $scope.formData.timePct = state.stateParams.t;\n }\n else if (state.stateParams.timePct) {\n $scope.formData.timePct = state.stateParams.timePct;\n }\n if (state.stateParams.stepUnit) {\n $scope.formData.rangeDuration = state.stateParams.stepUnit;\n }\n if (state.stateParams.scale) {\n $scope.formData.scale = state.stateParams.scale;\n }\n // Allow to hide some dataset\n if (state.stateParams.hide) {\n $scope.formData.hide = state.stateParams.hide.split(',').reduce(function(res, index){\n return res.concat(parseInt(index));\n }, []);\n }\n }\n\n // Should be override by subclasses\n $scope.init(e, state);\n\n // Make sure there is currency, or load it not\n if (!$scope.formData.currency) {\n return csCurrency.get()\n .then(function (currency) {\n $scope.formData.currency = currency ? currency.name : null;\n $scope.formData.firstBlockTime = currency ? _truncDate(currency.firstBlockTime) : 0;\n if (!$scope.formData.firstBlockTime){\n console.warn('[graph] currency.firstBlockTime not loaded ! Should have been loaded by currrency service!');\n }\n $scope.formData.currencyAge = _truncDate(moment().utc().unix()) - $scope.formData.firstBlockTime;\n\n return $scope.enter(e, state);\n });\n }\n\n $scope.load() // Should be override by subclasses\n .then(function () {\n // Update scale\n $scope.setScale($scope.formData.scale);\n // Hide some dataset by index (read from state params)\n $scope.updateHiddenDataset();\n\n $scope.loading = false;\n });\n }\n };\n $scope.$on('$csExtension.enter', $scope.enter);\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n $scope.updateLocation = function() {\n if (!$scope.stateName) return;\n\n $ionicHistory.nextViewOptions({\n disableAnimate: true,\n disableBack: true,\n historyRoot: true\n });\n\n $scope.stateParams = $scope.stateParams || {};\n $scope.stateParams.t = ($scope.formData.timePct >= 0 && $scope.formData.timePct < 100) ? $scope.formData.timePct : undefined;\n $scope.stateParams.stepUnit = $scope.formData.rangeDuration != 'day' ? $scope.formData.rangeDuration : undefined;\n $scope.stateParams.hide = $scope.formData.hide && $scope.formData.hide.length ? $scope.formData.hide.join(',') : undefined;\n $scope.stateParams.scale = $scope.formData.scale != 'linear' ?$scope.formData.scale : undefined;\n\n $state.go($scope.stateName, $scope.stateParams, {\n reload: false,\n inherit: true,\n notify: false}\n );\n };\n\n // Allow to fixe size, form a template (e.g. in a 'ng-init' tag)\n $scope.setSize = function(height, width, maintainAspectRatio) {\n $scope.height = height;\n $scope.width = width;\n $scope.maintainAspectRatio = angular.isDefined(maintainAspectRatio) ? maintainAspectRatio : $scope.maintainAspectRatio;\n };\n\n // When parent view execute a refresh action\n $scope.$on('csView.action.refresh', function(event, context) {\n if (!context || context == 'currency') {\n return $scope.load();\n }\n });\n\n $scope.init = function(e, state) {\n // Should be override by subclasses\n };\n\n $scope.load = function() {\n // Should be override by subclasses\n };\n\n $scope.toggleScale = function() {\n $scope.setScale($scope.formData.scale === 'linear' ? 'logarithmic' : 'linear');\n $scope.updateLocation();\n };\n\n $scope.setScale = function(scale) {\n $scope.hideActionsPopover();\n $scope.formData.scale = scale;\n\n if (!$scope.options || !$scope.options.scales || !$scope.options.scales.yAxes) return;\n\n var format = $filter('formatInteger');\n\n _.forEach($scope.options.scales.yAxes, function(yAxe, index) {\n yAxe.type = scale;\n yAxe.ticks = yAxe.ticks || {};\n if (scale == 'linear') {\n yAxe.ticks.beginAtZero = angular.isDefined($scope.formData.beginAtZero) ? $scope.formData.beginAtZero : true;\n delete yAxe.ticks.min;\n yAxe.ticks.callback = function(value) {\n return format(value);\n };\n }\n else {\n //yAxe.ticks.min = 0;\n delete yAxe.ticks.beginAtZero;\n delete yAxe.ticks.callback;\n yAxe.ticks.callback = function(value, index) {\n if (!value) return;\n if (Math.log10(value)%1 === 0 || Math.log10(value/3)%1 === 0) {\n return format(value);\n }\n return '';\n };\n }\n });\n };\n\n $scope.setRangeDuration = function(rangeDuration) {\n $scope.hideActionsPopover();\n if ($scope.formData && rangeDuration == $scope.formData.rangeDuration) return;\n\n $scope.formData.rangeDuration = rangeDuration;\n\n // Restore default values\n delete $scope.formData.startTime;\n delete $scope.formData.endTime;\n delete $scope.formData.rangeDurationSec;\n //$scope.formData.timePct = 100;\n\n // Reload data\n $scope.load();\n // Update location\n $scope.updateLocation();\n };\n\n $scope.updateHiddenDataset = function(datasetOverride) {\n datasetOverride = datasetOverride || $scope.datasetOverride || {};\n\n _.forEach($scope.formData.hide||[], function(index) {\n if (!datasetOverride[index]) return; // skip invalid index\n\n // Hide the dataset (stroke the legend)\n datasetOverride[index].hidden = true;\n\n // If this dataset has an yAxis, hide it (if not used elsewhere)\n var yAxisID = datasetOverride[index].yAxisID;\n var yAxe = yAxisID && $scope.options && $scope.options.scales && _.findWhere($scope.options.scales.yAxes||[], {id: yAxisID});\n if (yAxisID && yAxe) {\n var yAxisDatasetCount = _.filter(datasetOverride, function(dataset) {\n return dataset.yAxisID === yAxisID;\n }).length;\n if (yAxisDatasetCount == 1) {\n yAxe.display = false;\n }\n }\n\n });\n };\n\n $scope.onLegendClick = function(e, legendItem) {\n var index = legendItem.datasetIndex;\n var ci = this.chart;\n var meta = ci.getDatasetMeta(index);\n\n // Hide/show the dataset\n meta.hidden = meta.hidden === null? !ci.data.datasets[index].hidden : null;\n\n // Update yAxis display (if used by only ONE dataset)\n if (ci.config && ci.config.data && ci.config.data.datasets) {\n var yAxisDatasetCount = _.filter(ci.config.data.datasets, function(dataset) {\n return dataset.yAxisID && dataset.yAxisID === meta.yAxisID;\n }).length;\n if (yAxisDatasetCount === 1) {\n ci.scales[meta.yAxisID].options.display = !(meta.hidden === true);\n }\n }\n\n // We hid a dataset ... rerender the chart\n ci.update();\n\n // Update window location\n $scope.formData.hide = $scope.formData.hide||[];\n $scope.formData.hide = meta.hidden ?\n _.union($scope.formData.hide, [index]) :\n _.difference($scope.formData.hide, [index]);\n $scope.updateLocation();\n };\n\n $scope.goPreviousRange = function() {\n if ($scope.loadingRange) return;\n $scope.loadingRange = true;\n\n $scope.formData.startTime -= $scope.times.length * $scope.formData.rangeDurationSec;\n if ($scope.formData.startTime < $scope.formData.firstBlockTime) {\n $scope.formData.startTime = $scope.formData.firstBlockTime;\n }\n $scope.formData.endTime = $scope.formData.startTime + $scope.times.length * $scope.formData.rangeDurationSec;\n\n // Reload data\n $scope.load().then(function(){\n // Update location\n $scope.updateLocation();\n\n $scope.loadingRange = false;\n });\n };\n\n $scope.goNextRange = function() {\n if ($scope.loadingRange) return;\n $scope.loadingRange = true;\n $scope.formData.startTime += $scope.times.length * $scope.formData.rangeDurationSec;\n if ($scope.formData.startTime > $scope.formData.firstBlockTime + $scope.formData.currencyAge - $scope.formData.timeWindow) {\n $scope.formData.startTime = $scope.formData.firstBlockTime + $scope.formData.currencyAge - $scope.formData.timeWindow;\n }\n $scope.formData.endTime = $scope.formData.startTime + $scope.times.length * $scope.formData.rangeDurationSec;\n\n // Reload data\n $scope.load().then(function(){\n // Update location\n $scope.updateLocation();\n\n $scope.loadingRange = false;\n });\n };\n\n $scope.onRangeChanged = function() {\n if ($scope.loadingRange) return;\n $scope.loadingRange = true;\n\n $scope.formData.startTime = $scope.formData.firstBlockTime + (parseFloat($scope.formData.timePct) / 100) * ($scope.formData.currencyAge - $scope.formData.timeWindow) ;\n $scope.formData.endTime = $scope.formData.startTime + $scope.times.length * $scope.formData.rangeDurationSec;\n\n // Reload data\n $scope.load().then(function(){\n // Update location\n $scope.updateLocation();\n\n $scope.loadingRange = false;\n });\n };\n\n $scope.updateRange = function(startTime, endTime, updateTimePct) {\n updateTimePct = angular.isDefined(updateTimePct) ? updateTimePct : true;\n\n $scope.formData.startTime = startTime;\n $scope.formData.endTime = endTime;\n $scope.formData.timeWindow = $scope.formData.timeWindow || $scope.formData.endTime - $scope.formData.startTime;\n $scope.formData.rangeDurationSec = $scope.formData.rangeDurationSec || $scope.formData.timeWindow / ($scope.times.length-1);\n\n if (updateTimePct) {\n $scope.formData.timePct = Math.ceil(($scope.formData.startTime - $scope.formData.firstBlockTime) * 100 /\n ($scope.formData.currencyAge - $scope.formData.timeWindow));\n }\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/graph/templates/common/popover_range_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n}\n","\nGpBlockchainTxCountController.$inject = ['$scope', '$controller', '$q', '$state', '$filter', '$translate', 'gpData', 'gpColor'];\nGpBlockchainIssuersController.$inject = ['$scope', '$controller', '$q', '$state', '$translate', 'gpColor', 'gpData'];\nangular.module('cesium.graph.blockchain.controllers', ['chart.js', 'cesium.services', 'cesium.graph.services'])\n\n .config(['$stateProvider', function($stateProvider) {\n 'ngInject';\n\n $stateProvider\n\n .state('app.blockchain_stats', {\n url: \"/blockchain/stats?currency&stepUnit&t&hide&scale\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/blockchain/view_stats.html\"\n }\n }\n })\n\n .state('app.currency_blockchain_stats', {\n url: \"/:currency/blockchain/stats\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/blockchain/view_stats.html\"\n }\n }\n })\n ;\n }])\n\n .controller('GpBlockchainTxCountCtrl', GpBlockchainTxCountController)\n .controller('GpBlockchainIssuersCtrl', GpBlockchainIssuersController)\n;\n\n\nfunction GpBlockchainTxCountController($scope, $controller, $q, $state, $filter, $translate, gpData, gpColor) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.displayRightAxis = true;\n\n $scope.init = function(e, state) {\n if (state && state.stateParams) {\n\n // get the pubkey\n if (!$scope.formData.issuer && state && state.stateParams && state.stateParams.pubkey) { // Currency parameter\n $scope.formData.issuer = state.stateParams.pubkey;\n }\n }\n };\n\n $scope.load = function(updateTimePct) {\n\n var formData = $scope.formData;\n\n return $q.all([\n\n $translate($scope.formData.issuer?\n 'GRAPH.BLOCKCHAIN.TX_AMOUNT_PUBKEY_TITLE':\n 'GRAPH.BLOCKCHAIN.TX_AMOUNT_TITLE', formData),\n\n // translate i18n keys\n $translate(['GRAPH.BLOCKCHAIN.TX_AMOUNT_LABEL',\n 'GRAPH.BLOCKCHAIN.TX_COUNT_LABEL',\n 'GRAPH.BLOCKCHAIN.TX_AVG_BY_BLOCK',\n 'COMMON.DATE_PATTERN',\n 'COMMON.DATE_SHORT_PATTERN',\n 'COMMON.DATE_MONTH_YEAR_PATTERN']),\n\n // get data\n gpData.blockchain.txCount($scope.formData.currency, formData)\n ])\n .then(function(result) {\n\n var title = result[0];\n\n var translations = result[1];\n var datePatterns = {\n hour: translations['COMMON.DATE_PATTERN'],\n day: translations['COMMON.DATE_SHORT_PATTERN'],\n month: translations['COMMON.DATE_MONTH_YEAR_PATTERN']\n };\n\n result = result[2];\n\n if (!result || !result.times) return; // no data\n $scope.times = result.times;\n\n var formatInteger = $filter('formatInteger');\n var formatAmount = $filter('formatDecimal');\n $scope.currencySymbol = $filter('currencySymbolNoHtml')($scope.formData.currency, $scope.formData.useRelative);\n\n // Data\n if ($scope.formData.rangeDuration != 'hour') {\n $scope.data = [\n result.amount,\n result.count\n ];\n }\n else {\n $scope.data = [\n result.amount,\n result.count\n ];\n }\n\n // Labels\n var labelPattern = datePatterns[$scope.formData.rangeDuration];\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(moment.unix(time).local().format(labelPattern));\n }, []);\n\n // Colors\n $scope.colors = gpColor.scale.fix(result.times.length);\n\n // Update range options with received values\n $scope.updateRange(result.times[0], result.times[result.times.length-1], updateTimePct);\n\n // Options\n $scope.options = {\n responsive: true,\n maintainAspectRatio: true,\n title: {\n display: true,\n text: title\n },\n scales: {\n yAxes: [\n {\n id: 'y-axis-amount',\n position: 'left'\n },\n {\n id: 'y-axis-count',\n display: $scope.displayRightAxis,\n position: 'right',\n gridLines: {\n drawOnChartArea: false\n }\n }\n ]\n },\n legend: {\n display: $scope.displayRightAxis,\n onClick: $scope.onLegendClick\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n if (tooltipItems.datasetIndex === 0) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + formatAmount(tooltipItems.yLabel) +\n ' ' + $scope.currencySymbol;\n }\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + tooltipItems.yLabel;\n }\n }\n }\n };\n\n // Override dataset config\n $scope.datasetOverride = [\n {\n yAxisID: 'y-axis-amount',\n type: 'bar',\n label: translations['GRAPH.BLOCKCHAIN.TX_AMOUNT_LABEL'],\n hoverBackgroundColor: gpColor.rgba.calm(0.6)\n },\n {\n yAxisID: 'y-axis-count',\n type: 'line',\n label: translations['GRAPH.BLOCKCHAIN.TX_COUNT_LABEL'],\n fill: false,\n borderColor: gpColor.rgba.gray(0.5),\n borderWidth: 2,\n backgroundColor: gpColor.rgba.gray(0.5),\n pointBackgroundColor: gpColor.rgba.gray(0.5),\n pointBorderColor: gpColor.rgba.white(),\n pointHoverBackgroundColor: gpColor.rgba.gray(1),\n pointHoverBorderColor: gpColor.rgba.translucent(),\n pointRadius: 3\n }\n ];\n });\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var from = $scope.times[item._index];\n var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();\n var query = '_exists_:transactions AND medianTime:>={0} AND medianTime:<{1}'.format(from, to);\n if ($scope.formData.issuer) {\n query += ' AND issuer:' + $scope.formData.issuer;\n }\n $state.go('app.blockchain_search', {q: query});\n };\n\n}\n\n\nfunction GpBlockchainIssuersController($scope, $controller, $q, $state, $translate, gpColor, gpData) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.load = function() {\n return $q.all([\n $translate([\n 'GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_TITLE',\n 'GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_LABEL'\n ]),\n gpData.blockchain.countByIssuer($scope.formData.currency)\n ])\n .then(function(result) {\n var translations = result[0];\n result = result[1];\n if (!result || !result.data) return;\n\n // Data\n $scope.data = result.data;\n\n // Labels\n $scope.labels = result.labels;\n\n // Data to keep (for click or label)\n $scope.blockCount = result.blockCount;\n $scope.issuers = result.issuers;\n\n // Options\n $scope.barOptions = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true,\n text: translations['GRAPH.BLOCKCHAIN.BLOCKS_ISSUERS_TITLE']\n },\n scales: {\n yAxes: [{\n type: 'linear',\n ticks: {\n beginAtZero: true\n }\n }]\n }\n };\n\n // Colors\n $scope.colors = gpColor.scale.custom(result.data.length);\n\n });\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var issuer = $scope.issuers[item._index];\n $state.go('app.wot_identity', issuer);\n };\n}\n","\nGpPeerViewExtendController.$inject = ['$scope', '$timeout', 'PluginService', 'esSettings', 'csCurrency', 'gpData'];\nangular.module('cesium.graph.network.controllers', ['chart.js', 'cesium.graph.services'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n\n PluginServiceProvider\n .extendState('app.network', {\n points: {\n 'blockchain-buttons': {\n templateUrl: \"plugins/graph/templates/network/view_network_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n\n .extendState('app.view_peer', {\n points: {\n 'general': {\n templateUrl: \"plugins/graph/templates/network/view_peer_extend.html\",\n controller: 'GpPeerViewExtendCtrl'\n }\n }\n })\n\n .extendState('app.es_network', {\n points: {\n 'documents-buttons': {\n templateUrl: \"plugins/graph/templates/network/view_es_network_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n\n .extendState('app.view_es_peer', {\n points: {\n 'general': {\n templateUrl: \"plugins/graph/templates/network/view_es_peer_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n ;\n\n $stateProvider\n .state('app.view_peer_stats', {\n url: \"/network/peer/:pubkey/stats\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/network/view_peer_stats.html\",\n controller: 'GpBlockchainTxCountCtrl'\n }\n }\n });\n }\n }])\n\n .controller('GpPeerViewExtendCtrl', GpPeerViewExtendController)\n\n;\n\nfunction GpPeerViewExtendController($scope, $timeout, PluginService, esSettings, csCurrency, gpData) {\n 'ngInject';\n\n $scope.extensionPoint = PluginService.extensions.points.current.get();\n $scope.enable = esSettings.isEnable();\n $scope.loading = true;\n $scope.node = $scope.node || {};\n\n esSettings.api.state.on.changed($scope, function(enable) {\n $scope.enable = enable;\n });\n\n /**\n * Enter into the view\n * @param e\n * @param state\n */\n $scope.enter = function(e, state) {\n\n if (!$scope.node.currency && state && state.stateParams && state.stateParams.currency) { // Currency parameter\n $scope.node.currency = state.stateParams.currency;\n }\n\n // Make sure there is currency, or load if not\n if (!$scope.node.currency) {\n return csCurrency.get()\n .then(function(currency) {\n $scope.node.currency = currency ? currency.name : null;\n return $scope.enter(e, state);\n });\n }\n\n // Make sure there is pubkey, or wait for parent load to be finished\n if (!$scope.node.pubkey) {\n return $timeout(function () {\n return $scope.enter(e, state);\n }, 500);\n }\n\n // load\n return $scope.load();\n };\n $scope.$on('$csExtension.enter', $scope.enter);\n\n $scope.load = function() {\n if (!$scope.node.currency && !$scope.node.pubkey) return;\n console.info(\"[Graph] [peer] Loading blocks count for [{0}]\".format($scope.node.pubkey.substr(0, 8)));\n\n return gpData.node.blockCount($scope.node.currency, $scope.node.pubkey)\n .then(function(count) {\n $scope.blockCount = count;\n $scope.loading = false;\n });\n };\n}\n","\nGpCurrencyViewExtendController.$inject = ['$scope', 'PluginService', 'UIUtils', 'esSettings'];\nGpCurrencyMonetaryMassController.$inject = ['$scope', '$controller', '$q', '$state', '$translate', 'UIUtils', 'gpColor', 'gpData', '$filter', 'csSettings'];\nGpCurrencyDUController.$inject = ['$scope', '$q', '$controller', '$translate', 'gpColor', 'gpData', '$filter', 'UIUtils'];\nGpCurrencyMembersCountController.$inject = ['$scope', '$controller', '$q', '$state', '$translate', 'gpColor', 'gpData', '$filter'];\nangular.module('cesium.graph.currency.controllers', ['chart.js', 'cesium.graph.services', 'cesium.graph.common.controllers'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n $stateProvider\n .state('app.currency.tab_parameters_stats', {\n url: \"/parameters/stats\",\n views: {\n 'tab-parameters': {\n templateUrl: \"plugins/graph/templates/currency/tabs/tab_parameters_stats.html\"\n }\n }\n })\n .state('app.currency.tab_wot_stats', {\n url: \"/community/stats\",\n views: {\n 'tab-wot': {\n templateUrl: \"plugins/graph/templates/currency/tabs/tab_wot_stats.html\",\n controller: 'GpCurrencyMembersCountCtrl'\n }\n }\n })\n .state('app.currency.tab_network_stats', {\n url: \"/network/stats\",\n views: {\n 'tab-network': {\n templateUrl: \"plugins/graph/templates/currency/tabs/tab_network_stats.html\"\n }\n }\n })\n .state('app.currency.tab_blocks_stats', {\n url: \"/blocks/stats\",\n views: {\n 'tab-blocks': {\n templateUrl: \"plugins/graph/templates/currency/tabs/tab_blocks_stats.html\"\n }\n }\n })\n .state('app.currency_stats_lg', {\n url: \"/currency/stats/lg?hide&scale\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/currency/view_stats_lg.html\"\n }\n }\n });\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n PluginServiceProvider\n .extendStates(['app.currency_name', 'app.currency', 'app.currency_name_lg', 'app.currency_lg'], {\n points: {\n 'parameters-actual': {\n templateUrl: \"plugins/graph/templates/currency/view_currency_extend.html\",\n controller: 'GpCurrencyViewExtendCtrl'\n },\n 'wot-actual': {\n templateUrl: \"plugins/graph/templates/currency/view_currency_extend.html\",\n controller: 'GpCurrencyViewExtendCtrl'\n },\n 'network-actual': {\n templateUrl: \"plugins/graph/templates/currency/view_currency_extend.html\",\n controller: 'GpCurrencyViewExtendCtrl'\n }\n }\n })\n .extendStates(['app.currency.tab_blocks'], {\n points: {\n 'buttons': {\n templateUrl: \"plugins/graph/templates/currency/tab_blocks_extend.html\",\n controller: 'GpCurrencyViewExtendCtrl'\n }\n }\n })\n ;\n }\n }])\n\n\n .controller('GpCurrencyViewExtendCtrl', GpCurrencyViewExtendController)\n\n .controller('GpCurrencyMonetaryMassCtrl', GpCurrencyMonetaryMassController)\n\n .controller('GpCurrencyDUCtrl', GpCurrencyDUController)\n\n .controller('GpCurrencyMembersCountCtrl', GpCurrencyMembersCountController)\n;\n\nfunction GpCurrencyViewExtendController($scope, PluginService, UIUtils, esSettings) {\n 'ngInject';\n\n $scope.extensionPoint = PluginService.extensions.points.current.get();\n $scope.enable = esSettings.isEnable();\n $scope.smallscreen = UIUtils.screen.isSmall();\n\n esSettings.api.state.on.changed($scope, function(enable) {\n $scope.enable = enable;\n });\n}\n\nfunction GpCurrencyMonetaryMassController($scope, $controller, $q, $state, $translate, UIUtils, gpColor, gpData, $filter, csSettings) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.formData.useRelative = angular.isDefined($scope.formData.useRelative) ?\n $scope.formData.useRelative :\n csSettings.data.useRelative;\n $scope.displayShareAxis = true;\n $scope.hiddenDatasets = [];\n\n $scope.init = function(e, state) {\n // nothing to do here\n };\n\n $scope.onUseRelativeChanged = function() {\n if (!$scope.loading) {\n $scope.load();\n }\n };\n $scope.$watch('formData.useRelative', $scope.onUseRelativeChanged);\n\n var truncAmount = function(value) {\n return Math.trunc(value*100)/100;\n };\n\n $scope.load = function(from, size) {\n from = from || 0;\n size = size || 10000;\n\n return $q.all([\n $translate(['GRAPH.CURRENCY.MONETARY_MASS_TITLE',\n 'GRAPH.CURRENCY.MONETARY_MASS_LABEL',\n 'GRAPH.CURRENCY.MONETARY_MASS_SHARE_LABEL']),\n gpData.blockchain.withDividend($scope.formData.currency, {\n from: from,\n size: size\n })\n ])\n .then(function(result) {\n var translations = result[0];\n result = result[1];\n if (!result || !result.times) return;\n $scope.times = result.times;\n\n // Choose a date formatter, depending on the blocks period\n var blocksPeriod = result.times[result.times.length-1] - result.times[0];\n var formatDate;\n if (blocksPeriod < 31557600/* less than 1 year */) {\n formatDate = $filter('medianDateShort');\n }\n else {\n formatDate = $filter('formatDateMonth'); //see #683\n }\n\n var formatAmount = $filter('formatDecimal');\n $scope.currencySymbol = $filter('currencySymbolNoHtml')($scope.formData.currency, $scope.formData.useRelative);\n\n // Data: relative\n var data = [];\n if($scope.formData.useRelative) {\n\n // M/N\n data.push(\n result.blocks.reduce(function(res, block) {\n return res.concat(truncAmount(block.monetaryMass / block.dividend / block.membersCount));\n }, []));\n\n // Mass\n data.push(\n result.blocks.reduce(function(res, block) {\n return res.concat(truncAmount(block.monetaryMass / block.dividend));\n }, []));\n }\n\n // Data: quantitative\n else {\n // M/N\n data.push(\n result.blocks.reduce(function(res, block) {\n return res.concat(truncAmount(block.monetaryMass / block.membersCount / 100));\n }, []));\n\n // Mass\n data.push(\n result.blocks.reduce(function(res, block) {\n return res.concat(block.monetaryMass / 100);\n }, []));\n }\n $scope.data = data;\n\n // Labels\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(formatDate(time));\n }, []);\n\n // Colors\n $scope.colors = gpColor.scale.fix(result.times.length);\n\n // Options\n $scope.options = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true,\n text: translations['GRAPH.CURRENCY.MONETARY_MASS_TITLE']\n },\n legend: {\n display: $scope.displayShareAxis,\n onClick: $scope.onLegendClick\n },\n scales: {\n yAxes: [\n {\n id: 'y-axis-mn'\n },\n {\n id: 'y-axis-mass',\n display: $scope.displayShareAxis,\n position: 'right',\n gridLines: {\n drawOnChartArea: false\n }\n },\n\n ]\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + formatAmount(tooltipItems.yLabel) +\n ' ' + $scope.currencySymbol;\n }\n }\n }\n };\n\n $scope.datasetOverride = [\n {\n yAxisID: 'y-axis-mn',\n type: 'line',\n label: translations['GRAPH.CURRENCY.MONETARY_MASS_SHARE_LABEL'],\n borderWidth: 2,\n pointRadius: 0,\n pointHitRadius: 4,\n pointHoverRadius: 3\n },\n {\n yAxisID: 'y-axis-mass',\n type: 'line',\n label: translations['GRAPH.CURRENCY.MONETARY_MASS_LABEL'],\n fill: false,\n showLine: true,\n borderColor: gpColor.rgba.energized(),\n borderWidth: 1,\n backgroundColor: gpColor.rgba.energized(),\n pointBackgroundColor: gpColor.rgba.energized(),\n pointBorderColor: gpColor.rgba.energized(),\n pointHoverBackgroundColor: gpColor.rgba.energized(),\n pointHoverBorderColor: gpColor.rgba.energized(),\n pointRadius: 0,\n pointHitRadius: 4,\n pointHoverRadius: 3\n }];\n\n $scope.setScale($scope.scale);\n\n // Keep only block number (need for click)\n $scope.blocks = result.blocks.reduce(function(res, block) {\n return res.concat(block.number);\n }, []);\n });\n\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var number = $scope.blocks[item._index];\n $state.go('app.view_block', {number: number});\n };\n\n /* -- Popover -- */\n\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/graph/templates/currency/popover_monetary_mass_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n}\n\n\nfunction GpCurrencyDUController($scope, $q, $controller, $translate, gpColor, gpData, $filter, UIUtils) {\n 'ngInject';\n\n $scope.formData = {\n scale: 'linear',\n beginAtZero: false\n };\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyMonetaryMassCtrl', {$scope: $scope}));\n\n\n $scope.load = function(from, size) {\n from = from || 0;\n size = size || 10000;\n\n return $q.all([\n $translate([\n 'GRAPH.CURRENCY.UD_TITLE',\n 'COMMON.UNIVERSAL_DIVIDEND']),\n gpData.blockchain.withDividend($scope.formData.currency, {\n from: from,\n size: size\n })\n ])\n .then(function(result) {\n var translations = result[0];\n result = result[1];\n if (!result || !result.times) return;\n $scope.times = result.times;\n\n // Choose a date formatter, depending on the blocks period\n var blocksPeriod = result.times[result.times.length-1] - result.times[0];\n var dateFilter;\n if (blocksPeriod < 31557600/* less than 1 year */) {\n dateFilter = $filter('medianDateShort');\n }\n else {\n dateFilter = $filter('formatDateMonth');\n }\n\n var formatAmount = $filter('formatDecimal');\n $scope.currencySymbol = $filter('currencySymbolNoHtml')($scope.formData.currency, false);\n\n // Data\n $scope.data = [\n result.blocks.reduce(function(res, block) {\n return res.concat(block.dividend / 100);\n }, [])\n ];\n\n // Labels\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(dateFilter(time));\n }, []);\n\n // Colors\n $scope.colors = result.blocks.reduce(function(res) {\n return res.concat(gpColor.rgba.calm(0.5));\n }, []);\n\n // Options\n $scope.options = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true,\n text: translations['GRAPH.CURRENCY.UD_TITLE']\n },\n scales: {\n yAxes: [\n {\n id: 'y-axis-ud',\n ticks: {\n beginAtZero: $scope.formData.beginAtZero\n }\n }\n ]\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + formatAmount(tooltipItems.yLabel) +\n ' ' + $scope.currencySymbol;\n }\n }\n }\n };\n $scope.setScale($scope.scale);\n\n $scope.datasetOverride = [\n {\n yAxisID: 'y-axis-ud',\n type: 'line',\n label: translations['COMMON.UNIVERSAL_DIVIDEND'],\n borderWidth: 2,\n pointRadius: 0,\n pointHitRadius: 4,\n pointHoverRadius: 3\n }];\n\n // Keep only block number (need for click)\n $scope.blocks = result.blocks.reduce(function(res, block) {\n return res.concat(block.number);\n }, []);\n });\n\n };\n\n /* -- Popover -- */\n $scope.showActionsPopover = function(event) {\n UIUtils.popover.show(event, {\n templateUrl: 'plugins/graph/templates/currency/popover_monetary_mass_actions.html',\n scope: $scope,\n autoremove: true,\n afterShow: function(popover) {\n $scope.actionsPopover = popover;\n }\n });\n };\n\n $scope.hideActionsPopover = function() {\n if ($scope.actionsPopover) {\n $scope.actionsPopover.hide();\n $scope.actionsPopover = null;\n }\n };\n\n}\n\n\nfunction GpCurrencyMembersCountController($scope, $controller, $q, $state, $translate, gpColor, gpData, $filter) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.load = function(from, size) {\n from = from || 0;\n size = size || 10000;\n\n return $q.all([\n $translate(['GRAPH.CURRENCY.MEMBERS_COUNT_TITLE', 'GRAPH.CURRENCY.MEMBERS_COUNT_LABEL']),\n gpData.blockchain.withDividend($scope.formData.currency, {\n from: from,\n size: size,\n withCurrent: true\n })\n ])\n .then(function(result) {\n var translations = result[0];\n result = result[1];\n\n if (!result || !result.times) return;\n $scope.times = result.times;\n\n // Choose a date formatter, depending on the blocks period\n var blocksPeriod = result.times[result.blocks.length-1] - result.times[0];\n var dateFilter;\n if (blocksPeriod < 31557600/* less than 1 year*/) {\n dateFilter = $filter('medianDateShort');\n }\n else {\n dateFilter = $filter('formatDateMonth');\n }\n\n // Format time\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(dateFilter(time));\n }, []);\n\n // Members count graph: -------------------------\n $scope.options = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true,\n text: translations['GRAPH.CURRENCY.MEMBERS_COUNT_TITLE']\n },\n scales: {\n xAxes: [{\n position: 'bottom'\n }],\n yAxes: [{\n id: 'y-axis-1',\n ticks: {\n beginAtZero: false\n }\n }]\n }\n };\n $scope.datasetOverride = [{\n yAxisID: 'y-axis-1',\n type: 'line',\n label: translations['GRAPH.CURRENCY.MEMBERS_COUNT_LABEL'],\n borderWidth: 2,\n pointRadius: 0,\n pointHitRadius: 4,\n pointHoverRadius: 3\n }];\n\n // Data\n $scope.data = [\n result.blocks.reduce(function(res, block) {\n return res.concat(block.membersCount);\n }, [])\n ];\n\n // Colors\n $scope.colors = gpColor.scale.fix(result.blocks.length);\n });\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n if (!item._index) {\n $state.go('app.view_block', {number: 0});\n return;\n }\n var from = $scope.times[item._index-1];\n var to = moment.unix(from).utc().add(1, 'day').unix();\n $state.go('app.blockchain_search', {\n q: '(_exists_:joiners OR _exists_:leavers OR _exists_:revoked OR _exists_:excluded) AND medianTime:>{0} AND medianTime:<={1}'.format(from, to)\n });\n };\n\n\n}\n","\nGpAccountBalanceController.$inject = ['$scope', '$controller', '$q', '$state', '$filter', '$translate', 'csWot', 'gpData', 'gpColor', 'csWallet'];\nGpAccountSumTxController.$inject = ['$scope', '$controller', '$filter', '$state', 'csTx', 'gpColor'];\nGpAccountCertificationController.$inject = ['$scope', '$controller', '$q', '$state', '$filter', '$translate', 'gpData', 'gpColor', 'csWallet'];\nangular.module('cesium.graph.account.controllers', ['chart.js', 'cesium.graph.services'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n\n PluginServiceProvider\n .extendState('app.view_wallet_tx', {\n points: {\n 'buttons': {\n templateUrl: \"plugins/graph/templates/account/view_wallet_tx_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n\n .extendState('app.view_wallet_tx_by_id', {\n points: {\n 'buttons': {\n templateUrl: \"plugins/graph/templates/account/view_wallet_tx_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n\n .extendStates(['app.wot_identity_tx_uid', 'app.wot_identity_tx_uid_lg'], {\n points: {\n 'buttons': {\n templateUrl: \"plugins/graph/templates/account/view_identity_tx_extend.html\",\n controller: 'ESExtensionCtrl'\n }\n }\n })\n ;\n\n $stateProvider\n .state('app.view_wallet_stats', {\n url: \"/wallet/stats?t&stepUnit&hide&scale\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/account/view_stats.html\"\n }\n },\n data: {\n auth: true\n }\n })\n\n .state('app.view_wallet_stats_by_id', {\n url: \"/wallets/:id/stats?t&stepUnit&hide&scale\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/account/view_stats.html\"\n }\n },\n data: {\n auth: true\n }\n })\n\n .state('app.wot_identity_stats', {\n url: \"/wot/:pubkey/stats?t&stepUnit&hide&scale\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/account/view_stats.html\"\n }\n }\n });\n }\n }])\n\n .controller('GpAccountBalanceCtrl', GpAccountBalanceController)\n\n .controller('GpAccountSumTxCtrl', GpAccountSumTxController)\n\n .controller('GpAccountCertificationCtrl', GpAccountCertificationController)\n;\n\nfunction GpAccountBalanceController($scope, $controller, $q, $state, $filter, $translate, csWot, gpData, gpColor, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.init = function(e, state) {\n\n if (state && state.stateParams && state.stateParams.pubkey) { // Currency parameter\n $scope.formData.pubkey = state.stateParams.pubkey;\n }\n else if(csWallet.isLogin()) {\n $scope.formData.pubkey = csWallet.data.pubkey;\n }\n\n };\n\n var defaultSetScale = $scope.setScale;\n $scope.setScale = function(scale) {\n // linear scale: sent values as negative\n if (scale === 'linear') {\n $scope.data[$scope.data.length-2] = _.map($scope.data[$scope.data.length-2], function(value) {\n return -1 * Math.abs(value);\n });\n }\n // log scale: sent values as positive\n else {\n $scope.data[$scope.data.length-2] = _.map($scope.data[$scope.data.length-2], function(value) {\n return Math.abs(value);\n });\n }\n\n // call default implementation\n defaultSetScale(scale);\n };\n\n $scope.load = function(updateTimePct) {\n\n updateTimePct = angular.isDefined(updateTimePct) ? updateTimePct : true;\n\n var withUD = true;\n\n return csWot.load($scope.formData.pubkey, null/*uid*/, {cache: true})\n .then(function(identity) {\n $scope.identity = identity;\n withUD = $scope.identity.isMember || $scope.identity.wasMember;\n\n return $q.all([\n\n $translate('GRAPH.ACCOUNT.BALANCE_TITLE', $scope.formData),\n\n // translate i18n keys\n $translate(['GRAPH.ACCOUNT.UD_LABEL',\n 'GRAPH.ACCOUNT.TX_RECEIVED_LABEL',\n 'GRAPH.ACCOUNT.TX_SENT_LABEL',\n 'GRAPH.ACCOUNT.UD_ACCUMULATION_LABEL',\n 'GRAPH.ACCOUNT.TX_ACCUMULATION_LABEL',\n 'GRAPH.ACCOUNT.BALANCE_LABEL',\n 'COMMON.DATE_PATTERN',\n 'COMMON.DATE_SHORT_PATTERN',\n 'COMMON.DATE_MONTH_YEAR_PATTERN']),\n\n // get data\n gpData.blockchain.movement($scope.formData.currency, angular.copy($scope.formData, {withUD: withUD}))\n ]);\n })\n .then(function(result) {\n var title = result[0];\n var translations = result[1];\n result = result[2];\n\n if (!result || !result.times) return; // no data\n $scope.times = result.times;\n\n var formatDecimal = $filter('formatDecimal');\n $scope.currencySymbol = $filter('currencySymbolNoHtml')($scope.formData.currency, $scope.formData.useRelative);\n\n // Data\n $scope.data = [\n result.ud,\n result.received,\n result.sent,\n result.balance\n ];\n\n var datePatterns = {\n hour: translations['COMMON.DATE_PATTERN'],\n day: translations['COMMON.DATE_SHORT_PATTERN'],\n month: translations['COMMON.DATE_MONTH_YEAR_PATTERN']\n };\n // Labels\n var labelPattern = datePatterns[$scope.formData.rangeDuration];\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(moment.unix(time).local().format(labelPattern));\n }, []);\n\n // Colors\n $scope.colors = gpColor.scale.fix(result.times.length);\n\n // Update range with received values\n $scope.updateRange(result.times[0], result.times[result.times.length-1], updateTimePct);\n\n // Options\n $scope.options = {\n responsive: true,\n maintainAspectRatio: true,\n title: {\n display: true,\n text: title\n },\n scales: {\n xAxes: [{\n stacked: true\n }],\n yAxes: [\n {\n id: 'y-axis-left',\n type: 'linear',\n position: 'left',\n stacked: true\n }\n ]\n },\n legend: {\n display: true,\n onClick: $scope.onLegendClick\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' +\n (!tooltipItems.yLabel ? '0' :\n (formatDecimal(tooltipItems.yLabel) + ' ' + $scope.currencySymbol));\n }\n }\n }\n };\n\n $scope.datasetOverride = [\n {\n yAxisID: 'y-axis-left',\n type: 'bar',\n label: translations['GRAPH.ACCOUNT.UD_LABEL'],\n backgroundColor: gpColor.rgba.energized(0.3),\n hoverBackgroundColor: gpColor.rgba.energized(0.5),\n borderWidth: 1\n },\n {\n yAxisID: 'y-axis-left',\n type: 'bar',\n label: translations['GRAPH.ACCOUNT.TX_RECEIVED_LABEL'],\n backgroundColor: gpColor.rgba.positive(0.4),\n hoverBackgroundColor: gpColor.rgba.positive(0.6),\n borderWidth: 1\n },\n {\n yAxisID: 'y-axis-left',\n type: 'bar',\n label: translations['GRAPH.ACCOUNT.TX_SENT_LABEL'],\n backgroundColor: gpColor.rgba.assertive(0.4),\n hoverBackgroundColor: gpColor.rgba.assertive(0.6),\n borderWidth: 1\n },\n {\n yAxisID: 'y-axis-left',\n type: 'line',\n label: translations['GRAPH.ACCOUNT.BALANCE_LABEL'],\n fill: 'origin',\n borderColor: gpColor.rgba.calm(0.5),\n borderWidth: 2,\n pointBackgroundColor: gpColor.rgba.calm(0.5),\n pointBorderColor: gpColor.rgba.white(),\n pointHoverBackgroundColor: gpColor.rgba.calm(1),\n pointHoverBorderColor: 'rgba(0,0,0,0)',\n pointRadius: 3,\n lineTension: 0.1\n }\n ];\n\n\n if (!withUD) {\n // remove UD\n $scope.data.splice(0,1);\n $scope.datasetOverride.splice(0,1);\n }\n else {\n // FIXME: fund why UD data not working well\n // remove UD\n /*$scope.data.splice(0,1);\n $scope.datasetOverride.splice(0,1);*/\n }\n });\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var from = $scope.times[item._index];\n var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();\n var query = 'medianTime:>={0} AND medianTime:<{1}'.format(from, to);\n if ($scope.formData.pubkey) {\n query += ' AND (transactions.issuers:' + $scope.formData.pubkey + ' OR transactions.outputs:*' + $scope.formData.pubkey + ')';\n }\n $state.go('app.blockchain_search', {q: query});\n };\n}\n\n//TODO : Avoid csTx loading, switch to Elasticsearch\nfunction GpAccountSumTxController($scope, $controller, $filter, $state, csTx, gpColor) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n // When opening the view\n $scope.init= function(e, state) {\n\n // Get the pubkey (from URL params) and store it in the page context ($scope)\n $scope.pubkey = (state && state.stateParams && state.stateParams.pubkey);\n\n };\n\n // When opening the view\n $scope.load = function(e, state) {\n if (!$scope.pubkey) return;\n\n // Load account TX data\n return csTx.load($scope.pubkey, -1)\n .then(function(result) {\n\n if (result && result.tx && result.tx.history) {\n //Charts data\n $scope.inputChart = $scope.computeChartData(_.filter(result.tx.history, function(tx) {\n return tx.amount > 0;\n }));\n $scope.outputChart = $scope.computeChartData(_.filter(result.tx.history, function(tx) {\n return tx.amount < 0;\n }));\n }\n });\n };\n\n // Load chart data: received amount by pubkey\n $scope.computeChartData = function(txArray) {\n\n var formatPubkey = $filter('formatPubkey');\n\n // Sum TX amount, with a group by pubkey\n var sumByPubkeys = {};\n _.forEach(txArray, function (tx) {\n sumByPubkeys[tx.pubkey] = sumByPubkeys[tx.pubkey] || {\n label: tx.name || tx.uid || formatPubkey(tx.pubkey),\n pubkey: tx.pubkey,\n sum: 0\n };\n sumByPubkeys[tx.pubkey].sum += Math.abs(tx.amount);\n });\n\n // Get values (from the map), then sort (desc) on sum\n var sumItems = _.sortBy(_.values(sumByPubkeys), 'sum').reverse();\n\n // Divide total amount by 100\n _.each(sumItems, function(item) {\n item.sum = item.sum / 100;\n });\n\n // Return arrays expected by angular-chart\n return {\n data: _.pluck(sumItems, 'sum'),\n labels: _.pluck(sumItems, 'label'),\n pubkeys: _.pluck(sumItems, 'pubkey'),\n colors: gpColor.scale.custom(\n Math.max(10, sumItems.length) // avoid strange colors\n )\n };\n };\n\n $scope.onInputChartClick = function(data, e, item) {\n if (!item) return;\n var pubkey = $scope.inputChart.pubkeys[item._index];\n $state.go('app.wot_identity', {pubkey: pubkey});\n };\n\n $scope.onOutputChartClick = function(data, e, item) {\n if (!item) return;\n var pubkey = $scope.outputChart.pubkeys[item._index];\n $state.go('app.wot_identity', {pubkey: pubkey});\n };\n}\n\n\n/**\n * Graph that display received/sent certification\n */\nfunction GpAccountCertificationController($scope, $controller, $q, $state, $filter, $translate, gpData, gpColor, csWallet) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.init = function(e, state) {\n if (state && state.stateParams && state.stateParams.pubkey) { // Currency parameter\n $scope.formData.pubkey = state.stateParams.pubkey;\n }\n else if(csWallet.isLogin()) {\n $scope.formData.pubkey = csWallet.data.pubkey;\n }\n\n // for DEV only\n //$scope.formData.pubkey = '38MEAZN68Pz1DTvT3tqgxx4yQP6snJCQhPqEFxbDk4aE';\n };\n\n $scope.load = function(updateTimePct) {\n\n var formData = $scope.formData;\n\n return $q.all([\n\n $translate('GRAPH.ACCOUNT.CERTIFICATION_TITLE', formData),\n\n // translate i18n keys\n $translate(['GRAPH.ACCOUNT.GIVEN_CERT_LABEL',\n 'GRAPH.ACCOUNT.RECEIVED_CERT_LABEL',\n 'GRAPH.ACCOUNT.GIVEN_CERT_DELTA_LABEL',\n 'GRAPH.ACCOUNT.RECEIVED_CERT_DELTA_LABEL',\n 'COMMON.DATE_PATTERN',\n 'COMMON.DATE_SHORT_PATTERN',\n 'COMMON.DATE_MONTH_YEAR_PATTERN']),\n\n // get data\n gpData.wot.certifications(formData)\n ])\n .then(function(result) {\n\n var title = result[0];\n var translations = result[1];\n result = result[2];\n\n if (!result || !result.times) return; // no data\n $scope.times = result.times;\n\n var formatInteger = $filter('formatInteger');\n\n // Data\n $scope.data = [\n result.deltaReceived,\n result.received,\n result.deltaGiven,\n result.given\n ];\n\n // Labels\n $scope.labels = result.labels;\n\n var displayFormats = {\n hour: translations['COMMON.DATE_PATTERN'],\n day: translations['COMMON.DATE_SHORT_PATTERN'],\n month: translations['COMMON.DATE_MONTH_YEAR_PATTERN']\n };\n var displayFormat = displayFormats[$scope.formData.rangeDuration];\n // Labels\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(moment.unix(time).local().format(displayFormat));\n }, []);\n\n // Colors\n $scope.colors = gpColor.scale.fix(result.times.length);\n\n // Update options with received values\n $scope.updateRange(result.times[0], result.times[result.times.length-1], updateTimePct);\n\n // Options\n $scope.options = {\n responsive: true,\n maintainAspectRatio: true,\n title: {\n display: true,\n text: title\n },\n scales: {\n yAxes: [\n {\n id: 'y-axis-left',\n type: 'linear',\n position: 'left'\n },\n {\n id: 'y-axis-hide',\n type: 'linear',\n display: false,\n position: 'right'\n }\n ]\n },\n legend: {\n display: true\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n // Should add a '+' before value ?\n var addPlus = (tooltipItems.datasetIndex === 0 || tooltipItems.datasetIndex === 2) && tooltipItems.yLabel > 0;\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' +\n (addPlus ? '+' : '') +\n !tooltipItems.yLabel ? '0' : formatInteger(tooltipItems.yLabel);\n }\n }\n }\n };\n\n $scope.datasetOverride = [\n {\n yAxisID: 'y-axis-left',\n type: 'bar',\n label: translations['GRAPH.ACCOUNT.RECEIVED_CERT_DELTA_LABEL'],\n borderColor: gpColor.rgba.positive(0.6),\n borderWidth: 1,\n backgroundColor: gpColor.rgba.positive(0.4),\n hoverBackgroundColor: gpColor.rgba.positive(0.6)\n },\n {\n yAxisID: 'y-axis-left',\n type: 'line',\n label: translations['GRAPH.ACCOUNT.RECEIVED_CERT_LABEL'],\n fill: false,\n borderColor: gpColor.rgba.positive(0.5),\n borderWidth: 2,\n backgroundColor: gpColor.rgba.positive(1),\n pointBackgroundColor: gpColor.rgba.positive(0.5),\n pointBorderColor: gpColor.rgba.white(),\n pointHoverBackgroundColor: gpColor.rgba.positive(1),\n pointHoverBorderColor: 'rgba(0,0,0,0)',\n pointRadius: 3\n },\n {\n yAxisID: 'y-axis-left',\n type: 'bar',\n label: translations['GRAPH.ACCOUNT.GIVEN_CERT_DELTA_LABEL'],\n borderColor: gpColor.rgba.assertive(0.6),\n borderWidth: 1,\n backgroundColor: gpColor.rgba.assertive(0.4),\n hoverBackgroundColor: gpColor.rgba.assertive(0.6)\n },\n {\n yAxisID: 'y-axis-left',\n type: 'line',\n label: translations['GRAPH.ACCOUNT.GIVEN_CERT_LABEL'],\n fill: false,\n borderColor: gpColor.rgba.assertive(0.4),\n borderWidth: 2,\n backgroundColor: gpColor.rgba.assertive(1),\n pointBackgroundColor: gpColor.rgba.assertive(0.4),\n pointBorderColor: gpColor.rgba.white(),\n pointHoverBackgroundColor: gpColor.rgba.assertive(1),\n pointHoverBorderColor: 'rgba(0,0,0,0)',\n pointRadius: 3,\n lineTension: 0.1\n }\n ];\n });\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var from = $scope.times[item._index];\n var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();\n var query = '_exists_:transactions AND medianTime:>={0} AND medianTime:<{1}'.format(from, to);\n if ($scope.formData.pubkey) {\n query += ' AND (transactions.issuers:' + $scope.formData.pubkey + ' OR transactions.outputs:*' + $scope.formData.pubkey + ')';\n }\n $state.go('app.blockchain_search', {q: query});\n };\n}\n","\nGpDocStatsController.$inject = ['$scope', '$state', '$controller', '$q', '$translate', 'gpColor', 'gpData', '$filter'];\nangular.module('cesium.graph.docstats.controllers', ['chart.js', 'cesium.graph.services', 'cesium.graph.common.controllers'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n $stateProvider\n .state('app.doc_stats_lg', {\n url: \"/network/data/stats/:server?stepUnit&t&hide&scale&useSsl&useTor\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/docstats/view_stats.html\",\n controller: 'GpDocStatsCtrl'\n }\n }\n })\n\n // Deprecated URL\n .state('app.doc_stats_lg_old', {\n url: \"/data/stats?stepUnit&t&hide&scale&useSsl&useTor\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/docstats/view_stats.html\",\n controller: 'GpDocStatsCtrl'\n }\n }\n });\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n // TODO: add buttons to link with doc stats\n }\n }])\n\n\n .controller('GpDocStatsCtrl', GpDocStatsController)\n;\n\nfunction GpDocStatsController($scope, $state, $controller, $q, $translate, gpColor, gpData, $filter) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.formData.rangeDuration = 'month';\n\n $scope.displayRightAxis = true;\n $scope.hiddenDatasets = [];\n\n $scope.chartIdPrefix = 'docstats-chart-';\n $scope.charts = [\n\n // User count\n {\n id: 'user',\n title: 'GRAPH.DOC_STATS.USER.TITLE',\n series: [\n {\n key: 'user_profile',\n label: 'GRAPH.DOC_STATS.USER.USER_PROFILE',\n color: gpColor.rgba.royal(0.7),\n pointHoverBackgroundColor: gpColor.rgba.royal(),\n clickState: {\n name: 'app.document_search',\n params: {index:'user', type: 'profile'}\n }\n },\n {\n key: 'user_settings',\n label: 'GRAPH.DOC_STATS.USER.USER_SETTINGS',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray(),\n clickState: {\n name: 'app.document_search',\n params: {index:'user', type: 'settings'}\n }\n }\n ]\n },\n\n // User delta\n {\n id: 'user_delta',\n title: 'GRAPH.DOC_STATS.USER_DELTA.TITLE',\n series: [\n {\n key: 'user_profile_delta',\n label: 'GRAPH.DOC_STATS.USER_DELTA.USER_PROFILE',\n type: 'line',\n yAxisID: 'y-axis-delta',\n color: gpColor.rgba.royal(),\n pointHoverBackgroundColor: gpColor.rgba.royal()\n },\n {\n key: 'user_settings_delta',\n label: 'GRAPH.DOC_STATS.USER_DELTA.USER_SETTINGS',\n type: 'line',\n yAxisID: 'y-axis-delta',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray()\n }\n ]\n },\n\n // Message & Co.\n {\n id: 'message',\n title: 'GRAPH.DOC_STATS.MESSAGE.TITLE',\n series: [\n {\n key: 'message_inbox',\n label: 'GRAPH.DOC_STATS.MESSAGE.MESSAGE_INBOX',\n color: gpColor.rgba.royal(),\n pointHoverBackgroundColor: gpColor.rgba.royal(),\n clickState: {\n name: 'app.document_search',\n params: {index:'message', type: 'inbox'}\n }\n },\n {\n key: 'message_outbox',\n label: 'GRAPH.DOC_STATS.MESSAGE.MESSAGE_OUTBOX',\n color: gpColor.rgba.calm(),\n pointHoverBackgroundColor: gpColor.rgba.calm(),\n clickState: {\n name: 'app.document_search',\n params: {index:'message', type: 'outbox'}\n }\n },\n {\n key: 'invitation_certification',\n label: 'GRAPH.DOC_STATS.MESSAGE.INVITATION_CERTIFICATION',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray(),\n clickState: {\n name: 'app.document_search',\n params: {index:'invitation', type: 'certification'}\n }\n }\n ]\n },\n\n // Social Page & group\n {\n id: 'social',\n title: 'GRAPH.DOC_STATS.SOCIAL.TITLE',\n series: [\n {\n key: 'page_record',\n label: 'GRAPH.DOC_STATS.SOCIAL.PAGE_RECORD',\n color: gpColor.rgba.royal(),\n pointHoverBackgroundColor: gpColor.rgba.royal(),\n clickState: {\n name: 'app.document_search',\n params: {index:'page', type: 'record'}\n }\n },\n {\n key: 'group_record',\n label: 'GRAPH.DOC_STATS.SOCIAL.GROUP_RECORD',\n color: gpColor.rgba.calm(),\n pointHoverBackgroundColor: gpColor.rgba.calm(),\n clickState: {\n name: 'app.document_search',\n params: {index:'group', type: 'record'}\n }\n },\n {\n key: 'page_comment',\n label: 'GRAPH.DOC_STATS.SOCIAL.PAGE_COMMENT',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray(),\n clickState: {\n name: 'app.document_search',\n params: {index:'page', type: 'comment'}\n }\n }\n ]\n },\n\n // Other: deletion, doc, etc.\n {\n id: 'other',\n title: 'GRAPH.DOC_STATS.OTHER.TITLE',\n series: [\n {\n key: 'history_delete',\n label: 'GRAPH.DOC_STATS.OTHER.HISTORY_DELETE',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray(),\n clickState: {\n name: 'app.document_search',\n params: {index:'history', type: 'delete'}\n }\n }\n ]\n }\n ];\n\n var formatInteger = $filter('formatInteger');\n\n $scope.defaultChartOptions = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true\n },\n legend: {\n display: true,\n onClick: $scope.onLegendClick\n },\n scales: {\n xAxes: [{\n stacked: true\n }],\n yAxes: [\n {\n id: 'y-axis',\n stacked: true\n },\n {\n id: 'y-axis-delta',\n stacked: false\n },\n {\n id: 'y-axis-delta-right',\n stacked: false,\n display: $scope.displayRightAxis,\n position: 'right',\n gridLines: {\n drawOnChartArea: false\n }\n }\n ]\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + formatInteger(tooltipItems.yLabel);\n }\n }\n }\n };\n\n $scope.init = function(e, state) {\n if (state && state.stateParams) {\n // Manage URL parameters\n\n var server = state.stateParams && state.stateParams.server || undefined;\n if (server) {\n console.debug(\"[docstats] Will use server: \" + server);\n angular.merge($scope.formData, {\n server: state.stateParams.server,\n useSsl: state.stateParams.useSsl,\n useTor: state.stateParams.useTor\n });\n }\n }\n };\n\n $scope.load = function(updateTimePct) {\n\n return $q.all([\n // Get i18n keys (chart title, series labels, date patterns)\n $translate($scope.charts.reduce(function(res, chart) {\n return res.concat(chart.series.reduce(function(res, serie) {\n return res.concat(serie.label);\n }, [chart.title]));\n }, [\n 'COMMON.DATE_PATTERN',\n 'COMMON.DATE_SHORT_PATTERN',\n 'COMMON.DATE_MONTH_YEAR_PATTERN'\n ])),\n\n // get Data\n gpData.docstat.get($scope.formData)\n ])\n .then(function(result) {\n var translations = result[0];\n var datePatterns = {\n hour: translations['COMMON.DATE_PATTERN'],\n day: translations['COMMON.DATE_SHORT_PATTERN'],\n month: translations['COMMON.DATE_MONTH_YEAR_PATTERN']\n };\n\n result = result[1];\n if (!result || !result.times) return; // no data\n $scope.times = result.times;\n\n // Labels\n var labelPattern = datePatterns[$scope.formData.rangeDuration];\n $scope.labels = _.map(result.times, function(time) {\n return moment.unix(time).local().format(labelPattern);\n });\n\n // Update range options with received values\n $scope.updateRange(result.times[0], result.times[result.times.length-1], updateTimePct);\n\n $scope.setScale($scope.scale);\n\n // For each chart\n _.forEach($scope.charts, function(chart){\n\n // Prepare chart data\n var usedYAxisIDs = {};\n chart.data = _.map(chart.series, function(serie) {\n usedYAxisIDs[serie.yAxisID||'y-axis'] = true;\n // If 'delta' serie, then compute delta from the source serie\n if (serie.key.endsWith('_delta')) {\n var key = serie.key.substring(0, serie.key.length - '_delta'.length);\n return getDeltaFromValueArray(result[key]) || [];\n }\n return result[serie.key]||[];\n });\n\n // Options (with title)\n chart.options = angular.copy($scope.defaultChartOptions);\n chart.options.title.text = translations[chart.title];\n\n // Remove unused yAxis\n chart.options.scales.yAxes = chart.options.scales.yAxes.reduce(function(res, yAxe){\n return usedYAxisIDs[yAxe.id] ? res.concat(yAxe) : res;\n }, []);\n\n // Series datasets\n chart.datasetOverride = _.map(chart.series, function(serie) {\n return {\n yAxisID: serie.yAxisID || 'y-axis',\n type: serie.type || 'line',\n label: translations[serie.label],\n fill: serie.type !== 'line',\n borderWidth: 2,\n pointRadius: serie.type !== 'line' ? 0 : 2,\n pointHitRadius: 4,\n pointHoverRadius: 3,\n borderColor: serie.color,\n backgroundColor: serie.color,\n pointBackgroundColor: serie.color,\n pointBorderColor: serie.color,\n pointHoverBackgroundColor: serie.pointHoverBackgroundColor||serie.color,\n pointHoverBorderColor: serie.pointHoverBorderColor||gpColor.rgba.white()\n };\n });\n });\n });\n\n };\n\n $scope.onChartClick = function(data, e, item) {\n if (!item) return;\n var chart = _.find($scope.charts , function(chart) {\n return ($scope.chartIdPrefix + chart.id) == item._chart.canvas.id;\n });\n\n var serie = chart.series[item._datasetIndex];\n\n if (serie && serie.clickState && serie.clickState.name) {\n var stateParams = serie.clickState.params ? angular.copy(serie.clickState.params) : {};\n\n // Compute query\n var from = $scope.times[item._index];\n var to = moment.unix(from).utc().add(1, $scope.formData.rangeDuration).unix();\n stateParams.q = 'time:>={0} AND time:<{1}'.format(from, to);\n\n return $state.go(serie.clickState.name, stateParams);\n }\n else {\n console.debug('Click on item index={0} on range [{1},{2}]'.format(item._index, from, to));\n }\n };\n\n function getDeltaFromValueArray(values) {\n if (!values) return undefined;\n var previousValue;\n return _.map(values, function(value) {\n var newValue = (value !== undefined && previousValue !== undefined) ? (value - (previousValue || value)) : undefined;\n previousValue = value;\n return newValue;\n });\n }\n\n}\n","\nGpSynchroController.$inject = ['$scope', '$controller', '$q', '$translate', 'gpColor', 'gpData', '$filter'];\nangular.module('cesium.graph.synchro.controllers', ['chart.js', 'cesium.graph.services', 'cesium.graph.common.controllers'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n $stateProvider\n .state('app.doc_synchro_lg', {\n url: \"/network/data/synchro/:server?stepUnit&t&hide&scale&useSsl&useTor\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/synchro/view_stats.html\",\n controller: \"GpSynchroCtrl\"\n }\n }\n })\n\n // Deprecated URL\n .state('app.doc_synchro_lg_old', {\n url: \"/data/synchro?stepUnit&t&hide&scale&useSsl&useTor\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/graph/templates/synchro/view_stats.html\",\n controller: \"GpSynchroCtrl\"\n }\n }\n })\n ;\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n // TODO: add buttons to link with doc stats\n }\n }])\n\n\n .controller('GpSynchroCtrl', GpSynchroController)\n;\n\nfunction GpSynchroController($scope, $controller, $q, $translate, gpColor, gpData, $filter) {\n 'ngInject';\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('GpCurrencyAbstractCtrl', {$scope: $scope}));\n\n $scope.formData.rangeDuration = 'month';\n\n $scope.hiddenDatasets = [];\n\n $scope.charts = [\n\n // Execution: number of doc\n {\n id: 'count',\n title: 'GRAPH.SYNCHRO.COUNT.TITLE',\n series: [\n {\n key: 'inserts',\n type: 'bar',\n label: 'GRAPH.SYNCHRO.COUNT.INSERTS',\n color: gpColor.rgba.royal(),\n pointHoverBackgroundColor: gpColor.rgba.royal()\n },\n {\n key: 'updates',\n type: 'bar',\n label: 'GRAPH.SYNCHRO.COUNT.UPDATES',\n color: gpColor.rgba.calm(),\n pointHoverBackgroundColor: gpColor.rgba.calm()\n },\n {\n key: 'deletes',\n type: 'bar',\n label: 'GRAPH.SYNCHRO.COUNT.DELETES',\n color: gpColor.rgba.assertive(0.5),\n pointHoverBackgroundColor: gpColor.rgba.assertive()\n }\n ]\n },\n\n // Execution: number of peers\n {\n id: 'peer',\n title: 'GRAPH.SYNCHRO.PEER.TITLE',\n series: [\n {\n key: 'ES_USER_API',\n label: 'GRAPH.SYNCHRO.PEER.ES_USER_API',\n color: gpColor.rgba.royal(),\n pointHoverBackgroundColor: gpColor.rgba.royal()\n },\n {\n key: 'ES_SUBSCRIPTION_API',\n label: 'GRAPH.SYNCHRO.PEER.ES_SUBSCRIPTION_API',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray()\n }\n ]\n },\n\n // Execution: number of peers\n {\n id: 'performance',\n title: 'GRAPH.SYNCHRO.PERFORMANCE.TITLE',\n series: [\n {\n key: 'duration',\n type: 'bar',\n label: 'GRAPH.SYNCHRO.PERFORMANCE.DURATION',\n color: gpColor.rgba.gray(0.5),\n pointHoverBackgroundColor: gpColor.rgba.gray()\n }\n ]\n }\n ];\n\n var formatInteger = $filter('formatInteger');\n\n $scope.defaultChartOptions = {\n responsive: true,\n maintainAspectRatio: $scope.maintainAspectRatio,\n title: {\n display: true\n },\n legend: {\n display: true,\n onClick: $scope.onLegendClick\n },\n scales: {\n xAxes: [{\n stacked: true\n }],\n yAxes: [\n {\n stacked: true,\n id: 'y-axis'\n }\n ]\n },\n tooltips: {\n enabled: true,\n mode: 'index',\n callbacks: {\n label: function(tooltipItems, data) {\n return data.datasets[tooltipItems.datasetIndex].label +\n ': ' + formatInteger(tooltipItems.yLabel);\n }\n }\n }\n };\n\n $scope.init = function(e, state) {\n if (state && state.stateParams) {\n // Manage URL parameters\n var server = state.stateParams && state.stateParams.server || undefined;\n if (server) {\n console.debug(\"[synchro] Will use server: \" + server);\n angular.merge($scope.formData, state.stateParams);\n }\n }\n };\n\n $scope.load = function(updateTimePct) {\n\n return $q.all([\n // Get i18n keys (chart title, series labels, date patterns)\n $translate($scope.charts.reduce(function(res, chart) {\n return res.concat(chart.series.reduce(function(res, serie) {\n return res.concat(serie.label);\n }, [chart.title]));\n }, [\n 'COMMON.DATE_PATTERN',\n 'COMMON.DATE_SHORT_PATTERN',\n 'COMMON.DATE_MONTH_YEAR_PATTERN'\n ])),\n\n // get Data\n gpData.synchro.execution.get($scope.formData)\n ])\n .then(function(result) {\n var translations = result[0];\n var datePatterns = {\n hour: translations['COMMON.DATE_PATTERN'],\n day: translations['COMMON.DATE_SHORT_PATTERN'],\n month: translations['COMMON.DATE_MONTH_YEAR_PATTERN']\n };\n\n result = result[1];\n if (!result || !result.times) return; // no data\n $scope.times = result.times;\n\n // Labels\n var labelPattern = datePatterns[$scope.formData.rangeDuration];\n $scope.labels = result.times.reduce(function(res, time) {\n return res.concat(moment.unix(time).local().format(labelPattern));\n }, []);\n\n // Update range options with received values\n $scope.updateRange(result.times[0], result.times[result.times.length-1], updateTimePct);\n\n $scope.setScale($scope.scale);\n\n // For each chart\n _.forEach($scope.charts, function(chart){\n\n // Data\n chart.data = [];\n _.forEach(chart.series, function(serie){\n chart.data.push(result[serie.key]||[]);\n });\n\n // Options (with title)\n chart.options = angular.copy($scope.defaultChartOptions);\n chart.options.title.text = translations[chart.title];\n\n // Series datasets\n chart.datasetOverride = chart.series.reduce(function(res, serie) {\n return res.concat({\n yAxisID: 'y-axis',\n type: serie.type || 'line',\n label: translations[serie.label],\n fill: true,\n borderWidth: 2,\n pointRadius: 0,\n pointHitRadius: 4,\n pointHoverRadius: 3,\n borderColor: serie.color,\n backgroundColor: serie.color,\n pointBackgroundColor: serie.color,\n pointBorderColor: serie.color,\n pointHoverBackgroundColor: serie.pointHoverBackgroundColor||serie.color,\n pointHoverBorderColor: serie.pointHoverBorderColor||gpColor.rgba.white()\n });\n }, []);\n });\n });\n };\n}\n","\nMapEditPositionAbstractController.$inject = ['$scope', '$timeout', '$q', 'MapUtils', '$translate'];\nangular.module('cesium.map.common.controllers', ['cesium.services', 'cesium.map.services'])\n\n .controller('MapEditPositionAbstractCtrl', MapEditPositionAbstractController)\n\n;\n\n/**\n * An abstract controller, that allow to edit psotion, using a map view (e.g. used by profile and page edition)\n * @param $scope\n * @param $timeout\n * @param $q\n * @param MapUtils\n * @param $translate\n * @constructor\n */\nfunction MapEditPositionAbstractController($scope, $timeout, $q, MapUtils, $translate) {\n 'ngInject';\n\n var listeners = [];\n $scope.mapId = 'map-user-profile-' + $scope.$id;\n $scope.map = MapUtils.map({\n markers: {},\n center: {\n zoom: 13\n }\n });\n $scope.loading = true;\n $scope.mapId = $scope.mapId || 'map-abstract-' + $scope.$id; // Should have beed override by sub-controllers\n\n $scope.enter = function(e, state) {\n\n // Wait parent controller load the profile\n if (!$scope.formData || (!$scope.formData.title && !$scope.formData.geoPoint)) {\n return $timeout($scope.enter, 500);\n }\n\n $scope.loading = true;\n return $scope.load();\n };\n $scope.$on('$csExtension.enter', $scope.enter);\n $scope.$on('$ionicParentView.enter', $scope.enter);\n\n $scope.load = function() {\n\n // no position define: remove existing listener\n if (!$scope.formData.geoPoint || !$scope.formData.geoPoint.lat || !$scope.formData.geoPoint.lon) {\n _.forEach(listeners, function(listener){\n listener(); // unlisten\n });\n listeners = [];\n delete $scope.map.markers.geoPoint;\n $scope.loading = false;\n return $q.when();\n }\n\n // If no marker exists on map: create it\n if (!$scope.map.markers.geoPoint) {\n\n return $translate('MAP.PROFILE.MARKER_HELP')\n .then(function(helpText) {\n\n $scope.map.markers.geoPoint = {\n message: helpText,\n lat: parseFloat($scope.formData.geoPoint.lat),\n lng: parseFloat($scope.formData.geoPoint.lon),\n draggable: true,\n focus: true\n };\n angular.extend($scope.map.center, {\n lat: $scope.map.markers.geoPoint.lat,\n lng: $scope.map.markers.geoPoint.lng\n });\n\n // Listening changes\n var listener = $scope.$watch('map.markers.geoPoint', function() {\n if ($scope.loading) return;\n if ($scope.map.markers.geoPoint && $scope.map.markers.geoPoint.lat && $scope.map.markers.geoPoint.lng) {\n $scope.formData.geoPoint = $scope.formData.geoPoint || {};\n $scope.formData.geoPoint.lat = $scope.map.markers.geoPoint.lat;\n $scope.formData.geoPoint.lon = $scope.map.markers.geoPoint.lng;\n }\n }, true);\n listeners.push(listener);\n\n\n // Make sure map appear, if shown later\n if (!$scope.ionItemClass) {\n $scope.ionItemClass = 'done in';\n }\n\n $scope.loading = false;\n });\n }\n\n // Marker exists: update lat/lon\n else {\n $scope.map.markers.geoPoint.lat = $scope.formData.geoPoint.lat;\n $scope.map.markers.geoPoint.lng = $scope.formData.geoPoint.lon;\n }\n };\n\n\n $scope.$watch('formData.geoPoint', function() {\n if ($scope.loading) return;\n $scope.load();\n }, true);\n\n}\n","\nMapWotViewController.$inject = ['$scope', '$filter', '$templateCache', '$interpolate', '$timeout', '$location', '$translate', '$q', '$controller', 'ionicReady', 'leafletData', 'UIUtils', 'csSettings', 'csWallet', 'MapUtils', 'mapWot'];\nangular.module('cesium.map.wot.controllers', ['cesium.services', 'cesium.map.services', 'cesium.map.help.controllers'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n\n PluginServiceProvider\n\n .extendState('app.wot_lookup.tab_search', {\n points: {\n 'nav-buttons': {\n template: ''\n }\n }\n })\n\n .extendState('app.wot_lookup_lg', {\n points: {\n 'filter-buttons': {\n templateUrl: \"plugins/map/templates/wot/lookup_lg_extend.html\",\n controller: \"ESExtensionCtrl\"\n }\n }\n });\n\n $stateProvider\n .state('app.view_wot_map', {\n url: \"/wot/map?c¢er\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/map/templates/wot/view_map.html\",\n controller: 'MapWotViewCtrl'\n }\n },\n // Seems to works without cache ??\n //cache: false,\n data: {\n silentLocationChange: true\n }\n });\n }\n }])\n\n // Map view of the WOT\n .controller('MapWotViewCtrl', MapWotViewController)\n\n;\n\n\nfunction MapWotViewController($scope, $filter, $templateCache, $interpolate, $timeout, $location, $translate, $q, $controller,\n ionicReady,\n leafletData, UIUtils, csSettings, csWallet, MapUtils, mapWot) {\n 'ngInject';\n\n // Initialize the super classes and extend it.\n angular.extend(this, $controller('WotIdentityAbstractCtrl', { $scope: $scope}));\n angular.extend(this, $controller('ESWotIdentityViewCtrl', {$scope: $scope}));\n\n var\n // Create a hidden layer, to hold search markers\n markersSearchLayer,\n icons= {\n member: {\n type: 'awesomeMarker',\n icon: 'person',\n markerColor: 'blue'\n },\n pending: {\n type: 'awesomeMarker',\n icon: 'clock',\n markerColor: 'lightgreen',\n iconColor: 'gray'\n },\n wallet: {\n type: 'awesomeMarker',\n icon: 'key',\n markerColor: 'lightgray'\n }\n };\n\n $scope.loading = true;\n $scope.loadingMarker = true;\n $scope.mapId = 'map-wot-' + $scope.$id;\n\n $scope.map = MapUtils.map({\n cache: 'map-wot',\n layers: {\n overlays: {\n\n // User profile\n member: {\n type: 'featureGroup',\n name: 'MAP.WOT.VIEW.LAYER.MEMBER',\n visible: true\n },\n pending: {\n type: 'featureGroup',\n name: 'MAP.WOT.VIEW.LAYER.PENDING',\n visible: true\n },\n wallet: {\n type: 'featureGroup',\n name: 'MAP.WOT.VIEW.LAYER.WALLET',\n visible: true\n }\n }\n },\n bounds: {},\n markers: {},\n loading: true\n }, $scope.mapId);\n\n // Variables for marker\n $scope.showDescription = false;\n ionicReady().then(function() {\n $scope.enableDescription = !UIUtils.screen.isSmall() && ionic.Platform.grade.toLowerCase() === 'a';\n if (!$scope.enableDescription) {\n console.debug(\"[map] [wot] Disable profile description.\", ionic.Platform.grade);\n }\n });\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.enter = function(e, state) {\n\n if ($scope.loading) {\n\n UIUtils.loading.show({\n noBackdrop: true // avoid a too long release\n });\n if (state.stateParams && state.stateParams.c) {\n var cPart = state.stateParams.c.split(':');\n $scope.map.center.lat = parseFloat(cPart[0]);\n $scope.map.center.lng = parseFloat(cPart[1]);\n $scope.map.center.zoom = parseInt(cPart[2]);\n }\n\n $scope.$watch(\"map.center\", function() {\n if (!$scope.loading) {\n return $timeout(function() {\n $scope.updateLocationHref();\n }, 300);\n }\n }, true);\n\n // Load the map (and init if need)\n var now = Date.now();\n $scope.loadMap()\n .then($scope.load)\n .then(function() {\n console.debug(\"[map] [wot] Loaded in \"+ (Date.now() - now) +\"ms\");\n\n $scope.showHelpTip();\n });\n }\n else {\n // Make sure to have previous center coordinate defined in the location URL\n $scope.updateLocationHref();\n $scope.showHelpTip();\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.loadMap = function() {\n return $q.all([\n $translate(['COMMON.BTN_HELP_TOUR_SCREEN', 'COMMON.BTN_REFRESH', 'MAP.COMMON.BTN_LOCALIZE_ME']),\n leafletData.getMap($scope.mapId)\n ]).then(function(res) {\n var translations = res[0];\n var map = res[1];\n if (!$scope.map.loading) return map; // already loaded\n\n if (!UIUtils.screen.isSmall()) {\n // Add a start tour button\n L.easyButton({\n position: 'topright', // inherited from L.Control -- the corner it goes in\n type: 'replace', // set to animate when you're comfy with css\n leafletClasses: true, // use leaflet classes to style the button?\n states:[{ // specify different icons and responses for your button\n stateName: 'show-help-tour',\n onClick: $scope.startHelpTour,\n title: translations['COMMON.BTN_HELP_TOUR_SCREEN'],\n icon: 'icon ion-easel'\n }]\n }\n ).addTo(map);\n\n // Add a refresh button\n L.easyButton({\n position: 'topright', // inherited from L.Control -- the corner it goes in\n type: 'replace', // set to animate when you're comfy with css\n leafletClasses: true, // use leaflet classes to style the button?\n states:[{ // specify different icons and responses for your button\n stateName: 'refresh',\n onClick: function(btn, map){\n return $scope.load(map);\n },\n title: translations['COMMON.BTN_REFRESH'],\n icon: 'icon ion-refresh'\n }]\n }\n ).addTo(map);\n }\n\n // Add loading control\n L.Control.loading({\n position: 'topright',\n separate: true\n }).addTo(map);\n\n // Add localize me control\n MapUtils.control.localizeMe({\n title: translations['MAP.COMMON.BTN_LOCALIZE_ME']\n })\n .addTo(map);\n\n // Add search control\n markersSearchLayer = L.layerGroup({visible: false});\n var searchTip = $interpolate($templateCache.get('plugins/map/templates/wot/item_search_tooltip.html'));\n MapUtils.control.search({\n layer: markersSearchLayer,\n propertyName: 'title',\n buildTip: function (text, val) {\n return searchTip(val.layer.options);\n },\n moveToLocation: function(lnglat, title, map) {\n if(this.options.zoom)\n this._map.setView(lnglat, this.options.zoom);\n else\n this._map.panTo(lnglat);\n var popupMarkerId = lnglat.layer && lnglat.layer.options && lnglat.layer.options.popupMarkerId;\n $timeout(function(){\n var popupMarker = popupMarkerId && _.find(map._layers, function(layer) {\n return (layer.options && layer.options.id === popupMarkerId);\n });\n popupMarker && popupMarker.openPopup();\n }, 400);\n },\n firstTipSubmit: true,\n tooltipLimit: 50\n }).addTo(map);\n\n // Add marker cluster layer\n var extractMarkerLayer = function(marker) {\n return marker.options && marker.options.layer;\n };\n var markerClusterLayer = L.markerClusterGroup({\n disableClusteringAtZoom: MapUtils.constants.LOCALIZE_ZOOM,\n maxClusterRadius: 65,\n showCoverageOnHover: false,\n iconCreateFunction: function (cluster) {\n var countByLayer = _.countBy(cluster.getAllChildMarkers(), extractMarkerLayer);\n var markerColor = countByLayer.member ? 'blue' : (countByLayer.pending ? 'lightgreen' : 'lightgray');\n var childCount = cluster.getChildCount();\n var className = 'marker-cluster ' + markerColor + ' marker-cluster-';\n if (childCount < 10) {\n className += 'small';\n } else if (childCount < 100) {\n className += 'medium';\n } else {\n className += 'large';\n }\n return L.divIcon({ html: '
' + childCount + '
', className: className, iconSize: new L.Point(40, 40) });\n }\n });\n map.eachLayer(function(layer) {\n // Add capabilities of 'featureGroup.subgroup', if layer is a group\n if (layer.addLayer){\n angular.extend(layer, L.featureGroup.subGroup(markerClusterLayer));\n }\n });\n markerClusterLayer.addTo(map);\n\n // Bind map with options (e.g. to received overlays visibility updates)\n // Cache no more need, as view is not cached\n //MapUtils.cache.bind($scope, $scope.mapId, $scope.map);\n\n $scope.map.loading = false;\n\n return map;\n });\n };\n\n // Load markers data\n $scope.load = function(map) {\n if (!map) {\n return leafletData.getMap($scope.mapId)\n // loop with the map object\n .then($scope.load);\n }\n\n $scope.loading = true;\n // Show loading indicator\n map.fire('dataloading');\n\n var options = {\n fields: {\n description: $scope.enableDescription\n }\n };\n\n // add bounding box\n if ($scope.map.bounds) {\n // FIXME - this is not working well\n //options.bounds = angular.copy($scope.map.bounds);\n //delete options.bounds.options;\n }\n\n // Load wot data, from service\n return mapWot.load(options)\n\n .then(function(res) {\n var markers = {};\n\n // Clean search layer\n markersSearchLayer.clearLayers();\n\n if (res && res.length) {\n\n var formatPubkey = $filter('formatPubkey');\n var markerTemplate = $templateCache.get('plugins/map/templates/wot/popup_marker.html');\n\n _.forEach(res, function (hit) {\n var type = hit.pending ? 'pending' : (hit.uid ? 'member' : 'wallet');\n var shortPubkey = formatPubkey(hit.pubkey);\n var id = hit.index + '_' + (hit.id || (hit.uid ? (hit.uid + ':' + hit.pubkey) : hit.pubkey)).replace(/-/g, '_');\n var marker = {\n layer: type,\n icon: icons[type],\n opacity: hit.uid ? 1 : 0.7,\n title: hit.name + ' | ' + shortPubkey,\n lat: hit.geoPoint.lat,\n lng: hit.geoPoint.lon,\n getMessageScope: function () {\n var scope = $scope.$new();\n scope.loadingMarker = true;\n scope.formData = {};\n scope.$applyAsync(function() {\n scope.formData = {\n pubkey: hit.pubkey,\n uid: hit.uid,\n name: hit.name,\n profile: hit\n };\n scope.loadingMarker = false;\n });\n return scope;\n },\n focus: false,\n message: markerTemplate,\n id: id\n };\n markers[id] = marker;\n\n // Create a search marker (will be hide)\n var searchText = hit.name + ((hit.uid && hit.uid != hit.name) ? (' | ' + hit.uid) : '') + ' | ' + shortPubkey;\n var searchMarker = angular.merge({\n type: type,\n opacity: 0,\n icon: L.divIcon({\n className: type + ' ng-hide',\n iconSize: L.point(0, 0)\n })\n }, {title: searchText, pubkey: hit.pubkey, uid: hit.uid, name: hit.name, pending: hit.pending, popupMarkerId: id});\n markersSearchLayer.addLayer(new L.Marker({\n lat: hit.geoPoint.lat,\n lng: hit.geoPoint.lon\n },\n searchMarker));\n });\n }\n\n $scope.map.markers = markers;\n\n return $timeout(function(){\n $scope.loading = false;\n\n // hide loading indicator\n map.fire('dataload');\n\n UIUtils.loading.hide();\n });\n })\n .catch(function(err) {\n $scope.map.markers = {};\n $scope.loading = false;\n UIUtils.onError('MAP.WOT.ERROR.LOAD_POSITION_FAILED')(err);\n });\n };\n\n // Update the browser location, to be able to refresh the page\n $scope.updateLocationHref = function(centerHash) {\n // removeIf(device)\n var params = $location.search() || {};\n if (!params.c || !MapUtils.center.isDefault($scope.map.center)) {\n centerHash = centerHash || '{0}:{1}:{2}'.format($scope.map.center.lat.toFixed(4), $scope.map.center.lng.toFixed(4), $scope.map.center.zoom);\n $location.search({c: centerHash}).replace();\n }\n // endRemoveIf(device)\n };\n\n /* -- help tip -- */\n\n // Show help tour\n $scope.startHelpTour = function() {\n return $scope.showHelpTip(0, true);\n };\n\n // Show help tip\n $scope.showHelpTip = function(index, isTour) {\n if (!isTour && !csWallet.isLogin()) return;\n\n index = angular.isDefined(index) ? index :\n (angular.isNumber(csSettings.data.helptip.mapwot) ? csSettings.data.helptip.mapwot : 0);\n isTour = angular.isDefined(isTour) ? isTour : false;\n\n if (index < 0 || index > 2/*max steps*/) return;\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope(isTour, 'MapHelpTipCtrl');\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n // Set isTour and mapId\n helptipScope.tour = isTour;\n helptipScope.mapId = $scope.mapId;\n\n return helptipScope.startMapWotTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n csSettings.data.helptip.mapwot = angular.isNumber(csSettings.data.helptip.mapwot) ?\n Math.max(endIndex, csSettings.data.helptip.mapwot) :\n endIndex;\n csSettings.store();\n });\n };\n}\n","\nMapRegistryViewController.$inject = ['$scope', '$filter', '$templateCache', '$interpolate', '$timeout', '$location', '$translate', '$q', 'ionicReady', 'leafletData', 'UIUtils', 'csSettings', 'csWallet', 'MapUtils', 'mapRegistry'];\nMapPageEditController.$inject = ['$scope', '$controller'];\nangular.module('cesium.map.registry.controllers', ['cesium.services', 'cesium.map.services', 'cesium.map.help.controllers', 'cesium.map.common.controllers'])\n\n .config(['$stateProvider', 'PluginServiceProvider', 'csConfig', function($stateProvider, PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n\n PluginServiceProvider\n\n .extendState('app.wot_lookup.tab_registry', {\n points: {\n 'nav-buttons': {\n template: ''\n }\n }\n })\n\n .extendState('app.registry_lookup_lg', {\n points: {\n 'filter-buttons': {\n templateUrl: \"plugins/map/templates/registry/lookup_lg_extend.html\"\n }\n }\n })\n\n .extendState('app.registry_edit_record', {\n points: {\n 'after-position': {\n templateUrl: 'plugins/map/templates/common/edit_position_extend.html',\n controller: 'MapPageEditCtrl'\n }\n }\n });\n\n $stateProvider\n .state('app.view_registry_map', {\n url: \"/wot/pagemap?c¢er\",\n views: {\n 'menuContent': {\n templateUrl: \"plugins/map/templates/registry/view_map.html\",\n controller: 'MapRegistryViewCtrl'\n }\n },\n // Seems to works without cache ??\n //cache: false,\n data: {\n silentLocationChange: true\n }\n });\n }\n }])\n\n // Map view of the registry\n .controller('MapRegistryViewCtrl', MapRegistryViewController)\n\n .controller('MapPageEditCtrl', MapPageEditController)\n;\n\n\nfunction MapRegistryViewController($scope, $filter, $templateCache, $interpolate, $timeout, $location, $translate, $q,\n ionicReady, leafletData,\n UIUtils, csSettings, csWallet, MapUtils, mapRegistry) {\n 'ngInject';\n\n var\n // Create a hidden layer, to hold search markers\n markersSearchLayer,\n icons= {\n shop: {\n type: 'awesomeMarker',\n icon: 'page-shop',\n markerColor: 'blue'\n },\n company: {\n type: 'awesomeMarker',\n icon: 'page-company',\n markerColor: 'blue'\n },\n association: {\n type: 'awesomeMarker',\n icon: 'page-association',\n markerColor: 'lightgreen',\n iconColor: 'gray'\n },\n institution: {\n type: 'awesomeMarker',\n icon: 'page-institution',\n markerColor: 'lightgray'\n }\n };\n\n $scope.loading = true;\n $scope.loadingMarker = true;\n $scope.mapId = 'map-registry-' + $scope.$id;\n\n $scope.map = MapUtils.map({\n cache: 'map-registry',\n layers: {\n overlays: {\n // Pages\n shop: {\n type: 'featureGroup',\n name: 'MAP.REGISTRY.VIEW.LAYER.SHOP',\n visible: true\n },\n company: {\n type: 'featureGroup',\n name: 'MAP.REGISTRY.VIEW.LAYER.COMPANY',\n visible: true\n },\n association: {\n type: 'featureGroup',\n name: 'MAP.REGISTRY.VIEW.LAYER.ASSOCIATION',\n visible: true\n },\n institution: {\n type: 'featureGroup',\n name: 'MAP.REGISTRY.VIEW.LAYER.INSTITUTION',\n visible: true\n }\n }\n },\n bounds: {},\n markers: {},\n loading: true\n }, $scope.mapId);\n\n // Variables for marker\n $scope.formData = {};\n $scope.showDescription = false;\n ionicReady().then(function() {\n $scope.enableDescription = !UIUtils.screen.isSmall() && ionic.Platform.grade.toLowerCase() === 'a';\n if (!$scope.enableDescription) {\n console.debug(\"[map] [wot] Disable profile description.\", ionic.Platform.grade);\n }\n });\n\n $scope.$on('$ionicView.beforeEnter', function (event, viewData) {\n // Enable back button (workaround need for navigation outside tabs - https://stackoverflow.com/a/35064602)\n viewData.enableBack = UIUtils.screen.isSmall() ? true : viewData.enableBack;\n });\n\n $scope.enter = function(e, state) {\n\n if ($scope.loading) {\n if (state.stateParams && state.stateParams.c) {\n var cPart = state.stateParams.c.split(':');\n $scope.map.center.lat = parseFloat(cPart[0]);\n $scope.map.center.lng = parseFloat(cPart[1]);\n $scope.map.center.zoom = parseInt(cPart[2]);\n }\n\n $scope.$watch(\"map.center\", function() {\n if (!$scope.loading) {\n return $timeout(function() {\n $scope.updateLocationHref();\n }, 300);\n }\n }, true);\n\n // Load the map (and init if need)\n $scope.loadMap()\n .then(function() {\n if (csWallet.isLogin()) {\n $scope.showHelpTip();\n }\n return $scope.load();\n });\n }\n else {\n // Make sure to have previous center coordinate defined in the location URL\n $scope.updateLocationHref();\n if (csWallet.isLogin()) {\n $scope.showHelpTip();\n }\n }\n };\n $scope.$on('$ionicView.enter', $scope.enter);\n\n $scope.loadMap = function() {\n return $q.all([\n $translate(['COMMON.BTN_HELP_TOUR_SCREEN', 'COMMON.BTN_REFRESH', 'MAP.COMMON.BTN_LOCALIZE_ME']),\n leafletData.getMap($scope.mapId)\n ]).then(function(res) {\n var translations = res[0];\n var map = res[1];\n if (!$scope.map.loading) return map; // already loaded\n\n if (!UIUtils.screen.isSmall()) {\n\n // Add a refresh button\n L.easyButton({\n position: 'topright', // inherited from L.Control -- the corner it goes in\n type: 'replace', // set to animate when you're comfy with css\n leafletClasses: true, // use leaflet classes to style the button?\n states:[{ // specify different icons and responses for your button\n stateName: 'refresh',\n onClick: function(btn, map){\n return $scope.load(map);\n },\n title: translations['COMMON.BTN_REFRESH'],\n icon: 'icon ion-refresh'\n }]\n }\n ).addTo(map);\n }\n\n // Add loading control\n L.Control.loading({\n position: 'topright',\n separate: true\n }).addTo(map);\n\n // Add localize me control\n MapUtils.control.localizeMe({\n title: translations['MAP.COMMON.BTN_LOCALIZE_ME']\n })\n .addTo(map);\n\n // Add search control\n markersSearchLayer = L.layerGroup({visible: false});\n var searchTip = $interpolate($templateCache.get('plugins/map/templates/registry/item_search_tooltip.html'));\n MapUtils.control.search({\n layer: markersSearchLayer,\n propertyName: 'title',\n buildTip: function (text, val) {\n return searchTip(val.layer.options);\n },\n moveToLocation: function(lnglat, title, map) {\n if(this.options.zoom)\n this._map.setView(lnglat, this.options.zoom);\n else\n this._map.panTo(lnglat);\n var popupMarkerId = lnglat.layer && lnglat.layer.options && lnglat.layer.options.popupMarkerId;\n $timeout(function(){\n var popupMarker = popupMarkerId && _.find(map._layers, function(layer) {\n return (layer.options && layer.options.id === popupMarkerId);\n });\n popupMarker && popupMarker.openPopup();\n }, 400);\n },\n firstTipSubmit: true,\n tooltipLimit: 50\n }).addTo(map);\n\n // Add marker cluster layer\n var extractMarkerLayer = function(marker) {\n return marker.options && marker.options.layer;\n };\n var markerClusterLayer = L.markerClusterGroup({\n disableClusteringAtZoom: MapUtils.constants.LOCALIZE_ZOOM,\n maxClusterRadius: 65,\n showCoverageOnHover: false,\n iconCreateFunction: function (cluster) {\n var countByLayer = _.countBy(cluster.getAllChildMarkers(), extractMarkerLayer);\n var markerColor = countByLayer.shop||countByLayer.company ? 'blue' : (countByLayer.association ? 'lightgreen' : 'lightgray');\n var childCount = cluster.getChildCount();\n var className = 'marker-cluster ' + markerColor + ' marker-cluster-';\n if (childCount < 10) {\n className += 'small';\n } else if (childCount < 100) {\n className += 'medium';\n } else {\n className += 'large';\n }\n return L.divIcon({ html: '
' + childCount + '
', className: className, iconSize: new L.Point(40, 40) });\n }\n });\n map.eachLayer(function(layer) {\n // Add capabilities of 'featureGroup.subgroup', if layer is a group\n if (layer.addLayer){\n angular.extend(layer, L.featureGroup.subGroup(markerClusterLayer));\n }\n });\n markerClusterLayer.addTo(map);\n\n // Bind map with options (e.g. to received overlays visibility updates)\n // Cache no more need, as view is not cached\n //MapUtils.cache.bind($scope, $scope.mapId, $scope.map);\n\n $scope.map.loading = false;\n return map;\n });\n };\n\n // Load markers data\n $scope.load = function(map) {\n if (!map) {\n return leafletData.getMap($scope.mapId)\n // loop with the map object\n .then($scope.load);\n }\n\n $scope.loading = true;\n // Show loading indicator\n map.fire('dataloading');\n\n var options = {\n fields: {\n description: $scope.enableDescription\n }\n };\n\n // Load wot data, from service\n return mapRegistry.load(options)\n\n .then(function(res) {\n var markers = {};\n\n // Clean search layer\n markersSearchLayer.clearLayers();\n\n if (res && res.length) {\n\n var formatPubkey = $filter('formatPubkey');\n var pageMarkerTemplate = $templateCache.get('plugins/map/templates/registry/popup_marker.html');\n\n _.forEach(res, function (hit) {\n var shortPubkey = formatPubkey(hit.pubkey);\n var id = hit.index + '_' + (hit.id).replace(/-/g, '_');\n var marker = {\n layer: hit.type,\n icon: icons[hit.type],\n opacity: 1,\n title: hit.name + ' | ' + shortPubkey,\n lat: hit.geoPoint.lat,\n lng: hit.geoPoint.lon,\n getMessageScope: function () {\n var scope = $scope.$new();\n scope.loadingMarker = true;\n scope.formData = {};\n scope.$applyAsync(function() {\n angular.extend(scope.formData, hit);\n scope.loadingMarker = false;\n });\n return scope;\n },\n focus: false,\n message: pageMarkerTemplate,\n id: id\n };\n markers[id] = marker;\n\n // Create a search marker (will be hide)\n var searchText = hit.name + ' | ' + shortPubkey;\n var searchMarker = angular.merge({\n type: hit.type,\n opacity: 0,\n icon: L.divIcon({\n className: hit.type + ' ng-hide',\n iconSize: L.point(0, 0)\n })\n }, {title: searchText, pubkey: hit.pubkey, name: hit.name, popupMarkerId: id});\n markersSearchLayer.addLayer(new L.Marker({\n lat: hit.geoPoint.lat,\n lng: hit.geoPoint.lon\n },\n searchMarker));\n });\n }\n\n $scope.map.markers = markers;\n\n $scope.loading = false;\n\n // hide loading indicator\n map.fire('dataload');\n })\n .catch(function(err) {\n $scope.map.markers = {};\n $scope.loading = false;\n UIUtils.onError('MAP.WOT.ERROR.LOAD_POSITION_FAILED')(err);\n });\n };\n\n // Update the browser location, to be able to refresh the page\n $scope.updateLocationHref = function(centerHash) {\n // removeIf(device)\n var params = $location.search() || {};\n if (!params.c || !MapUtils.center.isDefault($scope.map.center)) {\n centerHash = centerHash || '{0}:{1}:{2}'.format($scope.map.center.lat.toFixed(4), $scope.map.center.lng.toFixed(4), $scope.map.center.zoom);\n $location.search({c: centerHash}).replace();\n }\n // endRemoveIf(device)\n };\n\n // removeIf(device)\n // Update the browser location, to be able to refresh the page\n // FIXME: not need, should be removed\n $scope.$on(\"centerUrlHash\", function(event, centerHash) {\n if (!$scope.loading) {\n\n return $timeout(function() {\n $scope.updateLocationHref(centerHash);\n }, 300);\n }\n });\n // endRemoveIf(device)\n\n\n /* -- help tip -- */\n\n // Show help tour\n $scope.startHelpTour = function() {\n return $scope.showHelpTip(0, true);\n };\n\n // Show help tip\n $scope.showHelpTip = function(index, isTour) {\n index = angular.isDefined(index) ? index :\n (angular.isNumber(csSettings.data.helptip.mapwot) ? csSettings.data.helptip.mapwot : 0);\n isTour = angular.isDefined(isTour) ? isTour : false;\n\n if (index < 0 || index > 2/*max steps*/) return;\n\n // Create a new scope for the tour controller\n var helptipScope = $scope.createHelptipScope(isTour, 'MapHelpTipCtrl');\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n // Set isTour and mapId\n helptipScope.tour = isTour;\n helptipScope.mapId = $scope.mapId;\n\n return helptipScope.startMapWotTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n csSettings.data.helptip.mapwot = angular.isNumber(csSettings.data.helptip.mapwot) ?\n Math.max(endIndex, csSettings.data.helptip.mapwot) :\n endIndex;\n csSettings.store();\n });\n };\n}\n\n\nfunction MapPageEditController($scope, $controller) {\n 'ngInject';\n\n $scope.mapId = 'map-page-' + $scope.$id;\n\n // Initialize the super classes and extend it.\n angular.extend(this, $controller('MapEditPositionAbstractCtrl', { $scope: $scope}));\n}\n","\nMapProfileEditController.$inject = ['$scope', '$controller'];\nangular.module('cesium.map.user.controllers', ['cesium.services', 'cesium.map.services', 'cesium.map.common.controllers'])\n\n .config(['PluginServiceProvider', 'csConfig', function(PluginServiceProvider, csConfig) {\n 'ngInject';\n\n var enable = csConfig.plugins && csConfig.plugins.es;\n if (enable) {\n\n PluginServiceProvider\n\n .extendState('app.edit_profile', {\n points: {\n 'after-position': {\n templateUrl: 'plugins/map/templates/common/edit_position_extend.html',\n controller: 'MapProfileEditCtrl'\n }\n }\n })\n\n .extendState('app.edit_profile_by_id', {\n points: {\n 'after-position': {\n templateUrl: 'plugins/map/templates/common/edit_position_extend.html',\n controller: 'MapProfileEditCtrl'\n }\n }\n });\n }\n }])\n\n .controller('MapProfileEditCtrl', MapProfileEditController);\n\n\nfunction MapProfileEditController($scope, $controller) {\n 'ngInject';\n\n $scope.mapId = 'map-profile-' + $scope.$id;\n\n // Initialize the super classes and extend it.\n angular.extend(this, $controller('MapEditPositionAbstractCtrl', { $scope: $scope}));\n}\n","\nMapHelpTipController.$inject = ['$scope', '$controller'];\nangular.module('cesium.map.help.controllers', ['cesium.services'])\n\n .controller('MapHelpTipCtrl', MapHelpTipController)\n;\n\n\n/* ----------------------------\n* Help Tip\n* ---------------------------- */\nfunction MapHelpTipController($scope, $controller) {\n\n // Initialize the super class and extend it.\n angular.extend(this, $controller('HelpTipCtrl', {$scope: $scope}));\n\n $scope.mapId = undefined; // should be set by caller controllers\n\n /**\n * Features tour on map WOT\n * @returns {*}\n */\n $scope.startMapWotTour = function(startIndex, hasNext) {\n\n var steps = [\n\n function(){\n return $scope.showHelpTip('helptip-map-wot', {\n bindings: {\n content: 'MAP.HELP.TIP.WOT',\n icon: {\n position: 'center',\n glyph: 'ion-information-circled'\n }\n }\n });\n },\n\n function(){\n return $scope.showHelpTip(null, {\n selector: '#{0} .leaflet-control-search'.format($scope.mapId),\n bindings: {\n content: 'MAP.HELP.TIP.WOT_BTN_SEARCH',\n icon: {\n position: 'center'\n }\n }\n });\n },\n\n function () {\n return $scope.showHelpTip(null, {\n selector: '#{0} .leaflet-control-layers'.format($scope.mapId),\n bindings: {\n content: 'MAP.HELP.TIP.WOT_BTN_LAYERS',\n icon: {\n position: 'right'\n },\n hasNext: hasNext\n }\n });\n }\n ];\n\n // Launch steps\n return $scope.executeStep('mapwot', steps, startIndex);\n };\n}\n","\nangular.module('cesium.platform', ['ngIdle', 'cesium.config', 'cesium.services'])\n\n // Translation i18n\n .config(['$translateProvider', 'csConfig', function ($translateProvider, csConfig) {\n 'ngInject';\n\n $translateProvider\n .uniformLanguageTag('bcp47')\n .determinePreferredLanguage()\n // Cela fait bugger les placeholder (pb d'affichage des accents en FR)\n //.useSanitizeValueStrategy('sanitize')\n .useSanitizeValueStrategy(null)\n .fallbackLanguage([csConfig.fallbackLanguage ? csConfig.fallbackLanguage : 'en'])\n .useLoaderCache(true);\n }])\n\n .config(['$httpProvider', 'csConfig', function($httpProvider, csConfig) {\n 'ngInject';\n\n // Set default timeout\n $httpProvider.defaults.timeout = !!csConfig.timeout ? csConfig.timeout : 300000 /* default timeout */;\n\n //Enable cross domain calls\n $httpProvider.defaults.useXDomain = true;\n\n //Remove the header used to identify ajax call that would prevent CORS from working\n delete $httpProvider.defaults.headers.common['X-Requested-With'];\n\n }])\n\n .config(['$compileProvider', 'csConfig', function($compileProvider, csConfig) {\n 'ngInject';\n\n $compileProvider.debugInfoEnabled(csConfig.debug === true);\n\n // Fix issue #893\n // See https://stackoverflow.com/questions/31859257/firefox-addon-using-angularjs-ng-src-not-working\n $compileProvider.imgSrcSanitizationWhitelist(/^\\s*(filesystem:resource|resource|moz-extension|chrome-extension|file):/);\n }])\n\n .config(['$animateProvider', function($animateProvider) {\n 'ngInject';\n\n $animateProvider.classNameFilter( /\\banimate-/ );\n }])\n\n // Configure cache (used by HTTP requests) default options\n .config(['CacheFactoryProvider', 'csConfig', function (CacheFactoryProvider, csConfig) {\n 'ngInject';\n\n angular.extend(CacheFactoryProvider.defaults, {\n // Fixed options:\n recycleFreq: 60 * 1000, // Scan expired items every 1min\n storagePrefix: 'caches.', // Override storage key prefix\n capacity: 100, // Force to use a LRU cache, to avoid size exceed max\n\n // Options overwritten by the csCache service:\n maxAge: csConfig.cacheTimeMs || 60 * 1000, // from config if exists, or 1min\n storageMode: 'memory' // Do NOT use local Storage by default\n });\n }])\n\n // Configure screen size detection\n .config(['screenmatchConfigProvider', function(screenmatchConfigProvider) {\n 'ngInject';\n\n screenmatchConfigProvider.config.rules = 'bootstrap';\n }])\n\n .config(['$ionicConfigProvider', function($ionicConfigProvider) {\n 'ngInject';\n\n // JS scrolling need for iOs (see http://blog.ionic.io/native-scrolling-in-ionic-a-tale-in-rhyme/)\n var enableJsScrolling = ionic.Platform.isIOS();\n $ionicConfigProvider.scrolling.jsScrolling(enableJsScrolling);\n\n // Configure the view cache\n $ionicConfigProvider.views.maxCache(5);\n }])\n\n .config(['IdleProvider', 'csConfig', function(IdleProvider, csConfig) {\n 'ngInject';\n\n IdleProvider.idle(csConfig.logoutIdle||10*60/*10min*/);\n IdleProvider.timeout(csConfig.logoutTimeout||15); // display warning during 15s\n }])\n\n .factory('$exceptionHandler', ['$log', function($log) {\n 'ngInject';\n\n return function(exception, cause) {\n if (cause) $log.error(exception, cause);\n else $log.error(exception);\n };\n }])\n\n\n .factory('csPlatform', ['ionicReady', '$rootScope', '$q', '$state', '$translate', '$timeout', 'UIUtils', 'BMA', 'Device', 'csHttp', 'csConfig', 'csCache', 'csSettings', 'csCurrency', 'csWallet', function (ionicReady, $rootScope, $q, $state, $translate, $timeout, UIUtils,\n BMA, Device, csHttp, csConfig, csCache, csSettings, csCurrency, csWallet) {\n\n 'ngInject';\n var\n fallbackNodeIndex = 0,\n defaultSettingsNode,\n started = false,\n startPromise,\n listeners,\n removeChangeStateListener;\n\n function disableChangeState() {\n if (removeChangeStateListener) return; // make sure to call this once\n\n var remove = $rootScope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {\n if (!event.defaultPrevented && next.name !== 'app.home' && next.name !== 'app.settings') {\n event.preventDefault();\n if (startPromise) {\n startPromise.then(function() {\n $state.go(next.name, nextParams);\n });\n }\n else {\n UIUtils.loading.hide();\n }\n }\n });\n\n // store remove listener function\n removeChangeStateListener = remove;\n }\n\n function enableChangeState() {\n if (removeChangeStateListener) removeChangeStateListener();\n removeChangeStateListener = null;\n }\n\n // Alert user if node not reached - fix issue #\n function checkBmaNodeAlive(alive) {\n if (alive) return true;\n\n // Remember the default node\n defaultSettingsNode = defaultSettingsNode || csSettings.data.node;\n\n var fallbackNode = csSettings.data.fallbackNodes && fallbackNodeIndex < csSettings.data.fallbackNodes.length && csSettings.data.fallbackNodes[fallbackNodeIndex++];\n if (!fallbackNode) {\n throw 'ERROR.CHECK_NETWORK_CONNECTION';\n }\n var newServer = fallbackNode.host + ((!fallbackNode.port && fallbackNode.port != 80 && fallbackNode.port != 443) ? (':' + fallbackNode.port) : '');\n\n // Skip is same as actual node\n if (BMA.node.same(fallbackNode)) {\n console.debug('[platform] Skipping fallback node [{0}]: same as actual node'.format(newServer));\n return checkBmaNodeAlive(); // loop (= go to next node)\n }\n\n // Try to get summary\n return csHttp.get(fallbackNode.host, fallbackNode.port, '/node/summary', fallbackNode.port==443 || BMA.node.forceUseSsl)()\n .catch(function(err) {\n console.error('[platform] Could not reach fallback node [{0}]: skipping'.format(newServer));\n // silent, but return no result (will loop to the next fallback node)\n })\n .then(function(res) {\n if (!res) return checkBmaNodeAlive(); // Loop\n\n // Force to show port/ssl, if this is the only difference\n var messageParam = {old: BMA.server, new: newServer};\n if (messageParam.old === messageParam.new) {\n if (BMA.port != fallbackNode.port) {\n messageParam.new += ':' + fallbackNode.port;\n }\n else if (BMA.useSsl == false && (fallbackNode.useSsl || fallbackNode.port==443)) {\n messageParam.new += ' (SSL)';\n }\n }\n\n return $translate('CONFIRM.USE_FALLBACK_NODE', messageParam)\n .then(function(msg) {\n return UIUtils.alert.confirm(msg);\n })\n .then(function (confirm) {\n if (!confirm) return;\n\n // Only change BMA node in settings\n csSettings.data.node = fallbackNode;\n\n // Add a marker, for UI\n csSettings.data.node.temporary = true;\n\n csHttp.cache.clear();\n\n // loop\n return BMA.copy(fallbackNode)\n .then(checkBmaNodeAlive);\n });\n });\n }\n\n function isStarted() {\n return started;\n }\n\n function getLatestRelease() {\n var latestRelease = csSettings.data.latestReleaseUrl && csHttp.uri.parse(csSettings.data.latestReleaseUrl);\n if (latestRelease) {\n return csHttp.getWithCache(latestRelease.host, latestRelease.protocol === 'https:' ? 443 : latestRelease.port, \"/\" + latestRelease.pathname, undefined, csCache.constants.LONG)()\n .then(function (json) {\n if (json && json.name && json.tag_name && json.html_url) {\n return {\n version: json.name,\n url: json.html_url,\n isNewer: (csHttp.version.compare(csConfig.version, json.name) < 0)\n };\n }\n })\n .catch(function(err) {\n // silent (just log it)\n console.error('[platform] Failed to get Cesium latest version', err);\n })\n ;\n }\n return $q.when();\n }\n\n function addListeners() {\n listeners = [\n // Listen if node changed\n BMA.api.node.on.restart($rootScope, restart, this)\n ];\n }\n\n function removeListeners() {\n _.forEach(listeners, function(remove){\n remove();\n });\n listeners = [];\n }\n\n function ready() {\n if (started) return $q.when();\n return startPromise || start();\n }\n\n function restart() {\n console.debug('[platform] restarting csPlatform');\n return stop()\n .then(function () {\n return $timeout(start, 200);\n });\n }\n\n function start() {\n\n // Avoid change state\n disableChangeState();\n\n // We use 'ionicReady()' instead of '$ionicPlatform.ready()', because this one is callable many times\n startPromise = ionicReady()\n\n .then($q.all([\n // Load device\n Device.ready(),\n\n // Start settings\n csSettings.ready()\n ]))\n\n // Load BMA\n .then(function(){\n return BMA.ready().then(checkBmaNodeAlive);\n })\n\n // Load currency\n .then(csCurrency.ready)\n\n // Trying to restore wallet\n .then(csWallet.ready)\n\n .then(function(){\n enableChangeState();\n addListeners();\n startPromise = null;\n started = true;\n })\n .catch(function(err) {\n startPromise = null;\n started = false;\n if($state.current.name !== $rootScope.errorState) {\n $state.go($rootScope.errorState, {error: 'peer'});\n }\n throw err;\n });\n\n return startPromise;\n }\n\n function stop() {\n if (!started) return $q.when();\n removeListeners();\n\n csWallet.stop();\n csCurrency.stop();\n BMA.stop();\n\n return $timeout(function() {\n enableChangeState();\n started = false;\n startPromise = null;\n }, 500);\n }\n\n return {\n disableChangeState: disableChangeState,\n isStarted: isStarted,\n ready: ready,\n restart: restart,\n start: start,\n stop: stop,\n version: {\n latest: getLatestRelease\n }\n };\n }])\n\n .run(['$rootScope', '$state', '$window', '$urlRouter', 'ionicReady', '$ionicPlatform', '$ionicHistory', 'Device', 'UIUtils', '$ionicConfig', 'PluginService', 'csPlatform', 'csWallet', 'csSettings', 'csConfig', 'csCurrency', function($rootScope, $state, $window, $urlRouter, ionicReady, $ionicPlatform, $ionicHistory,\n Device, UIUtils, $ionicConfig, PluginService, csPlatform, csWallet, csSettings, csConfig, csCurrency) {\n 'ngInject';\n\n // Allow access to service data, from HTML templates\n $rootScope.config = csConfig;\n $rootScope.settings = csSettings.data;\n $rootScope.currency = csCurrency.data;\n $rootScope.device = Device;\n $rootScope.errorState = 'app.home';\n $rootScope.smallscreen = UIUtils.screen.isSmall();\n\n // Compute the root path\n var hashIndex = $window.location.href.indexOf('#');\n $rootScope.rootPath = (hashIndex !== -1) ? $window.location.href.substr(0, hashIndex) : $window.location.href;\n console.debug('[app] Root path is [' + $rootScope.rootPath + ']');\n\n // removeIf(device)\n // -- Automatic redirection to HTTPS\n if ((csConfig.httpsMode === true || csConfig.httpsMode == 'true' ||csConfig.httpsMode === 'force') &&\n $window.location.protocol !== 'https:') {\n $rootScope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {\n var path = 'https' + $rootScope.rootPath.substr(4) + $state.href(next, nextParams);\n if (csConfig.httpsModeDebug) {\n console.debug('[app] [httpsMode] --- Should redirect to: ' + path);\n // continue\n }\n else {\n $window.location.href = path;\n }\n });\n }\n // endRemoveIf(device)\n\n // We use 'ionicReady()' instead of '$ionicPlatform.ready()', because this one is callable many times\n ionicReady().then(function() {\n\n // Keyboard\n if (Device.keyboard.enable) {\n // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard\n // for form inputs)\n Device.keyboard.hideKeyboardAccessoryBar(true);\n\n // iOS: do not push header up when opening keyboard\n // (see http://ionicframework.com/docs/api/page/keyboard/)\n if (ionic.Platform.isIOS()) {\n Device.keyboard.disableScroll(true);\n }\n }\n\n // Ionic Platform Grade is not A, disabling views transitions\n if (ionic.Platform.grade.toLowerCase() !== 'a') {\n console.info('[app] Disabling UI effects, because plateform\\'s grade is [' + ionic.Platform.grade + ']');\n UIUtils.setEffects(false);\n }\n\n // Status bar style\n if (window.StatusBar) {\n console.debug(\"[app] Status bar plugin enable\");\n }\n\n // Get latest release\n csPlatform.version.latest()\n .then(function(release) {\n if (release && release.isNewer) {\n console.info('[app] New release detected [{0}]'.format(release.version));\n $rootScope.newRelease = release;\n }\n else {\n console.info('[app] Current version [{0}] is the latest release'.format(csConfig.version));\n }\n });\n\n // Prevent BACK button to exit without confirmation\n $ionicPlatform.registerBackButtonAction(function(event) {\n if ($ionicHistory.backView()) {\n return $ionicHistory.goBack();\n }\n event.preventDefault();\n return UIUtils.alert.confirm('CONFIRM.EXIT_APP')\n .then(function (confirm) {\n if (!confirm) return; // user cancelled\n ionic.Platform.exitApp();\n });\n }, 100);\n\n // Make sure platform is started\n return csPlatform.ready();\n });\n }])\n;\n\n// Workaround to add \"\".startsWith() if not present\nif (typeof String.prototype.startsWith !== 'function') {\n console.debug(\"Adding String.prototype.startsWith() -> was missing on this platform\");\n String.prototype.startsWith = function(prefix, position) {\n return this.indexOf(prefix, position) === 0;\n };\n}\n\n// Workaround to add \"\".startsWith() if not present\nif (typeof String.prototype.trim !== 'function') {\n console.debug(\"Adding String.prototype.trim() -> was missing on this platform\");\n // Make sure we trim BOM and NBSP\n var rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n String.prototype.trim = function() {\n return this.replace(rtrim, '');\n };\n}\n\n// Workaround to add Math.trunc() if not present - fix #144\nif (Math && typeof Math.trunc !== 'function') {\n console.debug(\"Adding Math.trunc() -> was missing on this platform\");\n Math.trunc = function(number) {\n return (number - 0.5).toFixed();\n };\n}\n\n// Workaround to add \"\".format() if not present\nif (typeof String.prototype.format !== 'function') {\n console.debug(\"Adding String.prototype.format() -> was missing on this platform\");\n String.prototype.format = function() {\n var args = arguments;\n return this.replace(/{(\\d+)}/g, function(match, number) {\n return typeof args[number] != 'undefined' ? args[number] : match;\n });\n };\n}\n","\nangular.module('cesium.network.services', ['ngApi', 'cesium.currency.services', 'cesium.http.services'])\n\n.factory('csNetwork', ['$rootScope', '$q', '$interval', '$timeout', '$window', 'csConfig', 'BMA', 'csHttp', 'csCurrency', 'Api', function($rootScope, $q, $interval, $timeout, $window, csConfig, BMA, csHttp, csCurrency, Api) {\n 'ngInject';\n\n var\n interval,\n constants = {\n UNKNOWN_BUID: -1,\n MAX_BLOCK_OFFSET: 1000\n },\n isHttpsMode = $window.location.protocol === 'https:',\n api = new Api(this, \"csNetwork\"),\n\n data = {\n bma: null,\n listeners: [],\n loading: true,\n peers: [],\n filter: {\n member: true,\n mirror: true,\n endpoint: null,\n online: false,\n bma: false,\n ssl: undefined,\n tor: undefined\n },\n sort:{\n type: null,\n asc: true,\n compact: true\n },\n groupBy: 'pubkey',\n expertMode: false,\n knownBlocks: [],\n mainBlock: null,\n minOnlineBlockNumber: 0,\n uidsByPubkeys: null,\n searchingPeersOnNetwork: false,\n difficulties: null,\n ws2pHeads: null,\n timeout: csConfig.timeout\n },\n\n // Return the block uid\n buid = function(block) {\n return block && [block.number, block.hash].join('-');\n },\n\n resetData = function() {\n data.bma = null;\n data.listeners = [];\n data.peers.splice(0);\n data.filter = {\n member: true,\n mirror: true,\n endpoint: null,\n online: true,\n bma: false,\n ssl: undefined,\n tor: undefined\n };\n data.sort = {\n type: null,\n asc: true\n };\n data.groupBy = 'pubkey';\n data.expertMode = false;\n data.memberPeersCount = 0;\n data.knownBlocks = [];\n data.mainBlock = null;\n data.minOnlineBlockNumber = 0;\n data.uidsByPubkeys = {};\n data.loading = true;\n data.searchingPeersOnNetwork = false;\n data.difficulties = null;\n data.ws2pHeads = null;\n data.timeout = csConfig.timeout;\n },\n\n hasPeers = function() {\n return data.peers && data.peers.length > 0;\n },\n\n getPeers = function() {\n return data.peers;\n },\n\n isBusy = function() {\n return data.loading;\n },\n\n getKnownBlocks = function() {\n return data.knownBlocks;\n },\n\n // Load WS2P heads\n loadW2spHeads = function() {\n return data.bma.network.ws2p.heads()\n .then(function (res) {\n data.ws2pHeads = res.heads ? res.heads.reduce(function (res, hit) {\n if (hit.message && hit.sig) {\n try {\n var head = new Ws2pMessage(hit.message);\n res[[head.pubkey, head.ws2pid].join('-')] = head;\n }\n catch(err) {\n // just log, then ignore\n console.error('[network] Ignoring WS2P head.', err && err.message || err);\n }\n }\n return res;\n }, {}) : {};\n })\n .catch(function(err) {\n // When too many request, retry in 3s\n if (err && err.ucode == BMA.errorCodes.HTTP_LIMITATION) {\n return $timeout(function() {\n return loadW2spHeads();\n }, 3000);\n }\n console.error(err); // can occur on duniter v1.6\n data.ws2pHeads = {};\n });\n },\n\n // Load personal difficulties\n loadDifficulties = function() {\n return data.bma.blockchain.stats.difficulties()\n .then(function (res) {\n data.difficulties = res.levels ? res.levels.reduce(function (res, hit) {\n if (hit.uid && hit.level) res[hit.uid] = hit.level;\n return res;\n }, {}) : {};\n })\n .catch(function(err) {\n // When too many request, retry in 3s\n if (err && err.ucode == BMA.errorCodes.HTTP_LIMITATION) {\n return $timeout(function() {\n return loadDifficulties();\n }, 3000);\n }\n console.error(err);\n data.difficulties = {};\n });\n },\n\n loadPeers = function() {\n data.peers = [];\n data.searchingPeersOnNetwork = true;\n data.loading = true;\n data.bma = data.bma || BMA;\n var newPeers = [];\n\n if (interval) {\n $interval.cancel(interval);\n }\n\n interval = $interval(function() {\n // not same job instance\n if (newPeers.length) {\n flushNewPeersAndSort(newPeers);\n }\n else if (data.loading && !data.searchingPeersOnNetwork) {\n data.loading = false;\n $interval.cancel(interval);\n // The peer lookup end, we can make a clean final report\n sortPeers(true/*update main buid*/);\n\n console.debug('[network] Finish: {0} peers found.'.format(data.peers.length));\n }\n }, 1000);\n\n var initJobs = [\n // Load uids\n data.bma.wot.member.uids()\n .then(function(uids) {\n data.uidsByPubkeys = uids;\n })\n .catch(function(err) {\n console.error(err);\n data.uidsByPubkeys = {};\n }),\n\n // Load WS2P heads\n loadW2spHeads()\n ];\n\n // Get difficulties (expert mode only)\n if (data.expertMode) {\n initJobs.push(loadDifficulties());\n }\n\n return $q.all(initJobs)\n .then(function() {\n return data.bma && data.bma.network.peers();\n })\n .then(function(res){\n if (!res || !res.peers || !res.peers.length) return;\n\n // If filter online peers\n if (data.filter.online) {\n var jobs = [];\n _.forEach(res.peers, function(json) {\n // Exclude, if not UP or on a too old block\n if (json.status !== 'UP') return;\n json.blockNumber = json.block && parseInt(json.block.split('-')[0]);\n if (json.blockNumber && json.blockNumber < data.minOnlineBlockNumber) {\n console.debug(\"[network] Exclude a too old peer document, on pubkey {0}\".format(json.pubkey.substring(0,6)));\n return;\n }\n\n jobs.push(addOrRefreshPeerFromJson(json, newPeers));\n\n // Mark WS2P\n _.forEach(json.endpoints||[], function(ep) {\n if (ep.startsWith('WS2P')) {\n var key = json.pubkey + '-' + ep.split(' ')[1];\n if (data.ws2pHeads[key]) {\n data.ws2pHeads[key].hasEndpoint = true;\n }\n }\n });\n });\n\n // Add private WS2P endpoints\n var privateWs2pHeads = _.values(data.ws2pHeads);\n if (privateWs2pHeads && privateWs2pHeads.length) {\n var privateEPCount = 0;\n //console.debug(\"[http] Found WS2P endpoints without endpoint:\", data.ws2pHeads);\n _.forEach(privateWs2pHeads, function(head) {\n\n if (!head.hasEndPoint) {\n var currentNumber = head.buid && parseInt(head.buid.split('-')[0]);\n // Exclude if on a too old block\n if (currentNumber && currentNumber < data.minOnlineBlockNumber) {\n console.debug(\"[network] Exclude a too old WS2P message, on pubkey {0}\".format(head.pubkey.substring(0,6)));\n return;\n }\n\n var peer = new Peer({\n buid: head.buid,\n currentNumber: currentNumber,\n pubkey: head.pubkey,\n version: head.version,\n powPrefix: head.powPrefix,\n online: true,\n uid: data.uidsByPubkeys[head.pubkey],\n bma: {\n useWs2p: true,\n private: true,\n ws2pid: head.ws2pid\n },\n endpoints: [\n // fake endpoint\n 'WS2P ' + head.ws2pid\n ]\n });\n peer.id = peer.keyID();\n if (peer.uid && data.expertMode && data.difficulties) {\n peer.difficulty = data.difficulties[peer.uid];\n }\n if (applyPeerFilter(peer)) {\n newPeers.push(peer);\n privateEPCount++;\n }\n }\n });\n\n if (privateEPCount) {\n console.debug(\"[http] Found {0} WS2P endpoints without endpoint (private ?)\".format(privateEPCount));\n }\n }\n\n if (jobs.length) return $q.all(jobs);\n }\n\n // If filter offline peers\n else {\n return $q.all(_(res && res.peers || []).reduce(function(res, json) {\n return res.concat(addOrRefreshPeerFromJson(json, newPeers));\n }, []));\n }\n })\n .then(function(){\n data.searchingPeersOnNetwork = false;\n })\n .catch(function(err){\n console.error(err);\n data.searchingPeersOnNetwork = false;\n });\n },\n\n /**\n * Apply filter on a peer. (peer uid should have been filled BEFORE)\n */\n applyPeerFilter = function(peer) {\n // no filter\n if (!data.filter) return true;\n\n // Filter member and mirror\n if ((data.filter.member && !data.filter.mirror && !peer.uid) ||\n (data.filter.mirror && !data.filter.member && peer.uid)) {\n return false;\n }\n\n // Filter on endpoint\n if (data.filter.endpoint && !peer.hasEndpoint(data.filter.endpoint)) {\n return false;\n }\n\n // Filter on status\n if ((data.filter.online && peer.status !== 'UP' && peer.oldBlock) || (!data.filter.online && peer.status === 'UP' && !peer.oldBlock)) {\n return false;\n }\n\n // Filter on bma\n if (angular.isDefined(data.filter.bma) && peer.isBma() != data.filter.bma) {\n return false;\n }\n\n // Filter on ws2p\n if (angular.isDefined(data.filter.ws2p) && peer.isWs2p() != data.filter.ws2p) {\n return false;\n }\n\n // Filter on ssl\n if (angular.isDefined(data.filter.ssl) && peer.isSsl() != data.filter.ssl) {\n return false;\n }\n\n // Filter on tor\n if (angular.isDefined(data.filter.tor) && peer.isTor() != data.filter.tor) {\n return false;\n }\n\n return true;\n },\n\n addOrRefreshPeerFromJson = function(json, list) {\n list = list || data.newPeers;\n\n // Analyze the peer document, and exclude using the online filter\n json.blockNumber = json.block && parseInt(json.block.split('-')[0]);\n json.oldBlock = (json.status === 'UP' && json.blockNumber && json.blockNumber < data.minOnlineBlockNumber);\n\n var peers = createPeerEntities(json);\n var hasUpdates = false;\n\n var jobs = peers.reduce(function(jobs, peer) {\n var existingPeer = _.findWhere(data.peers, {id: peer.id});\n var existingMainBuid = existingPeer ? existingPeer.buid : null;\n var existingOnline = existingPeer ? existingPeer.online : false;\n\n return jobs.concat(\n refreshPeer(peer)\n .then(function (refreshedPeer) {\n if (existingPeer) {\n // remove existing peers, when reject or offline\n if (!refreshedPeer || (refreshedPeer.online !== data.filter.online && data.filter.online !== 'all')) {\n var existingIndex = data.peers.indexOf(existingPeer);\n if (existingIndex !== -1) {\n console.debug('[network] Peer [{0}] removed (cause: {1})'.format(peer.server, !refreshedPeer ? 'filtered' : (refreshedPeer.online ? 'UP' : 'DOWN')));\n data.peers.splice(existingIndex, 1);\n hasUpdates = true;\n }\n }\n else if (refreshedPeer.buid !== existingMainBuid){\n console.debug('[network] {0} endpoint [{1}] new current block'.format(\n refreshedPeer.bma && (refreshedPeer.bma.useBma ? 'BMA' : 'WS2P') || 'null',\n refreshedPeer.server));\n hasUpdates = true;\n }\n else if (existingOnline !== refreshedPeer.online){\n console.debug('[network] {0} endpoint [{1}] is now {2}'.format(\n refreshedPeer.bma && (refreshedPeer.bma.useBma ? 'BMA' : 'WS2P') || 'null',\n refreshedPeer.server,\n refreshedPeer.online ? 'UP' : 'DOWN'));\n hasUpdates = true;\n }\n else {\n console.debug(\"[network] {0} endpoint [{1}] unchanged\".format(\n refreshedPeer.bma && (refreshedPeer.bma.useBma ? 'BMA' : 'WS2P') || 'null',\n refreshedPeer.server));\n }\n }\n else if (refreshedPeer && (refreshedPeer.online === data.filter.online || data.filter.online === 'all')) {\n console.debug(\"[network] {0} endpoint [{1}] is {2}\".format(\n refreshedPeer.bma && (refreshedPeer.bma.useBma ? 'BMA' : 'WS2P') || 'null',\n refreshedPeer.server,\n refreshedPeer.online ? 'UP' : 'DOWN'\n ));\n list.push(refreshedPeer);\n hasUpdates = true;\n }\n })\n );\n }, []);\n return (jobs.length === 1 ? jobs[0] : $q.all(jobs))\n .then(function() {\n return hasUpdates;\n });\n },\n\n createPeerEntities = function(json, ep) {\n if (!json) return [];\n var peer = new Peer(json);\n\n // Read bma endpoints\n if (!ep) {\n var endpointsAsString = peer.getEndpoints();\n if (!endpointsAsString) return []; // no BMA\n\n var endpoints = endpointsAsString.reduce(function (res, epStr) {\n var ep = BMA.node.parseEndPoint(epStr);\n return ep ? res.concat(ep) : res;\n }, []);\n\n // recursive call, on each endpoint\n if (endpoints.length > 1) {\n return endpoints.reduce(function (res, ep) {\n return res.concat(createPeerEntities(json, ep));\n }, []);\n }\n else {\n // if only one endpoint: use it and continue\n ep = endpoints[0];\n }\n }\n peer.bma = ep;\n peer.server = peer.getServer();\n peer.dns = peer.getDns();\n peer.buid = peer.buid || peer.block;\n peer.blockNumber = peer.buid && parseInt(peer.buid.split('-')[0]);\n peer.uid = peer.pubkey && data.uidsByPubkeys[peer.pubkey];\n peer.id = peer.keyID();\n return [peer];\n },\n\n refreshPeer = function(peer) {\n\n // Apply filter\n if (!applyPeerFilter(peer)) return $q.when();\n\n if (!data.filter.online || (!data.filter.online && peer.status === 'DOWN') || !peer.getHost() /*fix #537*/) {\n peer.online = false;\n return $q.when(peer);\n }\n\n if (peer.bma.useWs2p && data.ws2pHeads) {\n var ws2pHeadKey = [peer.pubkey, peer.bma.ws2pid].join('-');\n var head = data.ws2pHeads[ws2pHeadKey];\n delete data.ws2pHeads[ws2pHeadKey];\n if (head) {\n peer.buid = head.buid;\n peer.currentNumber=head.buid && parseInt(head.buid.split('-')[0]);\n peer.version = head.version;\n peer.powPrefix = head.powPrefix;\n }\n peer.online = !!peer.buid;\n\n if (peer.uid && data.expertMode && data.difficulties) {\n peer.difficulty = data.difficulties[peer.uid];\n }\n\n return $q.when(peer);\n }\n\n // Cesium running in SSL: Do not try to access not SSL node,\n if (!peer.bma.useWs2p && isHttpsMode && !peer.bma.useSsl) {\n peer.online = (peer.status === 'UP');\n peer.buid = constants.UNKNOWN_BUID;\n delete peer.version;\n\n if (peer.uid && data.expertMode && data.difficulties) {\n peer.difficulty = data.difficulties[peer.uid];\n }\n\n return $q.when(peer);\n }\n\n // Do not try to access TOR or WS2P endpoints\n if (peer.bma.useTor || peer.bma.useWs2p) {\n peer.online = (peer.status === 'UP');\n peer.buid = constants.UNKNOWN_BUID;\n delete peer.version;\n\n if (peer.uid && data.expertMode && data.difficulties) {\n peer.difficulty = data.difficulties[peer.uid];\n }\n return $q.when(peer);\n }\n\n peer.api = peer.api || BMA.lightInstance(peer.getHost(), peer.getPort(), peer.isSsl(), data.timeout);\n\n // Get current block\n return peer.api.blockchain.current(false/*no cache*/)\n .then(function(block) {\n peer.currentNumber = block.number;\n peer.online = true;\n peer.buid = buid(block);\n peer.medianTime = block.medianTime;\n if (data.knownBlocks.indexOf(peer.buid) === -1) {\n data.knownBlocks.push(peer.buid);\n }\n return peer;\n })\n .catch(function(err) {\n // Special case for currency init (root block not exists): use fixed values\n if (err && err.ucode == BMA.errorCodes.NO_CURRENT_BLOCK) {\n peer.online = true;\n peer.buid = buid({number:0, hash: BMA.constants.ROOT_BLOCK_HASH});\n peer.difficulty = 0;\n return peer;\n }\n if (!peer.secondTry) {\n var bma = peer.bma || peer.getBMA();\n if (bma.dns && peer.server.indexOf(bma.dns) === -1) {\n // try again, using DNS instead of IPv4 / IPV6\n peer.secondTry = true;\n peer.api = BMA.lightInstance(bma.dns, bma.port, bma.useSsl);\n return refreshPeer(peer); // recursive call\n }\n }\n\n peer.buid = null;\n peer.blockNumber = null;\n peer.currentNumber = null;\n peer.online=false;\n peer.uid = data.uidsByPubkeys[peer.pubkey];\n return peer;\n })\n .then(function(peer) {\n // Exit if offline, or not expert mode or too small device\n if (!data.filter.online || !peer || !peer.online || !data.expertMode) return peer;\n var jobs = [];\n\n // Get hardship (only for a member peer)\n if (peer.uid) {\n jobs.push(peer.api.blockchain.stats.hardship({pubkey: peer.pubkey})\n .then(function (res) {\n peer.difficulty = res ? res.level : null;\n })\n .catch(function() {\n peer.difficulty = null; // continue\n }));\n }\n\n // Get Version\n jobs.push(peer.api.node.summary()\n .then(function(res){\n peer.software = res && res.duniter && res.duniter.software || undefined;\n peer.version = res && res.duniter && res.duniter.version || '?';\n })\n .catch(function() {\n peer.software = undefined;\n peer.version = '?'; // continue\n }));\n\n return $q.all(jobs)\n .then(function(){\n return peer;\n });\n });\n },\n\n flushNewPeersAndSort = function(newPeers, updateMainBuid) {\n newPeers = newPeers || data.newPeers;\n if (!newPeers.length) return;\n var ids = _.map(data.peers, function(peer){\n return peer.id;\n });\n var hasUpdates = false;\n var newPeersAdded = 0;\n _.forEach(newPeers.splice(0), function(peer) {\n if (!ids[peer.id]) {\n data.peers.push(peer);\n ids[peer.id] = peer;\n hasUpdates = true;\n newPeersAdded++;\n }\n });\n if (hasUpdates) {\n console.debug('[network] Flushing {0} new peers...'.format(newPeersAdded));\n sortPeers(updateMainBuid);\n }\n },\n\n computeScoreAlphaValue = function(value, nbChars, asc) {\n if (!value) return 0;\n var score = 0;\n value = value.toLowerCase();\n if (nbChars > value.length) {\n nbChars = value.length;\n }\n score += value.charCodeAt(0);\n for (var i=1; i < nbChars; i++) {\n score += Math.pow(0.001, i) * value.charCodeAt(i);\n }\n return asc ? (1000 - score) : score;\n },\n\n sortPeers = function(updateMainBuid) {\n // Construct a map of buid, with peer count and medianTime\n var buids = {};\n data.memberPeersCount = 0;\n _.forEach(data.peers, function(peer){\n if (peer.buid) {\n var buid = buids[peer.buid];\n if (!buid || !buid.medianTime) {\n buid = {\n buid: peer.buid,\n medianTime: peer.medianTime,\n count: 0\n };\n buids[peer.buid] = buid;\n }\n // If not already done, try to fill medianTime (need to compute consensusBlockDelta)\n else if (!buid.medianTime && peer.medianTime) {\n buid.medianTime = peer.medianTime;\n }\n if (buid.buid !== constants.UNKNOWN_BUID) {\n buid.count++;\n }\n }\n data.memberPeersCount += peer.uid ? 1 : 0;\n });\n var mainBlock = data.mainBlock;\n if (data.filter.online) {\n // Compute pct of use, per buid\n _.forEach(_.values(buids), function(buid) {\n buid.pct = buid.count * 100 / data.peers.length;\n });\n mainBlock = _.max(buids, function(obj) {\n return obj.count;\n });\n _.forEach(data.peers, function(peer){\n peer.hasMainConsensusBlock = peer.buid === mainBlock.buid;\n peer.hasConsensusBlock = peer.buid && !peer.hasMainConsensusBlock && buids[peer.buid].count > 1;\n if (peer.hasConsensusBlock) {\n peer.consensusBlockDelta = buids[peer.buid].medianTime - mainBlock.medianTime;\n }\n });\n }\n data.peers = _.uniq(data.peers, false, function(peer) {\n return peer.id;\n });\n data.peers = _.sortBy(data.peers, function(peer) {\n var score = 0;\n if (data.sort.type) {\n score += (data.sort.type === 'uid' ? computeScoreAlphaValue(peer.uid||peer.pubkey, 3, data.sort.asc) : 0);\n score += (data.sort.type === 'api') &&\n ((peer.isWs2p() && (data.sort.asc ? 1 : -1) || 0) +\n (peer.hasEndpoint('ES_USER_API') && (data.sort.asc ? 0.01 : -0.01) || 0) +\n (peer.isSsl() && (data.sort.asc ? 0.75 : -0.75) || 0)) || 0;\n score += (data.sort.type === 'difficulty' ? (peer.difficulty ? (data.sort.asc ? (10000-peer.difficulty) : peer.difficulty): 0) : 0);\n score += (data.sort.type === 'current_block' ? (peer.currentNumber ? (data.sort.asc ? (1000000000 - peer.currentNumber) : peer.currentNumber) : 0) : 0);\n }\n score = (10000000000 * score);\n score += (1000000000 * (peer.online ? 1 : 0));\n score += (100000000 * (peer.hasMainConsensusBlock ? 1 : 0));\n score += (1000000 * (peer.hasConsensusBlock ? buids[peer.buid].pct : 0));\n if (data.expertMode) {\n score += (100 * (peer.difficulty ? (10000-peer.difficulty) : 0));\n score += (1 * (peer.uid ? computeScoreAlphaValue(peer.uid, 2, true) : 0));\n }\n else {\n score += (100 * (peer.uid ? computeScoreAlphaValue(peer.uid, 2, true) : 0));\n score += (1 * (!peer.uid ? computeScoreAlphaValue(peer.pubkey, 2, true) : 0));\n }\n score += (peer.isBma() ? (peer.isSsl() ? 0.01 : 0.001) :0); // If many endpoints: BMAS first, then BMA\n return -score;\n });\n\n if (data.groupBy) {\n var previousPeer;\n data.peers.forEach(function(peer) {\n peer.compacted = (previousPeer && peer[data.groupBy] && peer[data.groupBy] === previousPeer[data.groupBy]);\n previousPeer = peer;\n });\n }\n\n // Raise event on new main block\n if (updateMainBuid && mainBlock && mainBlock.buid && (!data.mainBlock || data.mainBlock.buid !== mainBlock.buid)) {\n data.mainBlock = mainBlock;\n api.data.raise.mainBlockChanged(mainBlock);\n }\n\n // Raise event when changed\n api.data.raise.changed(data); // raise event\n },\n\n removeListeners = function() {\n _.forEach(data.listeners, function(remove){\n remove();\n });\n data.listeners = [];\n },\n\n addListeners = function() {\n data.listeners = [\n\n // Listen for new block\n data.bma.websocket.block().onListener(function(block) {\n if (!block || data.loading) return;\n var buid = [block.number, block.hash].join('-');\n if (data.knownBlocks.indexOf(buid) === -1) {\n console.debug('[network] Receiving block: ' + buid.substring(0, 20));\n data.knownBlocks.push(buid);\n // If first block: do NOT refresh peers (will be done in start() method)\n var skipRefreshPeers = data.knownBlocks.length === 1;\n if (!skipRefreshPeers) {\n data.loading = true;\n // We wait 2s when a new block is received, just to wait for network propagation\n $timeout(function() {\n console.debug('[network] new block received by WS: will refresh peers');\n loadPeers();\n }, 2000, false /*invokeApply*/);\n }\n }\n }),\n\n // Listen for new peer\n data.bma.websocket.peer().onListener(function(json) {\n if (!json || data.loading) return;\n var newPeers = [];\n addOrRefreshPeerFromJson(json, newPeers)\n .then(function(hasUpdates) {\n if (!hasUpdates) return;\n if (newPeers.length>0) {\n flushNewPeersAndSort(newPeers, true);\n }\n else {\n console.debug('[network] [ws] Peers updated received');\n sortPeers(true);\n }\n });\n })\n ];\n },\n\n sort = function(options) {\n options = options || {};\n data.filter = options.filter ? angular.merge(data.filter, options.filter) : data.filter;\n data.sort = options.sort ? angular.merge(data.sort, options.sort) : data.sort;\n sortPeers(false);\n },\n\n start = function(bma, options) {\n options = options || {};\n return BMA.ready()\n .then(function() {\n close();\n\n data.bma = bma || BMA;\n data.filter = options.filter ? angular.merge(data.filter, options.filter) : data.filter;\n data.sort = options.sort ? angular.merge(data.sort, options.sort) : data.sort;\n data.expertMode = angular.isDefined(options.expertMode) ? options.expertMode : data.expertMode;\n data.timeout = angular.isDefined(options.timeout) ? options.timeout : csConfig.timeout;\n\n // Init a min block number\n data.minOnlineBlockNumber = data.mainBlock && data.mainBlock.buid && (parseInt(data.mainBlock.buid.split('-')[0]) - constants.MAX_BLOCK_OFFSET) || undefined;\n if (data.minOnlineBlockNumber === undefined) {\n return csCurrency.blockchain.current(true/*use cache*/)\n .then(function(current) {\n data.minOnlineBlockNumber = current.number - constants.MAX_BLOCK_OFFSET;\n });\n }\n })\n .then(function() {\n console.info('[network] Starting network from [{0}]'.format(bma.server));\n var now = Date.now();\n\n addListeners();\n\n return loadPeers()\n .then(function(peers){\n console.debug('[network] Started in '+(Date.now() - now)+'ms');\n return peers;\n });\n });\n },\n\n close = function() {\n if (data.bma) {\n console.info('[network-service] Stopping...');\n removeListeners();\n resetData();\n }\n },\n\n isStarted = function() {\n return !data.bma;\n },\n\n $q_started = function(callback) {\n if (!isStarted()) { // start first\n return start()\n .then(function() {\n return $q(callback);\n });\n }\n else {\n return $q(callback);\n }\n },\n\n getMainBlockUid = function() {\n return $q_started(function(resolve, reject){\n resolve (data.mainBuid);\n });\n },\n\n // Get peers on the main consensus blocks\n getTrustedPeers = function() {\n return $q_started(function(resolve, reject){\n resolve(data.peers.reduce(function(res, peer){\n return (peer.hasMainConsensusBlock && peer.uid) ? res.concat(peer) : res;\n }, []));\n });\n }\n ;\n\n // Register extension points\n api.registerEvent('data', 'changed');\n api.registerEvent('data', 'mainBlockChanged');\n api.registerEvent('data', 'rollback');\n\n return {\n data: data,\n start: start,\n close: close,\n hasPeers: hasPeers,\n getPeers: getPeers,\n sort: sort,\n getTrustedPeers: getTrustedPeers,\n getKnownBlocks: getKnownBlocks,\n getMainBlockUid: getMainBlockUid,\n loadPeers: loadPeers,\n isBusy: isBusy,\n // api extension\n api: api\n };\n}]);\n","//var Base58, Base64, scrypt_module_factory = null, nacl_factory = null;\n\nangular.module('cesium.crypto.services', ['cesium.utils.services'])\n\n .factory('CryptoUtils', ['$q', '$timeout', 'ionicReady', function($q, $timeout, ionicReady) {\n 'ngInject';\n\n /**\n * CryptoAbstract, abstract class with useful methods\n * @type {number}\n */\n function CryptoAbstractService() {\n this.loaded = false;\n var that = this;\n\n this.copy = function(source) {\n _.forEach(_.keys(source), function(key) {\n that[key] = source[key];\n });\n };\n\n this.isLoaded = function() {\n return this.loaded;\n };\n\n this.util = this.util || {};\n\n /**\n * Converts an array buffer to a string\n *\n * @private\n * @param {ArrayBuffer} buf The buffer to convert\n * @param {Function} callback The function to call when conversion is complete\n */\n this.util.array_to_string = function(buf, callback) {\n var bb = new Blob([new Uint8Array(buf)]);\n var f = new FileReader();\n f.onload = function(e) {\n callback(e.target.result);\n };\n f.readAsText(bb);\n };\n }\n\n CryptoAbstractService.prototype.constants = {\n crypto_sign_BYTES: 64,\n crypto_secretbox_NONCEBYTES: 24,\n crypto_box_MACBYTES: 16,\n SEED_LENGTH: 32, // Length of the key\n SCRYPT_PARAMS:{\n SIMPLE: {\n N: 2048,\n r: 8,\n p: 1,\n memory: -1 // default\n },\n DEFAULT: {\n N: 4096,\n r: 16,\n p: 1,\n memory: -1 // default\n },\n }\n };\n\n CryptoAbstractService.prototype.async_load_base58 = function(on_ready) {\n var that = this;\n if (Base58 !== null){return on_ready(Base58);}\n else {$timeout(function(){that.async_load_base58(on_ready);}, 100);}\n };\n\n CryptoAbstractService.prototype.async_load_scrypt = function(on_ready, options) {\n var that = this;\n if (scrypt_module_factory !== null){scrypt_module_factory(on_ready, options);}\n else {$timeout(function(){that.async_load_scrypt(on_ready, options);}, 100);}\n };\n\n CryptoAbstractService.prototype.async_load_nacl_js = function(on_ready, options) {\n var that = this;\n if (nacl_factory !== null) {nacl_factory.instantiate(on_ready, options);}\n else {$timeout(function(){that.async_load_nacl_js(on_ready, options);}, 100);}\n };\n\n CryptoAbstractService.prototype.async_load_base64 = function(on_ready) {\n var that = this;\n if (Base64 !== null) {on_ready(Base64);}\n else {$timeout(function(){that.async_load_base64(on_ready);}, 100);}\n };\n\n CryptoAbstractService.prototype.async_load_sha256 = function(on_ready) {\n var that = this;\n if (sha256 !== null){return on_ready(sha256);}\n else {$timeout(function(){that.async_load_sha256(on_ready);}, 100);}\n };\n\n CryptoAbstractService.prototype.seed_from_signSk = function(signSk) {\n var seed = new Uint8Array(this.constants.SEED_LENGTH);\n for (var i = 0; i < seed.length; i++) seed[i] = signSk[i];\n return seed;\n };\n\n // Web crypto API - see https://developer.mozilla.org/en-US/docs/Web/API/Web_Crypto_API\n var crypto = window.crypto || window.msCrypto || window.Crypto;\n if (crypto && crypto.getRandomValues) {\n CryptoAbstractService.prototype.crypto = crypto;\n CryptoAbstractService.prototype.util = {};\n CryptoAbstractService.prototype.util.random_nonce = function() {\n var nonce = new Uint8Array(crypto_secretbox_NONCEBYTES);\n this.crypto.getRandomValues(nonce);\n return $q.when(nonce);\n };\n }\n\n function FullJSServiceFactory() {\n this.id = 'FullJS';\n\n // libraries handlers\n this.scrypt = null;\n this.nacl = null;\n this.base58 = null;\n this.base64 = null;\n var that = this;\n\n this.util = this.util || {};\n this.util.decode_utf8 = function (s) {\n var i, d = unescape(encodeURIComponent(s)), b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d.charCodeAt(i);\n return b;\n };\n this.util.encode_utf8 = function (s) {\n return that.nacl.encode_utf8(s);\n };\n this.util.encode_base58 = function (a) { // TODO : move to abstract factory\n return that.base58.encode(a);\n };\n this.util.decode_base58 = function (a) { // TODO : move to abstract factory\n var i;\n var d = that.base58.decode(a);\n var b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d[i];\n return b;\n };\n this.util.decode_base64 = function (a) {\n return that.base64.decode(a);\n };\n this.util.encode_base64 = function (b) {\n return that.base64.encode(b);\n };\n\n this.util.hash_sha256 = function (message) {\n return $q(function (resolve) {\n var msg = that.util.decode_utf8(message);\n var hash = that.nacl.to_hex(that.nacl.crypto_hash_sha256(msg));\n resolve(hash.toUpperCase());\n });\n };\n this.util.random_nonce = function () {\n if (that.crypto && that.crypto.getRandomValues) {\n var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES);\n that.crypto.getRandomValues(nonce);\n return $q.when(nonce);\n }\n else {\n return $q.when(that.nacl.crypto_box_random_nonce());\n }\n };\n this.util.crypto_hash_sha256 = function(msg_int8) {\n return that.nacl.crypto_hash_sha256(msg_int8);\n };\n this.util.crypto_scrypt = function(password, salt, N, r, p, seedLength) {\n\n return $q(function(resolve, reject) {\n try {\n var seed = that.scrypt.crypto_scrypt(\n password,\n salt,\n N,\n r,\n p,\n seedLength);\n resolve(seed);\n }\n catch(err) {\n reject(err);\n }\n });\n };\n\n /**\n * Compute the box key pair, from a sign key pair\n */\n this.box_keypair_from_sign = function (signKeyPair) {\n if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair);\n return $q(function (resolve, reject) {\n try {\n // TODO: waiting for a new version of js-nacl, with missing functions expose\n //resolve(that.nacl.crypto_box_keypair_from_sign_sk(signKeyPair.signSk);\n\n resolve(crypto_box_keypair_from_sign_sk(signKeyPair.signSk));\n }\n catch(err) {\n reject(err);\n }\n });\n };\n\n /**\n * Compute the box public key, from a sign public key\n */\n this.box_pk_from_sign = function (signPk) {\n return $q(function(resolve, reject) {\n try {\n // TODO: waiting for a new version of js-nacl, with missing functions expose\n //resolve(that.nacl.crypto_box_pk_from_sign_pk(signPk));\n\n resolve(crypto_box_pk_from_sign_pk(signPk));\n }\n catch(err) {\n reject(err);\n }\n });\n };\n\n this.box_sk_from_sign = function (signSk) {\n return $q(function(resolve, reject) {\n try {\n // TODO: waiting for a new version of js-nacl, with missing functions expose\n //resolve(that.nacl.crypto_box_sk_from_sign_sk(signSk));\n resolve(crypto_box_sk_from_sign_sk(signSk));\n }\n catch(err) {\n reject(err);\n }\n });\n };\n\n /**\n * Encrypt a message, from a key pair\n */\n this.box = function(message, nonce, recipientPk, senderSk) {\n return $q(function (resolve, reject) {\n if (!message) {\n resolve(message);\n return;\n }\n var messageBin = that.nacl.encode_utf8(message);\n if (typeof recipientPk === \"string\") {\n recipientPk = that.util.decode_base58(recipientPk);\n }\n\n try {\n var ciphertextBin = that.nacl.crypto_box(messageBin, nonce, recipientPk, senderSk);\n var ciphertext = that.util.encode_base64(ciphertextBin);\n resolve(ciphertext);\n }\n catch (err) {\n reject(err);\n }\n });\n };\n\n /**\n * Decrypt a message, from a key pair\n */\n this.box_open = function (cypherText, nonce, senderPk, recipientSk) {\n return $q(function (resolve, reject) {\n if (!cypherText) {\n resolve(cypherText);\n return;\n }\n\n var ciphertextBin = that.util.decode_base64(cypherText);\n if (typeof senderPk === \"string\") {\n senderPk = that.util.decode_base58(senderPk);\n }\n\n try {\n var message = that.nacl.crypto_box_open(ciphertextBin, nonce, senderPk, recipientSk);\n resolve(that.nacl.decode_utf8(message));\n }\n catch (err) {\n reject(err);\n }\n\n });\n };\n\n /**\n * Create key pairs (sign and box), from salt+password (Scrypt auth)\n */\n this.scryptKeypair = function(salt, password, scryptParams) {\n return that.util.crypto_scrypt(\n that.util.encode_utf8(password),\n that.util.encode_utf8(salt),\n scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N,\n scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r,\n scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p,\n that.constants.SEED_LENGTH)\n .then(function(seed){\n var signKeypair = that.nacl.crypto_sign_seed_keypair(seed);\n var boxKeypair = that.nacl.crypto_box_seed_keypair(seed);\n return {\n signPk: signKeypair.signPk,\n signSk: signKeypair.signSk,\n boxPk: boxKeypair.boxPk,\n boxSk: boxKeypair.boxSk\n };\n });\n };\n\n /**\n * Create key pairs from a seed\n */\n this.seedKeypair = function(seed) {\n return $q(function(resolve, reject) {\n var signKeypair = that.nacl.crypto_sign_seed_keypair(seed);\n var boxKeypair = that.nacl.crypto_box_seed_keypair(seed);\n resolve({\n signPk: signKeypair.signPk,\n signSk: signKeypair.signSk,\n boxPk: boxKeypair.boxPk,\n boxSk: boxKeypair.boxSk\n });\n });\n };\n\n /**\n * Get sign pk from salt+password (scrypt auth)\n */\n this.scryptSignPk = function(salt, password, scryptParams) {\n return $q(function(resolve, reject) {\n try {\n var seed = that.scrypt.crypto_scrypt(\n that.util.encode_utf8(password),\n that.util.encode_utf8(salt),\n scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N,\n scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r,\n scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p,\n that.constants.SEED_LENGTH);\n var signKeypair = that.nacl.crypto_sign_seed_keypair(seed);\n resolve(signKeypair.signPk);\n }\n catch(err) {\n reject(err);\n }\n });\n };\n\n /**\n * Verify a signature of a message, for a pubkey\n */\n this.verify = function (message, signature, pubkey) {\n return $q(function(resolve, reject) {\n var msg = that.util.decode_utf8(message);\n var sig = that.util.decode_base64(signature);\n var pub = that.util.decode_base58(pubkey);\n var sm = new Uint8Array(that.constants.crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < that.constants.crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+that.constants.crypto_sign_BYTES] = msg[i];\n\n // Call to verification lib...\n var verified = that.nacl.crypto_sign_open(sm, pub) !== null;\n resolve(verified);\n });\n };\n\n /**\n * Sign a message, from a key pair\n */\n this.sign = function(message, keypair) {\n return $q(function(resolve, reject) {\n var m = that.util.decode_utf8(message);\n var sk = keypair.signSk;\n var signedMsg = that.nacl.crypto_sign(m, sk);\n var sig = new Uint8Array(that.constants.crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n var signature = that.base64.encode(sig);\n resolve(signature);\n });\n };\n\n this.load = function() {\n var deferred = $q.defer();\n var naclOptions = {};\n var scryptOptions = {};\n if (ionic.Platform.grade.toLowerCase()!='a') {\n console.info('Reduce NaCl memory to 16mb, because plateform grade is not [a] but [{0}]'.format(ionic.Platform.grade));\n naclOptions.requested_total_memory = 16 * 1048576; // 16 Mo\n }\n var loadedLib = 0;\n var checkAllLibLoaded = function() {\n loadedLib++;\n if (loadedLib === 4) {\n that.loaded = true;\n deferred.resolve();\n }\n };\n this.async_load_nacl_js(function(lib) {\n that.nacl = lib;\n checkAllLibLoaded();\n }, naclOptions);\n this.async_load_scrypt(function(lib) {\n that.scrypt = lib;\n that.scrypt.requested_total_memory = scryptOptions.requested_total_memory;\n checkAllLibLoaded();\n }, scryptOptions);\n this.async_load_base58(function(lib) {\n that.base58 = lib;\n checkAllLibLoaded();\n });\n that.async_load_base64(function(lib) {\n that.base64 = lib;\n checkAllLibLoaded();\n });\n return deferred.promise;\n };\n\n // Shortcuts\n this.util.hash = that.util.hash_sha256;\n this.box = {\n keypair: {\n fromSignKeypair: that.box_keypair_from_sign,\n skFromSignSk: that.box_sk_from_sign,\n pkFromSignPk: that.box_pk_from_sign\n },\n pack: that.box,\n open: that.box_open\n };\n\n /*--\n start WORKAROUND - Publish missing functions (see PR js-nacl: https://github.com/tonyg/js-nacl/pull/54)\n -- */\n\n function crypto_box_keypair_from_sign_sk(sk) {\n var ska = check_injectBytes(\"crypto_box_keypair_from_sign_sk\", \"sk\", sk,\n that.nacl.nacl_raw._crypto_sign_secretkeybytes());\n var skb = new Target(that.nacl.nacl_raw._crypto_box_secretkeybytes());\n check(\"_crypto_sign_ed25519_sk_to_curve25519\",\n that.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));\n FREE(ska);\n return that.nacl.crypto_box_keypair_from_raw_sk(skb.extractBytes());\n }\n\n function crypto_box_pk_from_sign_pk(pk) {\n var pka = check_injectBytes(\"crypto_box_pk_from_sign_pk\", \"pk\", pk,\n that.nacl.nacl_raw._crypto_sign_publickeybytes());\n var pkb = new Target(that.nacl.nacl_raw._crypto_box_publickeybytes());\n check(\"_crypto_sign_ed25519_pk_to_curve25519\",\n that.nacl.nacl_raw._crypto_sign_ed25519_pk_to_curve25519(pkb.address, pka));\n FREE(pka);\n return pkb.extractBytes();\n }\n\n function crypto_box_sk_from_sign_sk(sk) {\n var ska = check_injectBytes(\"crypto_box_sk_from_sign_sk\", \"sk\", sk,\n that.nacl.nacl_raw._crypto_sign_secretkeybytes());\n var skb = new Target(that.nacl.nacl_raw._crypto_box_secretkeybytes());\n check(\"_crypto_sign_ed25519_sk_to_curve25519\",\n that.nacl.nacl_raw._crypto_sign_ed25519_sk_to_curve25519(skb.address, ska));\n FREE(ska);\n return skb.extractBytes();\n }\n\n function check_length(function_name, what, thing, expected_length) {\n if (thing.length !== expected_length) {\n throw {message: \"nacl.\" + function_name + \" expected \" +\n expected_length + \"-byte \" + what + \" but got length \" + thing.length};\n }\n }\n\n function check(function_name, result) {\n if (result !== 0) {\n throw {message: \"nacl_raw.\" + function_name + \" signalled an error\"};\n }\n }\n\n function check_injectBytes(function_name, what, thing, expected_length, leftPadding) {\n check_length(function_name, what, thing, expected_length);\n return injectBytes(thing, leftPadding);\n }\n\n function injectBytes(bs, leftPadding) {\n var p = leftPadding || 0;\n var address = MALLOC(bs.length + p);\n that.nacl.nacl_raw.HEAPU8.set(bs, address + p);\n for (var i = address; i < address + p; i++) {\n that.nacl.nacl_raw.HEAPU8[i] = 0;\n }\n return address;\n }\n\n function MALLOC(nbytes) {\n var result = that.nacl.nacl_raw._malloc(nbytes);\n if (result === 0) {\n throw {message: \"malloc() failed\", nbytes: nbytes};\n }\n return result;\n }\n\n function FREE(pointer) {\n that.nacl.nacl_raw._free(pointer);\n }\n\n function free_all(addresses) {\n for (var i = 0; i < addresses.length; i++) {\n FREE(addresses[i]);\n }\n }\n\n function extractBytes(address, length) {\n var result = new Uint8Array(length);\n result.set(that.nacl.nacl_raw.HEAPU8.subarray(address, address + length));\n return result;\n }\n\n function Target(length) {\n this.length = length;\n this.address = MALLOC(length);\n }\n\n Target.prototype.extractBytes = function (offset) {\n var result = extractBytes(this.address + (offset || 0), this.length - (offset || 0));\n FREE(this.address);\n this.address = null;\n return result;\n };\n\n /*--\n end of WORKAROUND\n -- */\n\n }\n FullJSServiceFactory.prototype = new CryptoAbstractService();\n\n\n /* -----------------------------------------------------------------------------------------------------------------\n * Service that use Cordova MiniSodium plugin\n * ----------------------------------------------------------------------------------------------------------------*/\n\n /***\n * Factory for crypto, using Cordova plugin\n */\n function CordovaServiceFactory() {\n\n this.id = 'MiniSodium';\n\n // libraries handlers\n this.nacl = null; // the cordova plugin\n this.base58= null;\n this.sha256= null;\n var that = this;\n\n // functions\n this.util = this.util || {};\n this.util.decode_utf8 = function(s) {\n return that.nacl.to_string(s);\n };\n this.util.encode_utf8 = function(s) {\n return that.nacl.from_string(s);\n };\n this.util.encode_base58 = function(a) {\n return that.base58.encode(a);\n };\n this.util.decode_base58 = function(a) {\n var i;\n var d = that.base58.decode(a);\n var b = new Uint8Array(d.length);\n for (i = 0; i < d.length; i++) b[i] = d[i];\n return b;\n };\n this.util.decode_base64 = function (a) {\n return that.nacl.from_base64(a);\n };\n this.util.encode_base64 = function (b) {\n return that.nacl.to_base64(b);\n };\n this.util.hash_sha256 = function(message) {\n return $q.when(that.sha256(message).toUpperCase());\n };\n this.util.random_nonce = function() {\n var nonce = new Uint8Array(that.constants.crypto_secretbox_NONCEBYTES);\n that.crypto.getRandomValues(nonce);\n return $q.when(nonce);\n };\n this.util.crypto_hash_sha256 = function (message) {\n return that.nacl.from_hex(that.sha256(message));\n };\n\n this.util.crypto_scrypt = function(password, salt, N, r, p, seedLength) {\n var deferred = $q.defer();\n that.nacl.crypto_pwhash_scryptsalsa208sha256_ll(\n password,\n salt,\n N,\n r,\n p,\n seedLength,\n function (err, seed) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve(seed);\n }\n );\n return deferred.promise;\n };\n\n /**\n * Create key pairs (sign and box), from salt+password (Scrypt), using cordova\n */\n this.scryptKeypair = function(salt, password, scryptParams) {\n var deferred = $q.defer();\n\n that.nacl.crypto_pwhash_scryptsalsa208sha256_ll(\n that.nacl.from_string(password),\n that.nacl.from_string(salt),\n scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N,\n scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r,\n scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p,\n that.constants.SEED_LENGTH,\n function (err, seed) {\n if (err) { deferred.reject(err); return;}\n\n that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) {\n if (err) { deferred.reject(err); return;}\n var result = {\n signPk: signKeypair.pk,\n signSk: signKeypair.sk\n };\n that.box_keypair_from_sign(result)\n .then(function(boxKeypair) {\n result.boxPk = boxKeypair.pk;\n result.boxSk = boxKeypair.sk;\n deferred.resolve(result);\n })\n .catch(function(err) {\n deferred.reject(err);\n });\n });\n\n }\n );\n\n return deferred.promise;\n };\n\n /**\n * Create key pairs from a seed\n */\n this.seedKeypair = function(seed) {\n var deferred = $q.defer();\n\n that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve({\n signPk: signKeypair.pk,\n signSk: signKeypair.sk\n });\n });\n return deferred.promise;\n };\n\n\n /**\n * Get sign PK from salt+password (Scrypt), using cordova\n */\n this.scryptSignPk = function(salt, password, scryptParams) {\n var deferred = $q.defer();\n\n that.nacl.crypto_pwhash_scryptsalsa208sha256_ll(\n that.nacl.from_string(password),\n that.nacl.from_string(salt),\n scryptParams && scryptParams.N || that.constants.SCRYPT_PARAMS.DEFAULT.N,\n scryptParams && scryptParams.r || that.constants.SCRYPT_PARAMS.DEFAULT.r,\n scryptParams && scryptParams.p || that.constants.SCRYPT_PARAMS.DEFAULT.p,\n that.constants.SEED_LENGTH,\n function (err, seed) {\n if (err) { deferred.reject(err); return;}\n\n that.nacl.crypto_sign_seed_keypair(seed, function (err, signKeypair) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve(signKeypair.pk);\n });\n\n }\n );\n\n return deferred.promise;\n };\n\n /**\n * Verify a signature of a message, for a pubkey\n */\n this.verify = function (message, signature, pubkey) {\n var deferred = $q.defer();\n that.nacl.crypto_sign_verify_detached(\n that.nacl.from_base64(signature),\n that.nacl.from_string(message),\n that.nacl.from_base64(pubkey),\n function(err, verified) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve(verified);\n });\n return deferred.promise;\n };\n\n /**\n * Sign a message, from a key pair\n */\n this.sign = function(message, keypair) {\n var deferred = $q.defer();\n\n that.nacl.crypto_sign(\n that.nacl.from_string(message), // message\n keypair.signSk, // sk\n function(err, signedMsg) {\n if (err) { deferred.reject(err); return;}\n var sig;\n if (signedMsg.length > that.constants.crypto_sign_BYTES) {\n sig = new Uint8Array(that.constants.crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n }\n else {\n sig = signedMsg;\n }\n var signature = that.nacl.to_base64(sig);\n deferred.resolve(signature);\n });\n\n return deferred.promise;\n };\n\n /**\n * Compute the box key pair, from a sign key pair\n */\n this.box_keypair_from_sign = function(signKeyPair) {\n if (signKeyPair.boxSk && signKeyPair.boxPk) return $q.when(signKeyPair);\n var deferred = $q.defer();\n var result = {};\n that.nacl.crypto_sign_ed25519_pk_to_curve25519(signKeyPair.signPk, function(err, boxPk) {\n if (err) { deferred.reject(err); return;}\n result.boxPk = boxPk;\n if (result.boxSk) deferred.resolve(result);\n });\n that.nacl.crypto_sign_ed25519_sk_to_curve25519(signKeyPair.signSk, function(err, boxSk) {\n if (err) { deferred.reject(err); return;}\n result.boxSk = boxSk;\n if (result.boxPk) deferred.resolve(result);\n });\n\n return deferred.promise;\n };\n\n /**\n * Compute the box public key, from a sign public key\n */\n this.box_pk_from_sign = function(signPk) {\n var deferred = $q.defer();\n that.nacl.crypto_sign_ed25519_pk_to_curve25519(signPk, function(err, boxPk) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve(boxPk);\n });\n return deferred.promise;\n };\n\n /**\n * Compute the box secret key, from a sign secret key\n */\n this.box_sk_from_sign = function(signSk) {\n var deferred = $q.defer();\n that.nacl.crypto_sign_ed25519_sk_to_curve25519(signSk, function(err, boxSk) {\n if (err) { deferred.reject(err); return;}\n deferred.resolve(boxSk);\n });\n return deferred.promise;\n };\n\n /**\n * Encrypt a message, from a key pair\n */\n this.box = function(message, nonce, recipientPk, senderSk) {\n if (!message) {\n return $q.reject('No message');\n }\n var deferred = $q.defer();\n\n var messageBin = that.nacl.from_string(message);\n if (typeof recipientPk === \"string\") {\n recipientPk = that.util.decode_base58(recipientPk);\n }\n\n that.nacl.crypto_box_easy(messageBin, nonce, recipientPk, senderSk, function(err, ciphertextBin) {\n if (err) { deferred.reject(err); return;}\n var ciphertext = that.util.encode_base64(ciphertextBin);\n //console.debug('Encrypted message: ' + ciphertext);\n deferred.resolve(ciphertext);\n });\n return deferred.promise;\n };\n\n /**\n * Decrypt a message, from a key pair\n */\n this.box_open = function(cypherText, nonce, senderPk, recipientSk) {\n if (!cypherText) {\n return $q.reject('No cypherText');\n }\n var deferred = $q.defer();\n\n var ciphertextBin = that.nacl.from_base64(cypherText);\n if (typeof senderPk === \"string\") {\n senderPk = that.util.decode_base58(senderPk);\n }\n\n // Avoid crash if content has not the minimal length - Fix #346\n if (ciphertextBin.length < that.constants.crypto_box_MACBYTES) {\n deferred.reject('Invalid cypher content length');\n return;\n }\n\n that.nacl.crypto_box_open_easy(ciphertextBin, nonce, senderPk, recipientSk, function(err, message) {\n if (err) { deferred.reject(err); return;}\n that.util.array_to_string(message, function(result) {\n //console.debug('Decrypted text: ' + result);\n deferred.resolve(result);\n });\n });\n\n return deferred.promise;\n };\n\n this.load = function() {\n var deferred = $q.defer();\n if (!window.plugins || !window.plugins.MiniSodium) {\n deferred.reject(\"Cordova plugin 'MiniSodium' not found. Please load Full JS implementation instead.\");\n }\n else {\n that.nacl = window.plugins.MiniSodium;\n\n var loadedLib = 0;\n var checkAllLibLoaded = function() {\n loadedLib++;\n if (loadedLib == 2) {\n that.loaded = true;\n deferred.resolve();\n }\n };\n that.async_load_base58(function(lib) {\n that.base58 = lib;\n checkAllLibLoaded();\n });\n that.async_load_sha256(function(lib) {\n that.sha256 = lib;\n checkAllLibLoaded();\n });\n }\n\n return deferred.promise;\n };\n\n // Shortcuts\n this.util.hash = that.util.hash_sha256;\n this.box = {\n keypair: {\n fromSignKeypair: that.box_keypair_from_sign,\n skFromSignSk: that.box_sk_from_sign,\n pkFromSignPk: that.box_pk_from_sign\n },\n pack: that.box,\n open: that.box_open\n };\n }\n CordovaServiceFactory.prototype = new CryptoAbstractService();\n\n /* -----------------------------------------------------------------------------------------------------------------\n * Create service instance\n * ----------------------------------------------------------------------------------------------------------------*/\n\n\n var service = new CryptoAbstractService();\n\n var isDevice = true;\n // removeIf(android)\n // removeIf(ios)\n isDevice = false;\n // endRemoveIf(ios)\n // endRemoveIf(android)\n\n //console.debug(\"[crypto] Created CryptotUtils service. device=\" + isDevice);\n\n ionicReady().then(function() {\n console.debug('[crypto] Starting...');\n var now = Date.now();\n\n var serviceImpl;\n\n // Use Cordova plugin implementation, when exists\n if (isDevice && window.plugins && window.plugins.MiniSodium && crypto && crypto.getRandomValues) {\n console.debug('[crypto] Loading \\'MiniSodium\\' implementation...');\n serviceImpl = new CordovaServiceFactory();\n }\n else {\n console.debug('[crypto] Loading \\'FullJS\\' implementation...');\n serviceImpl = new FullJSServiceFactory();\n }\n\n // Load (async lib)\n serviceImpl.load()\n .catch(function(err) {\n console.error(err);\n throw err;\n })\n .then(function() {\n service.copy(serviceImpl);\n console.debug('[crypto] Loaded \\'{0}\\' implementation in {1}ms'.format(service.id, Date.now() - now));\n });\n\n });\n\n return service;\n }])\n\n\n /* -----------------------------\n Crypto advanced service for Cesium\n */\n\n .factory('csCrypto', ['$q', '$rootScope', '$timeout', 'CryptoUtils', 'UIUtils', 'Modals', function($q, $rootScope, $timeout, CryptoUtils, UIUtils, Modals) {\n 'ngInject';\n\n function test(regexpContent) {\n return new RegExp(regexpContent);\n }\n\n function xor(a, b) {\n var length = Math.max(a.length, b.length);\n var buffer = new Uint8Array(length);\n for (var i = 0; i < length; ++i) {\n buffer[i] = a[i] ^ b[i];\n }\n return buffer;\n }\n\n function concat_Uint8Array( buffer1, buffer2 ) {\n var tmp = new Uint8Array( buffer1.byteLength + buffer2.byteLength );\n tmp.set( new Uint8Array( buffer1 ), 0 );\n tmp.set( new Uint8Array( buffer2 ), buffer1.byteLength );\n return tmp;\n }\n\n var constants = {\n WIF: {\n DATA_LENGTH: 35\n },\n EWIF: {\n SALT_LENGTH: 4,\n DERIVED_HALF_LENGTH: 16,\n DATA_LENGTH: 39,\n SCRYPT_PARAMS: {\n N: 16384,\n r: 8,\n p: 8\n }\n },\n REGEXP: {\n PUBKEY: '[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}',\n SECKEY: '[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88}',\n FILE: {\n TYPE_LINE: '^Type: ([a-zA-Z0-9]+)\\n',\n VERSION: 'Version: ([0-9]+)\\n',\n PUB: '[Pp]ub: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44})\\n',\n SEC: '[Ss]ec: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{86,88})(\\n|$)',\n DATA: '[Dd]ata: ([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]+)(\\n|$)'\n }\n }\n },\n regexp = {\n FILE: {\n TYPE_LINE: test(constants.REGEXP.FILE.TYPE_LINE),\n VERSION: test(constants.REGEXP.FILE.VERSION),\n PUB: test(constants.REGEXP.FILE.PUB),\n SEC: test(constants.REGEXP.FILE.SEC),\n DATA: test(constants.REGEXP.FILE.DATA)\n }\n },\n errorCodes = {\n BAD_PASSWORD: 3001,\n BAD_CHECKSUM: 3002\n };\n\n /* -- keyfile -- */\n\n function readKeyFile(file, options) {\n\n if (file && file.content) {\n return parseKeyFileContent(file.content, options);\n }\n\n return $q(function(resolve, reject) {\n if (!file) {\n return reject('Argument [file] is missing');\n }\n\n //console.debug('[crypto] [keypair] reading file: ', file);\n var reader = new FileReader();\n reader.onload = function (event) {\n parseKeyFileContent(event.target.result, options)\n .then(resolve)\n .catch(reject);\n };\n reader.readAsText(file, 'utf8');\n });\n }\n\n function parseKeyFileContent(content, options) {\n\n if (!content) return $q.reject('Argument [content] is missing');\n\n options = options || {};\n options.withSecret = angular.isDefined(options.withSecret) ? options.withSecret : false;\n options.defaultType = options.defaultType || 'PubSec';\n\n var matches;\n\n var typeMatch = regexp.FILE.TYPE_LINE.exec(content);\n\n // If no Type field: add default type\n var type = typeMatch && typeMatch[1];\n if (!type && options.defaultType) {\n return parseKeyFileContent('Type: {0}\\n{1}'.format(options.defaultType, content), options);\n }\n\n // Type: PubSec\n if (type == 'PubSec') {\n\n // Read Pub field\n matches = regexp.FILE.PUB.exec(content);\n if (!matches) return $q.reject('Missing [pub] field in file, or invalid public key value');\n var signKeypair = {\n signPk: CryptoUtils.base58.decode(matches[1])\n };\n if (!options.withSecret) return $q.resolve(signKeypair);\n\n // Read Sec field\n matches= regexp.FILE.SEC.exec(content);\n if (!matches) return $q.reject('Missing [sec] field in file, or invalid secret key value');\n signKeypair.signSk = CryptoUtils.base58.decode(matches[1]);\n return $q.resolve(signKeypair);\n }\n\n // Type: WIF or EWIF\n else if (type == 'WIF' || type == 'EWIF') {\n matches = regexp.FILE.DATA.exec(content);\n if (!matches) {\n return $q.reject('Missing [Data] field in file. This is required for WIF or EWIF format');\n }\n\n return parseWIF_or_EWIF(matches[1], {\n type: type,\n password: options.password\n })\n .then(function(signKeypair) {\n return signKeypair && !options.withSecret ? {signPk: signKeypair.signPk} : signKeypair;\n });\n }\n\n // Type: unknown\n if (options.defaultType) {\n return $q.reject('Bad file format: missing Type field');\n }\n else {\n return $q.reject('Bad file format, unknown type [' + type + ']');\n }\n }\n\n\n /**\n *\n * @param data_base58\n * @param options\n * @returns {*}\n */\n function parseWIF_or_EWIF(data_base58, options) {\n options = options || {};\n\n var data_int8 = data_base58 && CryptoUtils.base58.decode(data_base58);\n if (!data_int8 || data_int8.length != constants.EWIF.DATA_LENGTH && data_int8.length != constants.WIF.DATA_LENGTH) {\n return $q.reject('Invalid WIF or EWIF format (invalid bytes count).');\n }\n\n // Detect the type from the first byte\n options.type = options.type || (data_int8[0] == 1 && 'WIF') || (data_int8[0] == 2 && 'EWIF');\n\n // Type: WIF\n if (options.type == 'WIF') {\n return parseWIF_v1(data_base58);\n }\n\n // Type: EWIF\n if (options.type == 'EWIF') {\n\n // If not set, resolve password using the given callback\n if (typeof options.password == \"function\") {\n //console.debug(\"[crypto] [EWIF] Executing 'options.password()' to resolve the password...\");\n options.password = options.password();\n if (!options.password) {\n return $q.reject({message: \"Invalid callback result for 'options.password()': must return a promise or a string.\"});\n }\n }\n\n // If password is a promise, get the result then read data\n if (typeof options.password === \"object\" && options.password.then) {\n return options.password.then(function(password) {\n if (!password) throw 'CANCELLED';\n return parseEWIF_v1(data_base58, password);\n });\n }\n\n // If password is a valid string, read data\n if (typeof options.password == \"string\") {\n return parseEWIF_v1(data_base58, options.password);\n }\n\n return $q.reject({message: 'Invalid EWIF options.password. Waiting a callback function, a promise or a string.'});\n }\n\n // Unknown type\n return $q.reject({message: 'Invalid WIF or EWIF format: unknown first byte identifier.'});\n }\n\n\n function parseWIF_v1(wif_base58) {\n var wif_int8 = CryptoUtils.util.decode_base58(wif_base58);\n\n // Check identifier byte = 0x01\n if (wif_int8[0] != 1) {\n return $q.reject({message: 'Invalid WIF v1 format: expected [0x01] as first byte'});\n }\n\n // Check length\n if (wif_int8.length != constants.WIF.DATA_LENGTH) {\n return $q.reject({message: 'Invalid WIF v1 format: Data must be a '+constants.WIF.DATA_LENGTH+' bytes array, encoded in base 58.'});\n }\n\n var wif_int8_no_checksum = wif_int8.slice(0, -2),\n seed = wif_int8.slice(1, -2),\n checksum = wif_int8.slice(-2);\n\n // Compute expected checksum\n var expectedChecksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(wif_int8_no_checksum)).slice(0,2);\n if (CryptoUtils.util.encode_base58(checksum) != CryptoUtils.util.encode_base58(expectedChecksum)) {\n $q.reject({message: 'Invalid WIF format: bad checksum'});\n }\n\n // Generate keypair from seed\n return CryptoUtils.seedKeypair(seed);\n }\n\n function parseEWIF_v1(ewif_base58, password) {\n var ewif_int8 = CryptoUtils.util.decode_base58(ewif_base58);\n\n // Check identifier byte = 0x02\n if (ewif_int8[0] != 2) {\n return $q.reject({message: 'Invalid EWIF v1 format: Expected [0x02] as first byte'});\n }\n\n // Check length\n if (ewif_int8.length != constants.EWIF.DATA_LENGTH) {\n return $q.reject({message: 'Invalid EWIF v1 format: Expected {0} bytes, encoded in base 58.'.format(constants.EWIF.DATA_LENGTH)});\n }\n\n var ewif_int8_no_checksum = ewif_int8.slice(0,-2);\n var checksum = ewif_int8.slice(-2);\n var salt = ewif_int8.slice(1,5);\n var encryptedhalf1 = ewif_int8.slice(5,21);\n var encryptedhalf2 = ewif_int8.slice(21,37);\n\n // Retrieve the scrypt_seed\n return CryptoUtils.util.crypto_scrypt(\n CryptoUtils.util.encode_utf8(password),\n salt,\n constants.EWIF.SCRYPT_PARAMS.N,\n constants.EWIF.SCRYPT_PARAMS.r,\n constants.EWIF.SCRYPT_PARAMS.p,\n 64)\n\n // Compute the final seed\n .then(function(scrypt_seed) {\n\n var derivedhalf1 = scrypt_seed.slice(0, 32);\n var derivedhalf2 = scrypt_seed.slice(32, 64);\n\n //AES\n var aesEcb = new aesjs.ModeOfOperation.ecb(derivedhalf2);\n var decryptedhalf1 = aesEcb.decrypt(encryptedhalf1);\n var decryptedhalf2 = aesEcb.decrypt(encryptedhalf2);\n\n decryptedhalf1 = new Uint8Array(decryptedhalf1);\n decryptedhalf2 = new Uint8Array(decryptedhalf2);\n\n //xor\n var seed1 = xor(decryptedhalf1, derivedhalf1.slice(0, 16));\n var seed2 = xor(decryptedhalf2, derivedhalf1.slice(16, 32));\n var seed = concat_Uint8Array(seed1, seed2);\n\n return seed;\n })\n\n // Get the keypair, from the seed\n .then(CryptoUtils.seedKeypair)\n\n // Do some controls\n .then(function(keypair) {\n\n // Check salt\n var expectedSalt = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(keypair.signPk)).slice(0,4);\n if(CryptoUtils.util.encode_base58(salt) !== CryptoUtils.util.encode_base58(expectedSalt)) {\n throw {ucode: errorCodes.BAD_PASSWORD, message: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD'};\n }\n\n // Check checksum\n var expectedChecksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(ewif_int8_no_checksum)).slice(0,2);\n if (CryptoUtils.util.encode_base58(checksum) != CryptoUtils.util.encode_base58(expectedChecksum)) {\n throw {ucode: errorCodes.BAD_CHECKSUM, message: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_CHECKSUM'};\n }\n\n return keypair;\n });\n }\n\n\n function wif_v1_from_keypair(keypair) {\n\n var seed = CryptoUtils.seed_from_signSk(keypair.signSk);\n if (!seed || seed.byteLength !== CryptoUtils.constants.SEED_LENGTH)\n throw \"Bad see format. Expected {0} bytes\".format(CryptoUtils.constants.SEED_LENGTH);\n\n var fi = new Uint8Array(1);\n fi[0] = 0x01;\n var seed_fi = concat_Uint8Array(fi, seed);\n\n // checksum\n var checksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(seed_fi)).slice(0,2);\n\n var wif_int8 = concat_Uint8Array(seed_fi, checksum);\n return $q.when(CryptoUtils.util.encode_base58(wif_int8));\n }\n\n function ewif_v1_from_keypair(keypair, password) {\n\n var seed = CryptoUtils.seed_from_signSk(keypair.signSk);\n if (!seed || seed.byteLength !== CryptoUtils.constants.SEED_LENGTH)\n return $q.reject({message: \"Bad see format. Expected {0} bytes\".format(CryptoUtils.constants.SEED_LENGTH)});\n\n // salt\n var salt = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(keypair.signPk)).slice(0,4);\n\n // scrypt_seed\n return CryptoUtils.util.crypto_scrypt(\n CryptoUtils.util.encode_utf8(password),\n salt,\n constants.EWIF.SCRYPT_PARAMS.N,\n constants.EWIF.SCRYPT_PARAMS.r,\n constants.EWIF.SCRYPT_PARAMS.p,\n 64)\n .then(function(scrypt_seed) {\n var derivedhalf1 = scrypt_seed.slice(0,32);\n var derivedhalf2 = scrypt_seed.slice(32,64);\n\n //XOR & AES\n var seed1_xor_derivedhalf1_1 = xor(seed.slice(0,16), derivedhalf1.slice(0,16));\n var seed2_xor_derivedhalf1_2 = xor(seed.slice(16,32), derivedhalf1.slice(16,32));\n\n var aesEcb = new aesjs.ModeOfOperation.ecb(derivedhalf2);\n var encryptedhalf1 = aesEcb.encrypt(seed1_xor_derivedhalf1_1);\n var encryptedhalf2 = aesEcb.encrypt(seed2_xor_derivedhalf1_2);\n\n encryptedhalf1 = new Uint8Array(encryptedhalf1);\n encryptedhalf2 = new Uint8Array(encryptedhalf2);\n\n // concatenate ewif\n var ewif_int8 = new Uint8Array(1);\n ewif_int8[0] = 0x02;\n ewif_int8 = concat_Uint8Array(ewif_int8,salt);\n ewif_int8 = concat_Uint8Array(ewif_int8,encryptedhalf1);\n ewif_int8 = concat_Uint8Array(ewif_int8,encryptedhalf2);\n\n var checksum = CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(ewif_int8)).slice(0,2);\n ewif_int8 = concat_Uint8Array(ewif_int8,checksum);\n\n return CryptoUtils.util.encode_base58(ewif_int8);\n });\n }\n\n function generateKeyFileContent(keypair, options) {\n options = options || {};\n options.type = options.type || \"PubSec\";\n\n switch(options.type) {\n\n // PubSec\n case \"PubSec\" :\n return $q.resolve(\n \"Type: PubSec\\n\" +\n \"Version: 1\\n\" +\n \"pub: \" + CryptoUtils.base58.encode(keypair.signPk) + \"\\n\" +\n \"sec: \" + CryptoUtils.base58.encode(keypair.signSk) + \"\\n\");\n\n // WIF - v1\n case \"WIF\" :\n return wif_v1_from_keypair(keypair)\n .then(function(data) {\n return \"Type: WIF\\n\" +\n \"Version: 1\\n\" +\n \"Data: \" + data + \"\\n\";\n });\n\n // EWIF - v1\n case \"EWIF\" :\n\n if (!options.password) return $q.reject({message: 'Missing EWIF options.password.'});\n\n // If not set, resolve password using the given callback\n if (options.password && typeof options.password == \"function\") {\n console.debug(\"[crypto] [EWIF] Executing 'options.password()' to resolve the password...\");\n options.password = options.password();\n if (!options.password) {\n return $q.reject({message: \"Invalid callback result for 'options.password()': must return a promise or a string.\"});\n }\n }\n\n // If password is a promise, get the result then read data\n if (options.password && typeof options.password == \"object\" && options.password.then) {\n return options.password.then(function(password) {\n if (!password) throw 'CANCELLED';\n // Recursive call, with the string password in options\n return generateKeyFileContent(keypair, angular.merge({}, options, {password: password}));\n });\n }\n\n // If password is a valid string, read data\n if (options.password && typeof options.password == \"string\") {\n return ewif_v1_from_keypair(keypair, options.password)\n .then(function(data) {\n return \"Type: EWIF\\n\" +\n \"Version: 1\\n\" +\n \"Data: \" + data + \"\\n\";\n });\n }\n\n return $q.reject({message: 'Invalid EWIF options.password. Waiting a callback function, a promise or a string.'});\n\n default:\n return $q.reject({message: \"Unknown keyfile format: \" + options.type});\n }\n }\n\n\n\n /* -- usefull methods -- */\n\n function pkChecksum(pubkey) {\n var signPk_int8 = CryptoUtils.util.decode_base58(pubkey);\n return CryptoUtils.util.encode_base58(CryptoUtils.util.crypto_hash_sha256(CryptoUtils.util.crypto_hash_sha256(signPk_int8))).substring(0,3);\n }\n\n /* -- box (pack/unpack a record) -- */\n\n function getBoxKeypair(keypair) {\n if (!keypair) {\n throw new Error('Missing keypair');\n }\n if (keypair.boxPk && keypair.boxSk) {\n return $q.when(keypair);\n }\n\n return $q.all([\n CryptoUtils.box.keypair.skFromSignSk(keypair.signSk),\n CryptoUtils.box.keypair.pkFromSignPk(keypair.signPk)\n ])\n .then(function(res) {\n return {\n boxSk: res[0],\n boxPk: res[1]\n };\n });\n }\n\n function packRecordFields(record, keypair, recipientFieldName, cypherFieldNames, nonce) {\n\n recipientFieldName = recipientFieldName || 'recipient';\n if (!record[recipientFieldName]) {\n return $q.reject({message:'ES_WALLET.ERROR.RECIPIENT_IS_MANDATORY'});\n }\n\n cypherFieldNames = cypherFieldNames || 'content';\n if (typeof cypherFieldNames == 'string') {\n cypherFieldNames = [cypherFieldNames];\n }\n\n // Work on a copy, to keep the original record (as it could be use again - fix #382)\n record = angular.copy(record);\n\n // Get recipient\n var recipientPk = CryptoUtils.util.decode_base58(record[recipientFieldName]);\n\n return $q.all([\n getBoxKeypair(keypair),\n CryptoUtils.box.keypair.pkFromSignPk(recipientPk),\n nonce ? $q.when(nonce) : CryptoUtils.util.random_nonce()\n ])\n .then(function(res) {\n //var senderSk = res[0];\n var boxKeypair = res[0];\n var senderSk = boxKeypair.boxSk;\n var boxRecipientPk = res[1];\n var nonce = res[2];\n\n return $q.all(\n cypherFieldNames.reduce(function(res, fieldName) {\n if (!record[fieldName]) return res; // skip undefined fields\n return res.concat(\n CryptoUtils.box.pack(record[fieldName], nonce, boxRecipientPk, senderSk)\n );\n }, []))\n\n .then(function(cypherTexts){\n // Replace field values with cypher texts\n var i = 0;\n _.forEach(cypherFieldNames, function(cypherFieldName) {\n if (!record[cypherFieldName]) {\n // Force undefined fields to be present in object\n // This is better for ES storage, that always works on lazy update mode\n record[cypherFieldName] = null;\n }\n else {\n record[cypherFieldName] = cypherTexts[i++];\n }\n });\n\n // Set nonce\n record.nonce = CryptoUtils.util.encode_base58(nonce);\n\n return record;\n });\n });\n }\n\n function openRecordFields(records, keypair, issuerFieldName, cypherFieldNames) {\n\n issuerFieldName = issuerFieldName || 'issuer';\n cypherFieldNames = cypherFieldNames || 'content';\n if (typeof cypherFieldNames == 'string') {\n cypherFieldNames = [cypherFieldNames];\n }\n\n var now = Date.now();\n var issuerBoxPks = {}; // a map used as cache\n\n var jobs = [getBoxKeypair(keypair)];\n return $q.all(records.reduce(function(jobs, message) {\n var issuer = message[issuerFieldName];\n if (!issuer) {throw 'Record has no ' + issuerFieldName;}\n if (issuerBoxPks[issuer]) return res;\n return jobs.concat(\n CryptoUtils.box.keypair.pkFromSignPk(CryptoUtils.util.decode_base58(issuer))\n .then(function(issuerBoxPk) {\n issuerBoxPks[issuer] = issuerBoxPk; // fill box pk cache\n }));\n }, jobs))\n .then(function(res){\n var boxKeypair = res[0];\n return $q.all(records.reduce(function(jobs, record) {\n var issuerBoxPk = issuerBoxPks[record[issuerFieldName]];\n var nonce = CryptoUtils.util.decode_base58(record.nonce);\n record.valid = true;\n\n return jobs.concat(\n cypherFieldNames.reduce(function(res, cypherFieldName) {\n if (!record[cypherFieldName]) return res;\n return res.concat(CryptoUtils.box.open(record[cypherFieldName], nonce, issuerBoxPk, boxKeypair.boxSk)\n .then(function(text) {\n record[cypherFieldName] = text;\n })\n .catch(function(err){\n console.error(err);\n console.warn('[ES] [crypto] a record may have invalid cypher ' + cypherFieldName);\n record.valid = false;\n }));\n }, []));\n }, []));\n })\n .then(function() {\n console.debug('[ES] [crypto] All record decrypted in ' + (Date.now() - now) + 'ms');\n return records;\n });\n\n }\n\n function parseKeyFileData(data, options){\n options = options || {};\n options.withSecret = angular.isDefined(options.withSecret) ? options.withSecret : true;\n options.silent = angular.isDefined(options.withSecret) ? options.silent : false;\n options.password = function() {\n return UIUtils.loading.hide(100)\n .then(function() {\n return Modals.showPassword({\n title: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE',\n subTitle: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP',\n error: options.error,\n scope: options.scope\n });\n })\n .then(function(password) {\n // Timeout is need to force popup to be hide\n return $timeout(function() {\n if (password) UIUtils.loading.show();\n return password;\n }, 150);\n });\n };\n\n if (!options.silent) {\n UIUtils.loading.show();\n }\n\n return parseWIF_or_EWIF(data, options)\n .then(function(res){\n return res;\n })\n .catch(function(err) {\n if (err && err === 'CANCELLED') return;\n if (err && err.ucode == errorCodes.BAD_PASSWORD) {\n // recursive call\n return parseKeyFileData(data, {withSecret: options.withSecret, error: 'ACCOUNT.SECURITY.KEYFILE.ERROR.BAD_PASSWORD'});\n }\n console.error(\"[crypto] Unable to parse as WIF or EWIF format: \" + (err && err.message || err));\n throw err; // rethrow\n });\n }\n\n // exports\n return {\n errorCodes: errorCodes,\n constants: constants,\n // copy CryptoUtils\n util: angular.extend({\n pkChecksum: pkChecksum\n }, CryptoUtils.util),\n keyfile: {\n read: readKeyFile,\n parseData: parseKeyFileData,\n generateContent: generateKeyFileContent\n },\n box: {\n getKeypair: getBoxKeypair,\n pack: packRecordFields,\n open: openRecordFields\n }\n };\n }])\n;\n","// var qrcode;\n\nangular.module('cesium.utils.services', [])\n\n// Replace the '$ionicPlatform.ready()', to enable multiple calls\n// See http://stealthcode.co/multiple-calls-to-ionicplatform-ready/\n.factory('ionicReady', ['$ionicPlatform', function($ionicPlatform) {\n 'ngInject';\n\n var readyPromise;\n\n return function () {\n if (!readyPromise) {\n readyPromise = $ionicPlatform.ready();\n }\n return readyPromise;\n };\n}])\n\n.factory('UIUtils', ['$ionicLoading', '$ionicPopup', '$ionicConfig', '$ionicHistory', '$translate', '$q', 'ionicMaterialInk', 'ionicMaterialMotion', '$window', '$timeout', 'Fullscreen', '$ionicPopover', '$state', '$rootScope', 'screenmatch', function($ionicLoading, $ionicPopup, $ionicConfig, $ionicHistory, $translate, $q,\n ionicMaterialInk, ionicMaterialMotion, $window, $timeout, Fullscreen,\n $ionicPopover, $state, $rootScope, screenmatch) {\n 'ngInject';\n\n\n var\n loadingTextCache=null,\n CONST = {\n MAX_HEIGHT: 480,\n MAX_WIDTH: 640,\n THUMB_MAX_HEIGHT: 200,\n THUMB_MAX_WIDTH: 200\n },\n data = {\n smallscreen: screenmatch.bind('xs, sm', $rootScope)\n },\n exports,\n raw = {}\n ;\n\n function alertError(err, subtitle) {\n if (!err) {\n return $q.when();\n }\n\n return $q(function(resolve) {\n $translate([err, subtitle, 'ERROR.POPUP_TITLE', 'ERROR.UNKNOWN_ERROR', 'COMMON.BTN_OK'])\n .then(function (translations) {\n var message = err.message || translations[err];\n return $ionicPopup.show({\n template: '

' + (message || translations['ERROR.UNKNOWN_ERROR']) + '

',\n title: translations['ERROR.POPUP_TITLE'],\n subTitle: translations[subtitle],\n buttons: [\n {\n text: ''+translations['COMMON.BTN_OK']+'',\n type: 'button-assertive',\n onTap: function(e) {\n resolve(e);\n }\n }\n ]\n });\n });\n });\n }\n\n function alertInfo(message, subtitle) {\n return $q(function(resolve) {\n $translate([message, subtitle, 'INFO.POPUP_TITLE', 'COMMON.BTN_OK'])\n .then(function (translations) {\n $ionicPopup.show({\n template: '

' + translations[message] + '

',\n title: translations['INFO.POPUP_TITLE'],\n subTitle: translations[subtitle],\n buttons: [\n {\n text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: function(e) {\n resolve(e);\n }\n }\n ]\n });\n });\n });\n }\n\n function alertNotImplemented() {\n return alertInfo('INFO.FEATURES_NOT_IMPLEMENTED');\n }\n\n function askConfirm(message, title, options) {\n title = title || 'CONFIRM.POPUP_TITLE';\n\n options = options || {};\n options.cssClass = options.cssClass || 'confirm';\n options.okText = options.okText || 'COMMON.BTN_OK';\n options.cancelText = options.cancelText || 'COMMON.BTN_CANCEL';\n\n return $translate([message, title, options.cancelText, options.okText])\n .then(function (translations) {\n return $ionicPopup.confirm({\n template: translations[message],\n cssClass: options.cssClass,\n title: translations[title],\n cancelText: translations[options.cancelText],\n cancelType: options.cancelType,\n okText: translations[options.okText],\n okType: options.okType\n });\n });\n }\n\n function hideLoading(timeout){\n if (timeout) {\n return $timeout(function(){\n return $ionicLoading.hide();\n }, timeout);\n }\n else {\n return $ionicLoading.hide();\n }\n }\n\n function showLoading(options) {\n if (!loadingTextCache) {\n return $translate('COMMON.LOADING')\n .then(function(translation){\n loadingTextCache = translation;\n return showLoading(options);\n });\n }\n options = options || {};\n options.template = options.template||loadingTextCache;\n\n return $ionicLoading.show(options);\n }\n\n function updateLoading(options) {\n return $ionicLoading._getLoader().then(function(loader) {\n if (!loader || !loader.isShown) return;\n // Translate template (if exists)\n if (options && options.template) {\n return $translate(options && options.template)\n .then(function(template) {\n options.template = template;\n return loader;\n });\n }\n })\n .then(function(loader) {\n if (loader && loader.isShown) return showLoading(options);\n });\n }\n\n function showToast(message, duration, position) {\n duration = duration || 'short';\n position = position || 'bottom';\n\n return $translate([message])\n .then(function(translations){\n\n // removeIf(device)\n // Use the $ionicLoading toast.\n // First, make sure to convert duration in number\n if (typeof duration == 'string') {\n if (duration == 'short') {\n duration = 2000;\n }\n else {\n duration = 5000;\n }\n }\n return $ionicLoading.show({ template: translations[message], noBackdrop: true, duration: duration });\n // endRemoveIf(device)\n });\n }\n\n function onError(msg, reject/*optional*/) {\n return function(err) {\n var fullMsg = msg;\n var subtitle;\n if (!!err && !!err.message) {\n fullMsg = err.message;\n subtitle = msg;\n }\n else if (!msg){\n fullMsg = err;\n }\n // If reject has been given, use it\n if (!!reject) {\n reject(fullMsg);\n }\n // If just a user cancellation: silent\n else if (fullMsg == 'CANCELLED') {\n return hideLoading(10); // timeout, to avoid bug on transfer (when error on reference)\n }\n\n // Otherwise, log to console and display error\n else {\n hideLoading(10); // timeout, to avoid bug on transfer (when error on reference)\n return alertError(fullMsg, subtitle);\n }\n };\n }\n\n function isSmallScreen() {\n return data.smallscreen.active;\n }\n\n function selectElementText(el) {\n if (el.value || el.type == \"text\" || el.type == \"textarea\") {\n // Source: http://stackoverflow.com/questions/14995884/select-text-on-input-focus\n if ($window.getSelection && !$window.getSelection().toString()) {\n el.setSelectionRange(0, el.value.length);\n }\n }\n else {\n if (el.childNodes && el.childNodes.length > 0) {\n selectElementText(el.childNodes[0]);\n }\n else {\n // See http://www.javascriptkit.com/javatutors/copytoclipboard.shtml\n var range = $window.document.createRange(); // create new range object\n range.selectNodeContents(el); // set range to encompass desired element text\n var selection = $window.getSelection(); // get Selection object from currently user selected text\n selection.removeAllRanges(); // unselect any user selected text (if any)\n selection.addRange(range); // add range to Selection object to select it\n }\n }\n }\n\n function getSelectionText(){\n var selectedText = \"\";\n if (window.getSelection){ // all modern browsers and IE9+\n selectedText = $window.getSelection().toString();\n }\n return selectedText;\n }\n\n function imageOnLoadResize(resolve, reject, thumbnail) {\n return function(event) {\n var width = event.target.width,\n height = event.target.height,\n maxWidth = (thumbnail ? CONST.THUMB_MAX_WIDTH : CONST.MAX_WIDTH),\n maxHeight = (thumbnail ? CONST.THUMB_MAX_HEIGHT : CONST.MAX_HEIGHT)\n ;\n\n var canvas = document.createElement(\"canvas\");\n var ctx;\n\n // Thumbnail: resize and crop (to the expected size)\n if (thumbnail) {\n\n // landscape\n if (width > height) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n\n // portrait\n else {\n height *= maxWidth / width;\n width = maxWidth;\n }\n canvas.width = maxWidth;\n canvas.height = maxHeight;\n ctx = canvas.getContext(\"2d\");\n var xoffset = Math.trunc((maxWidth - width) / 2 + 0.5);\n var yoffset = Math.trunc((maxHeight - height) / 2 + 0.5);\n ctx.drawImage(event.target,\n xoffset, // x1\n yoffset, // y1\n maxWidth + -2 * xoffset, // x2\n maxHeight + -2 * yoffset // y2\n );\n }\n\n // Resize, but keep the full image\n else {\n\n // landscape\n if (width > height) {\n if (width > maxWidth) {\n height *= maxWidth / width;\n width = maxWidth;\n }\n }\n\n // portrait\n else {\n if (height > maxHeight) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n }\n\n canvas.width = width;\n canvas.height = height;\n ctx = canvas.getContext(\"2d\");\n\n // Resize the whole image\n ctx.drawImage(event.target, 0, 0, canvas.width, canvas.height);\n }\n\n var dataurl = canvas.toDataURL();\n\n canvas.remove();\n\n resolve(dataurl);\n };\n }\n\n function resizeImageFromFile(file, thumbnail) {\n var img = document.createElement(\"img\");\n return $q(function(resolve, reject) {\n\n if (file) {\n var reader = new FileReader();\n reader.onload = function(event){\n img.onload = imageOnLoadResize(resolve, reject, thumbnail);\n img.src = event.target.result;\n };\n reader.readAsDataURL(file);\n }\n else {\n reject('no file to resize');\n }\n })\n .then(function(dataurl) {\n img.remove();\n return dataurl;\n })\n ;\n }\n\n function resizeImageFromSrc(imageSrc, thumbnail) {\n var img = document.createElement(\"img\");\n return $q(function(resolve, reject) {\n img.onload = imageOnLoadResize(resolve, reject, thumbnail);\n img.src = imageSrc;\n })\n .then(function(data){\n img.remove();\n return data;\n });\n }\n\n function imageOnLoadRotate(resolve, reject) {\n var deg = Math.PI / 180;\n var angle = 90 * deg;\n return function(event) {\n var width = event.target.width;\n var height = event.target.height;\n var maxWidth = CONST.MAX_WIDTH;\n var maxHeight = CONST.MAX_HEIGHT;\n\n if (width > height) {\n if (width > maxWidth) {\n height *= maxWidth / width;\n width = maxWidth;\n }\n } else {\n if (height > maxHeight) {\n width *= maxHeight / height;\n height = maxHeight;\n }\n }\n\n var canvas = document.createElement(\"canvas\");\n canvas.width = height;\n canvas.height = width;\n\n var ctx = canvas.getContext(\"2d\");\n ctx.rotate(angle);\n ctx.drawImage(event.target, 0, (-1) * canvas.width);\n\n var dataurl = canvas.toDataURL();\n\n canvas.remove();\n\n resolve(dataurl);\n };\n }\n\n function rotateFromSrc(imageSrc, angle) {\n var img = document.createElement(\"img\");\n return $q(function(resolve, reject) {\n img.onload = imageOnLoadRotate(resolve, reject, angle);\n img.src = imageSrc;\n })\n .then(function(data){\n img.remove();\n return data;\n });\n }\n\n function showPopover(event, options) {\n\n var deferred = $q.defer();\n\n options = options || {};\n options.templateUrl = options.templateUrl ? options.templateUrl : 'templates/common/popover_copy.html';\n options.scope = options.scope || $rootScope;\n options.scope.popovers = options.scope.popovers || {};\n options.autoselect = options.autoselect || false;\n options.autoremove = angular.isDefined(options.autoremove) ? options.autoremove : true;\n options.backdropClickToClose = angular.isDefined(options.backdropClickToClose) ? options.backdropClickToClose : true;\n options.focusFirstInput = angular.isDefined(options.focusFirstInput) ? options.focusFirstInput : false;\n\n var _show = function(popover) {\n popover = popover || options.scope.popovers[options.templateUrl];\n popover.isResolved=false;\n popover.deferred=deferred;\n popover.options=options;\n // Fill the popover scope\n if (options.bindings) {\n angular.merge(popover.scope, options.bindings);\n }\n $timeout(function() { // This is need for Firefox\n popover.show(event)\n .then(function() {\n var element;\n // Auto select text\n if (options.autoselect) {\n element = document.querySelectorAll(options.autoselect)[0];\n if (element) {\n if ($window.getSelection && !$window.getSelection().toString()) {\n element.setSelectionRange(0, element.value.length);\n element.focus();\n }\n else {\n element.focus();\n }\n }\n }\n else {\n // Auto focus on a element\n if (options.autofocus) {\n element = document.querySelectorAll(options.autofocus)[0];\n if (element) element.focus();\n }\n }\n\n popover.scope.$parent.$emit('popover.shown');\n\n // Callback 'afterShow'\n if (options.afterShow) options.afterShow(popover);\n });\n });\n };\n\n var _cleanup = function(popover) {\n popover = popover || options.scope.popovers[options.templateUrl];\n if (popover) {\n delete options.scope.popovers[options.templateUrl];\n // Remove the popover\n popover.remove()\n // Workaround for issue #244\n // See also https://github.com/driftyco/ionic-v1/issues/71\n // and https://github.com/driftyco/ionic/issues/9069\n .then(function() {\n var bodyEl = angular.element($window.document.querySelectorAll('body')[0]);\n bodyEl.removeClass('popover-open');\n });\n }\n };\n\n var popover = options.scope.popovers[options.templateUrl];\n if (!popover) {\n\n $ionicPopover.fromTemplateUrl(options.templateUrl, {\n scope: options.scope,\n backdropClickToClose: options.backdropClickToClose\n })\n .then(function (popover) {\n popover.isResolved = false;\n\n popover.scope.closePopover = function(result) {\n var autoremove = popover.options && popover.options.autoremove;\n if (popover.options) delete popover.options.autoremove; // remove to avoid to trigger 'popover.hidden'\n popover.hide()\n .then(function() {\n if (autoremove) {\n return _cleanup(popover);\n }\n })\n .then(function() {\n if (popover.deferred) {\n popover.deferred.resolve(result);\n }\n delete popover.deferred;\n delete popover.options;\n });\n };\n\n // Execute action on hidden popover\n popover.scope.$on('popover.hidden', function() {\n if (popover.options && popover.options.afterHidden) {\n popover.options.afterHidden();\n }\n if (popover.options && popover.options.autoremove) {\n _cleanup(popover);\n }\n });\n\n // Cleanup the popover when hidden\n options.scope.$on('$remove', function() {\n if (popover.deferred) {\n popover.deferred.resolve();\n }\n _cleanup();\n });\n\n options.scope.popovers[options.templateUrl] = popover;\n _show(popover);\n });\n }\n else {\n _show(popover);\n }\n\n return deferred.promise;\n }\n\n function showCopyPopover(event, value) {\n var rows = value && value.indexOf('\\n') >= 0 ? value.split('\\n').length : 1;\n return showPopover(event, {\n templateUrl: 'templates/common/popover_copy.html',\n bindings: {\n value: value,\n rows: rows\n },\n autoselect: '.popover-copy ' + (rows <= 1 ? 'input' : 'textarea')\n });\n }\n\n function showSharePopover(event, options) {\n options = options || {};\n options.templateUrl = options.templateUrl ? options.templateUrl : 'templates/common/popover_share.html';\n options.autoselect = options.autoselect || '.popover-share input';\n options.bindings = options.bindings || {};\n options.bindings.value = options.bindings.value || options.bindings.url ||\n $state.href($state.current, $state.params, {absolute: true});\n options.bindings.postUrl = options.bindings.postUrl || options.bindings.value;\n options.bindings.postMessage = options.bindings.postMessage || '';\n options.bindings.titleKey = options.bindings.titleKey || 'COMMON.POPOVER_SHARE.TITLE';\n return showPopover(event, options);\n }\n\n function showHelptip(id, options) {\n var element = (typeof id == 'string') && id ? $window.document.getElementById(id) : id;\n if (!id && !element && options.selector) {\n element = $window.document.querySelector(options.selector);\n }\n\n options = options || {};\n var deferred = options.deferred || $q.defer();\n\n if(element && !options.timeout) {\n if (options.preAction) {\n element[options.preAction]();\n }\n options.templateUrl = options.templateUrl ? options.templateUrl : 'templates/common/popover_helptip.html';\n options.autofocus = options.autofocus || '#helptip-btn-ok';\n options.bindings = options.bindings || {};\n options.bindings.icon = options.bindings.icon || {};\n options.bindings.icon.position = options.bindings.icon.position || false;\n options.bindings.icon.glyph = options.bindings.icon.glyph ||\n (options.bindings.icon.position && options.bindings.icon.position.startsWith('bottom-') ? 'ion-arrow-down-c' :'ion-arrow-up-c');\n options.bindings.icon.class = options.bindings.icon.class || 'calm icon ' + options.bindings.icon.glyph;\n options.bindings.tour = angular.isDefined(options.bindings.tour) ? options.bindings.tour : false;\n showPopover(element, options)\n .then(function(result){\n if (options.postAction) {\n element[options.postAction]();\n }\n deferred.resolve(result);\n })\n .catch(function(err){\n if (options.postAction) {\n element[options.postAction]();\n }\n deferred.reject(err);\n });\n }\n else {\n\n // Do timeout if ask\n if (options.timeout) {\n var timeout = options.timeout;\n options.retryTimeout = options.retryTimeout || timeout;\n delete options.timeout;\n options.deferred = deferred;\n $timeout(function () {\n showHelptip(id, options);\n }, timeout);\n }\n\n // No element: reject\n else if (angular.isDefined(options.retry) && !options.retry) {\n\n if (options.onError === 'continue') {\n $timeout(function () {\n deferred.resolve(true);\n });\n }\n else {\n $timeout(function () {\n deferred.reject(\"[helptip] element now found: \" + id);\n });\n }\n }\n\n // Retry until element appears\n else {\n options.retry = angular.isUndefined(options.retry) ? 2 : (options.retry-1);\n options.deferred = deferred;\n $timeout(function() {\n showHelptip(id, options);\n }, options.timeout || options.retryTimeout || 100);\n }\n }\n\n return deferred.promise;\n }\n\n function showFab(id, timeout) {\n if (!timeout) {\n timeout = 900;\n }\n $timeout(function () {\n // Could not use 'getElementById', because it return only once element,\n // but many fabs can have the same id (many view could be loaded at the same time)\n var fabs = document.getElementsByClassName('button-fab');\n _.forEach(fabs, function(fab){\n if (fab.id == id) {\n fab.classList.toggle('on', true);\n }\n });\n }, timeout);\n }\n\n function hideFab(id, timeout) {\n if (!timeout) {\n timeout = 10;\n }\n $timeout(function () {\n // Could not use 'getElementById', because it return only once element,\n // but many fabs can have the same id (many view could be loaded at the same time)\n var fabs = document.getElementsByClassName('button-fab');\n _.forEach(fabs, function(fab){\n if (fab.id == id) {\n fab.classList.toggle('on', false);\n }\n });\n }, timeout);\n }\n\n function motionDelegate(delegate, ionListClass) {\n var motionTimeout = isSmallScreen() ? 100 : 10;\n var defaultSelector = '.list.{0} .item, .list .{0} .item'.format(ionListClass, ionListClass);\n return {\n ionListClass: ionListClass,\n show: function(options) {\n options = options || {};\n options.selector = options.selector || defaultSelector;\n options.ink = angular.isDefined(options.ink) ? options.ink : true;\n options.startVelocity = options.startVelocity || (isSmallScreen() ? 1100 : 3000);\n return $timeout(function(){\n\n // Display ink effect (no selector need)\n if (options.ink) exports.ink();\n\n // Display the delegated motion effect\n delegate(options);\n }, options.timeout || motionTimeout);\n }\n };\n }\n\n function setEffects(enable) {\n if (exports.motion.enable === enable) return; // same\n console.debug('[UI] [effects] ' + (enable ? 'Enable' : 'Disable'));\n\n exports.motion.enable = enable;\n if (enable) {\n $ionicConfig.views.transition('platform');\n angular.merge(exports.motion, raw.motion);\n }\n else {\n $ionicConfig.views.transition('none');\n var nothing = {\n class: undefined,\n show: function(){}\n };\n angular.merge(exports.motion, {\n enable : false,\n default: nothing,\n fadeSlideIn: nothing,\n fadeSlideInRight: nothing,\n panInLeft: nothing,\n pushDown: nothing,\n ripple: nothing,\n slideUp: nothing,\n fadeIn: nothing,\n toggleOn: toggleOn,\n toggleOff: toggleOff\n });\n $rootScope.motion = nothing;\n }\n $ionicHistory.clearCache();\n }\n\n raw.motion = {\n enable: true,\n default: motionDelegate(ionicMaterialMotion.ripple, 'animate-ripple'),\n blinds: motionDelegate(ionicMaterialMotion.blinds, 'animate-blinds'),\n fadeSlideIn: motionDelegate(ionicMaterialMotion.fadeSlideIn, 'animate-fade-slide-in'),\n fadeSlideInRight: motionDelegate(ionicMaterialMotion.fadeSlideInRight, 'animate-fade-slide-in-right'),\n panInLeft: motionDelegate(ionicMaterialMotion.panInLeft, 'animate-pan-in-left'),\n pushDown: motionDelegate(ionicMaterialMotion.pushDown, 'push-down'),\n ripple: motionDelegate(ionicMaterialMotion.ripple, 'animate-ripple'),\n slideUp: motionDelegate(ionicMaterialMotion.slideUp, 'slide-up'),\n fadeIn: motionDelegate(function(options) {\n toggleOn(options);\n }, 'fade-in'),\n toggleOn: toggleOn,\n toggleOff: toggleOff\n };\n\n function createQRCodeObj(text, typeNumber,\n errorCorrectionLevel, mode, mb) {\n\n mb = mb || 'default'; // default | SJIS | UTF-8\n qrcode.stringToBytes = qrcode.stringToBytesFuncs[mb];\n\n var qr = qrcode(typeNumber || 4, errorCorrectionLevel || 'M');\n qr.addData(text, mode);\n qr.make();\n\n return qr;\n }\n\n /**\n * Create a QRCode as an tag\n * @param text\n * @param typeNumber\n * @param errorCorrectionLevel\n * @param mode\n * @param mb multibyte ? value: 'default' | 'SJIS' | 'UTF-8'\n * @returns {string}\n */\n function getSvgQRCode(text, typeNumber,\n errorCorrectionLevel, mode, mb) {\n\n var qr = createQRCodeObj(text, typeNumber, errorCorrectionLevel, mode, mb);\n return qr.createSvgTag();\n }\n\n /**\n * Create a QRCode as an tag\n * @param text\n * @param typeNumber\n * @param errorCorrectionLevel\n * @param mode\n * @param mb multibyte ? value: 'default' | 'SJIS' | 'UTF-8'\n * @returns {string}\n */\n function getImgQRCode(text, typeNumber,\n errorCorrectionLevel, mode, mb) {\n\n var qr = createQRCodeObj(text, typeNumber, errorCorrectionLevel, mode, mb);\n return qr.createImgTag();\n }\n\n function toggleOn(options, timeout) {\n // We have a single option, so it may be passed as a string or property\n if (typeof options === 'string') {\n options = {\n selector: options\n };\n }\n\n // Fail early & silently log\n var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n if (isInvalidSelector) {\n console.error('invalid toggleOn selector');\n return false;\n }\n\n $timeout(function () {\n var elements = document.querySelectorAll(options.selector);\n if (elements) _.forEach(elements, function(element){\n element.classList.toggle('on', true);\n });\n }, timeout || 100);\n }\n\n function toggleOff(options, timeout) {\n // We have a single option, so it may be passed as a string or property\n if (typeof options === 'string') {\n options = {\n selector: options\n };\n }\n\n // Fail early & silently log\n var isInvalidSelector = typeof options.selector === 'undefined' || options.selector === '';\n\n if (isInvalidSelector) {\n console.error('invalid toggleOff selector');\n return false;\n }\n\n $timeout(function () {\n var elements = document.querySelectorAll(options.selector);\n if (elements) _.forEach(elements, function(element){\n element.classList.toggle('on', false);\n });\n }, timeout || 900);\n }\n\n exports = {\n alert: {\n error: alertError,\n info: alertInfo,\n confirm: askConfirm,\n notImplemented: alertNotImplemented\n },\n loading: {\n show: showLoading,\n hide: hideLoading,\n update: updateLoading\n },\n toast: {\n show: showToast\n },\n onError: onError,\n screen: {\n isSmall: isSmallScreen,\n fullscreen: Fullscreen\n },\n ink: ionicMaterialInk.displayEffect,\n motion: raw.motion,\n setEffects: setEffects,\n qrcode: {\n svg: getSvgQRCode,\n img: getImgQRCode\n },\n fab: {\n show: showFab,\n hide: hideFab\n },\n popover: {\n show: showPopover,\n copy: showCopyPopover,\n share: showSharePopover,\n helptip: showHelptip\n },\n selection: {\n select: selectElementText,\n get: getSelectionText\n },\n image: {\n resizeFile: resizeImageFromFile,\n resizeSrc: resizeImageFromSrc,\n rotateSrc: rotateFromSrc\n },\n raw: raw\n };\n\n return exports;\n}])\n\n\n// See http://plnkr.co/edit/vJQXtsZiX4EJ6Uvw9xtG?p=preview\n.factory('$focus', ['$timeout', '$window', function($timeout, $window) {\n 'ngInject';\n\n return function(id) {\n // timeout makes sure that it is invoked after any other event has been triggered.\n // e.g. click events that need to run before the focus or\n // inputs elements that are in a disabled state but are enabled when those events\n // are triggered.\n $timeout(function() {\n var element = $window.document.getElementById(id);\n if(element)\n element.focus();\n });\n };\n}])\n\n;\n","angular.module('cesium.cache.services', ['angular-cache'])\n\n.factory('csCache', ['$rootScope', '$http', '$window', 'csSettings', 'CacheFactory', function($rootScope, $http, $window, csSettings, CacheFactory) {\n 'ngInject';\n\n var\n constants = {\n VERY_LONG: 54000000, /*15 days*/\n LONG: 1 * 60 * 60 * 1000 /*1 hour*/,\n MEDIUM: 5 * 60 * 1000 /*5 min*/,\n SHORT: csSettings.defaultSettings.cacheTimeMs // around 1min\n },\n storageMode = getSettingsStorageMode(),\n cacheNames = []\n ;\n\n function getSettingsStorageMode(settings) {\n settings = settings || csSettings.data;\n return settings && settings.useLocalStorage && settings.persistCache && $window.localStorage ? 'localStorage' : 'memory';\n }\n\n function getCacheOptions(options) {\n options = options || {};\n options.storageMode = getSettingsStorageMode();\n options.deleteOnExpire = (options.storageMode === 'localStorage' || options.onExpire) ? 'aggressive' : 'passive';\n options.cacheFlushInterval = options.deleteOnExpire === 'passive' ?\n (60 * 60 * 1000) : // If passive mode, remove all items every hour\n null;\n return options;\n }\n\n function getOrCreateCache(prefix, maxAge, onExpire){\n prefix = prefix || '';\n maxAge = maxAge || constants.SHORT;\n var cacheName = prefix + ((maxAge / 1000) + 's');\n\n // If onExpire fn, generate a new cache key\n var cache;\n if (onExpire && typeof onExpire == 'function') {\n var counter = 1;\n while (CacheFactory.get(cacheName + counter)) {\n counter++;\n }\n cacheName = cacheName + counter;\n }\n else {\n cache = CacheFactory.get(cacheName);\n }\n\n // Add to cache names map\n if (!cacheNames[cacheName]) cacheNames[cacheName] = true;\n\n // Already exists: use it\n if (cache) return cache;\n\n // Not exists yet: create a new cache\n var options = getCacheOptions({\n maxAge: maxAge,\n onExpire: onExpire || null\n });\n console.debug(\"[cache] Creating cache {{0}} with {storageMode: {1}}...\".format(cacheName, options.storageMode));\n return CacheFactory.createCache(cacheName, options);\n }\n\n function clearAllCaches() {\n console.debug(\"[cache] Cleaning all caches...\");\n _.forEach(_.keys(cacheNames), function(cacheName) {\n var cache = CacheFactory.get(cacheName);\n if (cache) {\n cache.removeAll();\n }\n });\n }\n\n function clearFromPrefix(cachePrefix) {\n _.forEach(_.keys(cacheNames), function(cacheName) {\n if (cacheName.startsWith(cachePrefix)) {\n var cache = CacheFactory.get(cacheName);\n if (cache) {\n cache.removeAll();\n }\n }\n });\n }\n\n function onSettingsChanged(settings) {\n var newStorageMode = getSettingsStorageMode(settings)\n var hasChanged = (newStorageMode !== storageMode);\n if (hasChanged) {\n storageMode = newStorageMode;\n console.debug(\"[cache] Updating caches with {storageMode: {0}}\".format(storageMode));\n _.forEach(_.keys(cacheNames), function(cacheName) {\n var cache = CacheFactory.get(cacheName);\n if (cache) {\n cache.setOptions(getCacheOptions(), true);\n }\n });\n }\n }\n\n function addListeners() {\n listeners = [\n // Listen if node changed\n csSettings.api.data.on.changed($rootScope, onSettingsChanged, this)\n ];\n }\n\n addListeners();\n\n return {\n get: getOrCreateCache,\n clear: clearFromPrefix,\n clearAll: clearAllCaches,\n constants: constants\n };\n}])\n;\n","angular.module('cesium.modal.services', ['cesium.utils.services'])\n\n// Useful for modal with no controller\n.controller('EmptyModalCtrl', function () {\n 'ngInject';\n\n})\n\n.controller('AboutModalCtrl', ['$scope', 'UIUtils', 'csHttp', function ($scope, UIUtils, csHttp) {\n 'ngInject';\n\n $scope.openLink = function(event, uri, options) {\n options = options || {};\n\n // If unable to open, just copy value\n options.onError = function() {\n return UIUtils.popover.copy(event, uri);\n };\n\n return csHttp.uri.open(uri, options);\n };\n}])\n\n.factory('ModalUtils', ['$ionicModal', '$rootScope', '$q', '$injector', '$controller', '$timeout', 'Device', function($ionicModal, $rootScope, $q, $injector, $controller, $timeout, Device) {\n 'ngInject';\n\n\n function _evalController(ctrlName) {\n var result = {\n isControllerAs: false,\n controllerName: '',\n propName: ''\n };\n var fragments = (ctrlName || '').trim().split(/\\s+/);\n result.isControllerAs = fragments.length === 3 && (fragments[1] || '').toLowerCase() === 'as';\n if (result.isControllerAs) {\n result.controllerName = fragments[0];\n result.propName = fragments[2];\n } else {\n result.controllerName = ctrlName;\n }\n\n return result;\n }\n\n function DefaultModalController($scope, deferred, parameters) {\n\n $scope.deferred = deferred || $q.defer();\n $scope.resolved = false;\n\n $scope.openModal = function () {\n return $scope.modal.show();\n };\n\n $scope.hideModal = function () {\n return $scope.modal.hide();\n };\n\n $scope.closeModal = function (result) {\n $scope.resolved = true;\n\n return $scope.modal.remove()\n .then(function() {\n // Workaround modal-open not removed\n document.body.classList.remove('modal-open');\n $scope.deferred.resolve(result);\n return result;\n });\n };\n\n\n // Useful method for modal with forms\n $scope.setForm = function (form, propName) {\n if (propName) {\n $scope[propName] = form;\n }\n else {\n $scope.form = form;\n }\n };\n\n // Useful method for modal to get input parameters\n $scope.getParameters = function () {\n return parameters;\n };\n\n $scope.$on('modal.hidden', function () {\n // If not resolved yet: send result\n // (after animation out)\n if (!$scope.resolved) {\n $scope.resolved = true;\n\n $timeout(function() {\n $scope.deferred.resolve();\n return $scope.modal.remove().then(function() {\n // Workaround modal-open not removed\n document.body.classList.remove('modal-open');\n });\n }, ($scope.modal.hideDelay || 320) + 20);\n }\n });\n }\n\n function show(templateUrl, controller, parameters, options) {\n var deferred = $q.defer();\n\n options = options ? options : {} ;\n options.animation = options.animation || 'slide-in-up';\n\n var focusFirstInput = false;\n // removeIf(device)\n focusFirstInput = angular.isDefined(options.focusFirstInput) ? options.focusFirstInput : false;\n // endRemoveIf(device)\n options.focusFirstInput = focusFirstInput;\n\n // If modal has a controller\n if (controller) {\n // If a controller defined, always use a new scope\n options.scope = options.scope ? options.scope.$new() : $rootScope.$new();\n DefaultModalController.call({}, options.scope, deferred, parameters);\n\n // Invoke the controller on this new scope\n var locals = { '$scope': options.scope, 'parameters': parameters };\n var ctrlEval = _evalController(controller);\n var ctrlInstance = $controller(controller, locals);\n if (ctrlEval.isControllerAs) {\n ctrlInstance.openModal = options.scope.openModal;\n ctrlInstance.closeModal = options.scope.closeModal;\n }\n }\n\n $ionicModal.fromTemplateUrl(templateUrl, options)\n .then(function (modal) {\n if (controller) {\n // Set modal into the controller's scope\n modal.scope.$parent.modal = modal;\n }\n else {\n var scope = modal.scope;\n // Define default scope functions\n DefaultModalController.call({}, scope, deferred, parameters);\n // Set modal\n scope.modal = modal;\n }\n\n // Show the modal\n return modal.show();\n },\n function (err) {\n deferred.reject(err);\n });\n\n return deferred.promise;\n }\n\n return {\n show: show\n };\n}])\n\n.factory('Modals', ['$rootScope', '$translate', '$ionicPopup', '$timeout', 'ModalUtils', 'UIUtils', function($rootScope, $translate, $ionicPopup, $timeout, ModalUtils, UIUtils) {\n 'ngInject';\n\n function showTransfer(parameters) {\n var useDigitKeyboard = UIUtils.screen.isSmall();\n return ModalUtils.show('templates/wallet/modal_transfer.html','TransferModalCtrl',\n parameters, {\n focusFirstInput: !useDigitKeyboard\n });\n }\n\n function showLogin(parameters) {\n return ModalUtils.show('templates/login/modal_login.html','LoginModalCtrl',\n parameters, {focusFirstInput: true, backdropClickToClose: false});\n }\n\n function showWotLookup(parameters) {\n return ModalUtils.show('templates/wot/modal_lookup.html','WotLookupModalCtrl',\n parameters || {}, {focusFirstInput: true});\n }\n\n function showNetworkLookup(parameters) {\n return ModalUtils.show('templates/network/modal_network.html', 'NetworkLookupModalCtrl',\n parameters, {focusFirstInput: true});\n }\n\n function showAbout(parameters) {\n return ModalUtils.show('templates/modal_about.html','AboutModalCtrl',\n parameters);\n }\n\n function showAccountSecurity(parameters) {\n return ModalUtils.show('templates/wallet/modal_security.html', 'WalletSecurityModalCtrl',\n parameters);\n }\n\n function showJoin(parameters) {\n return ModalUtils.show('templates/join/modal_choose_account_type.html','JoinChooseAccountTypeModalCtrl',\n parameters)\n .then(function(res){\n if (!res) return;\n return (res.accountType == 'member') ?\n showJoinMember(res) :\n showJoinWallet(res);\n });\n }\n\n function showJoinMember(parameters) {\n return ModalUtils.show('templates/join/modal_join_member.html','JoinModalCtrl',\n parameters);\n }\n\n function showJoinWallet(parameters) {\n return ModalUtils.show('templates/join/modal_join_wallet.html','JoinModalCtrl',\n parameters);\n }\n\n function showHelp(parameters) {\n return ModalUtils.show('templates/help/modal_help.html','HelpModalCtrl',\n parameters);\n }\n\n function showLicense(parameters) {\n return ModalUtils.show('templates/currency/modal_license.html','CurrencyLicenseModalCtrl',\n parameters);\n }\n\n function showSelectPubkeyIdentity(parameters) {\n return ModalUtils.show('templates/wot/modal_select_pubkey_identity.html', 'WotSelectPubkeyIdentityModalCtrl',\n parameters);\n }\n\n function showSelectWallet(parameters) {\n return ModalUtils.show('templates/wallet/list/modal_wallets.html','WalletSelectModalCtrl',\n parameters);\n }\n\n function showPassword(options) {\n options = options || {};\n options.title = options.title || 'COMMON.SET_PASSWORD_TITLE';\n options.subTitle = options.subTitle || 'COMMON.SET_PASSWORD_SUBTITLE';\n var scope = options.scope ? options.scope.$new() : $rootScope.$new();\n scope.formData = {password: undefined};\n scope.setForm = function(form) {\n scope.form=form;\n };\n scope.submit = function(e) {\n scope.form.$submitted=true;\n if (e && e.preventDefault) e.preventDefault();\n if(scope.form.$valid && scope.formData.password) {\n options.popup.close(scope.formData.password);\n }\n };\n\n scope.error = options.error || undefined;\n\n // Choose password popup\n return $translate([options.title, options.subTitle, 'COMMON.BTN_OK', 'COMMON.BTN_CANCEL'])\n .then(function (translations) {\n options.popup = $ionicPopup.show({\n templateUrl: 'templates/common/popup_password.html',\n title: translations[options.title],\n subTitle: translations[options.subTitle],\n scope: scope,\n buttons: [\n { text: translations['COMMON.BTN_CANCEL'] },\n { text: translations['COMMON.BTN_OK'],\n type: 'button-positive',\n onTap: scope.submit\n }\n ]\n });\n return options.popup;\n });\n\n }\n\n return {\n showTransfer: showTransfer,\n showLogin: showLogin,\n showWotLookup: showWotLookup,\n showNetworkLookup: showNetworkLookup,\n showAbout: showAbout,\n showJoin: showJoin,\n showJoinMember: showJoinMember,\n showJoinWallet: showJoinWallet,\n showHelp: showHelp,\n showAccountSecurity: showAccountSecurity,\n showLicense: showLicense,\n showSelectPubkeyIdentity: showSelectPubkeyIdentity,\n showSelectWallet: showSelectWallet,\n showPassword: showPassword\n };\n\n}])\n\n.factory('csPopovers', ['$rootScope', '$translate', '$ionicPopup', '$timeout', 'UIUtils', '$controller', function($rootScope, $translate, $ionicPopup, $timeout, UIUtils, $controller) {\n 'ngInject';\n\n function showSelectWallet(event, options) {\n options = options || {};\n\n var parameters = options.parameters || {};\n delete options.parameters;\n\n var scope = options.scope && options.scope.$new() || $rootScope.$new(true);\n options.scope = scope;\n options.templateUrl = 'templates/wallet/list/popover_wallets.html';\n options.autoremove = true;\n\n // Initialize the popover controller, with parameters\n angular.extend(this, $controller('WalletSelectPopoverCtrl', {$scope: options.scope, parameters: parameters}));\n\n var afterShowSaved = options.afterShow;\n options.afterShow = function(popover) {\n\n // Add a missing method, to close the popover\n scope.closePopover = function(res) {\n popover.scope.closePopover(res);\n };\n\n // Execute default afterShow fn, if any\n if (afterShowSaved) afterShowSaved(popover);\n };\n // Show the popover\n return UIUtils.popover.show(event, options)\n .then(function(res) {\n // Then destroy the scope\n scope.$destroy();\n return res;\n });\n }\n\n return {\n showSelectWallet: showSelectWallet\n };\n\n }]);\n","angular.module('cesium.http.services', ['cesium.cache.services'])\n\n.factory('csHttp', ['$http', '$q', '$timeout', '$window', 'csSettings', 'csCache', 'Device', function($http, $q, $timeout, $window, csSettings, csCache, Device) {\n 'ngInject';\n\n var timeout = csSettings.data.timeout;\n\n var\n sockets = [],\n defaultCachePrefix = 'csHttp-',\n allCachePrefixes = {};\n ;\n\n if (!timeout) {\n timeout=4000; // default\n }\n\n function getServer(host, port) {\n // Remove port if 80 or 443\n return !host ? null : (host + (port && port != 80 && port != 443 ? ':' + port : ''));\n }\n\n function getUrl(host, port, path, useSsl) {\n var protocol = (port == 443 || useSsl) ? 'https' : 'http';\n return protocol + '://' + getServer(host, port) + (path ? path : '');\n }\n\n function getWsUrl(host, port, path, useSsl) {\n var protocol = (port == 443 || useSsl) ? 'wss' : 'ws';\n return protocol + '://' + getServer(host, port) + (path ? path : '');\n }\n\n function processError(reject, data, url, status) {\n if (data && data.message) {\n reject(data);\n }\n else {\n if (status == 403) {\n reject({ucode: 403, message: 'Resource is forbidden' + (url ? ' ('+url+')' : '')});\n }\n else if (status == 404) {\n reject({ucode: 404, message: 'Resource not found' + (url ? ' ('+url+')' : '')});\n }\n else if (url) {\n console.error('[http] Get HTTP error {status: ' + status + '} on [' + url + ']');\n reject('Error while requesting [' + url + ']');\n }\n else {\n reject('Unknown error from node');\n }\n }\n }\n\n function prepare(url, params, config, callback) {\n var pkeys = [], queryParams = {}, newUri = url;\n if (typeof params === 'object') {\n pkeys = _.keys(params);\n }\n\n _.forEach(pkeys, function(pkey){\n var prevURI = newUri;\n newUri = newUri.replace(':' + pkey, params[pkey]);\n if (prevURI === newUri) {\n queryParams[pkey] = params[pkey];\n }\n });\n config.params = queryParams;\n return callback(newUri, config);\n }\n\n function getResource(host, port, path, useSsl, forcedTimeout) {\n // Make sure host is defined - fix #537\n if (!host) {\n return $q.reject('[http] invalid URL from host: ' + host);\n }\n var url = getUrl(host, port, path, useSsl);\n return function(params) {\n return $q(function(resolve, reject) {\n var config = {\n timeout: forcedTimeout || timeout,\n responseType: 'json'\n };\n\n prepare(url, params, config, function(url, config) {\n $http.get(url, config)\n .success(function(data, status, headers, config) {\n resolve(data);\n })\n .error(function(data, status, headers, config) {\n processError(reject, data, url, status);\n });\n });\n });\n };\n }\n\n function getResourceWithCache(host, port, path, useSsl, maxAge, autoRefresh, forcedTimeout, cachePrefix) {\n var url = getUrl(host, port, path, useSsl);\n cachePrefix = cachePrefix || defaultCachePrefix;\n maxAge = maxAge || csCache.constants.LONG;\n allCachePrefixes[cachePrefix] = true;\n\n //console.debug('[http] will cache ['+url+'] ' + maxAge + 'ms' + (autoRefresh ? ' with auto-refresh' : ''));\n\n return function(params) {\n return $q(function(resolve, reject) {\n var config = {\n timeout: forcedTimeout || timeout,\n responseType: 'json'\n };\n if (autoRefresh) { // redo the request if need\n config.cache = csCache.get(cachePrefix, maxAge, function (key, value, done) {\n console.debug('[http] Refreshing cache for {{0}} '.format(key));\n $http.get(key, config)\n .success(function (data) {\n config.cache.put(key, data);\n if (done) done(key, data);\n });\n });\n }\n else {\n config.cache = csCache.get(cachePrefix, maxAge);\n }\n\n prepare(url, params, config, function(url, config) {\n $http.get(url, config)\n .success(function(data) {\n resolve(data);\n })\n .error(function(data, status) {\n processError(reject, data, url, status);\n });\n });\n });\n };\n }\n\n function postResource(host, port, path, useSsl, forcedTimeout) {\n var url = getUrl(host, port, path, useSsl);\n return function(data, params) {\n return $q(function(resolve, reject) {\n var config = {\n timeout: forcedTimeout || timeout,\n headers : {'Content-Type' : 'application/json;charset=UTF-8'}\n };\n\n prepare(url, params, config, function(url, config) {\n $http.post(url, data, config)\n .success(function(data) {\n resolve(data);\n })\n .error(function(data, status) {\n processError(reject, data, url, status);\n });\n });\n });\n };\n }\n\n function ws(host, port, path, useSsl, timeout) {\n if (!path) {\n console.error('calling csHttp.ws without path argument');\n throw 'calling csHttp.ws without path argument';\n }\n var uri = getWsUrl(host, port, path, useSsl);\n timeout = timeout || csSettings.data.timeout;\n\n function _waitOpen(self) {\n if (!self.delegate) {\n throw new Error('Websocket {0} was closed!'.format(uri));\n }\n if (self.delegate.readyState == 1) {\n return $q.when(self.delegate);\n }\n if (self.delegate.readyState == 3) {\n return $q.reject('Unable to connect to websocket ['+self.delegate.url+']');\n }\n\n if (self.waitDuration >= timeout) {\n self.waitRetryDelay = self.waitRetryDelay && Math.min(self.waitRetryDelay + 2000, 30000) || 2000; // add 2 seconds, until 30s)\n console.debug(\"[http] Will retry websocket [{0}] in {1}s...\".format(self.path, Math.round(self.waitRetryDelay/1000)));\n }\n else if (Math.round(self.waitDuration / 1000) % 10 === 0){\n console.debug('[http] Waiting websocket ['+self.path+']...');\n }\n\n return $timeout(function(){\n self.waitDuration += self.waitRetryDelay;\n return _waitOpen(self);\n }, self.waitRetryDelay);\n }\n\n function _open(self, callback, params) {\n if (!self.delegate) {\n self.path = path;\n self.callbacks = [];\n self.waitDuration = 0;\n self.waitRetryDelay = 200;\n\n prepare(uri, params, {}, function(uri) {\n self.delegate = new WebSocket(uri);\n self.delegate.onerror = function(e) {\n self.delegate.readyState=3;\n };\n self.delegate.onmessage = function(e) {\n var obj = JSON.parse(e.data);\n _.forEach(self.callbacks, function(callback) {\n callback(obj);\n });\n };\n self.delegate.onopen = function(e) {\n console.debug('[http] Listening on websocket ['+self.path+']...');\n sockets.push(self);\n self.delegate.openTime = Date.now();\n };\n self.delegate.onclose = function(closeEvent) {\n\n // Remove from sockets arrays\n var index = _.findIndex(sockets, function(socket){return socket.path === self.path;});\n if (index >= 0) {\n sockets.splice(index,1);\n }\n\n // If close event comes from Cesium\n if (self.delegate.closing) {\n self.delegate = null;\n }\n\n // If unexpected close event, reopen the socket (fix #535)\n else {\n if (self.delegate.openTime) {\n console.debug('[http] Unexpected close of websocket [{0}] (open {1} ms ago): re-opening...', path, (Date.now() - self.delegate.openTime));\n\n // Force new connection\n self.delegate = null;\n\n // Loop, but without the already registered callback\n _open(self, null, params);\n }\n else if (closeEvent) {\n console.debug('[http] Unexpected close of websocket [{0}]: error code: '.format(path), closeEvent && closeEvent.code || closeEvent);\n\n // Force new connection\n self.delegate = null;\n\n // Loop, but without the already registered callback\n _open(self, null, params);\n }\n }\n };\n });\n }\n\n if (callback) self.callbacks.push(callback);\n return _waitOpen(self);\n }\n\n function _close(self) {\n if (self.delegate) {\n self.delegate.closing = true;\n console.debug('[http] Closing websocket ['+self.path+']...');\n self.delegate.close();\n self.callbacks = [];\n if (self.onclose) self.onclose();\n }\n }\n\n function _remove(self, callback) {\n self.callbacks = _.reject(self.callbacks, function(item) {\n return item === callback;\n });\n if (!self.callbacks.length) {\n _close(self);\n }\n }\n\n return {\n open: function(params) {\n return _open(this, null, params);\n },\n on: function(callback, params) {\n return _open(this, callback, params);\n },\n onListener: function(callback, params) {\n var self = this;\n _open(self, callback, params);\n return function() {\n _remove(self, callback);\n };\n },\n send: function(data) {\n var self = this;\n return _waitOpen(self)\n .then(function(){\n if (self.delegate) self.delegate.send(data);\n });\n },\n close: function() {\n var self = this;\n _close(self);\n },\n isClosed: function() {\n var self = this;\n return !self.delegate || self.delegate.closing;\n }\n };\n }\n\n function closeAllWs() {\n if (sockets.length > 0) {\n console.debug('[http] Closing all websocket...');\n _.forEach(sockets, function(sock) {\n sock.close();\n });\n sockets = []; // Reset socks list\n }\n }\n\n // See doc : https://gist.github.com/jlong/2428561\n function parseUri(uri) {\n var protocol;\n if (uri.startsWith('duniter://')) {\n protocol = 'duniter';\n uri = uri.replace('duniter://', 'http://');\n }\n\n var parser = document.createElement('a');\n parser.href = uri;\n\n var pathname = parser.pathname;\n if (pathname && pathname.startsWith('/')) {\n pathname = pathname.substring(1);\n }\n\n var result = {\n protocol: protocol ? protocol : parser.protocol,\n hostname: parser.hostname,\n host: parser.host,\n port: parser.port,\n username: parser.username,\n password: parser.password,\n pathname: pathname,\n search: parser.search,\n hash: parser.hash\n };\n parser.remove();\n return result;\n }\n\n /**\n * Open a URI (url, email, phone, ...)\n * @param event\n * @param link\n * @param type\n */\n function openUri(uri, options) {\n options = options || {};\n\n if (!uri.startsWith('http://') && !uri.startsWith('https://')) {\n var parts = parseUri(uri);\n\n if (!parts.protocol && options.type) {\n parts.protocol = (options.type == 'email') ? 'mailto:' :\n ((options.type == 'phone') ? 'tel:' : '');\n uri = parts.protocol + uri;\n }\n\n // On desktop, open into external tool\n if (parts.protocol == 'mailto:' && Device.isDesktop()) {\n try {\n nw.Shell.openExternal(uri);\n return;\n }\n catch(err) {\n console.error(\"[http] Failed not open 'mailto:' URI into external tool.\");\n }\n }\n\n // Check if device is enable, on special tel: or mailto: protocole\n var validProtocol = (parts.protocol == 'mailto:' || parts.protocol == 'tel:') && Device.enable;\n if (!validProtocol) {\n if (options.onError && typeof options.onError == 'function') {\n options.onError(uri);\n }\n return;\n }\n }\n\n // Note: If device enable, then target=_system will use InAppBrowser cordova plugin\n var openTarget = (options.target || (Device.enable ? '_system' : '_blank'));\n\n // If desktop, try to open into external browser\n if (openTarget === '_blank' || openTarget === '_system' && Device.isDesktop()) {\n try {\n nw.Shell.openExternal(uri);\n return;\n }\n catch(err) {\n console.error(\"[http] Failed not open URI into external browser.\");\n }\n }\n\n // If desktop, should always open in new window (no tabs)\n var openOptions;\n if (openTarget === '_blank' && Device.isDesktop()) {\n\n if (nw && nw.Shell) {\n nw.Shell.openExternal(uri);\n return false;\n }\n // Override default options\n openOptions= \"location=1,titlebar=1,status=1,menubar=1,toolbar=1,resizable=1,scrollbars=1\";\n // Add width/height\n if ($window.screen && $window.screen.width && $window.screen.height) {\n openOptions += \",width={0},height={1}\".format(Math.trunc($window.screen.width/2), Math.trunc($window.screen.height/2));\n }\n }\n\n var win = $window.open(uri,\n openTarget,\n openOptions);\n\n // Center the opened window\n if (openOptions && $window.screen && $window.screen.width && $window.screen.height) {\n win.moveTo($window.screen.width/2/2, $window.screen.height/2/2);\n win.focus();\n }\n\n }\n\n // Get time in second (UTC)\n function getDateNow() {\n return moment().utc().unix();\n }\n\n function isPositiveInteger(x) {\n // http://stackoverflow.com/a/1019526/11236\n return /^\\d+$/.test(x);\n }\n\n /**\n * Compare two software version numbers (e.g. 1.7.1)\n * Returns:\n *\n * 0 if they're identical\n * negative if v1 < v2\n * positive if v1 > v2\n * Nan if they in the wrong format\n *\n * E.g.:\n *\n * assert(version_number_compare(\"1.7.1\", \"1.6.10\") > 0);\n * assert(version_number_compare(\"1.7.1\", \"1.7.10\") < 0);\n *\n * \"Unit tests\": http://jsfiddle.net/ripper234/Xv9WL/28/\n *\n * Taken from http://stackoverflow.com/a/6832721/11236\n */\n function compareVersionNumbers(v1, v2){\n var v1parts = v1.split('.');\n var v2parts = v2.split('.');\n\n // First, validate both numbers are true version numbers\n function validateParts(parts) {\n for (var i = 0; i < parts.length; ++i) {\n if (!isPositiveInteger(parts[i])) {\n return false;\n }\n parts[i] = parseInt(parts[i]);\n }\n return true;\n }\n if (!validateParts(v1parts) || !validateParts(v2parts)) {\n return NaN;\n }\n\n for (var i = 0; i < v1parts.length; ++i) {\n if (v2parts.length === i) {\n return 1;\n }\n\n if (v1parts[i] === v2parts[i]) {\n continue;\n }\n if (v1parts[i] > v2parts[i]) {\n return 1;\n }\n return -1;\n }\n\n if (v1parts.length != v2parts.length) {\n return -1;\n }\n\n return 0;\n }\n\n function isVersionCompatible(minVersion, actualVersion) {\n console.debug('[http] Checking actual version [{0}] is compatible with min expected version [{1}]'.format(actualVersion, minVersion));\n return compareVersionNumbers(minVersion, actualVersion) <= 0;\n }\n\n function clearCache(cachePrefix) {\n cachePrefix = cachePrefix || defaultCachePrefix;\n console.debug(\"[http] Cleaning cache {prefix: '{0}'}...\".format(cachePrefix));\n csCache.clear(cachePrefix);\n }\n\n function clearAllCache() {\n console.debug('[http] Cleaning all caches...');\n _.keys(allCachePrefixes).forEach(function(cachePrefix) {\n csCache.clear(cachePrefix);\n });\n }\n\n return {\n get: getResource,\n getWithCache: getResourceWithCache,\n post: postResource,\n ws: ws,\n closeAllWs: closeAllWs,\n getUrl : getUrl,\n getServer: getServer,\n uri: {\n parse: parseUri,\n open: openUri\n },\n date: {\n now: getDateNow\n },\n version: {\n compare: compareVersionNumbers,\n isCompatible: isVersionCompatible\n },\n cache: angular.merge({\n clear: clearCache,\n clearAll: clearAllCache\n }, csCache.constants)\n };\n}])\n;\n","angular.module('cesium.storage.services', [ 'cesium.config'])\n\n\n .factory('sessionStorage', ['$window', '$q', function($window, $q) {\n 'ngInject';\n\n var\n exports = {\n storage: $window.sessionStorage || {}\n };\n\n exports.put = function(key, value) {\n exports.storage[key] = value;\n return $q.when();\n };\n\n exports.get = function(key, defaultValue) {\n return $q.when(exports.storage[key] || defaultValue);\n };\n\n exports.setObject = function(key, value) {\n exports.storage[key] = JSON.stringify(value);\n return $q.when();\n };\n\n exports.getObject = function(key) {\n return $q.when(JSON.parse(exports.storage[key] || 'null'));\n };\n\n return exports;\n }])\n\n .factory('localStorage', ['$window', '$q', '$log', 'sessionStorage', function($window, $q, $log, sessionStorage) {\n 'ngInject';\n\n var\n appName = \"Cesium\",\n started = false,\n startPromise,\n isDevice = true, // default for device (override later)\n exports = {\n standard: {\n storage: null\n },\n secure: {\n storage: null\n }\n };\n\n // removeIf(device)\n // Use this workaround to avoid to wait ionicReady() event\n isDevice = false;\n // endRemoveIf(device)\n\n /* -- Use standard browser implementation -- */\n\n exports.standard.put = function(key, value) {\n if (angular.isDefined(value) && value != null) {\n exports.standard.storage[key] = value;\n }\n else {\n exports.standard.storage.removeItem(key);\n }\n return $q.when();\n };\n\n exports.standard.remove = function(key, value) {\n exports.standard.storage.removeItem(key);\n return $q.when();\n };\n\n exports.standard.get = function(key, defaultValue) {\n return $q.when(exports.standard.storage[key] || defaultValue);\n };\n\n exports.standard.setObject = function(key, value) {\n exports.standard.storage[key] = JSON.stringify(value);\n return $q.when();\n };\n\n exports.standard.getObject = function(key) {\n return $q.when(JSON.parse(exports.standard.storage[key] || 'null'));\n };\n\n /* -- Use secure storage (using a cordova plugin) -- */\n\n // Set a value to the secure storage (or remove if value is not defined)\n exports.secure.put = function(key, value) {\n return $q(function(resolve, reject) {\n if (value !== undefined && value !== null) {\n exports.secure.storage.set(\n function (key) {\n resolve();\n },\n function (err) {\n $log.error(err);\n reject(err);\n },\n key, value);\n }\n // Remove\n else {\n exports.secure.storage.remove(\n function () {\n resolve();\n },\n function (err) {\n $log.error(err);\n resolve(); // Error = not found\n },\n key);\n }\n });\n };\n\n // Get a value from the secure storage\n exports.secure.get = function(key, defaultValue) {\n return $q(function(resolve, reject) {\n exports.secure.storage.get(\n function (value) {\n if (!value && defaultValue) {\n resolve(defaultValue);\n }\n else {\n resolve(value);\n }\n },\n function (err) {\n $log.error(err);\n resolve(); // Error = not found\n },\n key);\n });\n };\n\n // Set a object to the secure storage\n exports.secure.setObject = function(key, value) {\n $log.debug(\"[storage] Setting object into secure storage, using key=\" + key);\n return $q(function(resolve, reject){\n exports.secure.storage.set(\n resolve,\n reject,\n key,\n value ? JSON.stringify(value) : undefined);\n });\n };\n\n // Get a object from the secure storage\n exports.secure.getObject = function(key) {\n $log.debug(\"[storage] Getting object from secure storage, using key=\" + key);\n return $q(function(resolve, reject){\n exports.secure.storage.get(\n function(value) {resolve(JSON.parse(value||'null'));},\n function(err) {\n $log.error(err);\n resolve(); // Error = not found\n },\n key);\n });\n };\n\n function initStandardStorage() {\n // use local browser storage\n if ($window.localStorage) {\n console.debug('[storage] Starting {local} storage...');\n exports.standard.storage = $window.localStorage;\n // Set standard storage as default\n _.forEach(_.keys(exports.standard), function(key) {\n exports[key] = exports.standard[key];\n });\n }\n\n // Fallback to session storage (localStorage could have been disabled on some browser)\n else {\n console.debug('[storage] Starting {session} storage...');\n // Set standard storage as default\n _.forEach(_.keys(sessionStorage), function(key) {\n exports[key] = sessionStorage[key];\n });\n }\n return $q.when();\n }\n\n function initSecureStorage() {\n console.debug('[storage] Starting {secure} storage...');\n // Set secure storage as default\n _.forEach(_.keys(exports.secure), function(key) {\n exports[key] = exports.secure[key];\n });\n\n var deferred = $q.defer();\n\n // No secure storage plugin: fall back to standard storage\n if (!cordova.plugins || !cordova.plugins.SecureStorage) {\n initStandardStorage();\n deferred.resolve();\n }\n else {\n\n exports.secure.storage = new cordova.plugins.SecureStorage(\n function () {\n deferred.resolve();\n },\n function (err) {\n console.error('[storage] Could not use secure storage. Will use standard.', err);\n initStandardStorage();\n deferred.resolve();\n },\n appName);\n }\n return deferred.promise;\n }\n\n exports.isStarted = function() {\n return started;\n };\n\n exports.ready = function() {\n if (started) return $q.when();\n return startPromise || start();\n };\n\n function start() {\n if (startPromise) return startPromise;\n\n var now = Date.now();\n\n // Use Cordova secure storage plugin\n if (isDevice) {\n startPromise = initSecureStorage();\n }\n\n // Use default browser local storage\n else {\n startPromise = initStandardStorage();\n }\n\n return startPromise\n .then(function() {\n console.debug('[storage] Started in ' + (Date.now() - now) + 'ms');\n started = true;\n startPromise = null;\n });\n }\n\n // default action\n start();\n\n return exports;\n }])\n\n\n;\n","\nangular.module('cesium.currency.services', ['ngApi', 'cesium.bma.services'])\n\n.factory('csCurrency', ['$rootScope', '$q', '$timeout', 'BMA', 'Api', 'csSettings', function($rootScope, $q, $timeout, BMA, Api, csSettings) {\n 'ngInject';\n\n var\n constants = {\n // Avoid to many call on well known currencies\n WELL_KNOWN_CURRENCIES: {\n g1: {\n firstBlockTime: 1488987127,\n medianTimeOffset: 3600\n }\n }\n },\n\n data = {},\n started = false,\n startPromise,\n listeners,\n api = new Api(this, \"csCurrency\");\n\n function powBase(amount, base) {\n return base <= 0 ? amount : amount * Math.pow(10, base);\n }\n\n function resetData() {\n data.name = null;\n data.parameters = null;\n data.firstBlockTime = null;\n data.membersCount = null;\n data.cache = {};\n data.node = BMA;\n data.currentUD = null;\n data.medianTimeOffset = 0;\n started = false;\n startPromise = undefined;\n api.data.raise.reset(data);\n }\n\n function loadData() {\n\n // Load currency from default node\n return $q.all([\n\n // get parameters\n loadParameters()\n .then(function(parameters) {\n // load first block info\n return loadFirstBlock(parameters.currency);\n }),\n\n // get current UD\n loadCurrentUD(),\n\n // call extensions\n api.data.raisePromise.load(data)\n ])\n .catch(function(err) {\n resetData();\n throw err;\n });\n }\n\n function loadParameters() {\n return BMA.blockchain.parameters()\n .then(function(res){\n data.name = res.currency;\n data.parameters = res;\n data.medianTimeOffset = res.avgGenTime * res.medianTimeBlocks / 2;\n return res;\n });\n }\n\n function loadFirstBlock(currencyName) {\n // Well known currencies\n if (constants.WELL_KNOWN_CURRENCIES[currencyName]){\n angular.merge(data, constants.WELL_KNOWN_CURRENCIES[currencyName]);\n return $q.when();\n }\n\n return BMA.blockchain.block({block:0})\n .then(function(json) {\n // Need by graph plugin\n data.firstBlockTime = json.medianTime;\n })\n .catch(function(err) {\n // Special case, when currency not started yet\n if (err && err.ucode === BMA.errorCodes.BLOCK_NOT_FOUND) {\n data.firstBlockTime = 0;\n data.initPhase = true;\n console.warn('[currency] Blockchain not launched: Enable init phase mode');\n return;\n }\n throw err;\n });\n }\n\n function loadCurrentUD() {\n return BMA.blockchain.stats.ud()\n .then(function(res) {\n // Special case for currency init\n if (!res.result.blocks.length) {\n data.currentUD = data.parameters ? data.parameters.ud0 : -1;\n return data.currentUD ;\n }\n return _safeLoadCurrentUD(res, res.result.blocks.length - 1);\n })\n .catch(function(err) {\n data.currentUD = null;\n throw err;\n });\n }\n\n /**\n * Load the last UD, with a workaround if last block with UD is not found in the node\n * @param res\n * @param blockIndex\n * @returns {*}\n * @private\n */\n function _safeLoadCurrentUD(res, blockIndex) {\n // Special case for currency init\n if (!res.result.blocks.length || blockIndex < 0) {\n data.currentUD = data.parameters ? data.parameters.ud0 : -1;\n return data.currentUD ;\n }\n else {\n var lastBlockWithUD = res.result.blocks[blockIndex];\n return BMA.blockchain.block({ block: lastBlockWithUD })\n .then(function(block){\n data.currentUD = powBase(block.dividend, block.unitbase);\n return data.currentUD;\n })\n .catch(function(err) {\n console.error(\"[currency] Unable to load last block with UD, with number {0}\".format(lastBlockWithUD));\n if (blockIndex > 0) {\n console.error(\"[currency] Retrying to load UD from a previous block...\");\n return _safeLoadCurrentUD(res, blockIndex-1);\n }\n data.currentUD = null;\n throw err;\n });\n }\n }\n\n function getData() {\n\n if (started) { // load only once\n return $q.when(data);\n }\n\n // Previous load not finished: return the existing promise - fix #452\n return startPromise || start();\n }\n\n function getDataField(field) {\n return function() {\n if (started) { // load only once\n return $q.when(data[field]);\n }\n\n // Previous load not finished: return the existing promise - fix #452\n return startPromise || start() // load only once\n .then(function(){\n return data[field];\n });\n };\n }\n\n function onBlock(json) {\n var block = new Block(json);\n block.cleanData(); // Remove unused content (arrays...) and keep items count\n\n //console.debug('[currency] Received new block', block);\n console.debug('[currency] Received new block {' + block.number + '-' + block.hash + '}');\n\n data.currentBlock = block;\n data.currentBlock.receivedAt = moment().utc().unix();\n\n data.medianTime = block.medianTime;\n data.membersCount = block.membersCount;\n\n // Update UD\n if (block.dividend) {\n data.currentUD = block.dividend;\n }\n\n // Dispatch to extensions\n api.data.raise.newBlock(block);\n }\n\n function addListeners() {\n listeners = [\n // Listen if node changed\n BMA.api.node.on.restart($rootScope, restart, this),\n // open web socket on block\n BMA.websocket.block().onListener(onBlock)\n ];\n }\n\n function removeListeners() {\n _.forEach(listeners, function(remove){\n remove();\n });\n listeners = [];\n }\n\n function ready() {\n if (started) return $q.when(data);\n return startPromise || start();\n }\n\n function stop() {\n console.debug('[currency] Stopping...');\n removeListeners();\n resetData();\n }\n\n function restart() {\n stop();\n return $timeout(start, 200);\n }\n\n function start() {\n console.debug('[currency] Starting...');\n var now = Date.now();\n\n startPromise = BMA.ready()\n\n // Load data\n .then(loadData)\n\n // Emit ready event\n .then(function() {\n addListeners();\n\n console.debug('[currency] Started in ' + (Date.now() - now) + 'ms');\n\n started = true;\n startPromise = null;\n\n // Emit event (used by plugins)\n api.data.raise.ready(data);\n })\n .then(function(){\n return data;\n });\n\n return startPromise;\n }\n\n var currentBlockField = getDataField('currentBlock');\n\n function getCurrent(cache) {\n // Get field (and make sure service is started)\n return currentBlockField()\n\n .then(function(currentBlock) {\n\n var now = moment().utc().unix();\n\n if (cache) {\n if (currentBlock && currentBlock.receivedAt && (now - currentBlock.receivedAt) < 60/*1min*/) {\n //console.debug('[currency] Use current block #'+ currentBlock.number +' from cache (age='+ (now - currentBlock.receivedAt) + 's)');\n return currentBlock;\n }\n\n if (!currentBlock) {\n // Should never occur, if websocket /ws/block works !\n console.warn('[currency] No current block in cache: get it from network. Websocket [/ws/block] may not be started ?');\n }\n }\n\n return BMA.blockchain.current(false)\n .catch(function(err){\n // Special case for currency init (root block not exists): use fixed values\n if (err && err.ucode == BMA.errorCodes.NO_CURRENT_BLOCK) {\n return {number: 0, hash: BMA.constants.ROOT_BLOCK_HASH, medianTime: now};\n }\n throw err;\n })\n .then(function(current) {\n data.currentBlock = current;\n data.currentBlock.receivedAt = now;\n return current;\n });\n });\n }\n\n function getLastValidBlock() {\n if (csSettings.data.blockValidityWindow <= 0) {\n return getCurrent(true);\n }\n\n return getCurrent(true)\n .then(function(current) {\n var number = current.number - csSettings.data.blockValidityWindow;\n return (number > 0) ? BMA.blockchain.block({block: number}) : current;\n });\n }\n\n // Get time in second (UTC - medianTimeOffset)\n function getDateNow() {\n return moment().utc().unix() - (data.medianTimeOffset || constants.WELL_KNOWN_CURRENCIES.g1.medianTimeOffset);\n }\n\n // TODO register new block event, to get new UD value\n\n // Register extension points\n api.registerEvent('data', 'ready');\n api.registerEvent('data', 'load');\n api.registerEvent('data', 'reset');\n api.registerEvent('data', 'newBlock');\n\n // init data\n resetData();\n\n // Default action\n //start();\n\n return {\n ready: ready,\n start: start,\n stop: stop,\n data: data,\n get: getData,\n name: getDataField('name'),\n parameters: getDataField('parameters'),\n currentUD: getDataField('currentUD'),\n medianTimeOffset: getDataField('medianTimeOffset'),\n blockchain: {\n current: getCurrent,\n lastValid: getLastValidBlock\n },\n date: {\n now: getDateNow\n },\n // api extension\n api: api,\n // deprecated methods\n default: function() {\n console.warn('[currency] \\'csCurrency.default()\\' has been DEPRECATED - Please use \\'csCurrency.get()\\' instead.');\n return getData();\n }\n };\n}]);\n","//var Base58, Base64, scrypt_module_factory = null, nacl_factory = null;\n\nangular.module('cesium.bma.services', ['ngApi', 'cesium.http.services', 'cesium.settings.services'])\n\n.factory('BMA', ['$q', '$window', '$rootScope', '$timeout', 'csCrypto', 'Api', 'Device', 'UIUtils', 'csConfig', 'csSettings', 'csCache', 'csHttp', function($q, $window, $rootScope, $timeout, csCrypto, Api, Device, UIUtils, csConfig, csSettings, csCache, csHttp) {\n 'ngInject';\n\n function BMA(host, port, useSsl, useCache) {\n\n var\n id = (!host ? 'default' : '{0}:{1}'.format(host, (port || (useSsl ? '443' : '80')))), // Unique id of this instance\n cachePrefix = \"BMA-\",\n pubkey = \"[123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{43,44}\",\n // TX output conditions\n SIG = \"SIG\\\\((\" + pubkey + \")\\\\)\",\n XHX = 'XHX\\\\(([A-F0-9]{1,64})\\\\)',\n CSV = 'CSV\\\\(([0-9]{1,8})\\\\)',\n CLTV = 'CLTV\\\\(([0-9]{1,10})\\\\)',\n OUTPUT_FUNCTION = SIG+'|'+XHX+'|'+CSV+'|'+CLTV,\n OUTPUT_OPERATOR = '(&&)|(\\\\|\\\\|)',\n OUTPUT_FUNCTIONS = OUTPUT_FUNCTION+'([ ]*' + OUTPUT_OPERATOR + '[ ]*' + OUTPUT_FUNCTION +')*',\n OUTPUT_OBJ = 'OBJ\\\\(([0-9]+)\\\\)',\n OUTPUT_OBJ_OPERATOR = OUTPUT_OBJ + '[ ]*' + OUTPUT_OPERATOR + '[ ]*' + OUTPUT_OBJ,\n REGEX_ENDPOINT_PARAMS = \"( ([a-z_][a-z0-9-_.ğĞ]*))?( ([0-9.]+))?( ([0-9a-f:]+))?( ([0-9]+))( (.+))?\",\n api = {\n BMA: 'BASIC_MERKLED_API',\n BMAS: 'BMAS',\n WS2P: 'WS2P',\n BMATOR: 'BMATOR',\n WS2PTOR: 'WS2PTOR'\n },\n regexp = {\n USER_ID: \"[0-9a-zA-Z-_]+\",\n CURRENCY: \"[0-9a-zA-Z-_]+\",\n PUBKEY: pubkey,\n PUBKEY_WITH_CHECKSUM: \"(\" + pubkey +\"):([123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz]{3})\",\n COMMENT: \"[ a-zA-Z0-9-_:/;*\\\\[\\\\]()?!^\\\\+=@&~#{}|\\\\\\\\<>%.]*\",\n INVALID_COMMENT_CHARS: \"[^ a-zA-Z0-9-_:/;*\\\\[\\\\]()?!^\\\\+=@&~#{}|\\\\\\\\<>%.]*\",\n // duniter://[uid]:[pubkey]@[host]:[port]\n URI_WITH_AT: \"duniter://(?:([A-Za-z0-9_-]+):)?(\"+pubkey+\"@([a-zA-Z0-9-.]+.[ a-zA-Z0-9-_:/;*?!^\\\\+=@&~#|<>%.]+)\",\n URI_WITH_PATH: \"duniter://([a-zA-Z0-9-.]+.[a-zA-Z0-9-_:.]+)/(\"+pubkey+\")(?:/([A-Za-z0-9_-]+))?\",\n BMA_ENDPOINT: api.BMA + REGEX_ENDPOINT_PARAMS,\n BMAS_ENDPOINT: api.BMAS + REGEX_ENDPOINT_PARAMS,\n WS2P_ENDPOINT: api.WS2P + \" ([a-f0-9]{8})\"+ REGEX_ENDPOINT_PARAMS,\n BMATOR_ENDPOINT: api.BMATOR + \" ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?\",\n WS2PTOR_ENDPOINT: api.WS2PTOR + \" ([a-f0-9]{8}) ([a-z0-9-_.]*|[0-9.]+|[0-9a-f:]+.onion)(?: ([0-9]+))?(?: (.+))?\"\n },\n errorCodes = {\n REVOCATION_ALREADY_REGISTERED: 1002,\n HTTP_LIMITATION: 1006,\n IDENTITY_SANDBOX_FULL: 1007,\n NO_MATCHING_IDENTITY: 2001,\n UID_ALREADY_USED: 2003,\n NO_MATCHING_MEMBER: 2004,\n NO_IDTY_MATCHING_PUB_OR_UID: 2021,\n WRONG_SIGNATURE_MEMBERSHIP: 2006,\n MEMBERSHIP_ALREADY_SEND: 2007,\n NO_CURRENT_BLOCK: 2010,\n BLOCK_NOT_FOUND: 2011,\n SOURCE_ALREADY_CONSUMED: 2015,\n TX_INPUTS_OUTPUTS_NOT_EQUAL: 2024,\n TX_OUTPUT_SUM_NOT_EQUALS_PREV_DELTAS: 2025,\n TX_ALREADY_PROCESSED: 2030\n },\n constants = {\n PROTOCOL_VERSION: 10,\n ROOT_BLOCK_HASH: 'E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855',\n LIMIT_REQUEST_COUNT: 5, // simultaneous async request to a Duniter node\n LIMIT_REQUEST_DELAY: 1000, // time (in ms) to wait between to call of a rest request\n regexp: regexp,\n api: api\n },\n listeners,\n that = this;\n\n that.raw = {\n getByPath: {},\n postByPath: {},\n wsByPath: {}\n };\n that.api = new Api(this, 'BMA-' + id);\n that.started = false;\n that.init = init;\n\n // Allow to force SSL connection with port different from 443\n that.forceUseSsl = (csConfig.httpsMode === 'true' || csConfig.httpsMode === true || csConfig.httpsMode === 'force') ||\n ($window.location && $window.location.protocol === 'https:') ? true : false;\n if (that.forceUseSsl) {\n console.debug('[BMA] Enable SSL (forced by config or detected in URL)');\n }\n\n if (host) init(host, port, useSsl);\n that.useCache = angular.isDefined(useCache) ? useCache : true; // need here because used in get() function\n\n function init(host, port, useSsl) {\n if (that.started) that.stop();\n that.alive = false;\n\n // Use settings as default, if exists\n if (csSettings.data && csSettings.data.node) {\n host = host || csSettings.data.node.host;\n port = port || csSettings.data.node.port;\n\n useSsl = angular.isDefined(useSsl) ? useSsl : (port == 443 || csSettings.data.node.useSsl || that.forceUseSsl);\n }\n\n if (!host) {\n return; // could not init yet\n }\n that.host = host;\n that.port = port || 80;\n that.useSsl = angular.isDefined(useSsl) ? useSsl : (that.port == 443 || that.forceUseSsl);\n that.server = csHttp.getServer(host, port);\n that.url = csHttp.getUrl(host, port, ''/*path*/, useSsl);\n }\n\n function exact(regexpContent) {\n return new RegExp(\"^\" + regexpContent + \"$\");\n }\n\n function test(regexpContent) {\n return new RegExp(regexpContent);\n }\n\n function closeWs() {\n if (!that.raw) return;\n\n console.warn('[BMA] Closing all websockets...');\n _.keys(that.raw.wsByPath||{}).forEach(function(key) {\n var sock = that.raw.wsByPath[key];\n sock.close();\n });\n that.raw.wsByPath = {};\n }\n\n function cleanCache() {\n console.debug(\"[BMA] Cleaning cache {prefix: '{0}'}...\".format(cachePrefix));\n csCache.clear(cachePrefix);\n\n // Clean raw requests by path cache\n that.raw.getByPath = {};\n that.raw.postByPath = {};\n that.raw.wsByPath = {};\n }\n\n function get(path, cacheTime) {\n\n cacheTime = that.useCache && cacheTime || 0 /* no cache*/ ;\n var requestKey = path + (cacheTime ? ('#'+cacheTime) : '');\n\n var getRequestFn = function(params) {\n\n if (!that.started) {\n if (!that._startPromise) {\n console.warn('[BMA] Trying to get [{0}] before start(). Waiting...'.format(path));\n }\n return that.ready().then(function() {\n return getRequestFn(params);\n });\n }\n\n var request = that.raw.getByPath[requestKey];\n if (!request) {\n if (cacheTime) {\n request = csHttp.getWithCache(that.host, that.port, path, that.useSsl, cacheTime, null, null, cachePrefix);\n }\n else {\n request = csHttp.get(that.host, that.port, path, that.useSsl);\n }\n that.raw.getByPath[requestKey] = request;\n }\n var execCount = 1;\n return request(params)\n .catch(function(err){\n // If node return too many requests error\n if (err && err.ucode === exports.errorCodes.HTTP_LIMITATION) {\n // If max number of retry not reach\n if (execCount <= exports.constants.LIMIT_REQUEST_COUNT) {\n if (execCount === 1) {\n console.warn(\"[BMA] Too many HTTP requests: Will wait then retry...\");\n // Update the loading message (if exists)\n UIUtils.loading.update({template: \"COMMON.LOADING_WAIT\"});\n }\n // Wait 1s then retry\n return $timeout(function() {\n execCount++;\n return request(params);\n }, exports.constants.LIMIT_REQUEST_DELAY);\n }\n }\n throw err;\n });\n };\n\n return getRequestFn;\n }\n\n function post(path) {\n var postRequest = function(obj, params) {\n if (!that.started) {\n if (!that._startPromise) {\n console.error('[BMA] Trying to post [{0}] before start()...'.format(path));\n }\n return that.ready().then(function() {\n return postRequest(obj, params);\n });\n }\n\n var request = that.raw.postByPath[path];\n if (!request) {\n request = csHttp.post(that.host, that.port, path, that.useSsl);\n that.raw.postByPath[path] = request;\n }\n return request(obj, params);\n };\n\n return postRequest;\n }\n\n function ws(path) {\n return function() {\n var sock = that.raw.wsByPath[path];\n if (!sock || sock.isClosed()) {\n sock = csHttp.ws(that.host, that.port, path, that.useSsl);\n\n // When close, remove from cache\n sock.onclose = function() {\n delete that.raw.wsByPath[path];\n };\n\n that.raw.wsByPath[path] = sock;\n }\n return sock;\n };\n }\n\n that.isAlive = function(node) {\n node = node || that;\n // WARN:\n // - Cannot use previous get() function, because\n // node can be !=that, or not be started yet\n // - Do NOT use cache here\n return csHttp.get(node.host, node.port, '/node/summary', node.useSsl)()\n .then(function(json) {\n var software = json && json.duniter && json.duniter.software;\n var isCompatible = true;\n\n // Check duniter min version\n if (software === 'duniter' && json.duniter.version) {\n isCompatible = csHttp.version.isCompatible(csSettings.data.minVersion, json.duniter.version);\n }\n // TODO: check version of other software (DURS, Juniter, etc.)\n else {\n console.debug('[BMA] Unknown node software [{0} v{1}]: could not check compatibility.'.format(software || '?', json.duniter.version || '?'));\n }\n if (!isCompatible) {\n console.error('[BMA] Incompatible node [{0} v{1}]: expected at least v{2}'.format(software, json.duniter.version, csSettings.data.minVersion));\n }\n return isCompatible;\n })\n .catch(function() {\n return false;\n });\n };\n\n function isSameNode(node2) {\n node2 = node2 || {};\n node2.useSsl = angular.isDefined(node2.useSsl) ? node2.useSsl : (node2.port && node2.port == 443);\n // Same host\n return that.host === node2.host &&\n // Same port\n ((!that.port && !node2.port2) || (that.port == node2.port2||80)) &&\n // Same useSsl\n (that.useSsl === node2.useSsl);\n }\n\n function removeListeners() {\n _.forEach(listeners, function(remove){\n remove();\n });\n listeners = [];\n }\n\n function addListeners() {\n listeners = [\n // Listen if node changed\n csSettings.api.data.on.changed($rootScope, onSettingsChanged, this)\n ];\n }\n\n function onSettingsChanged(settings) {\n // Wait 1s (because settings controller can have restart the service), then copy the settings node\n $timeout(function() {\n exports.copy(settings.node);\n }, 1000);\n }\n\n that.isStarted = function() {\n return that.started;\n };\n\n that.ready = function() {\n if (that.started) return $q.when(true);\n return that._startPromise || that.start();\n };\n\n that.start = function() {\n if (that._startPromise) return that._startPromise;\n if (that.started) return $q.when(that.alive);\n\n if (!that.host) {\n return csSettings.ready()\n .then(function() {\n that.init();\n\n // Always enable cache\n that.useCache = true;\n\n return that.start(); // recursive call\n });\n }\n\n console.debug(\"[BMA] Starting {0} {ssl: {1})...\".format(that.server, that.useSsl));\n\n var now = Date.now();\n\n that._startPromise = $q.all([\n csSettings.ready,\n that.isAlive()\n ])\n .then(function(res) {\n that.alive = res[1];\n if (!that.alive) {\n console.error(\"[BMA] Could not start {0} : unreachable\".format(that.server));\n that.started = true;\n delete that._startPromise;\n return false;\n }\n\n // Add listeners\n if (!listeners || !listeners.length) {\n addListeners();\n }\n console.debug('[BMA] Started in '+(Date.now()-now)+'ms');\n\n that.api.node.raise.start();\n that.started = true;\n delete that._startPromise;\n return true;\n });\n return that._startPromise;\n };\n\n that.stop = function() {\n if (!that.started && !that._startPromise) return $q.when(); // Skip multiple call\n\n console.debug('[BMA] Stopping...');\n\n removeListeners();\n delete that._startPromise;\n\n if (that.alive) {\n closeWs();\n cleanCache();\n that.alive = false;\n that.started = false;\n that.api.node.raise.stop();\n }\n else {\n that.started = false;\n }\n return $q.when();\n };\n\n that.restart = function() {\n that.stop();\n return $timeout(that.start, 200)\n .then(function(alive) {\n if (alive) {\n that.api.node.raise.restart();\n }\n return alive;\n });\n };\n\n that.api.registerEvent('node', 'start');\n that.api.registerEvent('node', 'stop');\n that.api.registerEvent('node', 'restart');\n\n var exports = {\n errorCodes: errorCodes,\n constants: constants,\n regexp: {\n USER_ID: exact(regexp.USER_ID),\n COMMENT: exact(regexp.COMMENT),\n PUBKEY: exact(regexp.PUBKEY),\n PUBKEY_WITH_CHECKSUM: exact(regexp.PUBKEY_WITH_CHECKSUM),\n CURRENCY: exact(regexp.CURRENCY),\n URI: exact(regexp.URI),\n BMA_ENDPOINT: exact(regexp.BMA_ENDPOINT),\n BMAS_ENDPOINT: exact(regexp.BMAS_ENDPOINT),\n WS2P_ENDPOINT: exact(regexp.WS2P_ENDPOINT),\n BMATOR_ENDPOINT: exact(regexp.BMATOR_ENDPOINT),\n WS2PTOR_ENDPOINT: exact(regexp.WS2PTOR_ENDPOINT),\n // TX output conditions\n TX_OUTPUT_SIG: exact(SIG),\n TX_OUTPUT_FUNCTION: test(OUTPUT_FUNCTION),\n TX_OUTPUT_OBJ_OPERATOR_AND: test(OUTPUT_OBJ + '([ ]*&&[ ]*(' + OUTPUT_OBJ + '))+'),\n TX_OUTPUT_OBJ_OPERATOR_OR: test(OUTPUT_OBJ + '([ ]*\\\\|\\\\|[ ]*(' + OUTPUT_OBJ + '))+'),\n TX_OUTPUT_OBJ: test(OUTPUT_OBJ),\n TX_OUTPUT_OBJ_OPERATOR: test(OUTPUT_OBJ_OPERATOR),\n TX_OUTPUT_OBJ_PARENTHESIS: test('\\\\(('+OUTPUT_OBJ+')\\\\)'),\n TX_OUTPUT_FUNCTIONS: test(OUTPUT_FUNCTIONS)\n },\n node: {\n summary: get('/node/summary', csCache.constants.LONG),\n same: isSameNode,\n forceUseSsl: that.forceUseSsl\n },\n network: {\n peering: {\n self: get('/network/peering'),\n peers: get('/network/peering/peers')\n },\n peers: get('/network/peers'),\n ws2p: {\n info: get('/network/ws2p/info'),\n heads: get('/network/ws2p/heads')\n }\n },\n wot: {\n lookup: get('/wot/lookup/:search'),\n certifiedBy: get('/wot/certified-by/:pubkey', csCache.constants.SHORT),\n certifiersOf: get('/wot/certifiers-of/:pubkey', csCache.constants.SHORT),\n member: {\n all: get('/wot/members', csCache.constants.LONG),\n pending: get('/wot/pending', csCache.constants.SHORT)\n },\n requirements: function(params, cache) {\n // No cache by default\n if (cache !== true) return exports.raw.wot.requirements(params);\n return exports.raw.wot.requirementsWithCache(params);\n },\n add: post('/wot/add'),\n certify: post('/wot/certify'),\n revoke: post('/wot/revoke')\n },\n blockchain: {\n parameters: get('/blockchain/parameters', csCache.constants.VERY_LONG),\n block: get('/blockchain/block/:block', csCache.constants.SHORT),\n blocksSlice: get('/blockchain/blocks/:count/:from'),\n current: function(cache) {\n // No cache by default\n return (cache !== true) ? exports.raw.blockchain.current() : exports.raw.blockchain.currentWithCache();\n },\n membership: post('/blockchain/membership'),\n stats: {\n ud: get('/blockchain/with/ud', csCache.constants.MEDIUM),\n tx: get('/blockchain/with/tx'),\n newcomers: get('/blockchain/with/newcomers', csCache.constants.MEDIUM),\n hardship: get('/blockchain/hardship/:pubkey'),\n difficulties: get('/blockchain/difficulties')\n }\n },\n tx: {\n sources: get('/tx/sources/:pubkey', csCache.constants.SHORT),\n process: post('/tx/process'),\n history: {\n all: function(params) {\n return exports.raw.tx.history.all(params)\n .then(function(res) {\n res.history = res.history || {};\n // Clean sending and pendings, because already returned by tx/history/:pubkey/pending\n res.history.sending = [];\n res.history.pendings = [];\n return res;\n });\n },\n times: function(params, cache) {\n // No cache by default\n return ((cache !== true) ? exports.raw.tx.history.times(params) : exports.raw.tx.history.timesWithCache(params))\n .then(function(res) {\n res.history = res.history || {};\n // Clean sending and pendings, because already returned by tx/history/:pubkey/pending\n res.history.sending = [];\n res.history.pendings = [];\n return res;\n });\n },\n blocks: get('/tx/history/:pubkey/blocks/:from/:to', csCache.constants.LONG),\n pending: get('/tx/history/:pubkey/pending')\n }\n },\n ud: {\n history: get('/ud/history/:pubkey')\n },\n uri: {},\n version: {},\n raw: {\n blockchain: {\n currentWithCache: get('/blockchain/current', csCache.constants.SHORT),\n current: get('/blockchain/current')\n },\n wot: {\n requirementsWithCache: get('/wot/requirements/:pubkey', csCache.constants.LONG),\n requirements: get('/wot/requirements/:pubkey')\n },\n tx: {\n history: {\n timesWithCache: get('/tx/history/:pubkey/times/:from/:to', csCache.constants.LONG),\n times: get('/tx/history/:pubkey/times/:from/:to'),\n all: get('/tx/history/:pubkey')\n }\n },\n }\n };\n\n exports.tx.parseUnlockCondition = function(unlockCondition) {\n\n //console.debug('[BMA] Parsing unlock condition: {0}.'.format(unlockCondition));\n var convertedOutput = unlockCondition;\n var treeItems = [];\n var treeItem;\n var treeItemId;\n var childrenContent;\n var childrenMatches;\n var functions = {};\n\n // Parse functions, then replace with an 'OBJ()' generic function, used to build a object tree\n var matches = exports.regexp.TX_OUTPUT_FUNCTION.exec(convertedOutput);\n while(matches) {\n treeItem = {};\n treeItemId = 'OBJ(' + treeItems.length + ')';\n treeItem.type = convertedOutput.substr(matches.index, matches[0].indexOf('('));\n treeItem.value = matches[1] || matches[2] || matches[3] || matches[4]; // get value from regexp OUTPUT_FUNCTION\n treeItems.push(treeItem);\n\n functions[treeItem.type] = functions[treeItem.type]++ || 1;\n\n convertedOutput = convertedOutput.replace(matches[0], treeItemId);\n matches = exports.regexp.TX_OUTPUT_FUNCTION.exec(convertedOutput);\n }\n\n var loop = true;\n while(loop) {\n // Parse AND operators\n matches = exports.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(convertedOutput);\n loop = !!matches;\n while (matches) {\n treeItem = {};\n treeItemId = 'OBJ(' + treeItems.length + ')';\n treeItem.type = 'AND';\n treeItem.children = [];\n treeItems.push(treeItem);\n\n childrenContent = matches[0];\n childrenMatches = exports.regexp.TX_OUTPUT_OBJ.exec(childrenContent);\n while(childrenMatches) {\n\n treeItem.children.push(treeItems[childrenMatches[1]]);\n childrenContent = childrenContent.replace(childrenMatches[0], '');\n childrenMatches = exports.regexp.TX_OUTPUT_OBJ.exec(childrenContent);\n }\n\n convertedOutput = convertedOutput.replace(matches[0], treeItemId);\n matches = exports.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(childrenContent);\n }\n\n // Parse OR operators\n\n matches = exports.regexp.TX_OUTPUT_OBJ_OPERATOR_OR.exec(convertedOutput);\n loop = loop || !!matches;\n while (matches) {\n treeItem = {};\n treeItemId = 'OBJ(' + treeItems.length + ')';\n treeItem.type = 'OR';\n treeItem.children = [];\n treeItems.push(treeItem);\n\n childrenContent = matches[0];\n childrenMatches = exports.regexp.TX_OUTPUT_OBJ.exec(childrenContent);\n while(childrenMatches) {\n treeItem.children.push(treeItems[childrenMatches[1]]);\n childrenContent = childrenContent.replace(childrenMatches[0], '');\n childrenMatches = exports.regexp.TX_OUTPUT_OBJ.exec(childrenContent);\n }\n\n convertedOutput = convertedOutput.replace(matches[0], treeItemId);\n matches = exports.regexp.TX_OUTPUT_OBJ_OPERATOR_AND.exec(convertedOutput);\n }\n\n // Remove parenthesis\n matches = exports.regexp.TX_OUTPUT_OBJ_PARENTHESIS.exec(convertedOutput);\n loop = loop || !!matches;\n while (matches) {\n convertedOutput = convertedOutput.replace(matches[0], matches[1]);\n matches = exports.regexp.TX_OUTPUT_OBJ_PARENTHESIS.exec(convertedOutput);\n }\n }\n\n functions = _.keys(functions);\n if (functions.length === 0) {\n console.error('[BMA] Unparseable unlock condition: ', output);\n return;\n }\n console.debug('[BMA] Unlock conditions successfully parsed:', treeItem);\n return {\n unlockFunctions: functions,\n unlockTree: treeItem\n };\n };\n\n exports.node.parseEndPoint = function(endpoint, epPrefix) {\n // Try BMA\n var matches = exports.regexp.BMA_ENDPOINT.exec(endpoint);\n if (matches) {\n return {\n \"dns\": matches[2] || '',\n \"ipv4\": matches[4] || '',\n \"ipv6\": matches[6] || '',\n \"port\": matches[8] || 80,\n \"useSsl\": matches[8] && matches[8] == 443,\n \"path\": matches[10],\n \"useBma\": true\n };\n }\n // Try BMAS\n matches = exports.regexp.BMAS_ENDPOINT.exec(endpoint);\n if (matches) {\n return {\n \"dns\": matches[2] || '',\n \"ipv4\": matches[4] || '',\n \"ipv6\": matches[6] || '',\n \"port\": matches[8] || 80,\n \"useSsl\": true,\n \"path\": matches[10],\n \"useBma\": true\n };\n }\n // Try BMATOR\n matches = exports.regexp.BMATOR_ENDPOINT.exec(endpoint);\n if (matches) {\n return {\n \"dns\": matches[1] || '',\n \"port\": matches[2] || 80,\n \"useSsl\": false,\n \"useTor\": true,\n \"useBma\": true\n };\n }\n // Try WS2P\n matches = exports.regexp.WS2P_ENDPOINT.exec(endpoint);\n if (matches) {\n return {\n \"ws2pid\": matches[1] || '',\n \"dns\": matches[3] || '',\n \"ipv4\": matches[5] || '',\n \"ipv6\": matches[7] || '',\n \"port\": matches[9] || 80,\n \"useSsl\": matches[9] && matches[9] == 443,\n \"path\": matches[11] || '',\n \"useWs2p\": true\n };\n }\n // Try WS2PTOR\n matches = exports.regexp.WS2PTOR_ENDPOINT.exec(endpoint);\n if (matches) {\n return {\n \"ws2pid\": matches[1] || '',\n \"dns\": matches[2] || '',\n \"port\": matches[3] || 80,\n \"path\": matches[4] || '',\n \"useSsl\": false,\n \"useTor\": true,\n \"useWs2p\": true\n };\n }\n\n // Use generic match\n if (epPrefix) {\n matches = exact(epPrefix + REGEX_ENDPOINT_PARAMS).exec(endpoint);\n if (matches) {\n return {\n \"dns\": matches[2] || '',\n \"ipv4\": matches[4] || '',\n \"ipv6\": matches[6] || '',\n \"port\": matches[8] || 80,\n \"useSsl\": matches[8] && matches[8] == 443,\n \"path\": matches[10],\n \"useBma\": false\n };\n }\n }\n\n };\n\n exports.copy = function(otherNode) {\n\n var server = csHttp.getUrl(otherNode.host, otherNode.port, ''/*path*/, otherNode.useSsl);\n var hasChanged = (server !== that.url);\n if (hasChanged) {\n var wasStarted = that.started;\n if (wasStarted) that.stop();\n that.init(otherNode.host, otherNode.port, otherNode.useSsl, that.useCache/*keep original value*/);\n if (wasStarted) {\n return $timeout(function () {\n return that.start()\n .then(function (alive) {\n if (alive) {\n that.api.node.raise.restart();\n }\n return alive;\n });\n }, 200); // Wait stop finished\n }\n }\n };\n\n exports.wot.member.uids = function() {\n return exports.wot.member.all()\n .then(function(res){\n return res.results.reduce(function(res, member){\n res[member.pubkey] = member.uid;\n return res;\n }, {});\n });\n };\n\n exports.wot.member.get = function(pubkey) {\n return exports.wot.member.uids()\n .then(function(memberUidsByPubkey){\n var uid = memberUidsByPubkey[pubkey];\n return {\n pubkey: pubkey,\n uid: (uid ? uid : null)\n };\n });\n };\n\n exports.wot.member.getByUid = function(uid) {\n return exports.wot.member.all()\n .then(function(res){\n return _.findWhere(res.results, {uid: uid});\n });\n };\n\n /**\n * Return all expected blocks\n * @param blockNumbers a rray of block number\n */\n exports.blockchain.blocks = function(blockNumbers){\n return exports.raw.getHttpRecursive(exports.blockchain.block, 'block', blockNumbers);\n };\n\n /**\n * Return all expected blocks\n * @param blockNumbers a rray of block number\n */\n exports.network.peering.peersByLeaves = function(leaves){\n return exports.raw.getHttpRecursive(exports.network.peering.peers, 'leaf', leaves, 0, 10);\n };\n\n exports.raw.getHttpRecursive = function(httpGetRequest, paramName, paramValues, offset, size) {\n offset = angular.isDefined(offset) ? offset : 0;\n size = size || exports.constants.LIMIT_REQUEST_COUNT;\n return $q(function(resolve, reject) {\n var result = [];\n var jobs = [];\n _.each(paramValues.slice(offset, offset+size), function(paramValue) {\n var requestParams = {};\n requestParams[paramName] = paramValue;\n jobs.push(\n httpGetRequest(requestParams)\n .then(function(res){\n if (!res) return;\n result.push(res);\n })\n );\n });\n\n $q.all(jobs)\n .then(function() {\n if (offset < paramValues.length - 1) {\n $timeout(function() {\n exports.raw.getHttpRecursive(httpGetRequest, paramName, paramValues, offset+size, size)\n .then(function(res) {\n if (!res || !res.length) {\n resolve(result);\n return;\n }\n\n resolve(result.concat(res));\n })\n .catch(function(err) {\n reject(err);\n });\n }, exports.constants.LIMIT_REQUEST_DELAY);\n }\n else {\n resolve(result);\n }\n })\n .catch(function(err){\n if (err && err.ucode === exports.errorCodes.HTTP_LIMITATION) {\n resolve(result);\n }\n else {\n reject(err);\n }\n });\n });\n };\n\n exports.raw.getHttpWithRetryIfLimitation = function(exec) {\n return exec()\n .catch(function(err){\n // When too many request, retry in 3s\n if (err && err.ucode == exports.errorCodes.HTTP_LIMITATION) {\n return $timeout(function() {\n // retry\n return exports.raw.getHttpWithRetryIfLimitation(exec);\n }, exports.constants.LIMIT_REQUEST_DELAY);\n }\n });\n };\n\n exports.blockchain.lastUd = function() {\n return exports.blockchain.stats.ud()\n .then(function(res) {\n if (!res.result.blocks || !res.result.blocks.length) {\n return null;\n }\n var lastBlockWithUD = res.result.blocks[res.result.blocks.length - 1];\n return exports.blockchain.block({block: lastBlockWithUD})\n .then(function(block){\n return (block.unitbase > 0) ? block.dividend * Math.pow(10, block.unitbase) : block.dividend;\n });\n });\n };\n\n exports.uri.parse = function(uri) {\n return $q(function(resolve, reject) {\n var pubkey;\n\n // If pubkey: not need to parse\n if (exact(regexp.PUBKEY).test(uri)) {\n resolve({\n pubkey: uri\n });\n }\n // If pubkey+checksum\n else if (exact(regexp.PUBKEY_WITH_CHECKSUM).test(uri)) {\n console.debug(\"[BMA.parse] Detecting a pubkey with checksum: \" + uri);\n var matches = exports.regexp.PUBKEY_WITH_CHECKSUM.exec(uri);\n pubkey = matches[1];\n var checksum = matches[2];\n console.debug(\"[BMA.parse] Detecting a pubkey {\"+pubkey+\"} with checksum {\" + checksum + \"}\");\n var expectedChecksum = csCrypto.util.pkChecksum(pubkey);\n console.debug(\"[BMA.parse] Expecting checksum for pubkey is {\" + expectedChecksum + \"}\");\n if (checksum != expectedChecksum) {\n reject( {message: 'ERROR.PUBKEY_INVALID_CHECKSUM'});\n }\n else {\n resolve({\n pubkey: pubkey\n });\n }\n }\n else if(uri.startsWith('duniter://')) {\n var parser = csHttp.uri.parse(uri),\n uid,\n currency = parser.host.indexOf('.') === -1 ? parser.host : null,\n host = parser.host.indexOf('.') !== -1 ? parser.host : null;\n if (parser.username) {\n if (parser.password) {\n uid = parser.username;\n pubkey = parser.password;\n }\n else {\n pubkey = parser.username;\n }\n }\n if (parser.pathname) {\n var paths = parser.pathname.split('/');\n var pathCount = !paths ? 0 : paths.length;\n var index = 0;\n if (!currency && pathCount > index) {\n currency = paths[index++];\n }\n if (!pubkey && pathCount > index) {\n pubkey = paths[index++];\n }\n if (!uid && pathCount > index) {\n uid = paths[index++];\n }\n if (pathCount > index) {\n reject( {message: 'Bad Duniter URI format. Invalid path (incomplete or redundant): '+ parser.pathname}); return;\n }\n }\n\n if (!currency){\n if (host) {\n csHttp.get(host + '/blockchain/parameters')()\n .then(function(parameters){\n resolve({\n uid: uid,\n pubkey: pubkey,\n host: host,\n currency: parameters.currency\n });\n })\n .catch(function(err) {\n console.error(err);\n reject({message: 'Could not get node parameter. Currency could not be retrieve'});\n });\n }\n else {\n reject({message: 'Bad Duniter URI format. Missing currency name (or node address).'}); return;\n }\n }\n else {\n if (!host) {\n resolve({\n uid: uid,\n pubkey: pubkey,\n currency: currency\n });\n }\n\n // Check if currency are the same (between node and uri)\n return csHttp.get(host + '/blockchain/parameters')()\n .then(function(parameters){\n if (parameters.currency !== currency) {\n reject( {message: \"Node's currency [\"+parameters.currency+\"] does not matched URI's currency [\"+currency+\"].\"}); return;\n }\n resolve({\n uid: uid,\n pubkey: pubkey,\n host: host,\n currency: currency\n });\n })\n .catch(function(err) {\n console.error(err);\n reject({message: 'Could not get node parameter. Currency could not be retrieve'});\n });\n }\n }\n else {\n console.debug(\"[BMA.parse] Could not parse URI: \" + uri);\n reject({message: 'ERROR.UNKNOWN_URI_FORMAT'});\n }\n })\n\n // Check values against regex\n .then(function(result) {\n if (!result) return;\n if (result.pubkey && !(exact(regexp.PUBKEY).test(result.pubkey))) {\n throw {message: \"Invalid pubkey format [\" + result.pubkey + \"]\"};\n }\n if (result.uid && !(exact(regexp.USER_ID).test(result.uid))) {\n throw {message: \"Invalid uid format [\" + result.uid + \"]\"};\n }\n if (result.currency && !(exact(regexp.CURRENCY).test(result.currency))) {\n throw {message: \"Invalid currency format [\"+result.currency+\"]\"};\n }\n return result;\n });\n };\n\n // Define get latest release (or fake function is no URL defined)\n var duniterLatestReleaseUrl = csSettings.data.duniterLatestReleaseUrl && csHttp.uri.parse(csSettings.data.duniterLatestReleaseUrl);\n exports.raw.getLatestRelease = duniterLatestReleaseUrl ?\n csHttp.getWithCache(duniterLatestReleaseUrl.host,\n duniterLatestReleaseUrl.port,\n \"/\" + duniterLatestReleaseUrl.pathname,\n /*useSsl*/ (+(duniterLatestReleaseUrl.port) === 443 || duniterLatestReleaseUrl.protocol === 'https:' || that.forceUseSsl),\n csCache.constants.LONG\n ) :\n // No URL define: use a fake function\n function() {\n return $q.when();\n };\n\n exports.version.latest = function() {\n return exports.raw.getLatestRelease()\n .then(function (json) {\n if (!json) return;\n if (json.name && json.html_url) {\n return {\n version: json.name,\n url: json.html_url\n };\n }\n if (json.tag_name && json.html_url) {\n return {\n version: json.tag_name.substring(1),\n url: json.html_url\n };\n }\n })\n .catch(function(err) {\n // silent (just log it)\n console.error('[BMA] Failed to get Duniter latest version', err);\n });\n };\n\n exports.websocket = {\n block: ws('/ws/block'),\n peer: ws('/ws/peer'),\n close : closeWs\n };\n\n angular.merge(that, exports);\n }\n\n var service = new BMA();\n\n service.instance = function(host, port, useSsl, useCache) {\n useCache = angular.isDefined(useCache) ? useCache : false; // No cache by default\n return new BMA(host, port, useSsl, useCache);\n };\n\n service.lightInstance = function(host, port, useSsl, timeout) {\n port = port || 80;\n useSsl = angular.isDefined(useSsl) ? useSsl : (port == 443);\n return {\n host: host,\n port: port,\n useSsl: useSsl,\n url: csHttp.getUrl(host, port, ''/*no path*/, useSsl),\n node: {\n summary: csHttp.getWithCache(host, port, '/node/summary', useSsl, csCache.constants.MEDIUM, false/*autoRefresh*/, timeout)\n },\n network: {\n peering: {\n self: csHttp.get(host, port, '/network/peering', useSsl, timeout)\n },\n peers: csHttp.get(host, port, '/network/peers', useSsl, timeout)\n },\n blockchain: {\n current: csHttp.get(host, port, '/blockchain/current', useSsl, timeout),\n stats: {\n hardship: csHttp.get(host, port, '/blockchain/hardship/:pubkey', useSsl, timeout)\n }\n }\n };\n };\n\n // default action\n //service.start();\n\n return service;\n}])\n\n;\n","\nangular.module('cesium.wot.services', ['ngApi', 'cesium.bma.services', 'cesium.crypto.services', 'cesium.utils.services',\n 'cesium.settings.services'])\n\n.factory('csWot', ['$rootScope', '$q', '$timeout', 'BMA', 'Api', 'CacheFactory', 'UIUtils', 'csConfig', 'csCurrency', 'csSettings', 'csCache', function($rootScope, $q, $timeout, BMA, Api, CacheFactory, UIUtils, csConfig, csCurrency, csSettings, csCache) {\n 'ngInject';\n\n\n var\n api = new Api(this, \"csWot\"),\n cachePrefix = 'csWot-',\n identityCache = csCache.get(cachePrefix + 'idty-', csCache.constants.MEDIUM),\n requirementsCache = csCache.get(cachePrefix + 'requirements-', csCache.constants.MEDIUM),\n\n // Add id, and remove duplicated id\n _addUniqueIds = function(idties) {\n var idtyKeys = {};\n return idties.reduce(function(res, idty) {\n idty.id = idty.id || idty.uid + '-' + idty.pubkey;\n if (!idtyKeys[idty.id]) {\n idtyKeys[idty.id] = true;\n return res.concat(idty);\n }\n return res;\n }, []);\n },\n\n _sortAndSliceIdentities = function(idties, offset, size) {\n offset = offset || 0;\n\n // Add unique ids\n idties = _addUniqueIds(idties);\n\n // Sort by block and\n idties = _.sortBy(idties, function(idty){\n var score = 1;\n score += (1000000 * (idty.block));\n score += (10 * (900 - idty.uid.toLowerCase().charCodeAt(0)));\n return -score;\n });\n if (angular.isDefined(size) && idties.length > size) {\n idties = idties.slice(offset, offset+size); // limit if more than expected size\n }\n\n\n return idties;\n },\n\n _sortCertifications = function(certifications) {\n certifications = _.sortBy(certifications, function(cert){\n var score = 1;\n score += (1000000000000 * (cert.expiresIn ? cert.expiresIn : 0));\n score += (10000000 * (cert.isMember ? 1 : 0));\n score += (10 * (cert.block ? cert.block : 0));\n return -score;\n });\n return certifications;\n },\n\n _resetRequirements = function(data) {\n data.requirements = {\n loaded: false,\n meta: {},\n hasSelf: false,\n needSelf: true,\n needMembership: true,\n canMembershipOut: false,\n needRenew: false,\n pendingMembership: false,\n isMember: false,\n wasMember: false,\n certificationCount: 0,\n needCertifications: false,\n needCertificationCount: 0,\n willNeedCertificationCount: 0,\n alternatives: undefined\n };\n data.blockUid = null;\n data.isMember = false;\n data.sigDate = null;\n data.hasSelf = false;\n },\n\n _fillRequirements = function(requirements, currencyParameters) {\n // Add useful custom fields\n requirements.hasSelf = !!requirements.meta.timestamp;\n requirements.needSelf = !requirements.hasSelf || requirements.meta.invalid;\n requirements.wasMember = angular.isDefined(requirements.wasMember) ? requirements.wasMember : false; // Compat with Duniter 0.9\n requirements.needMembership = (!requirements.revoked && requirements.membershipExpiresIn <= 0 && requirements.membershipPendingExpiresIn <= 0 && !requirements.wasMember);\n requirements.needRenew = (!requirements.needMembership && !requirements.revoked &&\n requirements.membershipExpiresIn <= csSettings.data.timeWarningExpireMembership &&\n requirements.membershipPendingExpiresIn <= 0) ||\n (requirements.wasMember && !requirements.revoked && requirements.membershipExpiresIn === 0 &&\n requirements.membershipPendingExpiresIn === 0);\n requirements.canMembershipOut = (!requirements.revoked && requirements.membershipExpiresIn > 0);\n requirements.pendingMembership = (!requirements.revoked && requirements.membershipExpiresIn <= 0 && requirements.membershipPendingExpiresIn > 0);\n requirements.isMember = (!requirements.revoked && requirements.membershipExpiresIn > 0);\n requirements.blockUid = requirements.meta.timestamp;\n // Force certification count to 0, is not a member yet - fix #269\n requirements.certificationCount = ((requirements.isMember || (requirements.wasMember && !requirements.expired)) && requirements.certifications) ? requirements.certifications.length : 0;\n requirements.willExpireCertificationCount = requirements.certifications ? requirements.certifications.reduce(function(count, cert){\n return count + (cert.expiresIn <= csSettings.data.timeWarningExpire ? 1 : 0);\n }, 0) : 0;\n requirements.willExpire = requirements.willExpireCertificationCount > 0;\n requirements.pendingRevocation = !requirements.revoked && !!requirements.revocation_sig;\n //requirements.outdistanced = requirements.outdistanced; // outdistanced is always present in requirement - see #777\n\n // Fix pending certifications count - Fix #624\n if (!requirements.isMember && !requirements.wasMember) {\n var certifiers = _.union(\n _.pluck(requirements.pendingCerts || [], 'from'),\n _.pluck(requirements.certifications || [], 'from')\n );\n requirements.pendingCertificationCount = _.size(certifiers);\n }\n else {\n requirements.pendingCertificationCount = angular.isDefined(requirements.pendingCerts) ? requirements.pendingCerts.length : 0 ;\n }\n\n // Compute\n requirements.needCertificationCount = (!requirements.needSelf && (requirements.certificationCount < currencyParameters.sigQty)) ?\n (currencyParameters.sigQty - requirements.certificationCount) : 0;\n requirements.willNeedCertificationCount = (!requirements.needMembership && !requirements.needCertificationCount &&\n (requirements.certificationCount - requirements.willExpireCertificationCount) < currencyParameters.sigQty) ?\n (currencyParameters.sigQty - requirements.certificationCount + requirements.willExpireCertificationCount) : 0;\n\n // Mark as loaded - need by csWallet.isDataLoaded()\n requirements.loaded = true;\n\n\n return requirements;\n },\n\n _fillIdentitiesMeta = function(identities) {\n if (!identities) return $q.when(identities);\n\n var blocks = [];\n _.forEach(identities, function(identity) {\n var blockUid = identity.meta.timestamp.split('-', 2);\n identity.meta.number = parseInt(blockUid[0]);\n identity.meta.hash = blockUid[1];\n identity.meta.sig = identity.meta.sig || identity.sig;\n delete identity.sig;\n blocks.push(identity.meta.number);\n });\n\n // Get identities blocks, to fill self and revocation time\n return BMA.blockchain.blocks(_.uniq(blocks))\n .then(function(blocks) {\n _.forEach(identities, function(identity) {\n var block = _.findWhere(blocks, {number: identity.meta.number});\n identity.meta.time = block && block.medianTime;\n\n // Check if self has been done on a valid block\n if (block && identity.meta.number !== 0 && identity.meta.hash !== block.hash) {\n identity.meta.invalid = true;\n }\n });\n\n return identities;\n })\n .catch(function(err){\n // Special case for currency init (root block not exists): use now\n if (err && err.ucode == BMA.errorCodes.BLOCK_NOT_FOUND) {\n _.forEach(identities, function(identity) {\n if (identity.number === 0) {\n identity.meta.time = moment().utc().unix();\n }\n });\n return identities;\n }\n else {\n throw err;\n }\n });\n },\n\n loadRequirements = function(inputData, withCache) {\n if (!inputData || (!inputData.pubkey && !inputData.uid)) return $q.when(inputData);\n\n var cacheKey = inputData.pubkey||inputData.uid;\n var data = (withCache !== false) ? requirementsCache.get(cacheKey) : null;\n if (data) {\n console.debug(\"[wot] Requirements \" + cacheKey + \" found in cache\");\n // Update data with cache\n angular.merge(inputData, data);\n return $q.when(data);\n }\n data = {pubkey: inputData.pubkey, uid: inputData.uid};\n\n // Alert user, when request is too long (> 2s)\n $timeout(function() {\n if (!data.requirements || !data.requirements.loaded) UIUtils.loading.update({template: \"COMMON.LOADING_WAIT\"});\n }, 2000);\n\n var now = Date.now();\n return $q.all([\n // Get currency\n csCurrency.get(),\n\n // Get requirements\n BMA.wot.requirements({pubkey: data.pubkey||data.uid}, false/*no cache*/)\n .then(function(res) {\n return _fillIdentitiesMeta(res && res.identities);\n })\n ])\n .then(function(res){\n var currency = res[0];\n var identities = res[1];\n\n if (!identities || !identities.length) return;\n\n // Sort to select the best identity\n if (identities.length > 1) {\n // Select the best identity, by sorting using this order\n // - same wallet uid\n // - is member\n // - has a pending membership\n // - is not expired (in sandbox)\n // - is not outdistanced\n // - if has certifications\n // max(count(certification)\n // else\n // max(membershipPendingExpiresIn) = must recent membership\n identities = _.sortBy(identities, function(idty) {\n var score = 0;\n score += (1000000000000* ((data.uid && idty.uid === data.uid) ? 1 : 0));\n score += (100000000000 * (!idty.meta.invalid ? 1 : 0));\n score += (10000000000 * ((data.blockUid && idty.meta.timestamp && idty.meta.timestamp === data.blockUid) ? 1 : 0));\n score += (1000000000 * (idty.membershipExpiresIn > 0 ? 1 : 0));\n score += (100000000 * (idty.membershipPendingExpiresIn > 0 ? 1 : 0));\n score += (10000000 * (!idty.expired ? 1 : 0));\n score += (1000000 * (!idty.outdistanced ? 1 : 0));\n score += (100000 * (idty.wasMember ? 1 : 0));\n var certCount = !idty.expired && idty.certifications ? idty.certifications.length : 0;\n score += (1 * (certCount ? certCount : 0));\n score += (1 * (!certCount && idty.membershipPendingExpiresIn > 0 ? idty.membershipPendingExpiresIn/1000 : 0));\n return -score;\n });\n console.debug('[wot] Found {0} identities (in requirements). Will selected the best one'.format(identities.length));\n }\n\n // Select the first identity\n data.requirements = _fillRequirements(identities[0], currency.parameters);\n\n // Copy some useful properties into data\n data.pubkey = data.requirements.pubkey;\n data.uid = data.requirements.uid;\n data.isMember = data.requirements.isMember;\n data.blockUid = data.requirements.meta && data.requirements.meta.timestamp;\n data.hasSelf = data.requirements.hasSelf;\n data.sigDate = data.requirements.meta && data.requirements.meta.time;\n\n // Prepare alternatives identities if any\n if (!data.requirements.isMember && !data.requirements.wasMember && identities.length > 1) {\n data.requirements.alternatives = identities.splice(1);\n _.forEach(data.requirements.alternatives, function(requirements) {\n _fillRequirements(requirements, currency.parameters);\n });\n }\n\n /// Save to cache\n requirementsCache.put(cacheKey, data);\n\n angular.merge(inputData, data); // Update the input data\n\n console.debug(\"[wot] Requirements for '{0}' loaded in {1}ms\".format((data.pubkey && data.pubkey.substring(0,8))||data.uid, Date.now() - now));\n\n return inputData;\n })\n .catch(function(err) {\n data.requirements = {loaded: true}; // Mark has loaded - need by the previous $timeout\n _resetRequirements(inputData);\n // If not a member: continue\n if (!!err &&\n (err.ucode == BMA.errorCodes.NO_MATCHING_MEMBER ||\n err.ucode == BMA.errorCodes.NO_IDTY_MATCHING_PUB_OR_UID)) {\n inputData.requirements.loaded = true;\n return inputData;\n }\n throw err;\n });\n },\n\n loadIdentityByLookup = function(pubkey, uid) {\n var data = {\n pubkey: pubkey,\n uid: uid,\n hasSelf: false\n };\n return BMA.wot.lookup({ search: pubkey||uid })\n .then(function(res){\n var identities = res.results.reduce(function(idties, res) {\n return idties.concat(res.uids.reduce(function(uids, idty) {\n var blockUid = idty.meta.timestamp.split('-', 2);\n var blockNumber = parseInt(blockUid[0]);\n return uids.concat({\n uid: idty.uid,\n pubkey: res.pubkey,\n meta: {\n timestamp: idty.meta.timestamp,\n number: blockNumber,\n hash: blockUid[1],\n sig: idty.self\n },\n revoked: idty.revoked,\n revoked_on: idty.revoked_on\n });\n }, []));\n }, []);\n\n // Fill identities meta (self)\n return _fillIdentitiesMeta(identities)\n .then(function(identities) {\n return {\n identities: identities,\n results: res.results\n };\n });\n })\n .then(function(res){\n var identities = res.identities;\n\n // Sort identities if need\n if (identities.length > 1) {\n // Select the best identity, by sorting using this order\n // - valid block\n // - same given uid\n // - not revoked\n // - max(block_number)\n res.identities = _.sortBy(identities, function(idty) {\n var score = 0;\n score += (100000000000 * ((data.uid && idty.uid === data.uid) ? 1 : 0));\n score += (10000000000 * (!idty.meta.invalid ? 1 : 0));\n score += (1000000000 * ((data.blockUid && idty.meta.timestamp && idty.meta.timestamp === data.blockUid) ? 1 : 0));\n score += (100000000 * (!idty.revoked ? 1 : 0));\n score += (1 * (idty.meta.number ? idty.meta.number : 0) / 1000);\n return -score;\n });\n console.debug('[wot] Found {0} identities (in lookup). Will selected the best one'.format(identities.length));\n }\n\n // Prepare alternatives identities\n _.forEach(identities, function(idty) {\n idty.hasSelf = !!(idty.uid && idty.meta.timestamp && idty.meta.sig);\n });\n\n // Select the first identity\n data.requirements = identities[0];\n\n // Copy some useful properties into data\n data.pubkey = data.requirements.pubkey;\n data.uid = data.requirements.uid;\n data.blockUid = data.requirements.meta && data.requirements.meta.timestamp;\n data.hasSelf = data.requirements.hasSelf;\n data.sigDate = data.requirements.meta && data.requirements.meta.time;\n\n if (identities.length > 1) {\n data.requirements.alternatives = identities.splice(1);\n }\n\n // Store additional data (e.g. certs)\n data.lookup = {};\n\n // Store received certifications (can be usefull later)\n var certPubkeys = {};\n data.lookup.certifications = (res.results || []).reduce(function(certsMap, res) {\n return res.uids.reduce(function(certsMap, idty) {\n var idtyFullKey = idty.uid + '-' + (idty.meta ? idty.meta.timestamp : '');\n certsMap[idtyFullKey] = (idty.others||[]).reduce(function(certs, cert) {\n var certFullKey = idtyFullKey + '-' + cert.pubkey;\n var result = {\n pubkey: cert.pubkey,\n uid: cert.uids[0],\n cert_time: {\n block: (cert.meta && cert.meta.block_number) ? cert.meta.block_number : 0,\n block_hash: (cert.meta && cert.meta.block_hash) ? cert.meta.block_hash : null\n },\n isMember: cert.isMember,\n wasMember: cert.wasMember,\n };\n if (!certPubkeys[certFullKey]) {\n certPubkeys[certFullKey] = result;\n }\n else { // if duplicated cert: keep the most recent\n if (result.cert_time.block > certPubkeys[certFullKey].cert_time.block) {\n certPubkeys[certFullKey] = result;\n certs.splice(_.findIndex(certs, {pubkey: cert.pubkey}), 1, result);\n return certs;\n }\n else {\n return certs; // skip this cert\n }\n }\n return certs.concat(result);\n }, []);\n return certsMap;\n }, certsMap);\n }, {});\n\n // Store given certifications\n certPubkeys = {};\n data.lookup.givenCertifications = (res.results || []).reduce(function(certs, res) {\n return (res.signed || []).reduce(function(certs, cert) {\n var result = {\n pubkey: cert.pubkey,\n uid: cert.uid,\n cert_time: {\n block: (cert.cert_time && cert.cert_time.block) ? cert.cert_time.block : 0,\n block_hash: (cert.cert_time && cert.cert_time.block_hash) ? cert.cert_time.block_hash : null\n },\n sigDate: cert.meta ? cert.meta.timestamp : null,\n isMember: cert.isMember,\n wasMember: cert.wasMember\n };\n if (!certPubkeys[cert.pubkey]) {\n certPubkeys[cert.pubkey] = result;\n }\n else { // if duplicated cert: keep the most recent\n if (result.block > certPubkeys[cert.pubkey].block) {\n certPubkeys[cert.pubkey] = result;\n // TODO: Replace the existing one ? May be not, to be able to see renewal\n // (see issue #806)\n // If yes (need to replace), check this code works:\n //certs.splice(_.findIndex(certs, {pubkey: cert.pubkey}), 1, result);\n //return certs;\n }\n else {\n return certs; // skip this cert\n }\n }\n return certs.concat(result);\n }, certs);\n }, []);\n\n return data;\n })\n .catch(function(err) {\n if (!!err && err.ucode == BMA.errorCodes.NO_MATCHING_IDENTITY) { // Identity not found (if no self)\n _resetRequirements(data);\n return data;\n }\n else {\n throw err;\n }\n });\n },\n\n loadCertifications = function(getFunction, pubkey, lookupCertifications, parameters, medianTime, certifiersOf) {\n\n function _certId(pubkey, block) {\n return pubkey + '-' + block;\n }\n\n // TODO : remove this later (when all node will use duniter v0.50+)\n var lookupHasCertTime = true; // Will be set ti FALSE before Duniter v0.50\n var lookupCerticationsByCertId = lookupCertifications ? lookupCertifications.reduce(function(res, cert){\n var certId = _certId(cert.pubkey, cert.cert_time ? cert.cert_time.block : cert.sigDate);\n if (!cert.cert_time) lookupHasCertTime = false;\n res[certId] = cert;\n return res;\n }, {}) : {};\n\n var isMember = true;\n\n return getFunction({ pubkey: pubkey })\n .then(function(res) {\n return (res && res.certifications || []).reduce(function (res, cert) {\n // Rappel :\n // cert.sigDate = blockstamp de l'identité\n // cert.cert_time.block : block au moment de la certification\n // cert.written.number : block où la certification est écrite\n\n var pending = !cert.written;\n var certTime = cert.cert_time ? cert.cert_time.medianTime : null;\n var expiresIn = (!certTime) ? 0 : (pending ?\n (certTime + parameters.sigWindow - medianTime) :\n (certTime + parameters.sigValidity - medianTime));\n expiresIn = (expiresIn < 0) ? 0 : expiresIn;\n // Remove from lookup certs\n var certId = _certId(cert.pubkey, lookupHasCertTime && cert.cert_time ? cert.cert_time.block : cert.sigDate);\n delete lookupCerticationsByCertId[certId];\n\n // Add to result list\n return res.concat({\n pubkey: cert.pubkey,\n uid: cert.uid,\n time: certTime,\n isMember: cert.isMember,\n wasMember: cert.wasMember,\n expiresIn: expiresIn,\n willExpire: (expiresIn && expiresIn <= csSettings.data.timeWarningExpire),\n pending: pending,\n block: (cert.written !== null) ? cert.written.number :\n (cert.cert_time ? cert.cert_time.block : null),\n valid: (expiresIn > 0)\n });\n }, []);\n })\n .catch(function(err) {\n if (!!err && err.ucode == BMA.errorCodes.NO_MATCHING_MEMBER) { // member not found\n isMember = false;\n return []; // continue (append pendings cert if exists in lookup)\n }\n /*FIXME: workaround for Duniter issue #1309 */\n else if (!!err && err.ucode == 1002) {\n console.warn(\"[wallet-service] Detecting Duniter issue #1309 ! Applying workaround... \");\n isMember = false;\n return []; // not found\n }\n else {\n throw err;\n }\n })\n\n // Add pending certs (found in lookup - see loadIdentityByLookup())\n .then(function(certifications) {\n var pendingCertifications = _.values(lookupCerticationsByCertId);\n if (!pendingCertifications.length) return certifications; // No more pending continue\n\n // Special case for initPhase - issue #\n if (csCurrency.data.initPhase) {\n return pendingCertifications.reduce(function(res, cert) {\n return res.concat({\n pubkey: cert.pubkey,\n uid: cert.uid,\n isMember: cert.isMember,\n wasMember: cert.wasMember,\n time: null,\n expiresIn: parameters.sigWindow,\n willExpire: false,\n pending: true,\n block: 0,\n valid: true\n });\n }, certifications);\n }\n\n var pendingCertByBlocks = pendingCertifications.reduce(function(res, cert){\n var block = lookupHasCertTime && cert.cert_time ? cert.cert_time.block :\n (cert.sigDate ? cert.sigDate.split('-')[0] : null);\n if (angular.isDefined(block)) {\n if (!res[block]) {\n res[block] = [cert];\n }\n else {\n res[block].push(cert);\n }\n }\n return res;\n }, {});\n\n // Set time to pending cert, from blocks\n return BMA.blockchain.blocks(_.keys(pendingCertByBlocks)).then(function(blocks){\n certifications = blocks.reduce(function(res, block){\n return res.concat(pendingCertByBlocks[block.number].reduce(function(res, cert) {\n var certTime = block.medianTime;\n var expiresIn = Math.max(0, certTime + parameters.sigWindow - medianTime);\n var validBuid = (!cert.cert_time || !cert.cert_time.block_hash || cert.cert_time.block_hash == block.hash);\n if (!validBuid) {\n console.debug(\"[wot] Invalid cert {0}: block hash changed\".format(cert.pubkey.substring(0,8)));\n }\n var valid = (expiresIn > 0) && (!certifiersOf || cert.isMember) && validBuid;\n return res.concat({\n pubkey: cert.pubkey,\n uid: cert.uid,\n isMember: cert.isMember,\n wasMember: cert.wasMember,\n time: certTime,\n expiresIn: expiresIn,\n willExpire: (expiresIn && expiresIn <= csSettings.data.timeWarningExpire),\n pending: true,\n block: lookupHasCertTime && cert.cert_time ? cert.cert_time.block :\n (cert.sigDate ? cert.sigDate.split('-')[0] : null),\n valid: valid\n });\n }, []));\n }, certifications);\n return certifications;\n });\n })\n\n // Sort and return result\n .then(function(certifications) {\n\n // Remove pending cert duplicated with a written & valid cert\n var writtenCertByPubkey = certifications.reduce(function(res, cert) {\n if (!cert.pending && cert.valid && cert.expiresIn >= parameters.sigWindow) {\n res[cert.pubkey] = true;\n }\n return res;\n }, {});\n\n // Final sort\n certifications = _sortCertifications(certifications);\n\n // Split into valid/pending/error\n var pendingCertifications = [];\n var errorCertifications = [];\n var validCertifications = certifications.reduce(function(res, cert) {\n if (cert.pending) {\n if (cert.valid && !writtenCertByPubkey[cert.pubkey]) {\n pendingCertifications.push(cert);\n }\n else if (!cert.valid && !writtenCertByPubkey[cert.pubkey]){\n errorCertifications.push(cert);\n }\n return res;\n }\n return res.concat(cert);\n }, []);\n\n return {\n valid: validCertifications,\n pending: pendingCertifications,\n error: errorCertifications\n };\n })\n ;\n },\n\n // Add events on given account\n addEvents = function(data) {\n\n if (data.requirements.revoked) {\n delete data.requirements.meta.invalid;\n if (data.requirements.revoked_on) {\n addEvent(data, {type: 'error', message: 'ERROR.IDENTITY_REVOKED_WITH_TIME', messageParams: {revocationTime: data.requirements.revoked_on}});\n console.debug(\"[wot] Identity [{0}] has been revoked on {1}\".format(data.uid, data.requirements.revoked_on));\n }\n else {\n addEvent(data, {type: 'error', message: 'ERROR.IDENTITY_REVOKED'});\n console.debug(\"[wot] Identity [{0}] has been revoked\".format(data.uid));\n }\n }\n else if (data.requirements.pendingRevocation) {\n delete data.requirements.meta.invalid;\n addEvent(data, {type:'error', message: 'ERROR.IDENTITY_PENDING_REVOCATION'});\n console.debug(\"[wot] Identity [{0}] has pending revocation\".format(data.uid));\n }\n else if (data.requirements.meta && data.requirements.meta.invalid) {\n if (!data.isMember) {\n addEvent(data, {type: 'error', message: 'ERROR.IDENTITY_INVALID_BLOCK_HASH'});\n console.debug(\"[wot] Invalid membership for uid {0}: block hash changed\".format(data.uid));\n }\n }\n else if (data.requirements.expired) {\n addEvent(data, {type: 'error', message: 'ERROR.IDENTITY_EXPIRED'});\n console.debug(\"[wot] Identity {0} expired (in sandbox)\".format(data.uid));\n }\n else if (data.requirements.willNeedCertificationCount > 0) {\n addEvent(data, {type: 'error', message: 'INFO.IDENTITY_WILL_MISSING_CERTIFICATIONS', messageParams: data.requirements});\n console.debug(\"[wot] Identity {0} will need {1} certification(s)\".format(data.uid, data.requirements.willNeedCertificationCount));\n }\n else if (!data.requirements.needSelf && data.requirements.needMembership) {\n addEvent(data, {type: 'error', message: 'INFO.IDENTITY_NEED_MEMBERSHIP'});\n console.debug(\"[wot] Identity {0} has a self but no membership\".format(data.uid));\n }\n if (!data.isMember && data.requirements.alternatives) {\n addEvent(data, {type: 'info', message: 'INFO.HAS_ALTERNATIVE_IDENTITIES'});\n }\n },\n\n loadData = function(pubkey, uid, options) {\n\n options = options || {};\n var data;\n\n if (!pubkey && uid && !options.force) {\n return BMA.wot.member.getByUid(uid)\n .then(function(member) {\n if (member) return loadData(member.pubkey, member.uid, options); // recursive call, with a pubkey\n //throw {message: 'NOT_A_MEMBER'};\n var options = angular.copy(options || {});\n options.force = true;\n return loadData(pubkey, uid, options); // Loop with force=true\n });\n }\n\n // Check cached data\n if (pubkey) {\n data = (options.cache !== false) ? identityCache.get(pubkey) : null;\n if (data && (!uid || data.uid === uid) && (!options.blockUid || data.blockUid === options.blockUid)) {\n console.debug(\"[wot] Identity {{0}} found in cache\".format(pubkey.substring(0, 8)));\n return $q.when(data);\n }\n console.debug(\"[wot] Loading identity {{0}}...\".format(pubkey.substring(0, 8)));\n data = {\n pubkey: pubkey,\n uid: uid\n };\n }\n else {\n console.debug(\"[wot] Loading identity from uid {{0}}...\".format(uid));\n data = {\n uid: uid\n };\n }\n if (options.blockUid) {\n data.blockUid = options.blockUid;\n }\n\n var now = Date.now();\n var parameters;\n var medianTime;\n\n return $q.all([\n\n // Get parameters\n csCurrency.parameters()\n .then(function(res) {\n parameters = res;\n }),\n\n // Get current time\n csCurrency.blockchain.current(true)\n .then(function(current) {\n medianTime = current.medianTime;\n })\n .catch(function(err){\n // Special case for currency init (root block not exists): use now\n if (err && err.ucode == BMA.errorCodes.NO_CURRENT_BLOCK) {\n medianTime = moment.utc().unix();\n }\n else {\n throw err;\n }\n }),\n\n // Get requirements\n loadRequirements(data, options.cache !== false),\n\n // Get identity using lookup\n loadIdentityByLookup(pubkey, uid)\n\n ])\n .then(function(res) {\n var dataByLookup = res[3];\n\n // If no requirements found: copy from lookup data\n if (!data.requirements.uid) {\n console.debug(\"[wot] No requirements found: using data from lookup\");\n angular.merge(data, dataByLookup);\n delete data.lookup; // not need\n return;\n }\n\n var idtyFullKey = data.requirements.uid + '-' + data.requirements.meta.timestamp;\n\n return $q.all([\n // Get received certifications\n loadCertifications(BMA.wot.certifiersOf, data.pubkey, dataByLookup.lookup ? dataByLookup.lookup.certifications[idtyFullKey] : null, parameters, medianTime, true /*certifiersOf*/)\n .then(function (res) {\n data.received_cert = res.valid;\n data.received_cert_pending = res.pending;\n data.received_cert_error = res.error;\n }),\n\n // Get given certifications\n loadCertifications(BMA.wot.certifiedBy, data.pubkey, dataByLookup.lookup ? dataByLookup.lookup.givenCertifications : null, parameters, medianTime, false/*certifiersOf*/)\n .then(function (res) {\n data.given_cert = res.valid;\n data.given_cert_pending = res.pending;\n data.given_cert_error = res.error;\n })\n ]);\n })\n .then(function() {\n\n // Add compute some additional requirements (that required all data like certifications)\n data.requirements.pendingCertificationCount = data.received_cert_pending ? data.received_cert_pending.length : data.requirements.pendingCertificationCount;\n // Use /wot/lookup.revoked when requirements not filled\n data.requirements.revoked = angular.isDefined(data.requirements.revoked) ? data.requirements.revoked : data.revoked;\n\n // Add account events\n addEvents(data);\n\n // API extension\n return api.data.raisePromise.load(data)\n .catch(function(err) {\n console.debug('Error while loading identity data, on extension point.');\n console.error(err);\n });\n })\n .then(function() {\n if (!data.pubkey) return undefined; // not found\n identityCache.put(data.pubkey, data); // add to cache\n console.debug('[wot] Identity '+ data.pubkey.substring(0, 8) +' loaded in '+ (Date.now()-now) +'ms');\n return data;\n });\n },\n\n search = function(text, options) {\n if (!text || text.trim() !== text) {\n return $q.when(undefined);\n }\n\n // Remove first special characters (to avoid request error)\n var safeText = text.replace(/(^|\\s)#\\w+/g, ''); // remove tags\n safeText = safeText.replace(/[^a-zA-Z0-9_-\\s]+/g, '');\n safeText = safeText.replace(/\\s+/g, ' ').trim();\n\n options = options || {};\n options.addUniqueId = angular.isDefined(options.addUniqueId) ? options.addUniqueId : true;\n options.allowExtension = angular.isDefined(options.allowExtension) ? options.allowExtension : true;\n options.excludeRevoked = angular.isDefined(options.excludeRevoked) ? options.excludeRevoked : false;\n\n var promise;\n if (!safeText) {\n promise = $q.when([]);\n }\n else {\n promise = $q.all(\n safeText.split(' ').reduce(function(res, text) {\n console.debug('[wot] Will search on: \\'' + text + '\\'');\n return res.concat(BMA.wot.lookup({ search: text }));\n }, [])\n ).then(function(res){\n return res.reduce(function(idties, res) {\n return idties.concat(res.results.reduce(function(idties, res) {\n return idties.concat(res.uids.reduce(function(uids, idty) {\n var blocUid = idty.meta.timestamp.split('-', 2);\n var revoked = !idty.revoked && idty.revocation_sig;\n if (!options.excludeRevoked || !revoked) {\n return uids.concat({\n uid: idty.uid,\n pubkey: res.pubkey,\n number: blocUid[0],\n hash: blocUid[1],\n revoked: revoked\n });\n }\n return uids;\n }, []));\n }, []));\n }, []);\n })\n .catch(function(err) {\n if (err && err.ucode == BMA.errorCodes.NO_MATCHING_IDENTITY) {\n return [];\n }\n else {\n throw err;\n }\n });\n }\n\n return promise\n .then(function(idties) {\n if (!options.allowExtension) {\n // Add unique id (if enable)\n return options.addUniqueId ? _addUniqueIds(idties) : idties;\n }\n var lookupResultCount = idties.length;\n // call extension point\n return api.data.raisePromise.search(text, idties, 'pubkey')\n .then(function() {\n\n // Make sure to add uid to new results - fix #488\n if (idties.length > lookupResultCount) {\n var idtiesWithoutUid = _.filter(idties, function(idty) {\n return !idty.uid && idty.pubkey;\n });\n if (idtiesWithoutUid.length) {\n return BMA.wot.member.uids()\n .then(function(uids) {\n _.forEach(idties, function(idty) {\n if (!idty.uid && idty.pubkey) {\n idty.uid = uids[idty.pubkey];\n }\n });\n });\n }\n }\n })\n .then(function() {\n // Add unique id (if enable)\n return options.addUniqueId ? _addUniqueIds(idties) : idties;\n });\n });\n },\n\n getNewcomers = function(offset, size) {\n offset = offset || 0;\n size = size || 20;\n var total;\n return $q.all([\n csCurrency.blockchain.current(true)\n .then(function(block) {\n total = block.membersCount || 0;\n }),\n BMA.blockchain.stats.newcomers()\n ])\n .then(function(res) {\n res = res[1];\n if (!res || !res.result || !res.result.blocks || !res.result.blocks.length) return null; // no result\n var blocks = _.sortBy(res.result.blocks, function (n) {\n return -n;\n });\n return getNewcomersRecursive(blocks, 0, 5, offset+size);\n })\n .then(function(idties){\n if (!idties || !idties.length) {\n return null;\n }\n idties = _sortAndSliceIdentities(idties, offset, size);\n\n // Extension point\n return extendAll(idties, 'pubkey', true/*skipAddUid*/);\n })\n .then(function(idties) {\n return {\n hits: idties,\n total: total\n };\n });\n },\n\n\n getNewcomersRecursive = function(blocks, offset, size, maxResultSize) {\n return $q(function(resolve, reject) {\n var result = [];\n var jobs = [];\n _.each(blocks.slice(offset, offset+size), function(number) {\n jobs.push(\n BMA.blockchain.block({block: number})\n .then(function(block){\n if (!block || !block.joiners) return;\n _.each(block.joiners, function(joiner){\n var parts = joiner.split(':');\n var idtyKey = parts[parts.length-1]/*uid*/ + '-' + parts[0]/*pubkey*/;\n result.push({\n id: idtyKey,\n uid: parts[parts.length-1],\n pubkey:parts[0],\n memberDate: block.medianTime,\n block: block.number\n });\n });\n })\n );\n });\n\n $q.all(jobs)\n .then(function() {\n if (result.length < maxResultSize && offset < blocks.length - 1) {\n $timeout(function() {\n getNewcomersRecursive(blocks, offset+size, size, maxResultSize - result.length)\n .then(function(res) {\n resolve(result.concat(res));\n })\n .catch(function(err) {\n reject(err);\n });\n }, 1000);\n }\n else {\n resolve(result);\n }\n })\n .catch(function(err){\n if (err && err.ucode === BMA.errorCodes.HTTP_LIMITATION) {\n resolve(result);\n }\n else {\n reject(err);\n }\n });\n });\n },\n\n getPending = function(offset, size) {\n offset = offset || 0;\n size = size || 20;\n var now = Date.now();\n return $q.all([\n BMA.wot.member.uids(),\n BMA.wot.member.pending()\n .then(function(res) {\n return (res.memberships && res.memberships.length) ? res.memberships : undefined;\n })\n ])\n .then(function(res) {\n var uids = res[0];\n var memberships = res[1];\n if (!memberships) return;\n\n var idtiesByBlock = {};\n var idtiesByPubkey = {};\n _.forEach(memberships, function(ms){\n if (ms.membership == 'IN' && !uids[ms.pubkey]) {\n var idty = {\n uid: ms.uid,\n pubkey: ms.pubkey,\n block: ms.blockNumber,\n blockHash: ms.blockHash\n };\n var otherIdtySamePubkey = idtiesByPubkey[ms.pubkey];\n if (otherIdtySamePubkey && idty.block > otherIdtySamePubkey.block) {\n return; // skip\n }\n idtiesByPubkey[idty.pubkey] = idty;\n if (!idtiesByBlock[idty.block]) {\n idtiesByBlock[idty.block] = [idty];\n }\n else {\n idtiesByBlock[idty.block].push(idty);\n }\n\n // Remove previous idty from map\n if (otherIdtySamePubkey) {\n idtiesByBlock[otherIdtySamePubkey.block] = idtiesByBlock[otherIdtySamePubkey.block].reduce(function(res, aidty){\n if (aidty.pubkey == otherIdtySamePubkey.pubkey) return res; // if match idty to remove, to NOT add\n return (res||[]).concat(aidty);\n }, null);\n if (idtiesByBlock[otherIdtySamePubkey.block] === null) {\n delete idtiesByBlock[otherIdtySamePubkey.block];\n }\n }\n }\n });\n\n var idties = _.values(idtiesByPubkey);\n var total = idties.length; // get total BEFORE slice\n\n idties = _sortAndSliceIdentities(idties, offset, size);\n var blocks = idties.reduce(function(res, aidty) {\n return res.concat(aidty.block);\n }, []);\n\n return $q.all([\n // Get time from blocks\n BMA.blockchain.blocks(_.uniq(blocks))\n .then(function(blocks) {\n\n _.forEach(blocks, function(block){\n _.forEach(idtiesByBlock[block.number], function(idty) {\n idty.sigDate = block.medianTime;\n if (block.number !== 0 && idty.blockHash !== block.hash) {\n addEvent(idty, {type:'error', message: 'ERROR.WOT_PENDING_INVALID_BLOCK_HASH'});\n console.debug(\"Invalid membership for uid={0}: block hash changed\".format(idty.uid));\n }\n });\n });\n }),\n\n // Extension point\n extendAll(idties, 'pubkey', true/*skipAddUid*/)\n ])\n .then(function() {\n console.debug(\"[ES] [wot] Loaded {0}/{1} pending identities in {2} ms\".format(idties && idties.length || 0, total, Date.now() - now));\n return {\n hits: idties,\n total: total\n };\n });\n });\n },\n\n getAll = function() {\n var letters = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','u','v','w','x','y','z'];\n return getAllRecursive(letters, 0, BMA.constants.LIMIT_REQUEST_COUNT)\n .then(function(idties) {\n return extendAll(idties, 'pubkey', true/*skipAddUid*/);\n })\n .then(_addUniqueIds)\n .then(function() {\n return {\n hits: idties,\n total: idties.length\n };\n });\n },\n\n getAllRecursive = function(letters, offset, size) {\n return $q(function(resolve, reject) {\n var result = [];\n var pubkeys = {};\n var jobs = [];\n _.each(letters.slice(offset, offset+size), function(letter) {\n jobs.push(\n search(letter, {\n addUniqueId: false, // will be done in parent method\n allowExtension: false // extension point will be called in parent method\n })\n .then(function(idties){\n if (!idties || !idties.length) return;\n result = idties.reduce(function(res, idty) {\n if (!pubkeys[idty.pubkey]) {\n pubkeys[idty.pubkey] = true;\n return res.concat(idty);\n }\n return res;\n }, result);\n })\n );\n });\n\n $q.all(jobs)\n .then(function() {\n if (offset < letters.length - 1) {\n $timeout(function() {\n getAllRecursive(letters, offset+size, size)\n .then(function(idties) {\n if (!idties || !idties.length) {\n resolve(result);\n return;\n }\n resolve(idties.reduce(function(res, idty) {\n if (!pubkeys[idty.pubkey]) {\n pubkeys[idty.pubkey] = true;\n return res.concat(idty);\n }\n return res;\n }, result));\n })\n .catch(function(err) {\n reject(err);\n });\n }, BMA.constants.LIMIT_REQUEST_DELAY);\n }\n else {\n resolve(result);\n }\n })\n .catch(function(err){\n if (err && err.ucode === BMA.errorCodes.HTTP_LIMITATION) {\n resolve(result);\n }\n else {\n reject(err);\n }\n });\n });\n },\n\n extend = function(idty, pubkeyAttributeName, skipAddUid) {\n return extendAll([idty], pubkeyAttributeName, skipAddUid)\n .then(function(res) {\n return res[0];\n });\n },\n\n extendAll = function(idties, pubkeyAttributeName, skipAddUid) {\n\n pubkeyAttributeName = pubkeyAttributeName || 'pubkey';\n\n var jobs = [];\n if (!skipAddUid) jobs.push(BMA.wot.member.uids());\n\n jobs.push(api.data.raisePromise.search(null, idties, pubkeyAttributeName)\n .catch(function(err) {\n console.debug('Error while search identities, on extension point.');\n console.error(err);\n }));\n\n return $q.all(jobs)\n .then(function(res) {\n if (!skipAddUid) {\n var uidsByPubkey = res[0];\n // Set uid (on every data)\n _.forEach(idties, function(data) {\n if (!data.uid && data[pubkeyAttributeName]) {\n data.uid = uidsByPubkey[data[pubkeyAttributeName]];\n // Remove name if redundant with uid\n if (data.uid && data.uid == data.name) {\n delete data.name;\n }\n }\n });\n }\n\n return idties;\n });\n },\n\n addEvent = function(data, event) {\n event = event || {};\n event.type = event.type || 'info';\n event.message = event.message || '';\n event.messageParams = event.messageParams || {};\n data.events = data.events || [];\n data.events.push(event);\n },\n\n cleanCache = function() {\n console.debug(\"[wot] Cleaning cache...\");\n csCache.clear(cachePrefix);\n }\n ;\n\n // Register extension points\n api.registerEvent('data', 'load');\n api.registerEvent('data', 'search');\n\n // Listen if node changed\n BMA.api.node.on.stop($rootScope, cleanCache, this);\n\n return {\n load: loadData,\n loadRequirements: loadRequirements,\n search: search,\n newcomers: getNewcomers,\n pending: getPending,\n all: getAll,\n extend: extend,\n extendAll: extendAll,\n // api extension\n api: api\n };\n}]);\n","\nangular.module('cesium.tx.services', ['ngApi', 'cesium.bma.services',\n 'cesium.settings.services', 'cesium.wot.services' ])\n\n.factory('csTx', ['$q', '$timeout', '$filter', '$translate', 'FileSaver', 'UIUtils', 'BMA', 'Api', 'csConfig', 'csSettings', 'csWot', 'csCurrency', function($q, $timeout, $filter, $translate, FileSaver, UIUtils, BMA, Api,\n csConfig, csSettings, csWot, csCurrency) {\n 'ngInject';\n\n var\n api = new Api(this, \"csTx\");\n\n function reduceTxAndPush(pubkey, txArray, result, processedTxMap, allowPendings) {\n if (!txArray || !txArray.length) return; // Skip if empty\n\n _.forEach(txArray, function(tx) {\n if (tx.block_number !== null || allowPendings) {\n var walletIsIssuer = false;\n var otherIssuers = tx.issuers.reduce(function(res, issuer) {\n walletIsIssuer = walletIsIssuer || (issuer === pubkey);\n return (issuer !== pubkey) ? res.concat(issuer) : res;\n }, []);\n var otherRecipients = [],\n outputBase,\n sources = [],\n lockedOutputs;\n\n var amount = tx.outputs.reduce(function(sum, output, noffset) {\n // FIXME duniter v1.4.13\n var outputArray = (typeof output === 'string') ? output.split(':',3) : [output.amount,output.base,output.conditions];\n outputBase = parseInt(outputArray[1]);\n var outputAmount = powBase(parseInt(outputArray[0]), outputBase);\n var outputCondition = outputArray[2];\n var sigMatches = BMA.regexp.TX_OUTPUT_SIG.exec(outputCondition);\n\n // Simple unlock condition\n if (sigMatches) {\n var outputPubkey = sigMatches[1];\n if (outputPubkey === pubkey) { // output is for the wallet\n if (!walletIsIssuer) {\n return sum + outputAmount;\n }\n // If pending: use output as new sources\n else if (tx.block_number === null) {\n sources.push({\n amount: parseInt(outputArray[0]),\n base: outputBase,\n type: 'T',\n identifier: tx.hash,\n noffset: noffset,\n consumed: false,\n conditions: outputCondition\n });\n }\n }\n\n // The output is for someone else\n else {\n // Add into recipients list(if not a issuer)\n if (outputPubkey !== '' && !_.contains(otherIssuers, outputPubkey)) {\n otherRecipients.push(outputPubkey);\n }\n if (walletIsIssuer) {\n // TODO: should be fix, when TX has multiple issuers (need a repartition)\n return sum - outputAmount;\n }\n }\n\n }\n\n // Complex unlock condition, on the issuer pubkey\n else if (outputCondition.indexOf('SIG('+pubkey+')') !== -1) {\n var lockedOutput = BMA.tx.parseUnlockCondition(outputCondition);\n if (lockedOutput) {\n // Add a source\n sources.push(angular.merge({\n amount: parseInt(outputArray[0]),\n base: outputBase,\n type: 'T',\n identifier: tx.hash,\n noffset: noffset,\n conditions: outputCondition,\n consumed: false\n }, lockedOutput));\n lockedOutput.amount = outputAmount;\n lockedOutputs = lockedOutputs || [];\n lockedOutputs.push(lockedOutput);\n console.debug('[tx] has locked output:', lockedOutput);\n\n return sum + outputAmount;\n }\n }\n return sum;\n }, 0);\n\n var txPubkeys = amount > 0 ? otherIssuers : otherRecipients;\n var time = tx.time || tx.blockstampTime;\n\n // Avoid duplicated tx, or tx to him self\n var txKey = (amount !== 0) && amount + ':' + tx.hash + ':' + time;\n if (txKey && !processedTxMap[txKey]) {\n processedTxMap[txKey] = true; // Mark as processed\n var newTx = {\n time: time,\n amount: amount,\n pubkey: txPubkeys.length === 1 ? txPubkeys[0] : undefined,\n pubkeys: txPubkeys.length > 1 ? txPubkeys : undefined,\n comment: tx.comment,\n isUD: false,\n hash: tx.hash,\n locktime: tx.locktime,\n block_number: tx.block_number\n };\n\n // If pending: store sources and inputs for a later use - see method processTransactionsAndSources()\n if (walletIsIssuer && tx.block_number === null) {\n newTx.inputs = tx.inputs;\n newTx.sources = sources;\n }\n if (lockedOutputs) {\n newTx.lockedOutputs = lockedOutputs;\n }\n result.push(newTx);\n }\n }\n });\n }\n\n\n function loadTx(pubkey, fromTime) {\n return $q(function(resolve, reject) {\n\n var nowInSec = moment().utc().unix();\n fromTime = fromTime || (nowInSec - csSettings.data.walletHistoryTimeSecond);\n var tx = {\n pendings: [],\n validating: [],\n history: [],\n errors: []\n };\n\n var processedTxMap = {};\n\n var jobs = [\n // get current block\n csCurrency.blockchain.current(true),\n\n // get pending tx\n BMA.tx.history.pending({pubkey: pubkey})\n .then(function (res) {\n reduceTxAndPush(pubkey, res.history.sending, tx.pendings, processedTxMap, true /*allow pendings*/);\n reduceTxAndPush(pubkey, res.history.pending, tx.pendings, processedTxMap, true /*allow pendings*/);\n })\n ];\n\n // get TX history since\n if (fromTime !== 'pending') {\n var reduceTxFn = function (res) {\n reduceTxAndPush(pubkey, res.history.sent, tx.history, processedTxMap, false);\n reduceTxAndPush(pubkey, res.history.received, tx.history, processedTxMap, false);\n };\n\n // get TX from a given time\n if (fromTime > 0) {\n // Use slice, to be able to cache requests result\n var sliceTime = csSettings.data.walletHistorySliceSecond;\n fromTime = fromTime - (fromTime % sliceTime);\n for(var i = fromTime; i - sliceTime < nowInSec; i += sliceTime) {\n jobs.push(BMA.tx.history.times({pubkey: pubkey, from: i, to: i+sliceTime-1}, true /*with cache*/)\n .then(reduceTxFn)\n );\n }\n\n // Last slide: no cache\n jobs.push(BMA.tx.history.times({pubkey: pubkey, from: nowInSec - (nowInSec % sliceTime), to: nowInSec+999999999}, false/*no cache*/)\n .then(reduceTxFn));\n }\n\n // get all TX\n else {\n jobs.push(BMA.tx.history.all({pubkey: pubkey})\n .then(reduceTxFn)\n );\n }\n\n // get UD history\n if (csSettings.data.showUDHistory && fromTime > 0) {\n /*jobs.push(\n BMA.ud.history({pubkey: pubkey})\n .then(function(res){\n udHistory = !res.history || !res.history.history ? [] :\n _.forEach(res.history.history, function(ud){\n if (ud.time < fromTime) return res; // skip to old UD\n var amount = powBase(ud.amount, ud.base);\n udHistory.push({\n time: ud.time,\n amount: amount,\n isUD: true,\n block_number: ud.block_number\n });\n });\n }));*/\n // API extension\n jobs.push(\n api.data.raisePromise.loadUDs({\n pubkey: pubkey,\n fromTime: fromTime\n })\n .then(function(res) {\n if (!res || !res.length) return;\n _.forEach(res, function(hits) {\n tx.history.push(hits);\n });\n })\n\n .catch(function(err) {\n console.debug('Error while loading UDs history, on extension point.');\n console.error(err);\n })\n );\n }\n }\n\n // Execute jobs\n $q.all(jobs)\n .then(function(res){\n var current = res[0];\n\n // sort by time desc\n tx.history.sort(function(tx1, tx2) {\n return (tx2.time - tx1.time);\n });\n var firstValidatedTxIndex = tx.history.findIndex(function(tx){\n return (tx.block_number <= current.number - csSettings.data.blockValidityWindow);\n });\n // remove validating from history\n tx.validating = firstValidatedTxIndex > 0 ? tx.history.splice(0, firstValidatedTxIndex) : [];\n\n tx.fromTime = fromTime !== 'pending' && fromTime || undefined;\n tx.toTime = tx.history.length ? tx.history[0].time /*=max(tx.time)*/: tx.fromTime;\n\n resolve(tx);\n })\n .catch(reject);\n });\n }\n\n function powBase(amount, base) {\n return base <= 0 ? amount : amount * Math.pow(10, base);\n }\n\n function addSource(src, sources, sourcesIndexByKey) {\n var srcKey = src.type+':'+src.identifier+':'+src.noffset;\n if (angular.isUndefined(sourcesIndexByKey[srcKey])) {\n sources.push(src);\n sourcesIndexByKey[srcKey] = sources.length - 1;\n }\n }\n\n function addSources(result, sources) {\n _(sources).forEach(function(src) {\n addSource(src, result.sources, result.sourcesIndexByKey);\n });\n }\n\n function loadSourcesAndBalance(pubkey) {\n return BMA.tx.sources({pubkey: pubkey})\n .then(function(res){\n var data = {\n sources: [],\n sourcesIndexByKey: [],\n balance: 0\n };\n if (res.sources && res.sources.length) {\n _.forEach(res.sources, function(src) {\n src.consumed = false;\n data.balance += powBase(src.amount, src.base);\n });\n addSources(data, res.sources);\n }\n return data;\n })\n .catch(function(err) {\n console.warn(\"[tx] Error while getting sources...\", err);\n throw err;\n });\n }\n\n function loadData(pubkey, fromTime) {\n var now = Date.now();\n\n var data;\n\n // Alert user, when request is too long (> 2s)\n $timeout(function() {\n if (!data) UIUtils.loading.update({template: \"COMMON.LOADING_WAIT\"});\n }, 2000);\n\n return $q.all([\n\n // Load Sources\n loadSourcesAndBalance(pubkey),\n\n // Load Tx\n loadTx(pubkey, fromTime)\n ])\n\n .then(function(res) {\n // Copy sources and balance\n data = res[0];\n data.tx = res[1];\n\n var txPendings = [];\n var txErrors = [];\n var balanceFromSource = data.balance;\n var balanceWithPending = data.balance;\n\n function _processPendingTx(tx) {\n var consumedSources = [];\n var valid = true;\n if (tx.amount > 0) { // do not check sources from received TX\n valid = false;\n // TODO get sources from the issuer ?\n }\n else {\n _.find(tx.inputs, function(input) {\n var inputKey = input.split(':').slice(2).join(':');\n var srcIndex = data.sourcesIndexByKey[inputKey];\n if (angular.isDefined(srcIndex)) {\n consumedSources.push(data.sources[srcIndex]);\n }\n else {\n valid = false;\n return true; // break\n }\n });\n if (tx.sources) { // add source output\n addSources(data, tx.sources);\n }\n delete tx.sources;\n delete tx.inputs;\n }\n if (valid) {\n balanceWithPending += tx.amount; // update balance\n txPendings.push(tx);\n _.forEach(consumedSources, function(src) {\n src.consumed=true;\n });\n }\n else {\n txErrors.push(tx);\n }\n }\n\n var txs = data.tx.pendings;\n var retry = true;\n while(txs && txs.length) {\n // process TX pendings\n _.forEach(txs, _processPendingTx);\n\n // Retry once (TX could be chained and processed in a wrong order)\n if (txErrors.length > 0 && txPendings.length > 0 && retry) {\n txs = txErrors;\n txErrors = [];\n retry = false;\n }\n else {\n txs = null;\n }\n }\n\n data.tx = data.tx || {};\n data.tx.pendings = txPendings.sort(function(tx1, tx2) {\n return (tx2.time - tx1.time);\n });\n data.tx.errors = txErrors.sort(function(tx1, tx2) {\n return (tx2.time - tx1.time);\n });\n // Negative balance not allow (use only source's balance) - fix #769\n data.balance = (balanceWithPending < 0) ? balanceFromSource : balanceWithPending;\n\n // Will add uid (+ plugin will add name, avatar, etc. if enable)\n var allTx = (data.tx.history || []).concat(data.tx.validating||[], data.tx.pendings||[], data.tx.errors||[]);\n return csWot.extendAll(allTx, 'pubkey')\n .then(function() {\n console.debug('[tx] TX and sources loaded in '+ (Date.now()-now) +'ms');\n return data;\n });\n })\n .catch(function(err) {\n console.warn(\"[tx] Error while getting sources and tx...\", err);\n throw err;\n });\n }\n\n function loadSources(pubkey) {\n console.debug(\"[tx] Loading sources for \" + pubkey.substring(0,8));\n return loadData(pubkey, 'pending');\n }\n\n // Download TX history file\n function downloadHistoryFile(pubkey, options) {\n\n options = options || {};\n options.fromTime = options.fromTime || -1;\n\n console.debug(\"[tx] Exporting TX history for pubkey [{0}]\".format(pubkey.substr(0,8)));\n\n return $q.all([\n $translate(['ACCOUNT.HEADERS.TIME',\n 'COMMON.UID',\n 'COMMON.PUBKEY',\n 'COMMON.UNIVERSAL_DIVIDEND',\n 'ACCOUNT.HEADERS.AMOUNT',\n 'ACCOUNT.HEADERS.COMMENT']),\n csCurrency.blockchain.current(true/*withCache*/),\n loadData(pubkey, options.fromTime)\n ])\n .then(function(result){\n var translations = result[0];\n var currentBlock = result[1];\n var currentTime = (currentBlock && currentBlock.medianTime) || moment().utc().unix();\n var currency = currentBlock && currentBlock.currency;\n\n var data = result[2];\n\n // no TX\n if (!data || !data.tx || !data.tx.history) {\n return UIUtils.toast.show('INFO.EMPTY_TX_HISTORY');\n }\n\n return $translate('ACCOUNT.FILE_NAME', {currency: currency, pubkey: pubkey, currentTime : currentTime})\n .then(function(filename){\n\n var formatDecimal = $filter('formatDecimal');\n var medianDate = $filter('medianDate');\n var formatSymbol = $filter('currencySymbolNoHtml');\n\n var headers = [\n translations['ACCOUNT.HEADERS.TIME'],\n translations['COMMON.UID'],\n translations['COMMON.PUBKEY'],\n translations['ACCOUNT.HEADERS.AMOUNT'] + ' (' + formatSymbol(currency) + ')',\n translations['ACCOUNT.HEADERS.COMMENT']\n ];\n var content = data.tx.history.concat(data.tx.validating).reduce(function(res, tx){\n return res.concat([\n medianDate(tx.time),\n tx.uid,\n tx.pubkey,\n formatDecimal(tx.amount/100),\n '\"' + (tx.isUD ? translations['COMMON.UNIVERSAL_DIVIDEND'] : tx.comment) + '\"'\n ].join(';') + '\\n');\n }, [headers.join(';') + '\\n']);\n\n var file = new Blob(content, {type: 'text/plain; charset=utf-8'});\n FileSaver.saveAs(file, filename);\n });\n });\n }\n\n // Register extension points\n api.registerEvent('data', 'loadUDs');\n\n return {\n load: loadData,\n loadSources: loadSources,\n downloadHistoryFile: downloadHistoryFile,\n // api extension\n api: api\n };\n}]);\n","\nangular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.services', 'cesium.crypto.services', 'cesium.utils.services',\n 'cesium.settings.services'])\n\n\n.factory('csWallet', ['$q', '$rootScope', '$timeout', '$translate', '$filter', '$ionicHistory', 'UIUtils', 'Api', 'Idle', 'localStorage', 'sessionStorage', 'Modals', 'CryptoUtils', 'csCrypto', 'BMA', 'csConfig', 'csSettings', 'FileSaver', 'Blob', 'csWot', 'csTx', 'csCurrency', function($q, $rootScope, $timeout, $translate, $filter, $ionicHistory, UIUtils,\n Api, Idle, localStorage, sessionStorage, Modals,\n CryptoUtils, csCrypto, BMA, csConfig, csSettings, FileSaver, Blob, csWot, csTx, csCurrency) {\n 'ngInject';\n\n var defaultBMA = BMA;\n var service;\n\n function CsWallet(id, BMA) {\n\n BMA = BMA || defaultBMA;\n var\n exports,\n constants = {\n STORAGE_PUBKEY: 'pubkey',\n STORAGE_UID: 'uid',\n STORAGE_DATA_PREFIX: 'data-',\n STORAGE_SECKEY: 'seckey',\n /* Need for compat with old currencies (test_net and sou) */\n TX_VERSION: BMA.constants.PROTOCOL_VERSION,\n IDTY_VERSION: BMA.constants.PROTOCOL_VERSION,\n MS_VERSION: BMA.constants.PROTOCOL_VERSION,\n CERT_VERSION: BMA.constants.PROTOCOL_VERSION,\n REVOKE_VERSION: BMA.constants.PROTOCOL_VERSION,\n TX_MAX_INPUTS_COUNT: 40 // Allow to get a TX with less than 100 rows (=max row count in Duniter protocol)\n },\n data = {},\n settings,\n listeners,\n started,\n startPromise,\n loadPromise,\n enableAuthIdle = false,\n api = new Api(this, 'csWallet-' + id),\n\n resetData = function(init) {\n data.loaded = false;\n data.pubkey= null;\n data.qrcode=null;\n\n data.uid = null;\n data.localName = null;\n data.isNew = null;\n data.sourcesIndexByKey = null;\n data.medianTime = null;\n data.requirements = {};\n data.blockUid = null;\n data.sigDate = null;\n data.sigStock = null;\n data.isMember = false;\n data.events = [];\n\n // children's wallets\n data.children = [];\n\n // Encrypted (need auth() to be encrypted)\n data.encryptedData = null;\n\n resetKeypair();\n resetTxAndSources();\n\n started = false;\n startPromise = undefined;\n\n if (init) {\n api.data.raise.init(data);\n }\n else {\n if (isDefault() && settings && !settings.useLocalStorage) {\n csSettings.reset();\n }\n api.data.raise.reset(data);\n }\n },\n\n resetKeypair = function(){\n data.keypair = {\n signSk: null,\n signPk: null\n };\n },\n\n resetSources = function(){\n // reset sources data\n data.sources = undefined;\n data.sourcesIndexByKey = undefined;\n data.balance = 0;\n },\n\n resetTx = function(){\n // reset TX data\n data.tx = data.tx || {};\n data.tx.history = [];\n data.tx.pendings = [];\n data.tx.validating = [];\n data.tx.errors = [];\n delete data.tx.fromTime;\n delete data.tx.toTime;\n },\n\n resetTxAndSources = function(){\n // reset sources data\n resetSources();\n // reset TX data\n resetTx();\n },\n\n isDefault = function(){\n return id === 'default';\n },\n\n hasEncryptedData = function(){\n return data.encryptedData && data.encryptedData.nonce && data.encryptedData.content;\n },\n\n addSource = function(src, sources, sourcesIndexByKey) {\n var srcKey = src.type+':'+src.identifier+':'+src.noffset;\n if (angular.isUndefined(sourcesIndexByKey[srcKey])) {\n if (!src.conditions) {\n console.warn(\"Trying to add a source without output condition !\", src);\n }\n sources.push(src);\n sourcesIndexByKey[srcKey] = sources.length - 1;\n }\n },\n\n addSources = function(sources) {\n data.sources = data.sources || [];\n data.sourcesIndexByKey = data.sourcesIndexByKey || {};\n _(sources).forEach(function(src) {\n addSource(src, data.sources, data.sourcesIndexByKey);\n });\n },\n\n // Show login modal\n login = function(options) {\n if (!started) {\n return (startPromise || start())\n .then(function () {\n return login(options); // loop\n });\n }\n\n var needLogin = !isLogin();\n var needAuth = options && ((options.auth && !isAuth()) || options.forceAuth);\n\n // user already login\n if (!needLogin && !needAuth) {\n if (!isDataLoaded(options)) {\n return loadData(options);\n }\n return $q.when(data);\n }\n var keepAuth = csSettings.data.keepAuthIdle > 0;\n\n var authData;\n return (options && options.authData ? $q.when(options.authData) : Modals.showLogin(options))\n .then(function(res){\n if (!res || !res.pubkey ||\n (!needLogin && res.pubkey !== data.pubkey) ||\n (needAuth && (!res.keypair || !res.keypair.signPk || !res.keypair.signSk))) {\n throw 'CANCELLED';\n } // invalid data\n\n authData = res;\n data.pubkey = authData.pubkey;\n data.uid = authData.uid || data.uid;\n data.isNew = options && angular.isDefined(options.isNew) ? options.isNew : data.isNew;\n if (keepAuth) {\n data.keypair = authData.keypair || {\n signSk: null,\n signPk: null\n };\n }\n\n if (needLogin) {\n // extend API to check login validity\n return api.data.raisePromise.loginCheck(data)\n .catch(function (err) {\n resetData(); // Reset data if not valid, then exit process\n throw err;\n })\n // Call extend api\n .then(function() {\n if (needLogin) {\n return api.data.raisePromise.login(data)\n .catch(function(err) {\n console.warn('Error during extension call [wallet.api.data.on.login]', err);\n // continue\n });\n }\n });\n }\n })\n\n .then(function() {\n // Read data from pubkey (when first login)\n if (needLogin) {\n return restoreData();\n }\n // Or the was login but now auth: just try to decrypt data\n else if (needAuth) {\n return openEncryptedData();\n }\n })\n\n .then(function() {\n if (needLogin) {\n\n // store wallet\n store();\n }\n\n // Send auth event (if need)\n if (needAuth || isAuth()) {\n // Check if need to start/stop auth idle\n checkAuthIdle(true);\n\n return api.data.raisePromise.auth(keepAuth ? data : authData);\n }\n })\n .then(function() {\n // Load data if need\n // If user just login, force data full load (even if min data asked)\n // because the user can wait (after the login modal)\n var loadOptions = !needLogin && options && options.minData ? {minData: true} : undefined/*=load all*/;\n if (!isDataLoaded(loadOptions)) {\n return loadData(loadOptions);\n }\n })\n .then(function() {\n if (options && options.silent) {\n UIUtils.loading.hide(10);\n }\n else {\n UIUtils.loading.hide(1000);\n }\n\n return keepAuth ? data : angular.merge({}, data, authData);\n })\n .catch(function(err) {\n if (err === 'RETRY' && (!options || !options.authData)) {\n return $timeout(function(){\n return login(options);\n }, 300);\n }\n throw err;\n });\n },\n\n logout = function() {\n var wasAuth = isAuth();\n\n return $q(function(resolve, reject) {\n\n var pubkey = data.pubkey;\n resetData(); // will reset keypair\n resetStore(pubkey); // reset store\n\n // Send logout event\n api.data.raise.logout();\n\n if (wasAuth) {\n api.data.raise.unauth();\n }\n\n checkAuthIdle(false);\n\n $ionicHistory.clearCache();\n\n resolve();\n });\n },\n\n isLogin = function() {\n return !!data.pubkey;\n },\n\n auth = function(options) {\n if (!started) {\n return (startPromise || start())\n .then(function () {\n return auth(options); // loop\n });\n }\n\n if (isAuth() && (!options || !options.forceAuth)) {\n return $q.when(data);\n }\n\n options = options || {};\n options.expectedPubkey = isLogin() && data.pubkey;\n options.auth = true;\n return login(options);\n },\n\n unauth = function() {\n return $q(function(resolve, reject) {\n\n resetKeypair();\n store();\n\n // Send unauth event\n api.data.raise.unauth();\n\n checkAuthIdle(false);\n\n $ionicHistory.clearCache();\n\n resolve();\n });\n },\n\n isAuth = function() {\n return data.pubkey && data.keypair && data.keypair.signSk && true;\n },\n\n getKeypair = function(options) {\n if (!started) {\n return (startPromise || start())\n .then(function () {\n return getKeypair(options); // loop\n });\n }\n\n if (isAuth()) {\n return $q.when(data.keypair);\n }\n options = options || {};\n options.silent = angular.isDefined(options.silent) ? options.silent : true;\n return auth(options)\n .then(function() {\n return data.keypair;\n });\n },\n\n hasSelf = function() {\n return !!data.pubkey && !data.requirements.needSelf;\n },\n\n isDataLoaded = function(options) {\n if (options) {\n if (options.minData && !options.sources) return data.loaded && true;\n if (options.requirements && !data.requirements.loaded) return false;\n if (options.tx && options.tx.enable && (!data.tx.fromTime || data.tx.fromTime === 'pending')) return false;\n if (options.sigStock && !data.sigStock) return false;\n }\n return data.loaded && data.sources && true;\n },\n\n isNeverUsed = function() {\n if (!data.loaded) return undefined; // undefined if not full loaded\n return !data.pubkey || !(\n // Check registration\n data.isMember ||\n data.requirements.pendingMembership ||\n data.requirements.revoked ||\n !data.requirements.needSelf ||\n data.requirements.wasMember ||\n\n // Check sources\n (data.sources && data.sources.length > 0) ||\n\n // Check TX history\n data.tx.history.length > 0 ||\n data.tx.validating.length > 0 ||\n data.tx.pendings.length > 0 ||\n\n // Check extended data (name+avatar)\n !!data.localName ||\n !!data.name ||\n !!data.avatar\n );\n },\n\n isNew = function() {return !!data.isNew;},\n\n // If connected and same pubkey\n isUserPubkey = function(pubkey) {\n return isLogin() && data.pubkey === pubkey;\n },\n\n // store pubkey and uid\n store = function(pubkey) {\n pubkey = pubkey && typeof pubkey == 'string' ? pubkey : data.pubkey;\n if (settings && settings.useLocalStorage) {\n\n if (isLogin() && settings.rememberMe) {\n\n var now = Date.now();\n console.debug(\"[wallet] Storing...\");\n\n var jobs = [];\n\n // Use session storage for secret key - fix #372\n if (settings.keepAuthIdle == csSettings.constants.KEEP_AUTH_IDLE_SESSION && isAuth()) {\n jobs.push(sessionStorage.put(constants.STORAGE_SECKEY, CryptoUtils.util.encode_base58(data.keypair.signSk)));\n }\n else {\n jobs.push(sessionStorage.put(constants.STORAGE_SECKEY, null));\n }\n\n // Use local storage for pubkey\n jobs.push(localStorage.put(constants.STORAGE_PUBKEY, data.pubkey));\n\n // Use local storage for uid - fix #625\n if (data.uid) {\n jobs.push(localStorage.put(constants.STORAGE_UID, data.uid));\n }\n else {\n jobs.push(localStorage.put(constants.STORAGE_UID, null));\n }\n\n return $q.all(jobs)\n .then(function() {\n console.debug(\"[wallet] Stored in \"+ (Date.now() - now) +\"ms\");\n });\n }\n else {\n // Resetting local storage\n return $q.all([\n sessionStorage.put(constants.STORAGE_SECKEY, null),\n localStorage.put(constants.STORAGE_PUBKEY, null),\n localStorage.put(constants.STORAGE_UID, null),\n // Clean data (only in the session storage - keep local)\n pubkey ? sessionStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when()\n ]);\n }\n }\n else {\n return $q.all([\n sessionStorage.put(constants.STORAGE_SECKEY, null),\n localStorage.put(constants.STORAGE_PUBKEY, null),\n localStorage.put(constants.STORAGE_UID, null),\n // Clean data\n pubkey ? sessionStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when(),\n pubkey ? localStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when()\n ]);\n }\n },\n\n // reset data store for this pubkey\n resetStore = function(pubkey) {\n\n console.debug(\"[wallet] Resetting stored pubkey (and uid) in local storage...\");\n\n sessionStorage.put(constants.STORAGE_SECKEY, null);\n localStorage.put(constants.STORAGE_PUBKEY, null);\n localStorage.put(constants.STORAGE_UID, null);\n\n if (settings && settings.useLocalStorage) {\n // Clean data (only in the session storage - keep local)\n return pubkey ? sessionStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when();\n }\n else {\n console.debug(\"[wallet] Resetting stored data in local storage...\");\n return $q.all([\n pubkey ? sessionStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when(),\n pubkey ? localStorage.put(constants.STORAGE_DATA_PREFIX + pubkey, null) : $q.when()\n ]);\n }\n },\n\n // store children wallet, notifications read Time, ...\n storeData = function() {\n if (!isLogin()) throw {message:'ERROR.NEED_LOGIN_FIRST'};\n\n var useEncryption = settings && settings.useLocalStorageEncryption;\n var storageKey = constants.STORAGE_DATA_PREFIX + data.pubkey;\n\n var content; // Init only if used\n var secureContent; // Init only if used\n\n // Add time\n if (data.notifications && data.notifications.time) {\n content = content || {};\n content.notifications = {\n time: data.notifications.time\n };\n }\n if (data.invitations && data.invitations.time) {\n content = content || {};\n content.invitations = {\n time: data.invitations.time\n };\n }\n\n // Add children wallets\n if (data.children && data.children.length) {\n // remember children count - need when data still encrypted, by method getChildrenCount()\n content = content || {};\n content.childrenCount = data.children.length;\n\n secureContent = secureContent || {}; // Init th secured content\n // Add children wallet\n secureContent.children = _.map(data.children, function(wallet) {\n return {\n pubkey: wallet.data.pubkey,\n uid: wallet.data.uid,\n localName: wallet.data.localName\n };\n });\n }\n var contentStr = (content || secureContent) && JSON.stringify(angular.merge({}, content||{}, secureContent||{}));\n\n // Not encryption (or nothing to secure content): store without encryption\n if (!useEncryption || !secureContent) {\n return $q.all([\n sessionStorage.put(storageKey, null), // clear session storage (not used if no encryption)\n localStorage.put(storageKey, contentStr || null)\n ]);\n }\n\n // Encryption is enable, but user not auth: use the session storage\n // (and keep the local storage value)\n if (!isAuth()) {\n return sessionStorage.put(storageKey, contentStr||null);\n }\n\n return $q.all([\n // Get a unique nonce\n CryptoUtils.util.random_nonce(),\n // Get box keypair\n CryptoUtils.box.keypair.fromSignKeypair(data.keypair),\n // Put also (without encryption) in the session storage\n sessionStorage.put(storageKey, contentStr || null)\n ])\n .then(function(res) {\n var nonce = res[0];\n var keypair = res[1];\n\n return CryptoUtils.box.pack(JSON.stringify(secureContent), nonce, keypair.boxPk, keypair.boxSk)\n .then(function(cypherContent) {\n content = angular.merge(content||{}, {\n encryptedData: {\n nonce: CryptoUtils.util.encode_base58(nonce),\n content: cypherContent\n }\n });\n //console.debug(\"[wallet] Storing with encryption: \", content);\n return localStorage.put(storageKey, JSON.stringify(content));\n });\n });\n },\n\n restore = function() {\n return $q.all([\n sessionStorage.get(constants.STORAGE_SECKEY),\n localStorage.get(constants.STORAGE_PUBKEY),\n localStorage.get(constants.STORAGE_UID)\n ])\n .then(function(res) {\n var seckey = res[0];\n var pubkey = res[1];\n var uid = res[2];\n if (!pubkey || pubkey == 'null') return;\n\n console.debug('[wallet] Restore {' + pubkey.substring(0, 8) + '} from local storage');\n\n var keypair;\n if (seckey && seckey.length && seckey != 'null') {\n try {\n keypair = {\n signPk: CryptoUtils.util.decode_base58(pubkey),\n signSk: CryptoUtils.util.decode_base58(seckey)\n };\n }\n catch (err) {\n console.warn('[wallet] Secret key restoration failed: ', err);\n keypair = undefined;\n }\n }\n\n data.pubkey = pubkey;\n data.uid = uid && uid != 'null' ? uid : undefined;\n data.keypair = keypair || {signPk: undefined, signSk: undefined};\n\n // Get pubkey's data\n return restoreData();\n })\n\n .then(function() {\n // Successful restored: raise API events\n if (isAuth()) {\n return $q.all([\n api.data.raisePromise.login(data),\n checkAuthIdle(true),\n api.data.raisePromise.auth(data)\n ])\n .catch(function(err) {\n console.warn('Error during extension call [wallet.api.data.on.auth]', err);\n // continue\n });\n }\n else if (isLogin()) {\n return api.data.raisePromise.login(data)\n .catch(function(err) {\n console.warn('Error during extension call [wallet.api.data.on.login]', err);\n // continue\n });\n }\n })\n\n .then(function(){\n return data;\n });\n },\n\n restoreData = function() {\n if (!isLogin()) throw {message:'ERROR.NEED_LOGIN_FIRST'};\n if (isNew()) return $q.when(data); // Skip restore\n // Get pubkey's data\n return $q.all([\n sessionStorage.getObject(constants.STORAGE_DATA_PREFIX + data.pubkey),\n localStorage.getObject(constants.STORAGE_DATA_PREFIX + data.pubkey)\n ])\n // Apply data, first from the session storage, then from local storage\n .then(function (res) {\n var sessionStorageData = res[0];\n var localStorageData = res[1];\n if (sessionStorageData && sessionStorageData.children && sessionStorageData.children.length === localStorageData.childrenCount) {\n return applyRestoredData(sessionStorageData)\n .catch(function(err) {\n console.error(\"[wallet] Failed to restore from the session storage ! Retrying from the local storage...\", err);\n // Retry using another storage\n return applyRestoredData(localStorageData);\n });\n }\n return applyRestoredData(localStorageData);\n });\n },\n\n applyRestoredData = function(content) {\n if (!content) return $q.when(); // skip\n\n // Apply children\n if (content.children) {\n var oldChildrenCount = data.childrenCount;\n var oldChildren = removeAllChildrenWallets({\n stop: false, /*do not stop wallet*/\n store: false/*skip store*/\n });\n\n try {\n var pubkeys = {};\n _.forEach(content.children, function(child) {\n if (!pubkeys[child.pubkey]) { // make sure wallet is unique by pubkey\n pubkeys[child.pubkey] = true;\n var wallet = newChildInstance();\n wallet.data.pubkey = child.pubkey;\n wallet.data.localName = child.localName;\n wallet.data.uid = child.uid;\n addChildWallet(wallet, {store: false/*skip store*/});\n }\n });\n delete content.children;\n // childrenCount not need anymore\n delete data.childrenCount;\n }\n catch(err) {\n console.error(\"[wallet] Failed to restore children wallet.\", err);\n // Restore removed values\n data.childrenCount = oldChildrenCount;\n data.children = oldChildren;\n return $q.reject({message:'ERROR.RESTORE_WALLET_LIST_FAILED'});\n }\n\n // Restoration succeed: stop old children\n _.forEach(oldChildren||[], function(child) {\n child.stop();\n });\n }\n\n // make sure to remove pubkey before copy\n delete content.pubkey;\n delete content.uid;\n\n // Copy to data\n angular.merge(data, content);\n\n // If auth: open encrypted data\n if (hasEncryptedData() && isAuth()) {\n return openEncryptedData({store: false})\n .then(function(){\n return data; // Important: return the data\n });\n }\n\n return $q.when(data); // Important: return the data\n },\n\n getData = function() {\n return data;\n },\n\n loadRequirements = function(withCache, secondTry) {\n // Clean existing events\n cleanEventsByContext('requirements');\n\n // Get requirements\n return csWot.loadRequirements(data, withCache)\n .catch(function(err) {\n // Retry once (can be a timeout, because Duniter node are long to response)\n if (!secondTry) {\n console.error(\"[wallet] Unable to load requirements: Will retrying... \", err);\n UIUtils.loading.update({template: \"COMMON.LOADING_WAIT\"});\n return loadRequirements(withCache, true);\n }\n throw err;\n });\n },\n\n loadTxAndSources = function(fromTime) {\n return csTx.load(data.pubkey, fromTime)\n .then(function(res){\n resetTxAndSources();\n angular.merge(data, res);\n })\n .catch(function(err) {\n resetTxAndSources();\n throw err;\n });\n },\n\n loadSources = function() {\n return csTx.loadSources(data.pubkey)\n .then(function(res){\n resetSources();\n angular.merge(data, res);\n })\n .catch(function(err) {\n resetSources();\n throw err;\n });\n },\n\n /**\n * Add user events (generate events from requirements)\n */\n addEvents = function() {\n if (data.requirements.revoked) {\n delete data.requirements.meta.invalid;\n addEvent({type:'info', message: 'ERROR.WALLET_REVOKED', context: 'requirements'});\n }\n else if (data.requirements.pendingRevocation) {\n delete data.requirements.meta.invalid;\n addEvent({type:'pending', message: 'INFO.REVOCATION_SENT_WAITING_PROCESS', context: 'requirements'});\n }\n\n // If not revoked\n else {\n if (!data.isMember && data.requirements.meta && data.requirements.meta.invalid) {\n addEvent({type: 'error', message: 'ERROR.WALLET_INVALID_BLOCK_HASH', context: 'requirements'});\n console.debug(\"Invalid membership for uid={0}: block hash changed\".format(data.uid));\n }\n // Check if self expired\n else if (!data.isMember && data.requirements.expired) {\n addEvent({type: 'error', message: 'ERROR.WALLET_IDENTITY_EXPIRED', context: 'requirements'});\n console.debug(\"Identity expired for uid={0}.\".format(data.uid));\n }\n // Pending membership\n else if (data.requirements.pendingMembership) {\n addEvent({type:'pending', message: 'ACCOUNT.WAITING_MEMBERSHIP', context: 'requirements'});\n\n // Add a warning when out distanced\n // (only if has enough certification - fix #808)\n if (!data.requirements.needCertificationCount && data.requirements.outdistanced) {\n addEvent({type:'warn', message: 'ACCOUNT.OUT_DISTANCED', context: 'requirements'});\n }\n }\n // If user has send a SELF, ask for membership - fix #625\n else if (!data.requirements.needSelf && data.requirements.needMembership){\n addEvent({type:'warn', message: 'ACCOUNT.NO_WAITING_MEMBERSHIP', context: 'requirements'});\n }\n\n if (data.requirements.needRenew) {\n // Still a member: WILL need renew\n if (data.isMember && data.requirements.membershipExpiresIn > 0) {\n addEvent({type:'warn', message: 'ACCOUNT.WILL_NEED_RENEW_MEMBERSHIP', messageParams: data.requirements, context: 'requirements'});\n }\n // Fix #649: Not a member anymore, even if membership NOT expired, because membersjip cancelled for lack of certifications\n else if (!data.isMember && data.requirements.membershipExpiresIn > 0 && data.requirements.needCertificationCount > 0) {\n addEvent({type:'warn', message: 'ACCOUNT.NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED', messageParams: data.requirements, context: 'requirements'});\n }\n // Not a member anymore\n else {\n addEvent({type:'warn', message: 'ACCOUNT.NEED_RENEW_MEMBERSHIP', messageParams: data.requirements, context: 'requirements'});\n }\n }\n else\n {\n if (data.requirements.needCertificationCount > 0) {\n addEvent({type:'info', message: 'ACCOUNT.WAITING_CERTIFICATIONS', messageParams: data.requirements, context: 'requirements'});\n // Add a help message, if user has never been a member\n if (!data.requirements.wasMember) {\n addEvent({\n type: 'help',\n message: 'ACCOUNT.WAITING_CERTIFICATIONS_HELP',\n messageParams: data.requirements,\n context: 'requirements'\n });\n }\n }\n if (data.requirements.willNeedCertificationCount > 0) {\n addEvent({type:'warn', message: 'ACCOUNT.WILL_MISSING_CERTIFICATIONS', messageParams: data.requirements, context: 'requirements'});\n }\n if (data.requirements.wasMember && data.requirements.needMembership) {\n addEvent({type:'warn', message: 'ACCOUNT.NEED_RENEW_MEMBERSHIP', messageParams: data.requirements, context: 'requirements'});\n }\n // Add a warning when out distanced - fix #777\n if (!data.requirements.needCertificationCount && !data.requirements.willNeedCertificationCount && data.requirements.outdistanced) {\n addEvent({type:'warn', message: 'ACCOUNT.OUT_DISTANCED', context: 'requirements'});\n }\n }\n }\n },\n\n loadSigStock = function() {\n // Get certified by, then count written certification\n return BMA.wot.certifiedBy({pubkey: data.pubkey})\n .then(function(res){\n data.sigStock = !res.certifications ? 0 : res.certifications.reduce(function(res, cert) {\n return cert.written === null ? res : res+1;\n }, 0);\n })\n .catch(function(err) {\n if (!!err && err.ucode == BMA.errorCodes.NO_MATCHING_MEMBER) {\n data.sigStock = 0;\n }\n /*FIXME: workaround for Duniter issue #1309 */\n else if (!!err && err.ucode == 1002) {\n console.warn(\"[wallet-service] Detecting Duniter issue #1309 ! Applying workaround... \");\n data.sigStock = 0;\n }\n else {\n throw err;\n }\n });\n },\n\n loadQrCode = function(){\n if (!data.pubkey || data.qrcode) return $q.when(data.qrcode);\n console.debug(\"[wallet] Creating SVG QRCode...\");\n return $timeout(function() {\n data.qrcode = UIUtils.qrcode.svg(data.pubkey);\n return data.qrcode;\n });\n },\n\n loadData = function(options) {\n\n var alertIfUnusedWallet = !csCurrency.data.initPhase && (!csSettings.data.wallet || csSettings.data.wallet.alertIfUnusedWallet) &&\n !data.loaded && (!options || !options.minData || !options.silent);\n\n // Make sure to load once at a time\n if (loadPromise) {\n return loadPromise.then(function() {\n return isDataLoaded(options) ? data : refreshData(options);\n });\n }\n\n if (options && options.minData) {\n loadPromise = loadMinData(options);\n }\n else if (options || data.loaded) {\n loadPromise = refreshData(options);\n }\n else {\n loadPromise = loadFullData();\n }\n\n return $q.all([\n loadPromise,\n\n // Create the QR code\n loadQrCode()\n ])\n // Warn if wallet has been never used - see #167\n .then(function() {\n var unused = isNeverUsed();\n var showAlert = alertIfUnusedWallet && !isNew() && unused === true;\n if (!showAlert) return true;\n return UIUtils.loading.hide()\n .then(function() {\n return UIUtils.alert.confirm('CONFIRM.LOGIN_UNUSED_WALLET', 'CONFIRM.LOGIN_UNUSED_WALLET_TITLE', {\n cancelText: 'COMMON.BTN_CONTINUE',\n okText: 'COMMON.BTN_RETRY'\n });\n })\n .then(function(retry) {\n if (retry) {\n return logout().then(function() {\n throw 'RETRY';\n });\n }\n else {\n // Remembering to not ask for confirmation\n if (csSettings.data.wallet.alertIfUnusedWallet) {\n csSettings.data.wallet.alertIfUnusedWallet = false;\n csSettings.store();\n }\n }\n return true;\n });\n })\n\n // Return wallet data\n .then(function(confirm) {\n loadPromise = null;\n if (confirm) {\n return data;\n }\n else { // cancel\n\n throw 'CANCELLED';\n }\n });\n },\n\n loadFullData = function(fromTime) {\n data.loaded = false;\n\n var now = Date.now();\n console.debug(\"[wallet] Loading {{0}} full data...\".format(data.pubkey.substr(0,8)));\n\n return $q.all([\n\n // Get requirements\n loadRequirements(true)\n .then(function(data) {\n if (data.requirements && (data.requirements.isMember || data.requirements.wasMember)) {\n // Load sigStock\n return loadSigStock();\n }\n else {\n data.sigStock = 0;\n }\n }),\n\n // Get TX and sources (only pending by default)\n loadTxAndSources(fromTime || 'pending')\n ])\n .then(function() {\n\n // Load wallet events\n addEvents();\n\n // API extension\n return api.data.raisePromise.load(data)\n .catch(function(err) {\n console.error('[wallet] Error during load API extension point. Try to continue',err);\n });\n })\n .then(function() {\n data.loaded = true;\n console.debug(\"[wallet] Loaded {{0}} full data in {1}ms\".format(data.pubkey.substr(0,8), Date.now() - now));\n\n // Make sure to hide loading, because sometimes it stay - should fix freeze screen\n UIUtils.loading.hide(1000);\n return data;\n })\n .catch(function(err) {\n data.loaded = false;\n throw err;\n });\n },\n\n loadMinData = function(options) {\n options = options || {};\n options.requirements = angular.isDefined(options.requirements) ? options.requirements :\n (!data.requirements.loaded || angular.isUndefined(data.requirements.needSelf));\n if (!options.requirements) {\n return $q.when(data);\n }\n\n return refreshData(options)\n .then(function(data) {\n data.loaded = true;\n return data;\n });\n },\n\n refreshData = function(options) {\n options = options || {\n requirements: true,\n sources: true,\n tx: {\n enable: true,\n fromTime: data.tx && data.tx.fromTime !== 'pending' ? data.tx.fromTime : undefined // keep previous time\n },\n sigStock: true,\n api: true\n };\n\n // Force some load (requirements) if not already loaded\n options.requirements = angular.isDefined(options.requirements) ? options.requirements : !data.requirements.loaded;\n\n // Force sources when TX enable\n if (angular.isUndefined(options.sources) && options.tx && options.tx.enable) {\n options.sources = true;\n }\n\n var jobs = [];\n\n var now = Date.now();\n console.debug(\"[wallet] {0} {{1}} data, with options: \".format(!data.loaded ? 'Loading' : 'Refreshing', data.pubkey.substr(0,8)), options);\n\n // Get requirements\n if (options.requirements) {\n // Reset events\n cleanEventsByContext('requirements');\n\n jobs.push(\n loadRequirements(true)\n\n // Add wallet events\n .then(addEvents)\n );\n }\n\n if (options.sources && (!options.tx || options.tx.enable)) {\n // Get TX and sources\n jobs.push(loadTxAndSources(options.tx ? options.tx.fromTime: undefined));\n }\n\n else if (options.sources && (options.tx && !options.tx.enable)) {\n // Get sources and only pending TX (and NOT the TX history)\n jobs.push(loadTxAndSources('pending'));\n }\n\n // Load sigStock\n if (options.sigStock) jobs.push(loadSigStock());\n\n return (jobs.length ? $q.all(jobs) : $q.when())\n .then(function() {\n // Skip api\n if (angular.isDefined(options.api) && !options.api) return data;\n\n // API extension (after all other jobs)\n return api.data.raisePromise.load(data)\n .then(function(){\n\n console.debug(\"[wallet] {0} {{1}} data in {2}ms\".format(!data.loaded ? 'Loaded' : 'Refreshed', data.pubkey.substr(0,8), Date.now() - now));\n\n // Compute if full loaded\n if (!data.loaded) {\n data.loaded = data.requirements.loaded && data.sources && true;\n }\n\n return data;\n });\n })\n .catch(function(err) {\n console.error(\"[wallet] Error while {0} data: \".format(!data.loaded ? 'Loading' : 'Refreshing'), err);\n data.loaded = data.requirements.loaded && data.sources && true;\n throw err;\n });\n },\n\n setSelf = function(uid, blockUid){\n // Skip if same self\n if (data.uid == uid && (!blockUid || data.blockUid == blockUid)) return $q.when();\n\n // Data not loaded\n if (!data.loaded) {\n return !loadPromise ?\n // If no pending load: ok\n $q.when() :\n // If a load is running: force a reload\n loadPromise.then(function() {\n return setSelf(uid, blockUid); // loop\n });\n }\n\n data.uid = uid;\n data.blockUid = blockUid;\n\n // Refresh requirements\n return refreshData({requirements: true, sigStock: true})\n .then(function() {\n // Store (to remember the new uid)\n return store({skipData: true});\n });\n },\n\n isBase = function(amount, base) {\n if (!base) return true; // no base\n if (amount < Math.pow(10, base)) return false; // too small\n var rest = '00000000' + amount;\n var lastDigits = parseInt(rest.substring(rest.length-base));\n return lastDigits === 0; // no rest\n },\n\n truncBase = function(amount, base) {\n var pow = Math.pow(10, base); // = min value in this base\n if (amount < pow) return 0;\n return Math.trunc(amount / pow ) * pow;\n },\n\n truncBaseOrMinBase = function(amount, base) {\n var pow = Math.pow(10, base);\n if (amount < pow) return pow; //\n return Math.trunc(amount / pow ) * pow;\n },\n\n powBase = function(amount, base) {\n return base <= 0 ? amount : amount * Math.pow(10, base);\n },\n\n getInputs = function(amount, outputBase, filterBase) {\n if (angular.isUndefined(filterBase)) {\n filterBase = outputBase;\n }\n var sourcesAmount = 0;\n var sources = [];\n var minBase = filterBase;\n var maxBase = filterBase;\n _.find(data.sources || [], function(source) {\n if (!source.consumed && source.base === filterBase &&\n // Filter on simple SIG output condition - fix #845\n BMA.regexp.TX_OUTPUT_SIG.exec(source.conditions)\n ) {\n sourcesAmount += powBase(source.amount, source.base);\n sources.push(source);\n }\n // Stop if enough sources\n return (sourcesAmount >= amount);\n });\n\n // IF not enough sources, get add inputs from lower base (recursively)\n if (sourcesAmount < amount && filterBase > 0) {\n filterBase -= 1;\n var missingAmount = amount - sourcesAmount;\n var lowerInputs = getInputs(missingAmount, outputBase, filterBase);\n\n // Add lower base inputs to result\n if (lowerInputs.amount > 0) {\n minBase = lowerInputs.minBase;\n sourcesAmount += lowerInputs.amount;\n [].push.apply(sources, lowerInputs.sources);\n }\n }\n\n return {\n minBase: minBase,\n maxBase: maxBase,\n amount: sourcesAmount,\n sources: sources\n };\n },\n\n /**\n * Send a new transaction\n */\n transfer = function(destPub, amount, comments, useRelative, restPub, block) {\n return $q.all([\n getKeypair(),\n csCurrency.get(),\n block && $q.when(block) || csCurrency.blockchain.current(true)\n ])\n .then(function(res) {\n var keypair = res[0];\n var currency = res[1];\n block = res[2];\n if (!BMA.regexp.PUBKEY.test(destPub)){\n throw {message:'ERROR.INVALID_PUBKEY'};\n }\n if (!BMA.regexp.COMMENT.test(comments)){\n throw {message:'ERROR.INVALID_COMMENT'};\n }\n if (!isLogin()){\n throw {message:'ERROR.NEED_LOGIN_FIRST'};\n }\n if (destPub === data.pubkey){\n throw {message:'ERROR.SAME_TX_RECIPIENT'};\n }\n if (!amount) {\n throw {message:'ERROR.AMOUNT_REQUIRED'};\n }\n if (amount <= 0) {\n throw {message:'ERROR.AMOUNT_NEGATIVE'};\n }\n amount = Math.floor(amount); // remove decimals\n\n var inputs = {\n amount: 0,\n minBase: block.unitbase,\n maxBase: block.unitbase + 1,\n sources : []\n };\n\n var logs = [];\n logs.push(\"[wallet] amount=\" + amount);\n\n // Get inputs, starting to use current base sources\n var amountBase = 0;\n while (inputs.amount < amount && amountBase <= block.unitbase) {\n inputs = getInputs(amount, block.unitbase);\n\n if (inputs.amount < amount) {\n // try to reduce amount (replace last digits to zero)\n amountBase++;\n if (amountBase <= block.unitbase) {\n amount = truncBase(amount, amountBase);\n logs.push(\"[wallet] inputs not found. Retrying with amount =\" + amount + \" be compatible with amountBase=\" + amountBase);\n }\n }\n }\n\n if (inputs.amount < amount) {\n if (data.balance < amount) {\n throw {message:'ERROR.NOT_ENOUGH_CREDIT'};\n }\n else if (inputs.amount === 0) {\n throw {message:'ERROR.ALL_SOURCES_USED'};\n }\n else {\n return $translate('COMMON.UD')\n .then(function(UD) {\n var params;\n if(useRelative) {\n params = {\n amount: ($filter('formatDecimal')(inputs.amount / currency.currentUD)),\n unit: UD,\n subUnit: $filter('abbreviate')(currency.name)\n };\n }\n else {\n params = {\n amount: ($filter('formatDecimal')(inputs.amount/100)),\n unit: $filter('abbreviate')(currency.name),\n subUnit: ''\n };\n }\n return $translate('ERROR.NOT_ENOUGH_SOURCES', params)\n .then(function(message) {\n throw {message: message};\n });\n });\n }\n }\n // Avoid to get outputs on lower base\n if (amountBase < inputs.minBase && !isBase(amount, inputs.minBase)) {\n amount = truncBaseOrMinBase(amount, inputs.minBase);\n console.debug(\"[wallet] Amount has been truncate to \" + amount);\n logs.push(\"[wallet] Amount has been truncate to \" + amount);\n }\n else if (amountBase > 0) {\n console.debug(\"[wallet] Amount has been truncate to \" + amount);\n logs.push(\"[wallet] Will use amount truncated to \" + amount + \" (amountBase=\"+amountBase+\")\");\n }\n\n // Send tx\n return createAndSendTx(currency, block, keypair, destPub, amount, inputs, comments, restPub||data.pubkey, logs)\n .then(function(res) {\n data.balance -= res.amount;\n if (data.balance < 0) data.balance = 0; // fix #712\n _.forEach(inputs.sources, function(source) {\n source.consumed=true;\n });\n\n // Add new sources\n if (res && res.sources.length) {\n console.debug(\"[wallet-service] New sources to be add after the TX: \", res.sources);\n addSources(res.sources);\n }\n\n // Add TX to pendings\n var pendingTx = {\n time: csCurrency.date.now(),\n amount: -amount,\n pubkey: destPub,\n comment: comments,\n isUD: false,\n hash: res.hash,\n locktime: 0,\n block_number: null\n };\n return csWot.extendAll([pendingTx], 'pubkey')\n .then(function() {\n data.tx.pendings.unshift(pendingTx);\n\n // API extension\n api.data.raise.balanceChanged(data);\n api.data.raise.newTx(data);\n\n // Return TX hash (if chained TXs, return the last tx hash) - required by Cesium-API\n return {\n hash: res.hash\n };\n });\n })\n .catch(function(err) {\n\n // Source already consumed: whould refresh wallet sources\n if (err && err.ucode === BMA.errorCodes.SOURCE_ALREADY_CONSUMED) {\n console.debug('[wallet] TX rejected by node with error [{0}]. Reloading sources then retry...'.format(err.message||'Source already consumed'));\n return $timeout(loadTxAndSources, 500)\n .then(function() {\n return transfer(destPub, amount, comments, useRelative, restPub, block);\n });\n }\n\n // Error in generated TX - issue #524\n else if (err && err.ucode === BMA.errorCodes.TX_INPUTS_OUTPUTS_NOT_EQUAL) {\n // Ask user to send log to developers\n var esEnable = csSettings.data.plugins && csSettings.data.plugins.es && csSettings.data.plugins.es.enable;\n if (esEnable) {\n UIUtils.loading.hide();\n return UIUtils.alert.confirm('CONFIRM.ISSUE_524_SEND_LOG', 'ERROR.POPUP_TITLE', {\n cssClass: 'warning',\n okText: 'COMMON.BTN_OK',\n cancelText: 'COMMON.BTN_NO'\n })\n .then(function(confirm) {\n if (confirm) {\n api.error.raise.send({\n title: 'Issue #524 logs',\n content: 'App version: ' +csConfig.version+'\\n'+\n 'App build: ' +csConfig.build+'\\n'+\n 'Logs:\\n\\n' + logs.join('\\n')\n });\n return $timeout(function() {\n throw {message: 'ERROR.ISSUE_524_TX_FAILED'};\n }, 1500);\n }\n throw {message: 'ERROR.SEND_TX_FAILED'};\n });\n }\n }\n throw err;\n });\n });\n },\n\n /**\n * Send a WIF wallet\n */\n transferAll = function(destPub, amount, comments, useRelative, restPub) {\n if (!isLogin()) return $q.reject({message:'ERROR.NEED_LOGIN_FIRST'});\n\n if (!restPub || destPub == restPub) {\n return $q.reject({message: \"Could not have same pubkey for 'destPub' and 'restPub'\"});\n }\n\n return csCurrency.blockchain.lastValid()\n .then(function(block) {\n console.debug(\"[wallet] Using last valid block as TX reference (to avoid network fork): \", block);\n\n return transfer(destPub, amount, comments, useRelative, restPub, block)\n .then(function() {\n // If more money: transfer all to restPub\n if (data.balance > 0 && restPub) {\n console.debug(\"[wallet] Wallet has some more money: transfering fund to [{0}]\".format(restPub.substring(0,8)));\n return transfer(restPub, data.balance, undefined/*comments*/, false/*useRelative*/, restPub, block);\n }\n });\n\n });\n\n },\n\n /**\n * Create TX doc and send it\n * @param block the current block\n * @param destPub\n * @param amount\n * @param inputs\n * @param comments\n * @return the hash of the sent TX\n */\n createAndSendTx = function(currency, block, keypair, destPub, amount, inputs, comments, restPub, logs) {\n\n // Make sure a TX in compact mode has no more than 100 lines (fix #118)\n // (If more than 100 lines, send to TX to himself first, then its result as sources for the final TX)\n if (inputs.sources.length > constants.TX_MAX_INPUTS_COUNT) {\n console.debug(\"[Wallet] TX has to many sources. Will chain TX...\");\n\n // Compute a slice of sources\n var firstSlice = {\n minBase: block.unitbase,\n maxBase: 0,\n amount: 0,\n sources: inputs.sources.slice(0, constants.TX_MAX_INPUTS_COUNT) /* end index is excluded, so array length=TX_MAX_INPUTS_COUNT - issue #524 */\n };\n _.forEach(firstSlice.sources, function(source) {\n if (source.base < firstSlice.minBase) firstSlice.minBase = source.base;\n if (source.base > firstSlice.maxBase) firstSlice.maxBase = source.base;\n firstSlice.amount += powBase(source.amount, source.base);\n });\n\n // Send inputs first slice\n return createAndSendTx(currency, block, keypair, data.pubkey/*to himself*/, firstSlice.amount, firstSlice, undefined/*comment not need*/, data.pubkey/*rest to himself*/, logs)\n .then(function(res) {\n _.forEach(firstSlice.sources, function(source) {\n source.consumed=true;\n });\n addSources(res.sources);\n\n var secondSlice = {\n minBase: block.unitbase,\n maxBase: 0,\n amount: 0,\n sources: inputs.sources.slice(constants.TX_MAX_INPUTS_COUNT).concat(res.sources)\n };\n _.forEach(secondSlice.sources, function(source) {\n if (source.base < secondSlice.minBase) secondSlice.minBase = source.base;\n if (source.base > secondSlice.maxBase) secondSlice.maxBase = source.base;\n secondSlice.amount += powBase(source.amount, source.base);\n });\n\n // Send inputs second slice (recursive call)\n return createAndSendTx(currency, block, keypair, destPub, amount, secondSlice, comments, restPub, logs);\n });\n }\n\n var tx = 'Version: '+ constants.TX_VERSION +'\\n' +\n 'Type: Transaction\\n' +\n 'Currency: ' + currency.name + '\\n' +\n 'Blockstamp: ' + block.number + '-' + block.hash + '\\n' +\n 'Locktime: 0\\n' + // no lock\n 'Issuers:\\n' +\n data.pubkey + '\\n' +\n 'Inputs:\\n';\n\n _.forEach(inputs.sources, function(source) {\n // if D : AMOUNT:BASE:D:PUBLIC_KEY:BLOCK_ID\n // if T : AMOUNT:BASE:T:T_HASH:T_INDEX\n tx += [source.amount, source.base, source.type, source.identifier,source.noffset].join(':')+\"\\n\";\n });\n\n tx += 'Unlocks:\\n';\n for (i=0; i 0) {\n outputAmount = truncBase(rest, outputBase);\n rest -= outputAmount;\n if (outputAmount > 0) {\n outputAmount = outputBase === 0 ? outputAmount : outputAmount / Math.pow(10, outputBase);\n tx += outputAmount + ':' + outputBase + ':SIG(' + destPub + ')\\n';\n outputOffset++;\n }\n outputBase--;\n }\n rest = inputs.amount - amount;\n outputBase = inputs.maxBase;\n }\n // Outputs to restPub\n while(rest > 0) {\n outputAmount = truncBase(rest, outputBase);\n rest -= outputAmount;\n if (outputAmount > 0) {\n outputAmount = outputBase === 0 ? outputAmount : outputAmount / Math.pow(10, outputBase);\n tx += outputAmount +':'+outputBase+':SIG('+restPub+')\\n';\n // If rest to himself: add new sources\n if (data.pubkey === restPub) {\n newSources.push({\n type: 'T',\n noffset: outputOffset,\n amount: outputAmount,\n base: outputBase,\n conditions: 'SIG('+restPub+')',\n consumed: false\n });\n }\n outputOffset++;\n }\n outputBase--;\n }\n\n tx += \"Comment: \"+ (comments||\"\") + \"\\n\";\n\n // Append to logs (need to resolve issue #524)\n if (logs) {\n if (destPub == data.pubkey) {\n logs.push('[wallet] Creating new TX, using inputs:\\n - minBase: '+inputs.minBase+'\\n - maxBase: '+inputs.maxBase);\n }\n else {\n logs.push('[wallet] Creating new TX, using inputs:\\n - minBase: '+inputs.minBase+'\\n - maxBase: '+inputs.maxBase + '\\n - sources (=TX inputs):');\n }\n _.forEach(inputs.sources, function(source) {\n logs.push([source.amount, source.base, source.type, source.identifier,source.noffset].join(':'));\n });\n logs.push(\"\\n[wallet] generated TX document (without signature) :\\n------ START ------\\n\" + tx + \"------ END ------\\n\");\n }\n\n return CryptoUtils.sign(tx, keypair)\n .then(function(signature) {\n var signedTx = tx + signature + \"\\n\";\n return BMA.tx.process({transaction: signedTx})\n .catch(function(err) {\n if (err && err.ucode === BMA.errorCodes.TX_ALREADY_PROCESSED) {\n // continue\n return;\n }\n throw err;\n })\n .then(function() {\n return CryptoUtils.util.hash(signedTx);\n })\n .then(function(txHash) {\n _.forEach(newSources, function(output) {\n output.identifier= txHash;\n output.consumed = false;\n output.pending = true;\n });\n return {\n amount: (data.pubkey === destPub) ? 0 : ((data.pubkey === restPub) ? amount : inputs.amount),\n tx: signedTx,\n hash: txHash,\n sources: newSources\n };\n });\n });\n },\n\n getIdentityDocument = function(currency, keypair, uid, blockUid) {\n uid = uid || data.uid;\n blockUid = blockUid || data.blockUid;\n if (!uid || !blockUid) {\n throw {message: 'ERROR.WALLET_HAS_NO_SELF'};\n }\n if (data.requirements.expired) {\n throw {message: 'ERROR.WALLET_IDENTITY_EXPIRED'};\n }\n\n var identity = 'Version: '+ constants.IDTY_VERSION +'\\n' +\n 'Type: Identity\\n' +\n 'Currency: ' + currency.name + '\\n' +\n 'Issuer: ' + data.pubkey + '\\n' +\n 'UniqueID: ' + uid + '\\n' +\n 'Timestamp: ' + blockUid + '\\n';\n return CryptoUtils.sign(identity, keypair)\n .then(function(signature) {\n identity += signature + '\\n';\n console.debug('Has generate an identity document:\\n----\\n' + identity + '----');\n return identity;\n });\n },\n\n /**\n * Send self identity\n */\n self = function(uid, needToLoadRequirements) {\n if (!BMA.regexp.USER_ID.test(uid)){\n return $q.reject({message: 'ERROR.INVALID_USER_ID'});\n }\n var block;\n return $q.all([\n getKeypair(),\n csCurrency.get(),\n csCurrency.blockchain.lastValid()\n ])\n // Create identity document\n .then(function(res) {\n var keypair = res[0];\n var currency = res[1];\n block = res[2];\n return getIdentityDocument(currency, keypair, uid, block.number + '-' + block.hash);\n })\n\n // Send to node\n .then(function (identity) {\n return BMA.wot.add({identity: identity});\n })\n\n .then(function () {\n if (!!needToLoadRequirements) {\n // Refresh membership data (if need)\n return loadRequirements(false/*no cache*/)\n\n // Add wallet events\n .then(addEvents);\n }\n else {\n data.uid = uid;\n data.blockUid = block.number + '-' + block.hash;\n }\n })\n .catch(function (err) {\n if (err && err.ucode === BMA.errorCodes.IDENTITY_SANDBOX_FULL) {\n throw {ucode: BMA.errorCodes.IDENTITY_SANDBOX_FULL, message: 'ERROR.IDENTITY_SANDBOX_FULL'};\n }\n throw err;\n });\n },\n\n /**\n * Send membership (in or out)\n */\n membership = function(sideIn) {\n return function() {\n var membership;\n\n return $q.all([\n getKeypair(),\n csCurrency.blockchain.lastValid()\n ])\n .then(function(res) {\n var keypair = res[0];\n var block = res[1];\n // Create membership to sign\n membership = 'Version: '+ constants.MS_VERSION +'\\n' +\n 'Type: Membership\\n' +\n 'Currency: ' + block.currency + '\\n' +\n 'Issuer: ' + data.pubkey + '\\n' +\n 'Block: ' + block.number + '-' + block.hash + '\\n' +\n 'Membership: ' + (!!sideIn ? \"IN\" : \"OUT\" ) + '\\n' +\n 'UserID: ' + data.uid + '\\n' +\n 'CertTS: ' + data.blockUid + '\\n';\n\n return CryptoUtils.sign(membership, keypair);\n })\n .then(function(signature) {\n var signedMembership = membership + signature + '\\n';\n // Send signed membership\n return BMA.blockchain.membership({membership: signedMembership});\n })\n .then(function() {\n return $timeout(function() {\n return loadRequirements(false /*no cache*/);\n }, 1000); // waiting for node to process membership doc\n })\n\n // Add wallet events\n .then(addEvents);\n };\n },\n\n /**\n * Send identity certification\n */\n certify = function(uid, pubkey, timestamp, signature, isMember, wasMember) {\n return $q.all([\n getKeypair(),\n csCurrency.get(),\n csCurrency.blockchain.lastValid()\n ])\n .then(function(res) {\n var keypair = res[0];\n var currency = res[1];\n var block = res[2];\n\n // Check if member account\n if (!data.isMember && !csConfig.initPhase) {\n throw {message:'ERROR.ONLY_MEMBER_CAN_EXECUTE_THIS_ACTION'};\n }\n\n // Create the self part to sign\n var cert = 'Version: '+ constants.CERT_VERSION +'\\n' +\n 'Type: Certification\\n' +\n 'Currency: ' + currency.name + '\\n' +\n 'Issuer: ' + data.pubkey + '\\n' +\n 'IdtyIssuer: ' + pubkey + '\\n' +\n 'IdtyUniqueID: ' + uid + '\\n' +\n 'IdtyTimestamp: ' + timestamp + '\\n' +\n 'IdtySignature: ' + signature + '\\n' +\n 'CertTimestamp: ' + block.number + '-' + block.hash + '\\n';\n\n return CryptoUtils.sign(cert, keypair)\n .then(function(signature) {\n var signedCert = cert + signature + '\\n';\n return BMA.wot.certify({cert: signedCert});\n })\n .then(function() {\n var cert = {\n pubkey: pubkey,\n uid: uid,\n time: block.medianTime,\n isMember: isMember,\n wasMember: wasMember,\n expiresIn: currency.parameters.sigWindow,\n pending: true,\n block: block.number,\n valid: true\n };\n\n // Notify extension\n api.action.raise.certify(cert);\n\n return cert;\n });\n });\n },\n\n addEvent = function(event, insertAtFirst) {\n event = event || {};\n event.type = event.type || 'info';\n event.message = event.message || '';\n event.messageParams = event.messageParams || {};\n event.context = event.context || 'undefined';\n if (event.message.trim().length) {\n if (!insertAtFirst) {\n data.events.push(event);\n }\n else {\n data.events.splice(0, 0, event);\n }\n }\n else {\n console.debug('Event without message. Skipping this event');\n }\n },\n\n getkeypairSaveId = function(record) {\n var nbCharSalt = Math.round(record.answer.length / 2);\n var salt = record.answer.substr(0, nbCharSalt);\n var pwd = record.answer.substr(nbCharSalt);\n return CryptoUtils.scryptKeypair(salt, pwd)\n .then(function (keypair) {\n record.pubkey = CryptoUtils.util.encode_base58(keypair.signPk);\n record.keypair = keypair;\n return record;\n });\n },\n\n getCryptedId = function(record){\n return getkeypairSaveId(record)\n .then(CryptoUtils.util.random_nonce)\n .then(function(nonce) {\n record.nonce = CryptoUtils.util.encode_base58(nonce);\n return $q.all([\n CryptoUtils.box.pack(record.salt, nonce, record.keypair.boxPk, record.keypair.boxSk),\n CryptoUtils.box.pack(record.pwd, nonce, record.keypair.boxPk, record.keypair.boxSk)\n ]);\n })\n .then(function (res) {\n record.salt = res[0];\n record.pwd = res[1];\n return record;\n });\n },\n\n recoverId = function(recover) {\n if (!recover || !recover.cypherNonce || !recover.cypherSalt || !recover.cypherPwd) {\n throw {message:'ERROR.INVALID_FILE_FORMAT'};\n }\n var nonce = CryptoUtils.util.decode_base58(recover.cypherNonce);\n return getkeypairSaveId(recover)\n .then(function (recover) {\n return CryptoUtils.box.open(recover.cypherSalt, nonce, recover.keypair.boxPk, recover.keypair.boxSk);\n })\n .then(function (salt) {\n recover.salt = salt;\n return CryptoUtils.box.open(recover.cypherPwd, nonce, recover.keypair.boxPk, recover.keypair.boxSk);\n })\n .then(function (pwd) {\n recover.pwd = pwd;\n return recover;\n })\n .catch(function(err){\n console.warn('Incorrect answers: unable to recover identifiers', err);\n throw new Error('Incorrect answers: unable to recover identifiers');\n });\n },\n\n getSaveIDDocument = function(record) {\n var saveId = 'Version: 10 \\n' +\n 'Type: SaveID\\n' +\n 'Questions: ' + '\\n' + record.questions +\n 'Issuer: ' + data.pubkey + '\\n' +\n 'Crypted-Nonce: '+ record.nonce + '\\n'+\n 'Crypted-Pubkey: '+ record.pubkey +'\\n' +\n 'Crypted-Salt: '+ record.salt + '\\n' +\n 'Crypted-Pwd: '+ record.pwd + '\\n';\n\n // Sign SaveId document\n return CryptoUtils.sign(saveId, data.keypair)\n\n .then(function(signature) {\n saveId += signature + '\\n';\n console.debug('Has generate an SaveID document:\\n----\\n' + saveId + '----');\n return saveId;\n });\n\n },\n\n downloadSaveId = function(record){\n return getSaveIDDocument(record)\n .then(function(saveId) {\n var saveIdFile = new Blob([saveId], {type: 'text/plain; charset=utf-8'});\n FileSaver.saveAs(saveIdFile, '{0}-recover_ID.txt'.format(data.pubkey.substring(0,8)));\n });\n },\n\n downloadKeyFile = function(format){\n if (!isAuth()) return $q.reject('user not authenticated');\n\n return $q.all([\n csCurrency.get(),\n csCrypto.keyfile.generateContent(data.keypair,\n {\n type: format,\n password: function() {\n UIUtils.loading.hide();\n return Modals.showPassword({\n title: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.TITLE',\n subTitle: 'ACCOUNT.SECURITY.KEYFILE.PASSWORD_POPUP.HELP'\n })\n .then(function(password) {\n return UIUtils.loading.show(10)\n .then(function(){\n return password;\n });\n });\n }\n })\n ])\n .then(function(res) {\n var currency = res[0];\n var document = res[1];\n return $translate('ACCOUNT.SECURITY.KEYFILE_FILENAME', {\n currency: currency.name,\n pubkey: data.pubkey,\n format: format,\n })\n .then(function(filename){\n var file = new Blob([document], {type: 'text/plain; charset=utf-8'});\n FileSaver.saveAs(file, filename);\n });\n });\n\n },\n\n getRevocationDocument = function() {\n return $q.all([\n getKeypair(),\n csCurrency.get()\n ])\n\n .then(function(res) {\n var keypair = res[0];\n var currency = res[1];\n // get the Identity document\n return getIdentityDocument(currency, keypair)\n\n // Create membership document (unsigned)\n .then(function(identity){\n var identityLines = identity.trim().split('\\n');\n var idtySignature = identityLines[identityLines.length-1];\n\n var revocation = 'Version: '+ constants.REVOKE_VERSION +'\\n' +\n 'Type: Revocation\\n' +\n 'Currency: ' + currency.name + '\\n' +\n 'Issuer: ' + data.pubkey + '\\n' +\n 'IdtyUniqueID: ' + data.uid + '\\n' +\n 'IdtyTimestamp: ' + data.blockUid + '\\n' +\n 'IdtySignature: ' + idtySignature + '\\n';\n\n\n // Sign revocation document\n return CryptoUtils.sign(revocation, keypair)\n\n // Add revocation to document\n .then(function(signature) {\n revocation += signature + '\\n';\n console.debug('Has generate an revocation document:\\n----\\n' + revocation + '----');\n return revocation;\n });\n });\n });\n },\n\n /**\n * Send a revocation\n */\n revoke = function() {\n\n // Clear old events\n cleanEventsByContext('revocation');\n\n // Get revocation document\n return getRevocationDocument()\n // Send revocation document\n .then(function(revocation) {\n return BMA.wot.revoke({revocation: revocation});\n })\n\n // Reload requirements\n .then(function() {\n\n return $timeout(function() {\n return loadRequirements(false/*no cache*/);\n }, 1000); // waiting for node to process membership doc\n })\n\n // Add wallet events\n .then(addEvents)\n\n .catch(function(err) {\n if (err && err.ucode == BMA.errorCodes.REVOCATION_ALREADY_REGISTERED) {\n // Already registered by node: just add an event\n addEvent({type:'pending', message: 'INFO.REVOCATION_SENT_WAITING_PROCESS', context: 'requirements'}, true);\n }\n else {\n throw err;\n }\n })\n ;\n },\n\n revokeWithFile = function(revocation){\n return $q.all([\n BMA.wot.revoke({revocation: revocation})\n ])\n // Reload requirements\n .then(function(res) {\n if (isLogin()) {\n return $timeout(function () {\n return loadRequirements(false/*no cache*/);\n }, 1000) // waiting for node to process membership doc\n\n // Add wallet events\n .then(addEvents)\n\n .catch(function (err) {\n if (err && err.ucode == BMA.errorCodes.REVOCATION_ALREADY_REGISTERED) {\n // Already registered by node: just add an event\n addEvent({type: 'pending', message: 'INFO.REVOCATION_SENT_WAITING_PROCESS', context: 'requirements'}, true);\n }\n else {\n throw err;\n }\n });\n }\n else {\n addEvent({type: 'pending', message: 'INFO.REVOCATION_SENT_WAITING_PROCESS', context: 'requirements'}, true);\n }\n });\n\n },\n\n downloadRevocation = function(){\n return $q.all([\n csCurrency.get(),\n getRevocationDocument()\n ])\n .then(function(res) {\n var currency = res[0];\n var revocation = res[1];\n var revocationFile = new Blob([revocation], {type: 'text/plain; charset=utf-8'});\n return $translate('ACCOUNT.SECURITY.REVOCATION_FILENAME', {\n uid: data.uid,\n currency: currency.name,\n pubkey: data.pubkey\n })\n .then(function (fileName) {\n FileSaver.saveAs(revocationFile, fileName);\n });\n });\n },\n\n cleanEventsByContext = function(context){\n data.events = data.events.reduce(function(res, event) {\n if (event.context && event.context == context) return res;\n return res.concat(event);\n },[]);\n },\n\n /* -- children wallets -- */\n\n setParentWallet = function(parentWallet) {\n listeners = listeners || [];\n var listener;\n _.forEach(['load', 'reset'], function(method) {\n listener = api.data.on[method]($rootScope, function(data, deferred) {\n deferred = deferred || $q.defer();\n parentWallet.api.data.raisePromise[method](data)\n .then(deferred.resolve)\n .catch(deferred.reject);\n return deferred.promise;\n }, this);\n listeners.push(listener);\n });\n\n // Unauth when parent wallet unauth\n listener = parentWallet.api.data.on.unauth($rootScope, function() {\n if (isAuth()) unauth();\n }, this);\n listeners.push(listener);\n },\n\n createNewChildWallet = function(options) {\n var wallet = newChildInstance();\n addChildWallet(wallet, options);\n return wallet;\n },\n\n addChildWallet = function(wallet, options) {\n // Link to parent\n wallet.children.setParent(exports); // = link to self wallet\n\n data.children = data.children || [];\n data.children.push(wallet);\n\n // Store (store children locally)\n if (!options || angular.isUndefined(options.store) || options.store) {\n return storeData();\n }\n return $q.when();\n },\n\n removeAllChildrenWallets = function(options) {\n\n // stop/unauth all existing wallets\n if (!options || options.stop) {\n _.forEach(data.children || [], function(wallet){\n wallet.stop();\n });\n }\n var removedChildren = data.children.splice(0, data.children.length);\n\n // Store (store children locally)\n if (!options || angular.isUndefined(options.store) || options.store) {\n return storeData();\n }\n return removedChildren;\n\n },\n\n removeChildWalletById = function(id, options) {\n data.children = data.children || [];\n var childIndex = _.findIndex(data.children, function(child) {return child.id === id;});\n if (childIndex === -1) {\n console.warn('[wallet] Unable to remove child wallet {'+id+'} (not found)');\n return;\n }\n // Remove the wallet, and return it\n var wallet = data.children.splice(childIndex, 1)[0];\n\n // Force to stop without calling api\n wallet.stop();\n\n // Store (store children locally)\n if (!options || angular.isUndefined(options.store) || options.store) {\n return storeData();\n }\n },\n\n getChildWalletById = function(id) {\n return (id !== 'default') && _.find(data.children|| [], function(child) {return child.id === +id;}) || undefined;\n },\n\n getChildWalletByPubkey = function(pubkey) {\n return _.find(data.children|| [], function(child) {return child.isUserPubkey(pubkey);});\n },\n\n hasChildrenWithPubkey = function(pubkey) {\n return !!getChildWalletByPubkey(pubkey);\n },\n\n getChildrenWalletCount = function() {\n return angular.isDefined(data.childrenCount) ? data.childrenCount : (data.children && data.children.length || 0);\n },\n\n newChildInstance = function() {\n // Return max(id) + 1\n var walletId = (data.children || []).reduce(function(res, wallet) {\n return Math.max(res, wallet.id);\n }, 0) + 1;\n return service.instance(walletId, BMA);\n },\n\n getAllChildrenWallet = function() {\n return openEncryptedData()\n .then(function() {\n return data.children;\n });\n },\n\n getAllPubkeys = function() {\n if (!data.pubkey) throw new Error('User not login!');\n return (data.children || []).reduce(function(res, wallet) {\n return wallet.data.pubkey ? res.concat(wallet.data.pubkey) : res;\n }, [data.pubkey])\n }\n\n getByPubkey = function(pubkey) {\n if (!pubkey) throw new Error(\"Missing 'pubkey' argument !\");\n if (!data.pubkey) throw new Error('User not login!');\n if (data.pubkey === pubkey) return exports; // main wallet\n return getChildWalletByPubkey(pubkey);\n }\n\n downloadChildrenWalletFile = function() {\n return $q.all([\n getAllChildrenWallet(),\n csCurrency.get()\n ])\n .then(function(res) {\n var children = res[0];\n var currency = res[1];\n var content = (children||[]).reduce(function(res, wallet) {\n return res + [wallet.data.pubkey, wallet.data.uid, wallet.data.localName||wallet.data.name].join('\\t') + '\\n';\n }, '');\n var file = new Blob([content], {type: 'text/plain; charset=utf-8'});\n return $translate('ACCOUNT.WALLET_LIST.EXPORT_FILENAME', {\n pubkey: data.pubkey,\n currency: currency.name,\n })\n .then(function (fileName) {\n FileSaver.saveAs(file, fileName);\n });\n });\n },\n\n /* -- END children wallets -- */\n\n openEncryptedData = function(options) {\n if (!hasEncryptedData()) return $q.when();\n if (!isAuth()) return auth().then(openEncryptedData); // Force auth if need\n\n // Open encrypted data\n return CryptoUtils.box.keypair.fromSignKeypair(data.keypair)\n .then(function(keypair) {\n var nonce = CryptoUtils.util.decode_base58(data.encryptedData.nonce);\n return CryptoUtils.box.open(data.encryptedData.content, nonce, keypair.boxPk, keypair.boxSk);\n })\n // Then apply\n .then(function(content) {\n data.encryptedData = null; // reset encrypted data\n var promise = applyRestoredData(JSON.parse(content));\n\n // Store (store data into session storage)\n if (!options || angular.isUndefined(options.store) || options.store) {\n promise.then(function() {\n return storeData();\n });\n }\n\n return promise;\n })\n ;\n },\n\n /**\n * De-serialize from JSON string\n */\n fromJson = function(json, failIfInvalid) {\n failIfInvalid = angular.isUndefined(failIfInvalid) ? true : failIfInvalid;\n return $q(function(resolve, reject) {\n var obj;\n try {\n obj = JSON.parse(json || '{}');\n }\n catch(err) { /* invalid JSON : continue*/}\n\n // FIXME #379\n /*if (obj && obj.pubkey) {\n resolve({\n pubkey: obj.pubkey\n });\n }\n else */\n if (obj && obj.keypair && obj.keypair.signPk && obj.keypair.signSk) {\n var keypair = {};\n var i;\n\n // sign Pk : Convert to Uint8Array type\n var signPk = new Uint8Array(32);\n for (i = 0; i < 32; i++) signPk[i] = obj.keypair.signPk[i];\n keypair.signPk = signPk;\n\n var signSk = new Uint8Array(64);\n for (i = 0; i < 64; i++) signSk[i] = obj.keypair.signSk[i];\n keypair.signSk = signSk;\n\n // box Pk : Convert to Uint8Array type\n if (obj.version && obj.keypair.boxPk) {\n var boxPk = new Uint8Array(32);\n for (i = 0; i < 32; i++) boxPk[i] = obj.keypair.boxPk[i];\n keypair.boxPk = boxPk;\n }\n\n if (obj.version && obj.keypair.boxSk) {\n var boxSk = new Uint8Array(32);\n for (i = 0; i < 64; i++) boxSk[i] = obj.keypair.boxSk[i];\n keypair.boxSk = boxSk;\n }\n\n resolve({\n pubkey: obj.pubkey,\n keypair: keypair,\n tx: obj.tx\n });\n }\n else if (failIfInvalid) {\n reject('Not a valid Wallet.data object');\n }\n else {\n resolve();\n }\n });\n },\n\n checkAuthIdle = function(isAuthResult) {\n isAuthResult = angular.isDefined(isAuthResult) ? isAuthResult : isAuth();\n var newEnableAuthIdle = isAuthResult && settings && settings.keepAuthIdle > 0 && settings.keepAuthIdle != csSettings.constants.KEEP_AUTH_IDLE_SESSION;\n var changed = (enableAuthIdle != newEnableAuthIdle);\n\n // need start/top watching\n if (changed) {\n // start idle\n if (newEnableAuthIdle) {\n console.debug(\"[wallet] Start idle (delay: {0}s)\".format(settings.keepAuthIdle));\n Idle.setIdle(settings.keepAuthIdle);\n Idle.watch();\n }\n // stop idle, if was enable\n else if (enableAuthIdle){\n console.debug(\"[wallet] Stop idle\");\n Idle.unwatch();\n }\n enableAuthIdle = newEnableAuthIdle;\n }\n\n // if idle time changed: apply it\n else if (newEnableAuthIdle && Idle.getIdle() !== settings.keepAuthIdle) {\n console.debug(\"[idle] Updating auth idle (delay: {0}s)\".format(settings.keepAuthIdle));\n Idle.setIdle(settings.keepAuthIdle);\n }\n\n // Make sure to store seckey, in the session storage for secret key -fix #372\n var storeSecKey = isAuthResult && settings && settings.keepAuthIdle == csSettings.constants.KEEP_AUTH_IDLE_SESSION && true;\n if (storeSecKey) {\n sessionStorage.put(constants.STORAGE_SECKEY, CryptoUtils.util.encode_base58(data.keypair.signSk));\n }\n // Make sure to clean previous seckey, if exists in session storage\n else if (changed) {\n sessionStorage.put(constants.STORAGE_SECKEY, null);\n }\n };\n\n function getWalletSettings(settings) {\n return settings && {\n useLocalStorage: settings.useLocalStorage,\n useLocalStorageEncryption: settings.useLocalStorageEncryption,\n rememberMe: settings.rememberMe,\n keepAuthIdle: settings.keepAuthIdle\n };\n }\n\n function onSettingsChanged(allSettings) {\n var newSettings = getWalletSettings(allSettings);\n var hasChanged = !angular.equals(settings, newSettings);\n if (!hasChanged || !settings) return; // skip\n\n var useEncryptionChanged = !angular.equals(settings.useLocalStorageEncryption, newSettings.useLocalStorageEncryption);\n var useStorageChanged = !angular.equals(settings.useLocalStorage, newSettings.useLocalStorage) || useEncryptionChanged;\n var keepAuthIdleChanged = !angular.equals(settings.keepAuthIdle, newSettings.keepAuthIdle);\n\n settings = newSettings;\n\n if (keepAuthIdleChanged) {\n checkAuthIdle();\n }\n\n // Local storage option changed\n if (useStorageChanged) {\n\n // If disabled, then reset the store\n if (!settings.useLocalStorage) {\n resetStore(data.pubkey);\n }\n // If storage enable\n else {\n // Store login data\n return store()\n .then(function() {\n\n // Encryption enable: auth before saving data\n if (data.childrenCount > 0 && useEncryptionChanged && settings.useLocalStorageEncryption) {\n return auth({minData: true, silent: true})\n .catch(function(err){\n // user not auth: revert encryption to false\n if (err === 'CANCELLED') {\n csSettings.apply({useLocalStorageEncryption: false});\n return csSettings.store();\n }\n else {\n throw err;\n }\n });\n }\n })\n\n // Store other data (children wallet, ...)\n .then(storeData);\n }\n }\n }\n\n function addListeners() {\n listeners = [\n // Listen if settings changed\n csSettings.api.data.on.changed($rootScope, onSettingsChanged, this),\n // Listen if node changed\n BMA.api.node.on.restart($rootScope, restart, this)\n ];\n\n $rootScope.$on('IdleStart', unauth);\n }\n\n function addListener(listener) {\n listeners = listeners || [];\n listeners.push(listener);\n }\n\n function removeListeners() {\n _.forEach(listeners, function(remove){\n remove();\n });\n listeners = [];\n }\n\n function ready() {\n if (started) return $q.when();\n return startPromise || start();\n }\n\n function stop() {\n console.debug('[wallet] Stopping...');\n removeListeners();\n resetData();\n }\n\n function restart() {\n stop();\n return $timeout(start, 200);\n }\n\n function start(options) {\n options = options || {};\n // By default, restore if the service is the default object\n options.restore = angular.isDefined(options.restore) ? options.restore : (id === 'default');\n\n console.debug('[wallet] Starting...');\n var now = Date.now();\n\n startPromise = $q.all([\n csSettings.ready()\n .then(function() {\n settings = getWalletSettings(csSettings.data);\n }),\n csCurrency.ready(),\n BMA.ready()\n ]);\n\n // Restore\n if (options.restore) startPromise = startPromise.then(restore);\n\n // Emit ready event\n startPromise.then(function() {\n addListeners();\n\n console.debug('[wallet] Started in ' + (Date.now() - now) + 'ms');\n\n started = true;\n startPromise = null;\n })\n .then(function(){\n return data;\n });\n\n return startPromise;\n }\n\n // Register extension points\n api.registerEvent('data', 'init');\n api.registerEvent('data', 'loginCheck'); // allow to stop the login process\n api.registerEvent('data', 'login'); // executed after login check (cannot stop the login process)\n api.registerEvent('data', 'auth');\n api.registerEvent('data', 'unauth');\n api.registerEvent('data', 'load');\n api.registerEvent('data', 'logout');\n api.registerEvent('data', 'reset');\n api.registerEvent('data', 'store');\n\n api.registerEvent('error', 'send');\n\n // Data changed : balance changed, new TX\n api.registerEvent('data', 'balanceChanged');\n api.registerEvent('data', 'newTx');\n\n api.registerEvent('action', 'certify');\n\n\n // init data\n resetData(true);\n\n // Override default store/restore function, when not the 'default' wallet\n if (id !== \"default\") {\n //start = $q.when;\n //started = true;\n store = $q.when;\n restore = $q.when;\n restoreData = $q.when;\n //checkAuthIdle = function(){};\n }\n\n exports = {\n id: id,\n data: data,\n ready: ready,\n start: start,\n stop: stop,\n // auth\n login: login,\n logout: logout,\n auth: auth,\n unauth: unauth,\n isLogin: isLogin,\n isAuth: isAuth,\n getKeypair: getKeypair,\n hasSelf: hasSelf,\n setSelf: setSelf,\n isMember: function() {\n return data.isMember;\n },\n isDataLoaded : isDataLoaded,\n isDefault: isDefault,\n isNeverUsed: isNeverUsed,\n isNew: isNew,\n isUserPubkey: isUserPubkey,\n getData: getData,\n loadData: loadData,\n refreshData: refreshData,\n loadQrCode: loadQrCode,\n // internal\n internal: {\n addListener: addListener,\n removeListeners: removeListeners\n },\n // local storage\n store: store,\n storeData: storeData, // store children wallet, readTime, etc.\n // operations\n transfer: transfer,\n transferAll: transferAll,\n self: self,\n revoke: revoke,\n revokeWithFile: revokeWithFile,\n certify: certify,\n downloadSaveId: downloadSaveId,\n getCryptedId: getCryptedId,\n recoverId: recoverId,\n downloadRevocation: downloadRevocation,\n downloadKeyFile: downloadKeyFile,\n pubkeys: getAllPubkeys,\n getByPubkey: getByPubkey,\n membership: {\n inside: membership(true),\n out: membership(false)\n },\n events: {\n add: addEvent,\n cleanByContext: cleanEventsByContext\n },\n children: {\n create: createNewChildWallet,\n add: addChildWallet,\n remove: removeChildWalletById,\n get: getChildWalletById,\n getByPubkey: getChildWalletByPubkey,\n all: getAllChildrenWallet,\n setParent: setParentWallet,\n count: getChildrenWalletCount,\n hasPubkey: hasChildrenWithPubkey,\n instance: newChildInstance,\n downloadFile: downloadChildrenWalletFile\n },\n api: api\n };\n return exports;\n }\n\n service = CsWallet('default', BMA);\n service.instance = CsWallet;\n\n return service;\n}]);\n","angular.module('cesium.help.services', [])\n\n.constant('csHelpConstants', {\n wallet: {\n stepCount: 4\n }\n})\n\n.factory('csHelp', ['$rootScope', 'csSettings', 'UIUtils', 'csHelpConstants', '$controller', function($rootScope, csSettings, UIUtils, csHelpConstants, $controller) {\n 'ngInject';\n\n\n function createHelptipScope(isTour, helpController) {\n if (!isTour && ($rootScope.tour || !csSettings.data.helptip.enable || UIUtils.screen.isSmall())) {\n return; // avoid other helptip to be launched (e.g. csWallet)\n }\n // Create a new scope for the tour controller\n var helptipScope = $rootScope.$new();\n $controller(helpController||'HelpTipCtrl', { '$scope': helptipScope});\n return helptipScope;\n }\n\n function startWalletHelpTip(index, isTour) {\n index = angular.isDefined(index) ? index : csSettings.data.helptip.wallet;\n isTour = angular.isDefined(isTour) ? isTour : false;\n\n if (index < 0 || index >= csHelpConstants.wallet.stepCount) return;\n\n // Create a new scope for the tour controller\n var helptipScope = createHelptipScope(isTour);\n if (!helptipScope) return; // could be undefined, if a global tour already is already started\n\n helptipScope.tour = isTour;\n\n return helptipScope.startWalletTour(index, false)\n .then(function(endIndex) {\n helptipScope.$destroy();\n if (!isTour) {\n csSettings.data.helptip.wallet = endIndex;\n csSettings.store();\n }\n });\n }\n\n return {\n wallet: {\n tour: function() {\n return startWalletHelpTip(0, true);\n },\n helptip: startWalletHelpTip\n }\n };\n\n}]);\n","\n\nangular.module('cesium.plugin.services', [])\n\n.provider('PluginService', function PluginServiceProvider() {\n 'ngInject';\n\n var eagerLoadingServices = [];\n\n var extensionByStates = {};\n\n this.registerEagerLoadingService = function(serviceName) {\n eagerLoadingServices.push(serviceName);\n return this;\n };\n\n this.extendState = function(stateName, extension) {\n if (angular.isDefined(stateName) && angular.isDefined(extension)) {\n if (!extensionByStates[stateName]) {\n extensionByStates[stateName] = [];\n }\n extensionByStates[stateName].push(extension);\n }\n return this;\n };\n\n this.extendStates = function(stateNames, extension) {\n var that = this;\n stateNames.forEach(function(stateName) {\n that.extendState(stateName, extension);\n });\n return this;\n };\n\n this.$get = ['$injector', '$state', function($injector, $state) {\n\n var currentExtensionPointName;\n\n function start() {\n if (eagerLoadingServices.length>0) {\n _.forEach(eagerLoadingServices, function(name) {\n $injector.get(name);\n });\n }\n }\n\n function getActiveExtensionPointsByName(extensionPointName) {\n var extensions = _.keys(extensionByStates).reduce(function(res, stateName){\n return $state.includes(stateName) ? res.concat(extensionByStates[stateName]) : res;\n }, []);\n return extensions.reduce(function(res, extension){\n return extension.points && extension.points[extensionPointName] ? res.concat(extension.points[extensionPointName]) : res;\n }, []);\n }\n\n function setCurrentExtensionPointName(extensionPointName) {\n currentExtensionPointName = extensionPointName;\n }\n\n function getCurrentExtensionPointName() {\n return currentExtensionPointName;\n }\n\n return {\n start: start,\n extensions: {\n points: {\n getActivesByName: getActiveExtensionPointsByName,\n current: {\n get: getCurrentExtensionPointName,\n set: setCurrentExtensionPointName\n }\n }\n }\n };\n }];\n})\n;\n","angular.module('cesium.services', [\n // removeIf(device)\n 'cesium.desktop.services',\n // endRemoveIf(device)\n 'cesium.settings.services',\n 'cesium.http.services',\n 'cesium.network.services',\n 'cesium.bma.services',\n 'cesium.crypto.services',\n 'cesium.utils.services',\n 'cesium.modal.services',\n 'cesium.storage.services',\n 'cesium.device.services',\n 'cesium.currency.services',\n 'cesium.wot.services',\n 'cesium.tx.services',\n 'cesium.wallet.services',\n 'cesium.help.services',\n 'cesium.plugin.services'\n ])\n;\n","\nangular.module('cesium.controllers', [\n 'cesium.app.controllers',\n 'cesium.join.controllers',\n 'cesium.login.controllers',\n 'cesium.help.controllers',\n 'cesium.wallet.controllers',\n 'cesium.wallets.controllers',\n 'cesium.currency.controllers',\n 'cesium.wot.controllers',\n 'cesium.transfer.controllers',\n 'cesium.settings.controllers',\n 'cesium.network.controllers',\n 'cesium.blockchain.controllers'\n ])\n;\n","angular.module('cesium.templates', []).run(['$templateCache', function($templateCache) {$templateCache.put('templates/menu.html','

{{:locale:\\'COMMON.APP_NAME\\'|translate}} {{$root.currency.name|abbreviate}}

{{:locale:\\'MENU.HOME\\'|translate}} {{:locale:\\'MENU.HOME\\'|translate}}
{{:locale:\\'MENU.ACCOUNT\\'|translate}} {{:locale:\\'MENU.TRANSACTIONS\\'|translate}} {{:locale:\\'MENU.WALLETS\\'|translate}}
{{:locale:\\'COMMON.BTN_HELP_TOUR\\'|translate}} {{:locale:\\'MENU.WOT\\'|translate}} {{:locale:\\'MENU.CURRENCY\\'|translate}} {{:locale:\\'MENU.NETWORK\\'|translate}}
{{:locale:\\'MENU.SETTINGS\\'|translate}}
{{:locale:\\'COMMON.BTN_LOGOUT\\'|translate}}
{{:locale:\\'COMMON.APP_VERSION\\'|translate:{version: config.version} }} | {{:locale:\\'HOME.BTN_ABOUT\\'|translate}}
');\n$templateCache.put('templates/modal_about.html','

ABOUT.TITLE

{{\\'COMMON.APP_NAME\\'|translate}} {{\\'COMMON.APP_VERSION\\'|translate:$root.config}} - www.cesium.app

{{\\'COMMON.APP_BUILD\\'|translate:$root.config}}

ABOUT.LICENSE

{{::$root.newRelease.url}}

ABOUT.OFFICIAL_WEB_SITE

https://www.cesium.app

{{\\'ABOUT.FORUM\\' | translate}}

{{::$root.settings.userForumUrl}}

ABOUT.PLEASE_REPORT_ISSUE

ABOUT.REPORT_ISSUE

{{\\'ABOUT.CODE\\' | translate}}

https://git.duniter.org/clients/cesium-grp/cesium

{{\\'ABOUT.DEVELOPERS\\' | translate}}

Benoit Lavenier, bpresles, cgeek, DiG, Ji_emme

');\n$templateCache.put('templates/api/doc.html','

API.DOC.TRANSFER.TITLE

API.DOC.DESCRIPTION_DIVIDER

API.DOC.TRANSFER.DESCRIPTION

API.DOC.URL_DIVIDER

{{$root.rootPath}}#/v1/payment/:pubkey?amount=API.DOC.TRANSFER.PARAM_AMOUNT

API.DOC.PARAMETERS_DIVIDER

API.DOC.AVAILABLE_PARAMETERS

pubkey
API.DOC.TRANSFER.PARAM_PUBKEY_HELP
amount
API.DOC.TRANSFER.PARAM_AMOUNT_HELP
comment
API.DOC.TRANSFER.PARAM_COMMENT_HELP
name
API.DOC.TRANSFER.PARAM_NAME_HELP
preferred_node
API.DOC.TRANSFER.PARAM_PREFERRED_NODE_HELP
redirect_url
API.DOC.TRANSFER.PARAM_REDIRECT_URL_HELP
cancel_url
API.DOC.TRANSFER.PARAM_CANCEL_URL_HELP

API.DOC.DEMO_DIVIDER

API.DOC.DEMO_HELP

API.DOC.DEMO_SUCCEED

API.DOC.DEMO_RESULT

{{result.content}}

API.DOC.DEMO_RESULT_PEER {{result.node}}

API.DOC.DEMO_CANCELLED

API.DOC.INTEGRATE_DIVIDER

API.DOC.TRANSFER.EXAMPLES_HELP

API.DOC.TRANSFER.EXAMPLE_BUTTON

API.DOC.INTEGRATE_CODE

API.DOC.INTEGRATE_RESULT

 

API.DOC.INTEGRATE_PARAMETERS

{{\\'API.DOC.TRANSFER.PARAM_PUBKEY\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_AMOUNT\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_COMMENT\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_NAME\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_PREFERRED_NODE\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_REDIRECT_URL\\' | translate}} :

{{\\'API.DOC.TRANSFER.PARAM_CANCEL_URL\\' | translate}} :

API.DOC.TRANSFER.EXAMPLE_BUTTON_DEFAULT_STYLE

{{\\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_ICON\\' | translate}} :

{{\\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_HELP\\' | translate}} :

{{\\'API.DOC.TRANSFER.EXAMPLE_BUTTON_BG_COLOR\\' | translate}} :

{{\\'API.DOC.TRANSFER.EXAMPLE_BUTTON_FONT_COLOR\\' | translate}} :

{{\\'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_WIDTH\\' | translate}} :

');\n$templateCache.put('templates/api/home.html','API.HOME.TITLE

API.HOME.MESSAGE

API.HOME.MESSAGE_SHORT


 
v{{$root.config.version}}

{{\\'COMMON.APP_NAME\\'|translate}} API - v{{$root.config.version}}

{{\\'COMMON.APP_NAME\\'|translate}} API v{{$root.config.version}} - {{\\'HOME.BTN_ABOUT\\'|translate}} - {{\\'API.COMMON.LINK_STANDARD_APP\\'|translate}}

');\n$templateCache.put('templates/api/menu.html','');\n$templateCache.put('templates/api/popover_locales.html','');\n$templateCache.put('templates/api/transfer.html','API.TRANSFER.TITLE_SHORT
 

API.TRANSFER.TITLE

API.TRANSFER.DEMO.HELP



API.TRANSFER.SUMMARY

API.TRANSFER.AMOUNT

API.TRANSFER.NAME

{{transferData.name}}

API.TRANSFER.PUBKEY


{{transferData.pubkey}}

{{transferData.pubkey|formatPubkey}}

API.TRANSFER.COMMENT


{{::transferData.comment}}

{{::transferData.comment}}

API.TRANSFER.NODE


 {{node.server}}

 
v{{$root.config.version}}

{{\\'COMMON.APP_NAME\\'|translate}} - v{{$root.config.version}}

{{\\'COMMON.APP_NAME\\'|translate}} API v{{$root.config.version}} - {{\\'HOME.BTN_ABOUT\\'|translate}} - {{\\'API.COMMON.LINK_DOC\\'|translate}} - {{\\'API.COMMON.LINK_STANDARD_APP\\'|translate}}

');\n$templateCache.put('templates/blockchain/item_block.html','

{{:rebind:block.medianTime|medianDate}}

+{{:rebind:block.joinersCount}} -{{:rebind:block.excludedCount-block.revokedCount}} {{:rebind:block.revokedCount}}   {{:rebind:block.activesCount}}   {{:rebind:block.certificationsCount}}   {{\\'COMMON.UD\\'|translate}}   {{:rebind:block.transactionsCount}}

{{:rebind:block.name||block.uid}}

{{::block.number|formatInteger}}
');\n$templateCache.put('templates/blockchain/item_block_empty_lg.html','

{{:rebind:block.medianTime|medianDate}}

{{:rebind:block.issuer|formatPubkey}} {{:rebind:block.name||block.uid}}

{{block.number|formatInteger}}
');\n$templateCache.put('templates/blockchain/item_block_lg.html','

{{:rebind:block.medianTime|medianDate}}

{{:rebind:\\'BLOCKCHAIN.HASH\\'|translate}} {{:rebind:block.hash|formatHash}}

{{:rebind:block.issuer|formatPubkey}} {{:rebind:block.name||block.uid}}

+{{:rebind:block.joinersCount}} -{{:rebind:block.excludedCount-block.revokedCount}}    -{{:rebind:block.revokedCount}}   {{:rebind:block.activesCount}}   {{:rebind:block.certificationsCount}}   {{:rebind:\\'COMMON.UD\\'|translate}}   {{:rebind:block.transactionsCount}}  
{{:rebind:block.number}}
');\n$templateCache.put('templates/blockchain/items_blocks.html','
BLOCKCHAIN.LOOKUP.NO_BLOCK
');\n$templateCache.put('templates/blockchain/link_identity.html',' {{::identity.uid}}   {{::identity.pubkey|formatPubkey}}');\n$templateCache.put('templates/blockchain/list_blocks.html','
BLOCKCHAIN.LOOKUP.NO_BLOCK
');\n$templateCache.put('templates/blockchain/list_blocks_lg.html','
{{:locale:\\'BLOCKCHAIN.LOOKUP.NO_BLOCK\\'|translate}}
');\n$templateCache.put('templates/blockchain/lookup.html','BLOCKCHAIN.LOOKUP.TITLE');\n$templateCache.put('templates/blockchain/lookup_lg.html','BLOCKCHAIN.LOOKUP.TITLE');\n$templateCache.put('templates/blockchain/unlock_condition_popover.html','

BLOCKCHAIN.VIEW.TX_OUTPUT_UNLOCK_CONDITIONS

{{::\\'BLOCKCHAIN.VIEW.TX_OUTPUT_OPERATOR.\\'+condition.operator|translate}} 
{{::condition.value|formatDuration}}
{{::condition.value|medianDate}}
');\n$templateCache.put('templates/blockchain/view_block.html','{{\\'BLOCKCHAIN.VIEW.TITLE_CURRENT\\'|translate}} {{\\'BLOCKCHAIN.VIEW.TITLE\\'|translate:formData}}
 

{{\\'BLOCKCHAIN.VIEW.TITLE\\'|translate:formData}} {{\\'BLOCKCHAIN.VIEW.TITLE_CURRENT\\'|translate}}

{{formData.medianTime | medianFromNowAndDate}}

{{\\'BLOCKCHAIN.VIEW.COMPUTED_BY\\'|translate}} {{issuer.name||issuer.uid}} ({{issuer.uid}})

{{\\'BLOCKCHAIN.VIEW.SHOW_RAW\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.TECHNICAL_DIVIDER\\' | translate}} {{\\'BLOCKCHAIN.VIEW.VERSION\\'|translate}} {{::formData.version}} {{\\'BLOCKCHAIN.VIEW.POW_MIN\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.POW_MIN_HELP\\'|translate}}

{{::formData.powMin}}
{{\\'BLOCKCHAIN.VIEW.HASH\\'|translate}} {{::formData.hash}}
{{::formData.hash}}
{{\\'BLOCKCHAIN.VIEW.DATA_DIVIDER\\' | translate}}{{\\'BLOCKCHAIN.VIEW.EMPTY\\'|translate}}
{{\\'COMMON.UNIVERSAL_DIVIDEND\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.UNIVERSAL_DIVIDEND_HELP\\'|translate: {membersCount: formData.membersCount} }}

+1 / {{\\'COMMON.MEMBER\\'|translate|lowercase}} 0 + {{formData.dividend| formatAmount: {currency: formData.currency, useRelative: false} }} / {{\\'COMMON.MEMBER\\'|translate|lowercase}}
{{\\'BLOCKCHAIN.VIEW.IDENTITIES_COUNT\\'|translate}} +{{::formData.identitiesCount}} 0
{{\\'BLOCKCHAIN.VIEW.JOINERS_COUNT\\'|translate}} +{{::formData.joinersCount}} 0
{{\\'BLOCKCHAIN.VIEW.ACTIVES_COUNT\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.ACTIVES_COUNT_HELP\\'|translate}}

{{::formData.activesCount}} 0
{{\\'BLOCKCHAIN.VIEW.EXCLUDED_COUNT\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.EXCLUDED_COUNT_HELP\\'|translate}}

-{{::formData.excludedCount-formData.revokedCount}} 0
{{\\'BLOCKCHAIN.VIEW.LEAVERS_COUNT\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.LEAVERS_COUNT_HELP\\'|translate}}

-{{::formData.leaversCount}} 0
{{\\'BLOCKCHAIN.VIEW.REVOKED_COUNT\\'|translate}}

{{\\'BLOCKCHAIN.VIEW.REVOKED_COUNT_HELP\\'|translate}}

-{{::formData.revokedCount}} 0
{{\\'BLOCKCHAIN.VIEW.CERT_COUNT\\'|translate}} {{::formData.certificationsCount}}

{{\\'BLOCKCHAIN.VIEW.TX_COUNT\\'|translate}} {{::formData.transactionsCount}}

BLOCKCHAIN.VIEW.TX_TO_HIMSELF
( )
');\n$templateCache.put('templates/common/badge_certification_count.html','= $ctrl.parameters.sigQty),\\n \\'badge-assertive\\': ($ctrl.requirements.needCertificationCount + $ctrl.requirements.pendingCertificationCount < $ctrl.parameters.sigQty)}\"> {{$ctrl.requirements.certificationCount}} + {{$ctrl.requirements.pendingCertificationCount}}');\n$templateCache.put('templates/common/badge_given_certification_count.html','
= $ctrl.parameters.sigStock}\"> {{$ctrl.identity.given_cert.length}} (+ {{$ctrl.identity.given_cert_pending.length}}) / {{$ctrl.parameters.sigStock}}
');\n$templateCache.put('templates/common/form_error_messages.html','
');\n$templateCache.put('templates/common/popover_copy.html','
');\n$templateCache.put('templates/common/popover_helptip.html','

 

');\n$templateCache.put('templates/common/popover_locales.html','');\n$templateCache.put('templates/common/popover_profile.html','

{{walletData.name||walletData.uid}}

{{walletData.pubkey|formatPubkey}}

{{walletData.pubkey|formatPubkey}}
{{\\'LOGIN.NO_ACCOUNT_QUESTION\\'|translate}}
');\n$templateCache.put('templates/common/popover_share.html','

{{titleKey|translate:titleValues}}

{{time|formatDate}}
');\n$templateCache.put('templates/common/popup_password.html','
{{error|translate}}
');\n$templateCache.put('templates/common/qrcode.html','
{{:locale:\\'COMMON.PUBKEY\\'|translate}}

{{:rebind:formData.pubkey}}

');\n$templateCache.put('templates/common/view_passcode.html','COMMON.PASSCODE.TITLE');\n$templateCache.put('templates/currency/items_network.html',' CURRENCY.VIEW.MEDIAN_TIME {{formData.medianTime | medianDate}} CURRENCY.VIEW.POW_MIN {{formData.difficulty | formatInteger}}
CURRENCY.VIEW.NETWORK_RULES_DIVIDER
CURRENCY.VIEW.AVG_GEN_TIME {{formData.avgGenTime | formatDuration}}
PEER.MEMBERS PEER.MIRRORS PEER.OFFLINE PEER.PEERS ({{search.results.length}})
');\n$templateCache.put('templates/currency/items_parameters.html','
CURRENCY.VIEW.CURRENCY_NAME
{{formData.currency}} ()
CURRENCY.VIEW.SHARE (Mt/Nt)
CURRENCY.VIEW.MASS (Mt)
CURRENCY.VIEW.C_ACTUAL (c{{\\'CURRENCY.VIEW.CURRENT\\'|translate}})
{{formData.cactual | formatNumeral: \\'0,0.00\\'}} % / {{formData.dt | formatPeriod}}
CURRENCY.VIEW.UD ({{\\'COMMON.UD\\'|translate}}t)
1  / {{formData.dt | formatPeriod}}
COMMON.BTN_RELATIVE_UNIT
CURRENCY.VIEW.MONEY_RULES_DIVIDER
CURRENCY.VIEW.C_RULE (c)
{{formData.c*100 | formatNumeral: \\'0,0.00\\'}} % / {{formData.dt | formatPeriod}}{{formData.c*100 | formatNumeral: \\'0,0.00\\'}} % / {{formData.dtReeval | formatDuration}}
CURRENCY.VIEW.DT_REEVAL (dt{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}})
CURRENCY.VIEW.UD_REEVAL_TIME0 (t0{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}})
{{formData.udReevalTime0|medianDate}}
CURRENCY.VIEW.UD_RULE - {{\\'COMMON.UD\\'|translate}}{{formData.dt|formatPeriod}}(t{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}})
{{\\'COMMON.UD\\'|translate}}t-1 + c2 * Mt-1/Nt-1{{\\'COMMON.UD\\'|translate}}{{formData.dt|formatPeriod}}(t{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}} - dt{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}})+ c2 * (M/N)(t{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}} - dt{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}}) / dt{{\\'CURRENCY.VIEW.REEVAL_SYMBOL\\'|translate}}
CURRENCY.VIEW.DISPLAY_ALL_RULES
');\n$templateCache.put('templates/currency/items_wot.html','
CURRENCY.VIEW.MEMBERS (N{{\\'CURRENCY.VIEW.CURRENT\\'|translate}})
{{formData.N | formatInteger}}
(ΔN)
formData.Nprev), \\'badge-stable\\': (formData.N==formData.Nprev) ,\\'badge-assertive\\': (formData.Nprev>formData.N)}\">{{formData.N > formData.Nprev ? \\'+\\' : \\'\\'}}{{formData.N - formData.Nprev}}
CURRENCY.VIEW.WOT_RULES_DIVIDER
CURRENCY.VIEW.SIG_QTY_RULE {{formData.sigQty}} CURRENCY.VIEW.MS_WINDOW {{formData.msWindow | formatDuration}} CURRENCY.VIEW.MS_VALIDITY {{formData.msValidity | formatDuration}} CURRENCY.VIEW.SIG_WINDOW {{formData.sigWindow | formatDuration}} CURRENCY.VIEW.SIG_VALIDITY {{formData.sigValidity | formatDuration}} CURRENCY.VIEW.SIG_STOCK {{formData.sigStock}} CURRENCY.VIEW.SIG_PERIOD {{formData.sigPeriod | formatDuration}}
(stepMax)
{{formData.stepMax}}
CURRENCY.VIEW.SENTRIES {{formData.sentries}} CURRENCY.VIEW.SENTRIES_FORMULA {{\\'CURRENCY.VIEW.MATH_CEILING\\'| translate}}( Nt^ (1 / stepMax)) CURRENCY.VIEW.XPERCENT {{formData.xpercent*100| formatNumeral: \\'0,0\\'}} %
CURRENCY.VIEW.DISPLAY_ALL_RULES
');\n$templateCache.put('templates/currency/lookup.html','

CURRENCY.SELECT.CURRENCIES

');\n$templateCache.put('templates/currency/lookup_form.html','
');\n$templateCache.put('templates/currency/modal_license.html','

CURRENCY.LICENSE.TITLE

translate>CURRENCY.LICENSE.NO_LICENSE_FILE

');\n$templateCache.put('templates/currency/popover_actions.html','

COMMON.POPOVER_ACTIONS_TITLE

');\n$templateCache.put('templates/currency/view_currency.html','');\n$templateCache.put('templates/currency/view_currency_lg.html','{{\\'CURRENCY.VIEW.TITLE\\' | translate}} {{formData.currency|abbreviate}}
CURRENCY.VIEW.MONEY_DIVIDER
CURRENCY.VIEW.WOT_DIVIDER
');\n$templateCache.put('templates/help/help.html','

HELP.JOIN.SECTION

LOGIN.SALT
HELP.JOIN.SALT
LOGIN.PASSWORD
HELP.JOIN.PASSWORD
ACCOUNT.NEW.PSEUDO
HELP.JOIN.PSEUDO

HELP.LOGIN.SECTION

HELP.LOGIN.PUBKEY
HELP.LOGIN.PUBKEY_DEF
HELP.LOGIN.METHOD
HELP.LOGIN.METHOD_DEF

HELP.GLOSSARY.SECTION

COMMON.PUBKEY
HELP.GLOSSARY.PUBKEY_DEF
HELP.GLOSSARY.BLOCKCHAIN
HELP.GLOSSARY.BLOCKCHAIN_DEF
COMMON.UNIVERSAL_DIVIDEND
HELP.GLOSSARY.UNIVERSAL_DIVIDEND_DEF
HELP.GLOSSARY.MEMBER
HELP.GLOSSARY.MEMBER_DEF
HELP.GLOSSARY.WOT
HELP.GLOSSARY.WOT_DEF
HELP.GLOSSARY.CURRENCY_RULES
HELP.GLOSSARY.CURRENCY_RULES_DEF
HELP.GLOSSARY.DISTANCE_RULE
HELP.GLOSSARY.DISTANCE_RULE_DEF
');\n$templateCache.put('templates/help/modal_help.html','

HELP.TITLE

');\n$templateCache.put('templates/help/view_help.html','HELP.TITLE

HELP.TITLE

');\n$templateCache.put('templates/home/home.html','
 

HOME.WELCOME HOME.MESSAGE



{{\\'LOGIN.HAVE_ACCOUNT_QUESTION\\'|translate}} COMMON.BTN_LOGIN

{{\\'COMMON.APP_VERSION\\'|translate:{version: config.version} }} | HOME.BTN_ABOUT
 
');\n$templateCache.put('templates/join/modal_choose_account_type.html','

ACCOUNT.NEW.TITLE

ACCOUNT.NEW.INTRO_WARNING_SECURITY
ACCOUNT.NEW.INTRO_WARNING_SECURITY_HELP


ACCOUNT.NEW.SELECT_ACCOUNT_TYPE

ACCOUNT.NEW.MEMBER_ACCOUNT

ACCOUNT.NEW.WALLET_ACCOUNT

ACCOUNT.NEW.WALLET_ACCOUNT_HELP

');\n$templateCache.put('templates/join/modal_join_member.html','

ACCOUNT.NEW.MEMBER_ACCOUNT_TITLE

ACCOUNT.NEW.INFO_LICENSE
ACCOUNT.NEW.PSEUDO_WARNING
ACCOUNT.NEW.PSEUDO
ACCOUNT.NEW.CHECKING_PSEUDO
ACCOUNT.NEW.PSEUDO_AVAILABLE
ACCOUNT.NEW.PSEUDO_NOT_AVAILABLE
ACCOUNT.NEW.SALT_WARNING
LOGIN.SALT
ACCOUNT.NEW.SALT_CONFIRM
COMMON.SHOW_VALUES
ACCOUNT.NEW.PASSWORD_WARNING
LOGIN.PASSWORD
ACCOUNT.NEW.PASSWORD_CONFIRM
COMMON.SHOW_VALUES
ACCOUNT.NEW.LAST_SLIDE_CONGRATULATION

LOGIN.ASSOCIATED_PUBKEY

{{formData.pubkey}}

{{formData.pubkey}}
ERROR.EXISTING_ACCOUNT_REQUEST
');\n$templateCache.put('templates/join/modal_join_wallet.html','

ACCOUNT.NEW.WALLET_ACCOUNT_TITLE

ACCOUNT.NEW.SALT_WARNING
LOGIN.SALT
ACCOUNT.NEW.SALT_CONFIRM
COMMON.SHOW_VALUES
ACCOUNT.NEW.PASSWORD_WARNING
LOGIN.PASSWORD
ACCOUNT.NEW.PASSWORD_CONFIRM
COMMON.SHOW_VALUES
ACCOUNT.NEW.LAST_SLIDE_CONGRATULATION
COMMON.PUBKEY ACCOUNT.NEW.COMPUTING_PUBKEY {{formData.pubkey}}
ERROR.EXISTING_ACCOUNT
ACCOUNT.NEW.COMPUTING_PUBKEY
{{formData.pubkey}}
ERROR.EXISTING_ACCOUNT_REQUEST
');\n$templateCache.put('templates/login/form_file_import.html','

LOGIN.FILE_FORM_HELP

LOGIN.FILE.HELP

COMMON.CHOOSE_FILE

{{formData.file.name}}

COMMON.FILE.DATE {{formData.file.lastModified/1000|formatDate}}

COMMON.FILE.SIZE {{formData.file.size|formatInteger}} Ko

COMMON.PUBKEY

COMMON.FILE.VALIDATING

{{formData.file.pubkey}}
{{formData.file.pubkey ? \\'ERROR.AUTH_INVALID_PUBKEY\\' : \\'ERROR.AUTH_INVALID_FILE\\' |translate}}

LOGIN.MEMORIZE_AUTH_FILE
');\n$templateCache.put('templates/login/form_login.html','


{{\\'LOGIN.NO_ACCOUNT_QUESTION\\'|translate}}
LOGIN.CREATE_ACCOUNT

');\n$templateCache.put('templates/login/form_pubkey.html','

LOGIN.PUBKEY_FORM_HELP

COMMON.PUBKEY
');\n$templateCache.put('templates/login/form_scan.html','

COMMON.PUBKEY
{{formData.pubkey}}
');\n$templateCache.put('templates/login/form_scrypt.html','

');\n$templateCache.put('templates/login/form_scrypt_advanced.html','

INFO.FEATURES_NOT_IMPLEMENTED

');\n$templateCache.put('templates/login/item_remember_me.html','
SETTINGS.REMEMBER_ME
');\n$templateCache.put('templates/login/modal_login.html','

');\n$templateCache.put('templates/login/popover_methods.html','

LOGIN.METHOD_POPOVER_TITLE

');\n$templateCache.put('templates/network/item_content_peer.html','

{{:rebind:peer.dns || peer.server}}

{{:locale:\\'NETWORK.VIEW.PRIVATE_ACCESS\\'|translate}}

{{:rebind:peer.pubkey|formatPubkey}} {{:rebind:peer.name || peer.uid}} {{:rebind:peer.dns && (\\' | \\' + peer.server) + (peer.bma.path||\\'\\') }}

SSL BMA WS2P

{{:rebind:peer.difficulty||\\'?\\'}} PEER.MIRROR

{{:rebind: peer.software !== \\'duniter\\' ? peer.software : \\'\\'}} {{:rebind: peer.version ? (\\'v\\'+peer.version) : \\'\\'}}

{{:locale:!expertMode ? (\\'COMMON.BLOCK\\'|translate) : \\'\\' }} {{:rebind:(peer.currentNumber || peer.blockNumber) | formatInteger}}   {{:rebind:peer.consensusBlockDelta|formatDurationTime}}
');\n$templateCache.put('templates/network/items_peers.html','');\n$templateCache.put('templates/network/lookup_popover_actions.html','

PEER.POPOVER_FILTER_TITLE

');\n$templateCache.put('templates/network/modal_network.html','

PEER.PEER_LIST

PEER.MEMBER_PEERS PEER.MIRROR_PEERS PEER.ALL_PEERS ({{search.results.length}})

');\n$templateCache.put('templates/network/popover_endpoints.html','
{{titleKey | translate:titleValues }}
{{item.label | translate}}
{{item.value}}
');\n$templateCache.put('templates/network/popover_network.html','
{{\\'MENU.NETWORK\\'|translate}}
');\n$templateCache.put('templates/network/popover_peer_info.html','
{{\\'PEER.VIEW.TITLE\\'|translate}}
{{\\'NETWORK.VIEW.SOFTWARE\\'|translate}}
{{formData.software}} v{{:rebind:formData.version}}
{{\\'NETWORK.VIEW.ENDPOINTS.BMAS\\'|translate}}
COMMON.BTN_YES
COMMON.BTN_NO
{{\\'BLOCKCHAIN.VIEW.TITLE_CURRENT\\'|translate}}
{{:rebind:formData.number | formatInteger}}
{{\\'CURRENCY.VIEW.MEDIAN_TIME\\'|translate}}
{{:rebind:formData.medianTime | medianDate}}
{{\\'CURRENCY.VIEW.POW_MIN\\'|translate}}
{{:rebind:formData.powMin | formatInteger}}
');\n$templateCache.put('templates/network/view_network.html','MENU.NETWORK');\n$templateCache.put('templates/network/view_peer.html','PEER.VIEW.TITLE
 

PEER.VIEW.TITLE {{node.host}}

{{node.bma.dns || node.server}} SSL ({{\\'PEER.MIRROR\\'|translate}})

{{\\'PEER.VIEW.OWNER\\'|translate}} {{node.name || node.uid}} ({{node.uid}}) {{node.pubkey|formatPubkey}} ({{node.name}})

{{\\'PEER.VIEW.SHOW_RAW_PEERING\\'|translate}} | PEER.VIEW.SHOW_RAW_CURRENT_BLOCK

PEER.VIEW.GENERAL_DIVIDER
COMMON.PUBKEY

{{node.pubkey}}

BLOCKCHAIN.VIEW.TITLE_CURRENT
{{current.number|formatInteger}}
PEER.VIEW.LAST_BLOCKS
PEER.VIEW.KNOWN_PEERS
{{\\'NETWORK.INFO.ONLY_SSL_PEERS\\'|translate}}
 
');\n$templateCache.put('templates/settings/popover_actions.html','

COMMON.POPOVER_ACTIONS_TITLE

');\n$templateCache.put('templates/settings/popup_node.html','
{{\\'SETTINGS.POPUP_PEER.USE_SSL\\' | translate}}

{{\\'SETTINGS.POPUP_PEER.BTN_SHOW_LIST\\' | translate}}
');\n$templateCache.put('templates/settings/settings.html','SETTINGS.TITLE
SETTINGS.DISPLAY_DIVIDER
{{\\'COMMON.BTN_RELATIVE_UNIT\\' | translate}}
SETTINGS.STORAGE_DIVIDER
{{\\'SETTINGS.USE_LOCAL_STORAGE\\' | translate}}

{{\\'SETTINGS.AUTHENTICATION_SETTINGS\\' | translate}}
{{\\'SETTINGS.REMEMBER_ME\\' | translate}}

SETTINGS.KEYRING_FILE

{{formData.keyringFile}}
{{\\'SETTINGS.WALLETS_SETTINGS\\' | translate}}
SETTINGS.USE_WALLETS_ENCRYPTION

SETTINGS.HISTORY_SETTINGS
SETTINGS.DISPLAY_UD_HISTORY
SETTINGS.TX_HISTORY_AUTO_REFRESH

SETTINGS.NETWORK_SETTINGS
SETTINGS.PEER

{{bma.server}}
{{bma.server}}
SETTINGS.PEER
SETTINGS.PEER_SHORT

{{bma.server}}
{{bma.server}}

SETTINGS.PLUGINS_SETTINGS
');\n$templateCache.put('templates/wallet/item_tx.html',' ');\n$templateCache.put('templates/wallet/item_ud.html','
COMMON.UNIVERSAL_DIVIDEND

{{::tx.time | medianFromNowAndDate}}

()
');\n$templateCache.put('templates/wallet/modal_security.html','

ACCOUNT.SECURITY.TITLE

ACCOUNT.SECURITY.RECOVER_ID

ACCOUNT.SECURITY.RECOVER_ID_HELP

ACCOUNT.SECURITY.REVOCATION_WITH_FILE

ACCOUNT.SECURITY.REVOCATION_WITH_FILE_DESCRIPTION

ACCOUNT.SECURITY.SAVE_ID

ACCOUNT.SECURITY.SAVE_ID_HELP

ACCOUNT.SECURITY.GENERATE_KEYFILE

ACCOUNT.SECURITY.GENERATE_KEYFILE_HELP

ACCOUNT.SECURITY.DOWNLOAD_REVOKE

ACCOUNT.SECURITY.DOWNLOAD_REVOKE_HELP

ACCOUNT.SECURITY.SEND_IDENTITY

ACCOUNT.SECURITY.MEMBERSHIP_IN

ACCOUNT.SECURITY.REVOCATION_WALLET

ACCOUNT.SECURITY.REVOCATION_WALLET_HELP

');\n$templateCache.put('templates/wallet/modal_transfer.html','

TRANSFER.MODAL.TITLE

');\n$templateCache.put('templates/wallet/new_transfer.html','TRANSFER.TITLE
 

{{(formData.all ? \\'TRANSFER.SUB_TITLE_ALL\\' : \\'TRANSFER.SUB_TITLE\\')|translate}}

 

 
');\n$templateCache.put('templates/wallet/popover_actions.html','

COMMON.POPOVER_ACTIONS_TITLE

');\n$templateCache.put('templates/wallet/popover_unit.html','');\n$templateCache.put('templates/wallet/popup_register.html','
');\n$templateCache.put('templates/wallet/transfer_form.html','
TRANSFER.TO {{destUid}}   {{formData.destPub | formatPubkey}}
TRANSFER.FROM 0 && (!form.amount.$error.max)) }\"> {{walletData.pubkey| formatPubkey}}   {{walletData.name||walletData.uid}}  
TRANSFER.AMOUNT ()
 
TRANSFER.REST()TRANSFER.REST_TO {{restUid}}   {{formData.restPub | formatPubkey}}

TRANSFER.WARN_COMMENT_IS_PUBLIC

TRANSFER.WARN_COMMENT_IS_PUBLIC

');\n$templateCache.put('templates/wallet/tx_locked_outputs_popover.html','

ACCOUNT.LOCKED_OUTPUTS_POPOVER.TITLE

ACCOUNT.LOCKED_OUTPUTS_POPOVER.DESCRIPTION

1\" class=\"item item-text-wrap no-border\">

ACCOUNT.LOCKED_OUTPUTS_POPOVER.DESCRIPTION_MANY

1\" translate>ACCOUNT.LOCKED_OUTPUTS_POPOVER.LOCKED_AMOUNT

1\" class=\"badge item-note\" ng-class=\"{\\'badge-balanced\\': output.amount > 0}\">
1}\" ng-style=\"::condition.style\">{{::\\'BLOCKCHAIN.VIEW.TX_OUTPUT_OPERATOR.\\'+condition.operator|translate}} 
{{::condition.value|formatDuration}}
{{::condition.value|medianDate}}
');\n$templateCache.put('templates/wallet/view_wallet.html','
  

 
WOT.GENERAL_DIVIDER
{{:locale:\\'COMMON.PUBKEY\\'|translate}}

{{:rebind:formData.pubkey}}

COMMON.UID
WOT.REGISTERED_SINCE {{:rebind:formData.sigDate | medianDate}}
{{:rebind:formData.uid}}
{{:locale:\\'ACCOUNT.CERTIFICATION_COUNT\\'|translate}} WOT.GIVEN_CERTIFICATIONS.SENT WOT.ACCOUNT_OPERATIONS {{:locale:\\'ACCOUNT.EVENTS\\' | translate}}
 
');\n$templateCache.put('templates/wallet/view_wallet_tx.html','MENU.TRANSACTIONS
  
 
{{:locale:\\'ACCOUNT.ERROR_TX\\'|translate}}
{{formData.tx.errors.length}}
{{:locale:\\'ACCOUNT.PENDING_TX\\'|translate}}
{{:locale:\\'ACCOUNT.VALIDATING_TX\\'|translate}}
{{:locale:\\'ACCOUNT.LAST_TX\\'|translate}}   {{:locale:\\'ACCOUNT.NO_TX\\'|translate}}
 
');\n$templateCache.put('templates/wallet/view_wallet_tx_error.html','
 
{{:locale:\\'ACCOUNT.PENDING_TX_RECEIVED\\'|translate}}
({{$root.currency.name | abbreviate}}) ({{\\'COMMON.UD\\' | translate}}{{$root.currency.name | abbreviate}})
{{:locale:\\'ACCOUNT.NO_TX\\'|translate}}
{{:locale:\\'ACCOUNT.ERROR_TX_SENT\\'|translate}}
({{$root.currency.name | abbreviate}}) ({{\\'COMMON.UD\\' | translate}}{{$root.currency.name | abbreviate}})
{{:locale:\\'ACCOUNT.NO_TX\\'|translate}}
 
');\n$templateCache.put('templates/wot/item_certification.html','

{{::cert.name||cert.uid}}

{{::cert.pubkey | formatPubkey}} | {{::cert.time|medianDate}} | {{::cert.pending ? \\'WOT.SIGNED_ON_BLOCK\\' : \\'WOT.WRITTEN_ON_BLOCK\\' | translate:cert}}

{{::cert.name||cert.uid}} {{::cert.pubkey | formatPubkey}}

{{::\\'WOT.NOT_MEMBER_PARENTHESIS\\'|translate}}

{{::cert.pubkey | formatPubkey}} | {{::cert.time|medianDate}} | {{::cert.pending ? \\'WOT.SIGNED_ON_BLOCK\\' : \\'WOT.WRITTEN_ON_BLOCK\\' | translate:cert}}

{{::cert.expiresIn | formatDurationTo}}
{{::\\'WOT.EXPIRED\\' | translate}}
');\n$templateCache.put('templates/wot/item_content_identity.html','

{{::item.pubkey|formatPubkey}}

{{::\\'WOT.LOOKUP.REGISTERED\\' | translate:item }}

{{::\\'WOT.LOOKUP.MEMBER_FROM\\' | translate:item}}

{{::item.uid}}  {{::item.pubkey | formatPubkey}} WOT.NOT_MEMBER_PARENTHESIS WOT.IDENTITY_REVOKED_PARENTHESIS

#

');\n$templateCache.put('templates/wot/items_given_certifications.html','
WOT.GIVEN_CERTIFICATIONS.SUMMARY
WOT.GIVEN_CERTIFICATIONS.SENT
WOT.GIVEN_CERTIFICATIONS.ERROR {{formData.given_cert_error.length}}
WOT.GIVEN_CERTIFICATIONS.PENDING_LIST
WOT.NOT_WRITTEN_EXPIRE_IN
WOT.GIVEN_CERTIFICATIONS.LIST
WOT.EXPIRE_IN
WOT.NO_GIVEN_CERTIFICATION
');\n$templateCache.put('templates/wot/items_received_certifications.html','
WOT.CERTIFICATIONS.SUMMARY
WOT.CERTIFICATIONS.RECEIVED

WOT.CERTIFICATIONS.SENTRY_MEMBER

WOT.CERTIFICATIONS.ERROR {{formData.received_cert_error.length}}
WOT.CERTIFICATIONS.PENDING_LIST
WOT.NOT_WRITTEN_EXPIRE_IN
WOT.CERTIFICATIONS.LIST
WOT.EXPIRE_IN
WOT.NO_CERTIFICATION
');\n$templateCache.put('templates/wot/lookup.html','');\n$templateCache.put('templates/wot/lookup_form.html','
{{::parameters.help|translate}}
  

WOT.LOOKUP.NEWCOMERS

{{\\'WOT.LOOKUP.NEWCOMERS_COUNT\\'|translate:{count: search.total} }}

WOT.LOOKUP.PENDING

{{\\'WOT.LOOKUP.PENDING_COUNT\\'|translate:{count: search.total} }}

COMMON.RESULTS_LIST ({{search.total}})

{{\\'WOT.LOOKUP.BTN_NEWCOMERS\\' | translate}} {{\\'WOT.LOOKUP.BTN_PENDING\\' | translate}} {{\\'MENU.WALLETS\\' | translate}} 

WOT.SEARCH_INIT_PHASE_WARNING

COMMON.SEARCH_NO_RESULT WOT.LOOKUP.NO_PENDING WOT.LOOKUP.NO_NEWCOMERS
{{::(\\'WOT.SEARCH.DIVIDER_\\' + item.index)|upper|translate}}
');\n$templateCache.put('templates/wot/lookup_lg.html','{{\\'MENU.WOT\\' | translate}}');\n$templateCache.put('templates/wot/lookup_popover_actions.html','

COMMON.POPOVER_FILTER_TITLE

');\n$templateCache.put('templates/wot/modal_lookup.html','

{{::parameters.title?parameters.title:\\'WOT.MODAL.TITLE\\'|translate}}

');\n$templateCache.put('templates/wot/modal_select_pubkey_identity.html','

ACCOUNT.SELECT_IDENTITY_MODAL.TITLE

{{item.uid}}

{{::item.pubkey | formatPubkey}} WOT.NOT_MEMBER_PARENTHESIS WOT.IDENTITY_REVOKED_PARENTHESIS ERROR.WOT_PENDING_INVALID_BLOCK_HASH

WOT.REGISTERED_SINCE {{::item.meta.time|medianDate}}

ACCOUNT.CERTIFICATION_COUNT
');\n$templateCache.put('templates/wot/view_certifications.html','{{::formData.name||formData.uid}}
');\n$templateCache.put('templates/wot/view_identity.html','

{{::formData.name}}

{{:rebind:formData.uid}}

{{:rebind:formData.pubkey | formatPubkey}}

WOT.IDENTITY_REVOKED_PARENTHESISWOT.MEMBER_PENDING_REVOCATION_PARENTHESIS

 
WOT.GENERAL_DIVIDER COMMON.PUBKEY

{{:rebind:formData.pubkey}}

WOT.NOT_MEMBER_ACCOUNT

WOT.NOT_MEMBER_ACCOUNT_HELP

COMMON.UID
WOT.REGISTERED_SINCE {{:rebind:formData.sigDate|medianDate}}
{{:rebind:formData.uid}}
ACCOUNT.CERTIFICATION_COUNT WOT.GIVEN_CERTIFICATIONS.SENT WOT.ACCOUNT_OPERATIONS
 
');\n$templateCache.put('templates/wot/view_identity_tx.html','{{formData.name || formData.uid}} {{formData.pubkey|formatPubkey}} {{\\'WOT.OPERATIONS.TITLE\\'|translate: {uid: formData.name || formData.uid} }} {{formData.pubkey|formatPubkey}} {{\\'WOT.OPERATIONS.TITLE\\'|translate}}
 
{{:locale:\\'ACCOUNT.BALANCE_ACCOUNT\\'|translate}}
0 }\" ng-bind-html=\":balance:formData.balance|formatAmount:{currency: $root.currency.name}\">
()
{{:locale:\\'ACCOUNT.ERROR_TX\\'|translate}}
{{formData.tx.errors.length}}
{{:locale:\\'ACCOUNT.PENDING_TX\\'|translate}}
{{:locale:\\'ACCOUNT.VALIDATING_TX\\'|translate}}
{{:locale:\\'ACCOUNT.LAST_TX\\'|translate}}  
 
');\n$templateCache.put('templates/currency/tabs/tab_blocks.html','
BLOCKCHAIN.LOOKUP.LAST_BLOCKS
');\n$templateCache.put('templates/currency/tabs/tab_network.html','
');\n$templateCache.put('templates/currency/tabs/tab_parameters.html','
');\n$templateCache.put('templates/currency/tabs/tab_wot.html','
');\n$templateCache.put('templates/wallet/list/item_wallet.html','

{{::walletData.pubkey|formatPubkey}}

{{::walletData.uid}}  {{::walletData.pubkey | formatPubkey}} WOT.NOT_MEMBER_PARENTHESIS

0) }\">
');\n$templateCache.put('templates/wallet/list/item_wallet_light.html','

{{::walletData.localName||walletData.name||walletData.uid}}{{::walletData.pubkey|formatPubkey}}

{{::walletData.uid}}  {{::walletData.pubkey | formatPubkey}} WOT.NOT_MEMBER_PARENTHESIS

0) }\">
');\n$templateCache.put('templates/wallet/list/modal_import_file.html','

ACCOUNT.WALLET_LIST.IMPORT_MODAL.TITLE

ACCOUNT.WALLET_LIST.IMPORT_MODAL.HELP

COMMON.CHOOSE_FILE

{{fileData.name}}

COMMON.FILE.DATE {{fileData.lastModified/1000|formatDate}}

COMMON.FILE.SIZE {{fileData.size|formatInteger}} Ko

COMMON.FILE.VALIDATING


{{\\'ACCOUNT.WALLET_LIST.IMPORT_MODAL.NO_NEW_WALLET\\' |translate}}

{{\\'ERROR.INVALID_FILE_FORMAT\\' |translate}}

');\n$templateCache.put('templates/wallet/list/modal_wallets.html','

ACCOUNT.SELECT_WALLET_MODAL.TITLE

{{:locale:\\'ACCOUNT.WALLET_LIST.NO_WALLET\\'|translate}}
');\n$templateCache.put('templates/wallet/list/popover_actions.html','

COMMON.POPOVER_ACTIONS_TITLE

');\n$templateCache.put('templates/wallet/list/popover_wallets.html','
ACCOUNT.SELECT_WALLET_MODAL.TITLE
{{:locale:\\'ACCOUNT.WALLET_LIST.NO_WALLET\\'|translate}}
');\n$templateCache.put('templates/wallet/list/popup_edit_name.html','
');\n$templateCache.put('templates/wallet/list/view_wallets.html','

ACCOUNT.WALLET_LIST.TITLE (ACCOUNT.WALLET_LIST.TOTAL_DOTS  )

{{:locale:\\'ACCOUNT.WALLET_LIST.NO_WALLET\\'|translate}}
');\n$templateCache.put('templates/wallet/slides/slides_generate_keyfile.html','

ACCOUNT.SECURITY.GENERATE_KEYFILE

ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT

ACCOUNT.SECURITY.KEYFILE.PUBSEC_FORMAT_HELP

ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT

ACCOUNT.SECURITY.KEYFILE.WIF_FORMAT_HELP

ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT

ACCOUNT.SECURITY.KEYFILE.EWIF_FORMAT_HELP

');\n$templateCache.put('templates/wallet/slides/slides_recoverID_1.html','

ACCOUNT.SECURITY.RECOVER_ID_SELECT_FILE

COMMON.CHOOSE_FILE

{{fileData.name}}
{{fileData.size}} Ko
');\n$templateCache.put('templates/wallet/slides/slides_recoverID_2.html','

ACCOUNT.SECURITY.RECOVER_ID

');\n$templateCache.put('templates/wallet/slides/slides_recoverID_3.html','

ACCOUNT.SECURITY.RECOVER_ID

{{\\'LOGIN.SALT\\' | translate}} : {{recover.salt}}
{{\\'LOGIN.PASSWORD\\' | translate}} : {{recover.pwd}}
');\n$templateCache.put('templates/wallet/slides/slides_revocation_file.html','

ACCOUNT.SECURITY.REVOCATION_WITH_FILE_HELP

COMMON.CHOOSE_FILE

{{fileData.name}}

COMMON.FILE.DATE {{fileData.lastModified/1000|formatDate}}

COMMON.FILE.SIZE {{fileData.size|formatInteger}} Ko


{{revocationError|translate}}

');\n$templateCache.put('templates/wallet/slides/slides_saveID_1.html','

ACCOUNT.SECURITY.SAVE_ID

{{question.value | translate}}
');\n$templateCache.put('templates/wallet/slides/slides_saveID_2.html','

ACCOUNT.SECURITY.SAVE_ID

');\n$templateCache.put('templates/wot/tabs/tab_given_certifications.html','
');\n$templateCache.put('templates/wot/tabs/tab_lookup.html','');\n$templateCache.put('templates/wot/tabs/tab_received_certifications.html','
');}]);","angular.module(\"cesium.translations\", []).config([\"$translateProvider\", function($translateProvider) {\n$translateProvider.translations(\"en-GB\", {\n \"COMMON\": {\n \"APP_NAME\": \"Cesium\",\n \"APP_VERSION\": \"v{{version}}\",\n \"APP_BUILD\": \"build {{build}}\",\n \"PUBKEY\": \"Public key\",\n \"MEMBER\": \"Member\",\n \"BLOCK\" : \"Block\",\n \"BTN_OK\": \"OK\",\n \"BTN_YES\": \"Yes\",\n \"BTN_NO\": \"No\",\n \"BTN_SEND\": \"Send\",\n \"BTN_SEND_MONEY\": \"Transfer money\",\n \"BTN_SEND_MONEY_SHORT\": \"Transfer\",\n \"BTN_SAVE\": \"Save\",\n \"BTN_YES_SAVE\": \"Yes, Save\",\n \"BTN_YES_CONTINUE\": \"Yes, Continue\",\n \"BTN_SHOW\": \"Show\",\n \"BTN_SHOW_PUBKEY\": \"Show key\",\n \"BTN_RELATIVE_UNIT\": \"Display amounts in UD?\",\n \"BTN_BACK\": \"Back\",\n \"BTN_NEXT\": \"Next\",\n \"BTN_IMPORT\": \"Import\",\n \"BTN_CANCEL\": \"Cancel\",\n \"BTN_CLOSE\": \"Close\",\n \"BTN_LATER\": \"Later\",\n \"BTN_LOGIN\": \"Sign In\",\n \"BTN_LOGOUT\": \"Logout\",\n \"BTN_ADD_ACCOUNT\": \"New Account\",\n \"BTN_SHARE\": \"Share\",\n \"BTN_EDIT\": \"Edit\",\n \"BTN_DELETE\": \"Delete\",\n \"BTN_ADD\": \"Add\",\n \"BTN_SEARCH\": \"Search\",\n \"BTN_REFRESH\": \"Refresh\",\n \"BTN_RETRY\": \"Retry\",\n \"BTN_START\": \"Start\",\n \"BTN_CONTINUE\": \"Continue\",\n \"BTN_CREATE\": \"Create\",\n \"BTN_UNDERSTOOD\": \"I understand\",\n \"BTN_OPTIONS\": \"Options\",\n \"BTN_HELP_TOUR\": \"Features tour\",\n \"BTN_HELP_TOUR_SCREEN\": \"Discover this screen\",\n \"BTN_DOWNLOAD\": \"Download\",\n \"BTN_DOWNLOAD_ACCOUNT_STATEMENT\": \"Download account statement\",\n \"BTN_MODIFY\": \"Modify\",\n \"CHOOSE_FILE\": \"Drag your file
or click to select\",\n \"DAYS\": \"days\",\n \"NO_ACCOUNT_QUESTION\": \"Not a member yet? Register now!\",\n \"SEARCH_NO_RESULT\": \"No result found\",\n \"LOADING\": \"Loading...\",\n \"LOADING_WAIT\": \"Loading...
(Waiting for node availability)\",\n \"SEARCHING\": \"Searching...\",\n \"FROM\": \"From\",\n \"TO\": \"To\",\n \"COPY\": \"Copy\",\n \"LANGUAGE\": \"Language\",\n \"UNIVERSAL_DIVIDEND\": \"Universal dividend\",\n \"UD\": \"UD\",\n \"DATE_PATTERN\": \"DD/MM/YYYY HH:mm\",\n \"DATE_FILE_PATTERN\": \"YYYY-MM-DD\",\n \"DATE_SHORT_PATTERN\": \"DD/MM/YY\",\n \"DATE_MONTH_YEAR_PATTERN\": \"MM/YYYY\",\n \"EMPTY_PARENTHESIS\": \"(empty)\",\n \"UID\": \"Pseudonym\",\n \"ENABLE\": \"Enabled\",\n \"DISABLE\": \"Disabled\",\n \"RESULTS_LIST\": \"Results:\",\n \"RESULTS_COUNT\": \"{{count}} results\",\n \"EXECUTION_TIME\": \"executed in {{duration|formatDurationMs}}\",\n \"SHOW_VALUES\": \"Display values openly?\",\n \"POPOVER_ACTIONS_TITLE\": \"Options\",\n \"POPOVER_FILTER_TITLE\": \"Filters\",\n \"SHOW_MORE\": \"Show more\",\n \"SHOW_MORE_COUNT\": \"(current limit at {{limit}})\",\n \"POPOVER_SHARE\": {\n \"TITLE\": \"Share\",\n \"SHARE_ON_TWITTER\": \"Share on Twitter\",\n \"SHARE_ON_FACEBOOK\": \"Share on Facebook\",\n \"SHARE_ON_DIASPORA\": \"Share on Diaspora*\",\n \"SHARE_ON_GOOGLEPLUS\": \"Share on Google+\"\n },\n \"FILE\": {\n \"DATE\" : \"Date:\",\n \"TYPE\" : \"Type:\",\n \"SIZE\": \"Size:\",\n \"VALIDATING\": \"Validating...\"\n }\n },\n \"SYSTEM\": {\n \"PICTURE_CHOOSE_TYPE\": \"Choose source:\",\n \"BTN_PICTURE_GALLERY\": \"Gallery\",\n \"BTN_PICTURE_CAMERA\": \"Camera\"\n },\n \"MENU\": {\n \"HOME\": \"Home\",\n \"WOT\": \"Registry\",\n \"CURRENCY\": \"Currency\",\n \"ACCOUNT\": \"My Account\",\n \"WALLETS\": \"My wallets\",\n \"SETTINGS\": \"Settings\",\n \"NETWORK\": \"Network\",\n \"TRANSACTIONS\": \"My transactions\"\n },\n \"ABOUT\": {\n \"TITLE\": \"About\",\n \"LICENSE\": \"Free/libre software (License GNU AGPLv3).\",\n \"LATEST_RELEASE\": \"There is a newer version of {{'COMMON.APP_NAME' | translate}} (v{{version}})\",\n \"PLEASE_UPDATE\": \"Please update {{'COMMON.APP_NAME' | translate}} (latest version: v{{version}})\",\n \"CODE\": \"Source code:\",\n \"OFFICIAL_WEB_SITE\": \"Official web site:\",\n \"DEVELOPERS\": \"Developers:\",\n \"FORUM\": \"Forum:\",\n \"PLEASE_REPORT_ISSUE\": \"Please report any issue to us!\",\n \"REPORT_ISSUE\": \"Report an issue\",\n \"BTN_OPEN_DEV_WINDOW\": \"Open the debug window\"\n },\n \"HOME\": {\n \"TITLE\": \"Cesium\",\n \"WELCOME\": \"Welcome to the Cesium Application!\",\n \"MESSAGE\": \"Receive and send libre currency {{currency|abbreviate}}\",\n \"BTN_CURRENCY\": \"Explore currency\",\n \"BTN_ABOUT\": \"about\",\n \"BTN_HELP\": \"Help\",\n \"REPORT_ISSUE\": \"Report an issue\",\n \"NOT_YOUR_ACCOUNT_QUESTION\" : \"You do not own the account {{pubkey|formatPubkey}}?\",\n \"BTN_CHANGE_ACCOUNT\": \"Disconnect this account\",\n \"CONNECTION_ERROR\": \"Peer {{server}} unreachable or invalid address.

Check your Internet connection, or change node in the settings.\",\n \"SHOW_ALL_FEED\": \"Show all\",\n \"READ_MORE\": \"Read more\",\n \"FEED_SOURCE\": \"Source\"\n },\n \"SETTINGS\": {\n \"TITLE\": \"Settings\",\n \"DISPLAY_DIVIDER\": \"Display\",\n \"STORAGE_DIVIDER\": \"Storage\",\n \"NETWORK_SETTINGS\": \"Network\",\n \"PEER\": \"Duniter peer address\",\n \"PEER_SHORT\": \"Peer address\",\n \"PEER_CHANGED_TEMPORARY\": \"Address used temporarily\",\n \"PERSIST_CACHE\": \"Keep navigation data (experimental)\",\n \"PERSIST_CACHE_HELP\": \"Allows faster navigation, locally retaining the data received, for use from one session to another.\",\n \"USE_LOCAL_STORAGE\": \"Enable local storage\",\n \"USE_LOCAL_STORAGE_HELP\": \"Allows you to save your settings\",\n \"WALLETS_SETTINGS\": \"My wallets\",\n \"USE_WALLETS_ENCRYPTION\": \"Secure the list\",\n \"USE_WALLETS_ENCRYPTION_HELP\": \"Enables you to encrypt the list of your wallets. Authentication required to access it.\",\n \"ENABLE_HELPTIP\": \"Enable contextual help tips\",\n \"DISABLE_HELPTIP\": \"Disable contextual help tips\",\n \"ENABLE_UI_EFFECTS\": \"Enable visual effects\",\n \"HISTORY_SETTINGS\": \"Account operations\",\n \"DISPLAY_UD_HISTORY\": \"Display produced dividends?\",\n \"TX_HISTORY_AUTO_REFRESH\": \"Enable automatic refresh?\",\n \"TX_HISTORY_AUTO_REFRESH_HELP\": \"Updates the list of operations to each new block.\",\n \"AUTHENTICATION_SETTINGS\": \"Authentication\",\n \"KEEP_AUTH\": \"Expiration of authentication\",\n \"KEEP_AUTH_SHORT\": \"Expiration\",\n \"KEEP_AUTH_HELP\": \"Define when authentication is cleared from memory.\",\n \"KEEP_AUTH_OPTION\": {\n \"NEVER\": \"After each operation\",\n \"SECONDS\": \"After {{value}}s of inactivity\",\n \"MINUTE\": \"After {{value}}min of inactivity\",\n \"MINUTES\": \"After {{value}}min of inactivity\",\n \"HOUR\": \"After {{value}}h of inactivity\",\n \"ALWAYS\": \"At the end of the session\"\n },\n \"KEYRING_FILE\": \"Keyring file\",\n \"KEYRING_FILE_HELP\": \"Allow auto-connect at startup, or to authenticate (only if \\\"Expiration of authentication\\\" is \\\"at the end of the session\\\"\",\n \"REMEMBER_ME\": \"Remember me ?\",\n \"REMEMBER_ME_HELP\": \"Allows to remain identified from one session to another, keeping the public key locally.\",\n \"PLUGINS_SETTINGS\": \"Extensions\",\n \"BTN_RESET\": \"Restore default values\",\n \"EXPERT_MODE\": \"Enable expert mode\",\n \"EXPERT_MODE_HELP\": \"Allow to see more details\",\n \"BLOCK_VALIDITY_WINDOW\": \"Block uncertainty time\",\n \"BLOCK_VALIDITY_WINDOW_SHORT\": \"Time of uncertainty\",\n \"BLOCK_VALIDITY_WINDOW_HELP\": \"Time to wait before considering an information is validated\",\n \"BLOCK_VALIDITY_OPTION\": {\n \"NONE\": \"No delay\",\n \"N\": \"{{time | formatDuration}} ({{count}} blocks)\"\n },\n \"POPUP_PEER\": {\n \"TITLE\" : \"Duniter peer\",\n \"HOST\" : \"Address\",\n \"HOST_HELP\": \"Address: server:port\",\n \"USE_SSL\" : \"Secured?\",\n \"USE_SSL_HELP\" : \"(SSL Encryption)\",\n \"BTN_SHOW_LIST\" : \"Peer's list\"\n }\n },\n \"BLOCKCHAIN\": {\n \"HASH\": \"Hash: {{hash}}\",\n \"VIEW\": {\n \"HEADER_TITLE\": \"Block #{{number}}-{{hash|formatHash}}\",\n \"TITLE_CURRENT\": \"Current block\",\n \"TITLE\": \"Block #{{number|formatInteger}}\",\n \"COMPUTED_BY\": \"Computed by\",\n \"SHOW_RAW\": \"Show raw data\",\n \"TECHNICAL_DIVIDER\": \"Technical informations\",\n \"VERSION\": \"Format version\",\n \"HASH\": \"Computed hash\",\n \"UNIVERSAL_DIVIDEND_HELP\": \"Money co-produced by each of the {{membersCount}} members\",\n \"EMPTY\": \"Aucune donnée dans ce bloc\",\n \"POW_MIN\": \"Minimal difficulty\",\n \"POW_MIN_HELP\": \"Difficulty imposed in calculating hash\",\n \"DATA_DIVIDER\": \"Data\",\n \"IDENTITIES_COUNT\": \"New identities\",\n \"JOINERS_COUNT\": \"Joiners\",\n \"ACTIVES_COUNT\": \"Renewals\",\n \"ACTIVES_COUNT_HELP\": \"Members having renewed their membership\",\n \"LEAVERS_COUNT\": \"Leavers\",\n \"LEAVERS_COUNT_HELP\": \"Members that now refused certification\",\n \"EXCLUDED_COUNT\": \"Excluded members\",\n \"EXCLUDED_COUNT_HELP\": \"Old members, excluded because missing membreship renewal or certifications\",\n \"REVOKED_COUNT\": \"Revoked identities\",\n \"REVOKED_COUNT_HELP\": \"These accounts may no longer be member\",\n \"TX_COUNT\": \"Transactions\",\n \"CERT_COUNT\": \"Certifications\",\n \"TX_TO_HIMSELF\": \"Change\",\n \"TX_OUTPUT_UNLOCK_CONDITIONS\": \"Unlock conditions\",\n \"TX_OUTPUT_OPERATOR\": {\n \"AND\": \"and\",\n \"OR\": \"or\"\n },\n \"TX_OUTPUT_FUNCTION\": {\n \"SIG\": \"Sign of the public key\",\n \"XHX\": \"Password, including SHA256 =\",\n \"CSV\": \"Blocked during\",\n \"CLTV\": \"Bloqué until\"\n }\n },\n \"LOOKUP\": {\n \"TITLE\": \"Blocks\",\n \"NO_BLOCK\": \"No bloc\",\n \"LAST_BLOCKS\": \"Last blocks:\",\n \"BTN_COMPACT\": \"Compact\"\n }\n },\n \"CURRENCY\": {\n \"VIEW\": {\n \"TITLE\": \"Currency\",\n \"TAB_CURRENCY\": \"Currency\",\n \"TAB_WOT\": \"Web of trust\",\n \"TAB_NETWORK\": \"Network\",\n \"TAB_BLOCKS\": \"Blocks\",\n \"CURRENCY_SHORT_DESCRIPTION\": \"{{currency|capitalize}} is a libre money, started {{firstBlockTime | formatFromNow}}. It currently counts {{N}} members , who produce and collect a Universal Dividend (DU), each {{dt | formatPeriod}}.\",\n \"NETWORK_RULES_DIVIDER\": \"Network rules\",\n \"CURRENCY_NAME\": \"Currency name\",\n \"MEMBERS\": \"Members count\",\n \"MEMBERS_VARIATION\": \"Variation since {{duration|formatDuration}} (since last UD)\",\n \"MONEY_DIVIDER\": \"Money\",\n \"MASS\": \"Monetary mass\",\n \"SHARE\": \"Money share\",\n \"UD\": \"Universal Dividend\",\n \"C_ACTUAL\": \"Current growth\",\n \"MEDIAN_TIME\": \"Current blockchain time\",\n \"POW_MIN\": \"Common difficulty\",\n \"MONEY_RULES_DIVIDER\": \"Rules of currency\",\n \"C_RULE\": \"Theoretical growth target\",\n \"UD_RULE\": \"Universal dividend (formula)\",\n \"DT_REEVAL\": \"Period between two re-evaluation of the UD\",\n \"REEVAL_SYMBOL\": \"reeval\",\n \"DT_REEVAL_VALUE\": \"Every {{dtReeval|formatDuration}} ({{dtReeval/86400}} {{'COMMON.DAYS'|translate}})\",\n \"UD_REEVAL_TIME0\": \"Date of first reevaluation of the UD\",\n \"SIG_QTY_RULE\": \"Required number of certifications to become a member\",\n \"SIG_STOCK\": \"Maximum number of certifications sent by a member\",\n \"SIG_PERIOD\": \"Minimum delay between 2 certifications sent by one and the same issuer.\",\n \"SIG_WINDOW\": \"Maximum delay before a certification will be treated\",\n \"SIG_VALIDITY\": \"Lifetime of a certification that has been treated\",\n \"MS_WINDOW\": \"Maximum delay before a pending membership will be treated\",\n \"MS_VALIDITY\": \"Lifetime of a membership that has been treated\",\n \"STEP_MAX\": \"Maximum distance between a newcomer and each referring members.\",\n \"WOT_RULES_DIVIDER\": \"Rules for web of trust\",\n \"SENTRIES\": \"Required number of certifications (given and received) to become a referring member\",\n \"SENTRIES_FORMULA\": \"Required number of certifications to become a referring member (formula)\",\n \"XPERCENT\":\"Minimum percent of referring member to reach to match the distance rule\",\n \"AVG_GEN_TIME\": \"The average time between 2 blocks\",\n \"CURRENT\": \"current\",\n \"MATH_CEILING\": \"CEILING\",\n \"DISPLAY_ALL_RULES\": \"Display all rules?\",\n \"BTN_SHOW_LICENSE\": \"Show license\",\n \"WOT_DIVIDER\": \"Web of trust\"\n },\n \"LICENSE\": {\n \"TITLE\": \"Currency license\",\n \"BTN_DOWNLOAD\": \"Download file\",\n \"NO_LICENSE_FILE\": \"License file not found.\"\n }\n },\n \"NETWORK\": {\n \"VIEW\": {\n \"MEDIAN_TIME\": \"Blockchain time\",\n \"LOADING_PEERS\": \"Loading peers...\",\n \"NODE_ADDRESS\": \"Address:\",\n \"SOFTWARE\": \"Software:\",\n \"WARN_PRE_RELEASE\": \"Pre-release (latest stable: {{version}})\",\n \"WARN_NEW_RELEASE\": \"Version {{version}} available\",\n \"WS2PID\": \"Identifier:\",\n \"PRIVATE_ACCESS\": \"Private access\",\n \"POW_PREFIX\": \"Proof of work prefix:\",\n \"ENDPOINTS\": {\n \"BMAS\": \"Secure endpoint (SSL)\",\n \"BMATOR\": \"TOR endpoint\",\n \"WS2P\": \"WS2P endpoint\",\n \"ES_USER_API\": \"Cesium+ data node\"\n }\n },\n \"INFO\": {\n \"ONLY_SSL_PEERS\": \"Non-SSL nodes have a degraded display because Cesium works in HTTPS mode.\"\n }\n },\n \"PEER\": {\n \"PEERS\": \"Peers\",\n \"SIGNED_ON_BLOCK\": \"Signed on block\",\n \"MIRROR\": \"mirror\",\n \"MIRRORS\": \"Mirrors\",\n \"MIRROR_PEERS\": \"Mirror peers\",\n \"PEER_LIST\" : \"Peer's list\",\n \"MEMBERS\" : \"Members\",\n \"MEMBER_PEERS\" : \"Member peers\",\n \"ALL_PEERS\" : \"All peers\",\n \"DIFFICULTY\" : \"Difficulty\",\n \"API\" : \"API\",\n \"CURRENT_BLOCK\" : \"Block #\",\n \"POPOVER_FILTER_TITLE\": \"Filter\",\n \"OFFLINE\": \"Offline\",\n \"OFFLINE_PEERS\": \"Offline peers\",\n \"BTN_SHOW_PEER\": \"Show peer\",\n \"VIEW\": {\n \"TITLE\": \"Peer\",\n \"OWNER\": \"Owned by \",\n \"SHOW_RAW_PEERING\": \"See peering document\",\n \"SHOW_RAW_CURRENT_BLOCK\": \"See current block (raw format)\",\n \"LAST_BLOCKS\": \"Last blocks\",\n \"KNOWN_PEERS\": \"Known peers :\",\n \"GENERAL_DIVIDER\": \"General information\",\n \"ERROR\": {\n \"LOADING_TOR_NODE_ERROR\": \"Could not get peer data, using the TOR network.\",\n \"LOADING_NODE_ERROR\": \"Could not get peer data\"\n }\n }\n },\n \"WOT\": {\n \"SEARCH_HELP\": \"Search (member or public key)\",\n \"SEARCH_INIT_PHASE_WARNING\": \"During the pre-registration phase, the search for pending registrations may be long. Please wait ...\",\n \"REGISTERED_SINCE\": \"Registered on\",\n \"REGISTERED_SINCE_BLOCK\": \"Registered since block #\",\n \"NO_CERTIFICATION\": \"No validated certification\",\n \"NO_GIVEN_CERTIFICATION\": \"No given certification\",\n \"NOT_MEMBER_PARENTHESIS\": \"(non-member)\",\n \"IDENTITY_REVOKED_PARENTHESIS\": \"(identity revoked)\",\n \"MEMBER_PENDING_REVOCATION_PARENTHESIS\": \"(being revoked)\",\n \"EXPIRE_IN\": \"Expires\",\n \"NOT_WRITTEN_EXPIRE_IN\": \"Deadline
treatment\",\n \"EXPIRED\": \"Expired\",\n \"PSEUDO\": \"Pseudonym\",\n \"SIGNED_ON_BLOCK\": \"Emitted on block #{{block}}\",\n \"WRITTEN_ON_BLOCK\": \"Written on block #{{block}}\",\n \"GENERAL_DIVIDER\": \"General information\",\n \"NOT_MEMBER_ACCOUNT\": \"Non-member account\",\n \"NOT_MEMBER_ACCOUNT_HELP\": \"This is a simple wallet, with no pending membership application.\",\n \"TECHNICAL_DIVIDER\": \"Technical data\",\n \"BTN_CERTIFY\": \"Certify\",\n \"BTN_YES_CERTIFY\": \"Yes, certify\",\n \"BTN_SELECT_AND_CERTIFY\": \"New certification\",\n \"ACCOUNT_OPERATIONS\": \"Account operations\",\n \"VIEW\": {\n \"POPOVER_SHARE_TITLE\": \"Identity {{title}}\"\n },\n \"LOOKUP\": {\n \"TITLE\": \"Registry\",\n \"NEWCOMERS\": \"New members:\",\n \"NEWCOMERS_COUNT\": \"{{count}} members\",\n \"PENDING\": \"Pending registrations:\",\n \"PENDING_COUNT\": \"{{count}} pending registrations\",\n \"REGISTERED\": \"Registered {{sigDate | formatFromNow}}\",\n \"MEMBER_FROM\": \"Member since {{memberDate|medianFromNowShort}}\",\n \"BTN_NEWCOMERS\": \"Latest members\",\n \"BTN_PENDING\": \"Pending registrations\",\n \"SHOW_MORE\": \"Show more\",\n \"SHOW_MORE_COUNT\": \"(current limit to {{limit}})\",\n \"NO_PENDING\": \"No pending registrations.\",\n \"NO_NEWCOMERS\": \"No members.\"\n },\n \"CONTACTS\": {\n \"TITLE\": \"Contacts\"\n },\n \"MODAL\": {\n \"TITLE\": \"Search\"\n },\n \"CERTIFICATIONS\": {\n \"TITLE\": \"{{uid}} - Certifications\",\n \"SUMMARY\": \"Received certifications\",\n \"LIST\": \"Details of received certifications\",\n \"PENDING_LIST\": \"Pending certifications\",\n \"RECEIVED\": \"Received certifications\",\n \"RECEIVED_BY\": \"Certifications received by {{uid}}\",\n \"ERROR\": \"Received certifications in error\",\n \"SENTRY_MEMBER\": \"Referring member\"\n },\n \"OPERATIONS\": {\n \"TITLE\": \"{{uid}} - Operations\"\n },\n \"GIVEN_CERTIFICATIONS\": {\n \"TITLE\": \"{{uid}} - Certifications sent\",\n \"SUMMARY\": \"Sent certifications\",\n \"LIST\": \"Details of sent certifications\",\n \"PENDING_LIST\": \"Pending certifications\",\n \"SENT\": \"Sent certifications\",\n \"SENT_BY\": \"Certifications sent by {{uid}}\",\n \"ERROR\": \"Sent certifications with error\"\n }\n },\n \"LOGIN\": {\n \"TITLE\": \" Login\",\n \"SCRYPT_FORM_HELP\": \"Please enter your credentials.
Remember to check the public key for your account.\",\n \"PUBKEY_FORM_HELP\": \"Please enter a public account key:\",\n \"FILE_FORM_HELP\": \"Choose the keychain file to use:\",\n \"SCAN_FORM_HELP\": \"Scan the QR code of a wallet.\",\n \"SALT\": \"Secret identifier\",\n \"SALT_HELP\": \"Secret identifier\",\n \"SHOW_SALT\": \"Display secret identifier?\",\n \"PASSWORD\": \"Password\",\n \"PASSWORD_HELP\": \"Password\",\n \"PUBKEY_HELP\": \"Public key or pseudonym\",\n \"NO_ACCOUNT_QUESTION\": \"Don't have an account yet?\",\n \"HAVE_ACCOUNT_QUESTION\": \"Already have an account ?\",\n \"CREATE_ACCOUNT\": \"Create an account\",\n \"CREATE_FREE_ACCOUNT\": \"Create a free account\",\n \"FORGOTTEN_ID\": \"Forgot password?\",\n \"ASSOCIATED_PUBKEY\": \"Public key :\",\n \"BTN_METHODS\": \"Other methods\",\n \"BTN_METHODS_DOTS\": \"Change method...\",\n \"METHOD_POPOVER_TITLE\": \"Methods\",\n \"MEMORIZE_AUTH_FILE\": \"Memorize this keychain during the navigation session\",\n \"SCRYPT_PARAMETERS\": \"Paramètres (Scrypt) :\",\n \"AUTO_LOGOUT\": {\n \"TITLE\": \"Information\",\n \"MESSAGE\": \" You were logout automatically, due to prolonged inactivity.\",\n \"BTN_RELOGIN\": \"Sign In\",\n \"IDLE_WARNING\": \"You will be logout... {{countdown}}\"\n },\n \"METHOD\": {\n \"SCRYPT_DEFAULT\": \"Secret identifier and password\",\n \"SCRYPT_ADVANCED\": \"Advanced salt\",\n \"FILE\": \"Keychain file\",\n \"PUBKEY\": \"Public key or pseudonym\",\n \"SCAN\": \"Scan a QR code\"\n },\n \"SCRYPT\": {\n \"SIMPLE\": \"Light salt\",\n \"DEFAULT\": \"Standard salt\",\n \"SECURE\": \"Secure salt\",\n \"HARDEST\": \"Hardest salt\",\n \"EXTREME\": \"Extreme salt\",\n \"USER\": \"Personal value\",\n \"N\": \"N (Loop):\",\n \"r\": \"r (RAM):\",\n \"p\": \"p (CPU):\"\n },\n \"FILE\": {\n \"HELP\": \"Expected file format: .dunikey (type PubSec). Other formats are under development (EWIF, WIF).\"\n }\n },\n \"AUTH\": {\n \"TITLE\": \" Authentication\",\n \"BTN_AUTH\": \"Authenticate\",\n \"GENERAL_HELP\": \"Please authenticate yourself:\",\n \"EXPECTED_UID_HELP\": \"Please authenticate to the account {{uid}}:\",\n \"EXPECTED_PUBKEY_HELP\": \"Please authenticate to the wallet {{pubkey|formatPubkey}}:\",\n \"SCAN_FORM_HELP\": \"Scan the QR code of the private key of the wallet.\"\n },\n \"ACCOUNT\": {\n \"TITLE\": \"My Account\",\n \"BALANCE\": \"Balance\",\n \"LAST_TX\": \"Latest validated transactions\",\n \"BALANCE_ACCOUNT\": \"Account balance\",\n \"NO_TX\": \"No transaction\",\n \"SHOW_MORE_TX\": \"Show more\",\n \"SHOW_ALL_TX\": \"Show all\",\n \"TX_FROM_DATE\": \"(current limit to {{fromTime|medianFromNowShort}})\",\n \"PENDING_TX\": \"Pending transactions\",\n \"VALIDATING_TX\": \"Transactions being validated\",\n \"ERROR_TX\": \"Transaction not executed\",\n \"ERROR_TX_SENT\": \"Sent transactions\",\n \"PENDING_TX_RECEIVED\": \"Transactions awaiting receipt\",\n \"EVENTS\": \"Events\",\n \"OUT_DISTANCED\": \"Your current certifications come from a group too isolated from the Web of Trust (WoT): the maximum distance rule is violated.
You must obtain certifications from another area of the Web of Trust, or wait for it to tighten.\",\n \"WAITING_MEMBERSHIP\": \"Membership application sent. Waiting validation.\",\n \"WAITING_CERTIFICATIONS\": \"You need {{needCertificationCount}} certification(s) to become a member and produce the Universal Dividend. Your account is however already operational, to receive and send payments.\",\n \"WAITING_CERTIFICATIONS_HELP\": \"To get your certifications, only request members who know you enough, as required by the currency license that you have accepted.
If you do not know enough members, let them know on the user forum.\",\n \"WILL_MISSING_CERTIFICATIONS\": \"You will lack certifications soon (at least {{willNeedCertificationCount}} more are needed)\",\n \"WILL_NEED_RENEW_MEMBERSHIP\": \"Your membership will expire {{membershipExpiresIn|formatDurationTo}}. Remember to renew your membership before then.\",\n \"NEED_RENEW_MEMBERSHIP\": \"You are no longer a member because your membership has expired. Remember to renew your membership.\",\n \"NEED_RENEW_MEMBERSHIP_AFTER_CANCELLED\": \"You are no longer a member because your membership has been cancelled for lack of certifications. Remember to renew your membership.\",\n \"NO_WAITING_MEMBERSHIP\": \"No membership application pending. If you'd like to become a member, please send the membership application.\",\n \"CERTIFICATION_COUNT\": \"Received certifications\",\n \"CERTIFICATION_COUNT_SHORT\": \"Certifications\",\n \"SIG_STOCK\": \"Stock of certifications to give\",\n \"BTN_RECEIVE_MONEY\": \"Receive\",\n \"BTN_SELECT_ALTERNATIVES_IDENTITIES\": \"Switch to another identity...\",\n \"BTN_FIX_MEMBERSHIP\": \"Resubmit membership request...\",\n \"BTN_MEMBERSHIP_RENEW\": \"Renew membership\",\n \"BTN_MEMBERSHIP_RENEW_DOTS\": \"Renew membership...\",\n \"BTN_MEMBERSHIP_OUT_DOTS\": \"Revoke membership...\",\n \"BTN_SECURITY_DOTS\": \"Sign-in and security...\",\n \"BTN_SHOW_DETAILS\": \"Display technical data\",\n \"LOCKED_OUTPUTS_POPOVER\": {\n \"TITLE\": \"Locked amount\",\n \"DESCRIPTION\": \"Here are the conditions for unlocking this amount:\",\n \"DESCRIPTION_MANY\": \"This transaction consists of several parts, of which the unlock conditions are:\",\n \"LOCKED_AMOUNT\": \"Conditions for the amount:\"\n },\n \"NEW\": {\n \"TITLE\": \"Registration\",\n \"INTRO_WARNING_TIME\": \"Creating an account on {{name|capitalize}} is very simple. Please take sufficient time to do this correctly (not to forget the usernames, passwords, etc.).\",\n \"INTRO_WARNING_SECURITY\": \"Check that the hardware you are currently using (computer, tablet, phone) is secure and trustworthy .\",\n \"INTRO_WARNING_SECURITY_HELP\": \"Up-to-date anti-virus, firewall enabled, session protected by password or pin code...\",\n \"INTRO_HELP\": \"Click {{'COMMON.BTN_START'|translate}} to begin creating an account. You will be guided step by step.\",\n \"REGISTRATION_NODE\": \"Your registration will be registered via the Duniter peer {{server}} node, which will then be distributed to the rest of the currency network.\",\n \"REGISTRATION_NODE_HELP\": \"If you do not trust this peer, please change in the settings of Cesium.\",\n \"SELECT_ACCOUNT_TYPE\": \"Choose the type of account to create:\",\n \"MEMBER_ACCOUNT\": \"Member account\",\n \"MEMBER_ACCOUNT_TITLE\": \"Create a member account\",\n \"MEMBER_ACCOUNT_HELP\": \"If you are not yet registered as an individual (one account possible per individual).\",\n \"WALLET_ACCOUNT\": \"Simple wallet\",\n \"WALLET_ACCOUNT_TITLE\": \"Create a wallet\",\n \"WALLET_ACCOUNT_HELP\": \"If you represent a company, association, etc. or simply need an additional wallet. No universal dividend will be created by this account.\",\n \"SALT_WARNING\": \"Choose a secret identifier.
You need it for each connection to this account.

Make sure to remember this identifier.
If lost, there are no means to retrieve it!\",\n \"PASSWORD_WARNING\": \"Choose a password.
You need it for each connection to this account.

Make sure to remember this password.
If lost, there are no means to retrieve it!\",\n \"PSEUDO_WARNING\": \"Choose a pseudonym.
It may be used by other people to find you more easily.

.Use of commas, spaces and accents is not allowed.