From 5c3ece8713096f022b30bc3f45e2fe14e9e93250 Mon Sep 17 00:00:00 2001 From: blavenie <benoit.lavenier@e-is.pro> Date: Wed, 23 Aug 2017 12:38:08 +0200 Subject: [PATCH] [fix] Payment API: better UI and new buttons, on small screens [fix] Payment API doc: add button customization options --- www/api/index.html | 1 + www/i18n/locale-en-GB.json | 18 ++- www/i18n/locale-en.json | 18 ++- www/i18n/locale-fr-FR.json | 20 ++- www/img/logo_32px.png | Bin 0 -> 2278 bytes www/img/logo_duniter_32px.png | Bin 0 -> 1524 bytes www/img/logo_g1_32px.png | Bin 0 -> 2560 bytes www/img/logo_g1_32px_black.png | Bin 0 -> 630 bytes www/js/api/api-demo-services.js | 72 +++++++++++ www/js/api/app.js | 136 +++++++++---------- www/js/config.js | 4 +- www/js/filters.js | 5 + www/js/services/wallet-services.js | 5 +- www/templates/api/doc.html | 201 ++++++++++++++++++++--------- www/templates/api/home.html | 2 +- www/templates/api/menu.html | 23 ++-- www/templates/api/transfer.html | 28 ++-- www/templates/menu.html | 3 +- 18 files changed, 364 insertions(+), 172 deletions(-) create mode 100644 www/img/logo_32px.png create mode 100644 www/img/logo_duniter_32px.png create mode 100644 www/img/logo_g1_32px.png create mode 100644 www/img/logo_g1_32px_black.png create mode 100644 www/js/api/api-demo-services.js diff --git a/www/api/index.html b/www/api/index.html index 2940e3421..3f74c11b7 100644 --- a/www/api/index.html +++ b/www/api/index.html @@ -87,6 +87,7 @@ <script src="../dist/dist_js/app/services/wallet-services.js"></script> <script src="../dist/dist_js/app/services/plugin-services.js"></script> <script src="../dist/dist_js/app/services.js"></script> +<script src="../dist/dist_js/app/api/api-demo-services.js"></script> <!-- entities --> <script src="../dist/dist_js/app/entities/peer.js"></script> diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json index f51e8b0d2..22efdb4f8 100644 --- a/www/i18n/locale-en-GB.json +++ b/www/i18n/locale-en-GB.json @@ -804,7 +804,7 @@ "DESCRIPTION_DIVIDER": "Description", "URL_DIVIDER": "Access URL", "PARAMETERS_DIVIDER": "Parameters", - "AVAILABLE_PARAMETERS": "Here is the list of parameters and options:", + "AVAILABLE_PARAMETERS": "Here is the list of al available parameters:", "DEMO_DIVIDER": "Try it !", "DEMO_HELP": "To test this service, click on this button. The result content will be display below.", "DEMO_RESULT": "Result returned by call:", @@ -813,7 +813,7 @@ "INTEGRATE_DIVIDER": "To integrate", "INTEGRATE_CODE": "HTML Code:", "INTEGRATE_RESULT": "Result preview:", - "BTN_DEMO": "Demo", + "INTEGRATE_PARAMETERS": "Parameters", "TRANSFER": { "TITLE": "Payments", "DESCRIPTION": "From a site (eg online marketplace) you can delegate payment in free currency to Cesium API. To do this, simply open a page at the following address:", @@ -830,7 +830,19 @@ "PARAM_CANCEL_URL": "URL if cancelled", "PARAM_CANCEL_URL_HELP": "URL in case of cancellation", "EXAMPLES_HELP": "Examples of integration:", - "EXAMPLE_BUTTON_CODE": "HTML Button" + "EXAMPLE_BUTTON": "HTML Button", + "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pay in {{currency|currencySymbol}}", + "EXAMPLE_BUTTON_DEFAULT_STYLE": "Custom style", + "EXAMPLE_BUTTON_TEXT_HELP": "Button text", + "EXAMPLE_BUTTON_TEXT_COLOR": "Color", + "EXAMPLE_BUTTON_TEXT_COLOR_HELP": "eg: #fbc14c, yellow, lightgrey, rgb(180,180,180)", + "EXAMPLE_BUTTON_TEXT_ICON": "Icon", + "EXAMPLE_BUTTON_TEXT_WIDTH": "Width", + "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "eg: 200px, 50%", + "EXAMPLE_BUTTON_ICON_CESIUM": "Cesium logo", + "EXAMPLE_BUTTON_ICON_DUNITER": "Duniter logo", + "EXAMPLE_BUTTON_ICON_G1_COLOR": "Ğ1 logo", + "EXAMPLE_BUTTON_ICON_G1_BLACK": "Ğ1 logo (outline)" } } } diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json index c06875734..e7dbf7ea6 100644 --- a/www/i18n/locale-en.json +++ b/www/i18n/locale-en.json @@ -804,7 +804,7 @@ "DESCRIPTION_DIVIDER": "Description", "URL_DIVIDER": "Access URL", "PARAMETERS_DIVIDER": "Parameters", - "AVAILABLE_PARAMETERS": "Here is the list of parameters and options:", + "AVAILABLE_PARAMETERS": "Here is the list of al available parameters:", "DEMO_DIVIDER": "Try it !", "DEMO_HELP": "To test this service, click on this button. The result content will be display below.", "DEMO_RESULT": "Result returned by call:", @@ -813,7 +813,7 @@ "INTEGRATE_DIVIDER": "To integrate", "INTEGRATE_CODE": "HTML Code:", "INTEGRATE_RESULT": "Result preview:", - "BTN_DEMO": "Demo", + "INTEGRATE_PARAMETERS": "Parameters", "TRANSFER": { "TITLE": "Payments", "DESCRIPTION": "From a site (eg online marketplace) you can delegate payment in free currency to Cesium API. To do this, simply open a page at the following address:", @@ -830,7 +830,19 @@ "PARAM_CANCEL_URL": "URL if cancelled", "PARAM_CANCEL_URL_HELP": "URL in case of cancellation", "EXAMPLES_HELP": "Examples of integration:", - "EXAMPLE_BUTTON_CODE": "HTML Button" + "EXAMPLE_BUTTON": "HTML Button", + "EXAMPLE_BUTTON_DEFAULT_TEXT": "Pay in {{currency|currencySymbol}}", + "EXAMPLE_BUTTON_DEFAULT_STYLE": "Custom style", + "EXAMPLE_BUTTON_TEXT_HELP": "Button text", + "EXAMPLE_BUTTON_TEXT_COLOR": "Color", + "EXAMPLE_BUTTON_TEXT_COLOR_HELP": "eg: #fbc14c, yellow, lightgrey, rgb(180,180,180)", + "EXAMPLE_BUTTON_TEXT_ICON": "Icon", + "EXAMPLE_BUTTON_TEXT_WIDTH": "Width", + "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "eg: 200px, 50%", + "EXAMPLE_BUTTON_ICON_CESIUM": "Cesium logo", + "EXAMPLE_BUTTON_ICON_DUNITER": "Duniter logo", + "EXAMPLE_BUTTON_ICON_G1_COLOR": "Ğ1 logo", + "EXAMPLE_BUTTON_ICON_G1_BLACK": "Ğ1 logo (outline)" } } } diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json index 6959049ce..c7eae8a52 100644 --- a/www/i18n/locale-fr-FR.json +++ b/www/i18n/locale-fr-FR.json @@ -804,16 +804,16 @@ "DESCRIPTION_DIVIDER": "Description", "URL_DIVIDER": "URL d'accès", "PARAMETERS_DIVIDER": "Paramètres", - "AVAILABLE_PARAMETERS": "Voici la liste des paramètres et options :", + "AVAILABLE_PARAMETERS": "Voici la liste des paramètres possibles :", "DEMO_DIVIDER": "Tester", "DEMO_HELP": "Pour tester ce service, cliquez sur le bouton ci-contre. Le résultat s'affichera en dessous.", "DEMO_RESULT": "Résultat retourné par l'appel :", "DEMO_SUCCEED": "<i class=\"icon ion-checkmark\"></i> Succès !", "DEMO_CANCELLED": "<i class=\"icon ion-close\"></i> Annulé par l'utilisateur", "INTEGRATE_DIVIDER": "Intégrer", - "INTEGRATE_CODE": "Code HTML :", + "INTEGRATE_CODE": "Code :", "INTEGRATE_RESULT": "Prévisualisation du résultat :", - "BTN_DEMO": "Démo", + "INTEGRATE_PARAMETERS": "Paramètres", "TRANSFER": { "TITLE": "Paiements", "DESCRIPTION": "Depuis un site (ex: vente en ligne) vous pouvez déléguer le paiement en monnaie libre à Cesium API. Pour cela, il vous suffit de déclencher l'ouveture d'un page sur l'adresse suivante :", @@ -830,7 +830,19 @@ "PARAM_CANCEL_URL": "Adresse web d'annulation", "PARAM_CANCEL_URL_HELP": "Adresse web (URL) en cas d'annulation du paiement, par l'utilisateur", "EXAMPLES_HELP": "Voici des exemples d'intégration :", - "EXAMPLE_BUTTON_CODE": "Bouton HTML" + "EXAMPLE_BUTTON": "Bouton HTML", + "EXAMPLE_BUTTON_DEFAULT_TEXT": "Payer en {{currency|currencySymbol}}", + "EXAMPLE_BUTTON_DEFAULT_STYLE": "Style personnalisé", + "EXAMPLE_BUTTON_TEXT_HELP": "Texte du bouton", + "EXAMPLE_BUTTON_TEXT_COLOR": "Couleur", + "EXAMPLE_BUTTON_TEXT_COLOR_HELP": "Exemple: #fbc14c, yellow, lightgrey, rgb(180,180,180)", + "EXAMPLE_BUTTON_TEXT_ICON": "Icône", + "EXAMPLE_BUTTON_TEXT_WIDTH": "Largeur", + "EXAMPLE_BUTTON_TEXT_WIDTH_HELP": "Exemple: 200px, 50%", + "EXAMPLE_BUTTON_ICON_CESIUM": "Logo Cesium", + "EXAMPLE_BUTTON_ICON_DUNITER": "Logo Duniter", + "EXAMPLE_BUTTON_ICON_G1_COLOR": "Logo Ğ1", + "EXAMPLE_BUTTON_ICON_G1_BLACK": "Logo Ğ1 (noir)" } } } diff --git a/www/img/logo_32px.png b/www/img/logo_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..305e647fc6a4a8bb4803313eb105be2db22c5778 GIT binary patch literal 2278 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 CGdeN= literal 0 HcmV?d00001 diff --git a/www/img/logo_duniter_32px.png b/www/img/logo_duniter_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..a6205fd125dc72581df1cfed72e39ec60c067d08 GIT binary patch literal 1524 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0VruY)k7lg8`{1_lQ95>H=O_J<teT(V-XVx@jFFt9dyx;TbJ9KJd|J7;pL z$npQ@t0VIlui3p}<FsxKgTpRQj10Xb6lMrA3O-qu!^ycq@Q=e3mKF<DM|*+4N*6m7 z6c#ONIbC4jCezjDz0F5ycS=w1!MvN-%5txN%l-Y$vhKi?tJ`wsN<99&(e}CJ{_k_1 z-)Z>&V?%}LC%*0HL_*^2c38<BF+Lz6A-vlndF`B&sp+5H<r$OzG&1REsqMY~zS8>O z)sMU0Y+Pm>;1j8LN^81sc2m{i?DVimz5m7xO4EKTe>%8vGGiJ;LQLz6VuRk@(vu!_ ztn?RH@M_X36(b$no#$%Q^BV3HT{05?#uy>$?Z#8FpzvPertRj>Y-29{*n8{B($t@e zz1VmSR<~SQqR{0y!*GVc$$4_iwwoIVe7P`LVbUW1+aa^;%g#42T<-EPOM9flvGb#i z-^KTB3wQe^i1fVUbX1zJm+P2$aK`7q_2U2ZGGsdMew1QwNN8f5w}sOtEQEEPQSbS> zs*4l9U75j9+;`c8A)hDZjLNQ!#YYUyc=UWk*R|-Z;&l7bBWW1y5+KU^{d=wOZDyr1 zUNzIVj?85xx{FH|GP8bq-qWZsS)5^k%B)Tn%Vq19SUfvxU6EeIa^OzVEUpJPEAHHL zocY4lXz8l$8@A;hjV*9&iJvcXnY)L5=CtZ^cZPz5!aarIo=&{;d3L89WIXM8Yu(Lb z3<?Xp_pP6|plW`fSX1jqrXLHAUOW&Lq?nxjDzi*u!#swBNi~y~#hh|adTiOizW56N zdb{_xugz3!*dug_p(1GoZ|b^`Q(Za6CppyBI!hyN?end$+byV{eed{TRs93SUs*hO zTiTs?pR_UDaqLMGnK`N1*1v22Ar|Sp0I{$cSu?gTmSUJN?a0QeZK9`J?rx~t#`o^n ztLmeg5@)y=Ikb434d-0nJNIRC*_-mU%ii?a=A8YY{YEoa*4X3Pheu`;AJ0`i8?djQ z`x^IsMi+sO=y!|^>lQLx;Xkdc=2dWF@x+A4hONi$-?+zY|KP%T$Cx#$H-6onHSNeo z+jz#+8i(HMmmjEpy^DuIh#|uyBQzwy=JUbbZLw=y;u@6xN`<vrnjC(S&QP#%lh|Cd zLubn#TnRn2IIT@|vxLxAhpvem79VK;&KGtd(t4}zlSX6inf(&G9{s8+WwM##VV36B zx38D8Cm=Gm+i&-+{pyR?O}%i%^Fe(m+vJHGzKYr#wf#QjEXTm$wu2$zsYBawF5MFo zwIhwIWuh;gY8Cu6<3hc=|6J!Skxy3_HN`n^SYk9|a^o41zL&M>ee>V(Gd#GF!0_zF zx=mLvDXK}PGrWmA`E*Xe<txI*eRA>_F1Tf6Fds`jwdMWtws{8pC#2@^{zza?;5r@d zHbbL4Y1g`$XD?md{E>4m!&3$y9^-(>*#0Xi%u%;u9}4Jf`kvk+70-Ib<s9?vbEY*j zmcG1`Bv50}nHQm=Ev<TcL24u8{UclNuQqt8D8K71*Sf3U554+u=-CGc&X#be)wT}1 z-tev5AYj9^V9lDGAIZzw-j$qGJU)ApuJ83kzruU_%U8&>uQsxa-=F$_b>Qufe|~<J z4ZrjF+V7nr<-QkQeqlZ}<+@tQS97^ir6?oo_YYY8uN}8JH}&BA=LHrqFE(lhTs;x8 z;)n8!^S3QhQ(V$}%5D~)*SS{{ck-Wt!=ndlf*GXZ_!s**dM)Bsde8X%_J!wfS}$L0 zf4x2Af9LE@&mPfFJH9mu@1LSKe_6g&&crvfW+ZQa)wK7mQqQjw?XNx-&B@<#MdyBv zP4$V{fvKq*@4XEF?sxG{T&B=n#pxPx>{d~$CQiJ<?a8y>?W3^X{R>rdex20UyZ^!S zCG$;Qd#k90vlHIc8ehE~(y(l@@Mc{;MaO-s-+dNdvsY$qndJ>pkM+SRpW95OzsLN# qZhl*zE57Q<Yk%{n5B}HuV~L&X7S#G_WgP<p1B0ilpUXO@geCyY8qvD| literal 0 HcmV?d00001 diff --git a/www/img/logo_g1_32px.png b/www/img/logo_g1_32px.png new file mode 100644 index 0000000000000000000000000000000000000000..bebaffe9cf2961e2a634a4d7e0af2e6baf9f7a06 GIT binary patch literal 2560 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 literal 0 HcmV?d00001 diff --git a/www/img/logo_g1_32px_black.png b/www/img/logo_g1_32px_black.png new file mode 100644 index 0000000000000000000000000000000000000000..e9af8d7790043277aa479c221159a5031a0474d9 GIT binary patch literal 630 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}Y)RhkE)4%caKYZ?lNlHo zI14-?iy0VruY)k7lg8`{1_lQ95>H=O_J<teTvA$H#UFMvFfcKDx;TbJ96oyee7A3+ z1p9~cJ%(Hpd(svvYA?=^Fy1t=H^^*~{L|w>{}{QKddz5@+j=x5(NJ46T9bRCL7ld} zo0nJ#r>5Auz3UP``_0XJe#iRx-sf@twx#Ea&;733fBv)G`Qmxbbu;^wU-;b+OJ2@* zB5Kcpc$-6obB^s!u<oB%CKS=Wo>9m5{-XVN10y=MSEw}9C(3w#%DZ-zX<}<cuhhK- zGMhbl8X0qr3;Z(Z6_R^wwQsxjm%}^S?0Jh8G<in^suYO(Jt}8@Q1!Rb*|jnL4C9<D znKHRk4{Y@Kpwbz;(bJ+Mea7@pZ*0|^zMVf<C3EHlWB5k(W4}*J%FX3nkeO;ZvEsXB z*^#z7%~hH#=gumn>$R}F$$R?d`_hK#7otmY(>KbTvY3>$oI}TZqwm(myHf>MEWIIS za$@?*$SF^nZCLD<+;B6#_g8Gw-{OfAZ%%vUD0y0XjpV`eY=Se+I49&Cdr)Y-*zoL$ ze~UN{tnBHPYdaUNA3f{Ip}%|9Rs_!Y&t^2w{^;p~y@J`ZEKEAjRxaMKHSbH7>-(oG zn<RINo-<9m^Q%cXu}{Fm<+R$Ka}VFjuHnl5&L&hIt$Q|3hL2a3cT1P_jk%k?IjmT4 zXxXE>91h*xP5l*DQxs&6O<olJGvUI2rR2^J^Iw`&_{UaGOa9N9ynLFJo$5Pp$@mM~ jPHE(^$#&j-B0n+w^@o+G9=~N^U|{fc^>bP0l+XkKLu48c literal 0 HcmV?d00001 diff --git a/www/js/api/api-demo-services.js b/www/js/api/api-demo-services.js new file mode 100644 index 000000000..bc676c06e --- /dev/null +++ b/www/js/api/api-demo-services.js @@ -0,0 +1,72 @@ +angular.module('cesium.api.demo.services', ['cesium.bma.services', 'cesium.crypto.services', 'cesium.utils.services', 'cesium.settings.services']) + + + .factory('csDemoWallet', function($rootScope, $timeout, $controller, $state, $q, $translate, $filter, + BMA, CryptoUtils) { + 'ngInject'; + + function factory(authData) { + + var demoPubkey; + + return { + start: function() { + return $q.when(); + }, + login: function() { + var self = this; + return $translate('API.TRANSFER.DEMO.PUBKEY') + .then(function(pubkey) { + demoPubkey = pubkey; + if (!authData || authData.pubkey != demoPubkey) { + throw {message: 'API.TRANSFER.DEMO.BAD_CREDENTIALS'}; + } + self.data = { + keypair: authData.keypair + }; + return { + uid: 'Demo', + pubkey: demoPubkey + }; + }); + }, + transfer: function(pubkey, amount, comment) { + var self = this; + return BMA.blockchain.current() + .then(function(block) { + var tx = 'Version: '+ BMA.constants.PROTOCOL_VERSION +'\n' + + 'Type: Transaction\n' + + 'Currency: ' + block.currency + '\n' + + 'Blockstamp: ' + block.number + '-' + block.hash + '\n' + + 'Locktime: 0\n' + // no lock + 'Issuers:\n' + + demoPubkey + '\n' + + 'Inputs:\n' + + [amount, block.unitbase, 'T', 'FakeId27jQMAf3jqL2fr75ckZ6Jgi9TZL9fMf9TR9vBvG', 0].join(':')+ '\n' + + 'Unlocks:\n' + + '0:SIG(0)\n' + + 'Outputs:\n' + + [amount, block.unitbase, 'SIG(' + pubkey + ')'].join(':')+'\n' + + 'Comment: '+ (comment||'') + '\n'; + + return CryptoUtils.sign(tx, self.data.keypair) + .then(function(signature) { + var signedTx = tx + signature + "\n"; + return CryptoUtils.util.hash(signedTx) + .then(function(txHash) { + return $q.when({ + tx: signedTx, + hash: txHash + }); + }); + }); + }); + } + }; + } + + return { + instance: factory + }; + }) +; diff --git a/www/js/api/app.js b/www/js/api/app.js index b7fbf2ed4..636578cd9 100644 --- a/www/js/api/app.js +++ b/www/js/api/app.js @@ -10,7 +10,7 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr // endRemoveIf(no-device) 'cesium.filters', 'cesium.config', 'cesium.platform', 'cesium.templates', 'cesium.translations', 'cesium.directives', // API dependencies : - 'cesium.services', 'cesium.login.controllers', 'cesium.help.controllers' + 'cesium.services', 'cesium.api.demo.services', 'cesium.login.controllers', 'cesium.help.controllers' ]) .config(function($stateProvider, $urlRouterProvider) { @@ -70,9 +70,28 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr }; }) - .controller('ApiDocCtrl', function ($scope, $rootScope, $state, csConfig){ + .controller('ApiDocCtrl', function ($scope, $rootScope, $state, $translate, $sce, csCurrency){ 'ngInject'; + $scope.loading = true; + $scope.buttonIcons = [ + { + label: 'API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_DUNITER', + filename: '../img/logo_duniter_32px.png' + }, + { + label: 'API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_CESIUM', + filename: '../img/logo_32px.png' + }, + { + label: 'API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_G1_COLOR', + filename: '../img/logo_g1_32px.png' + }, + { + label: 'API.DOC.TRANSFER.EXAMPLE_BUTTON_ICON_G1_BLACK', + filename: '../img/logo_g1_32px_black.png' + } + ]; $scope.transferData = { pubkey: 'G2CBgZBPLe6FSFUgpx2Jf1Aqsgta6iib3vmDRA1yLiqU', amount: 100, @@ -80,12 +99,19 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr name: 'www.domain.com', redirect_url: 'http://www.domain.com/payment?ref={comment}&tx={tx}', cancel_url: 'http://www.domain.com/payment?ref={comment}&cancel', - show: true + show: false, // hide integration parameters, by default + buttonText: 'Ğ1 pubkey', + buttonIcon: $scope.buttonIcons[0], + buttonTextEnable: false, + buttonColor: '#fbc14c', + buttonWidth: undefined }; + + // Compute URL for transfer demo $scope.demoUrl = $rootScope.rootPath + $state.href('api.transfer', angular.merge({}, $scope.transferData, { demo: true, - redirect_url: $rootScope.rootPath + '#/app/home?service=payment&result={comment}%0A{hash}%0A{tx}', + redirect_url: $rootScope.rootPath + '#/app/home?service=payment&result={tx}', cancel_url: $rootScope.rootPath + '#/app/home?service=payment&cancel' })); $scope.transferData.url = $rootScope.rootPath + $state.href('api.transfer', $scope.transferData); @@ -101,19 +127,53 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr if (state.stateParams && state.stateParams.cancel) { $scope.result.cancelled = true; } + + csCurrency.get() + .then(function(currency) { + return $translate('API.DOC.TRANSFER.EXAMPLE_BUTTON_DEFAULT_TEXT', {currency: currency.name}); + }) + .then(function(buttonText) { + $scope.transferData.buttonText = buttonText; + $scope.loading = false; + // compute HTML button + $scope.onTransferDataChanged(); + }); + }; $scope.$on('$ionicView.enter', $scope.enter); // watch from update - $scope.onTransferDataChanged = function(oldValue, newValue, scope) { + $scope.onTransferDataChanged = function() { + if ($scope.loading) return; // skip if loading + // recompute URL - $scope.transferData.url = $rootScope.rootPath + $state.href('api.transfer', $scope.transferData); + var buttonUrl = $rootScope.rootPath + $state.href('api.transfer', $scope.transferData); + + // Button with text + if ($scope.transferData.buttonTextEnable) { + $scope.buttonHtml = '<a href="'+buttonUrl+'">\n'+ + ' <div style="background-color: '+$scope.transferData.buttonColor+'; border-radius: 5px; min-height: 42px; text-align: center; padding: 5px; color: black;'; + if ($scope.transferData.buttonWidth) { + $scope.buttonHtml += 'max-width: '+$scope.transferData.buttonWidth+';'; + } + $scope.buttonHtml += '">\n'+ + ' <img style="vertical-align: middle;" src="'+$rootScope.rootPath + $scope.transferData.buttonIcon.filename+'">\n' + + ' ' + $scope.transferData.buttonText + '\n' + + ' </div>\n' + + '</a>'; + } + // Simple button + else { + $scope.buttonHtml = '<a href="'+buttonUrl+'">\n'+ + ' <img src="'+$rootScope.rootPath + '../img/duniter_button.svg">\n'+ + '</a>'; + } }; $scope.$watch('transferData', $scope.onTransferDataChanged, true); }) .controller('ApiTransferCtrl', function ($scope, $rootScope, $timeout, $controller, $state, $q, $translate, $filter, - BMA, CryptoUtils, UIUtils, csCurrency, csTx, csWallet){ + BMA, CryptoUtils, UIUtils, csCurrency, csTx, csWallet, csDemoWallet){ 'ngInject'; // Initialize the super class and extend it. @@ -154,64 +214,6 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr }; $scope.$on('$ionicView.enter', $scope.enter); - function createDemoWallet(authData) { - var demoPubkey = '3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1'; - - return { - start: function() { - return $q.when(); - }, - login: function() { - var self = this; - return $translate('API.TRANSFER.DEMO.PUBKEY') - .then(function(pubkey) { - if (!authData || authData.pubkey != '3G28bL6deXQBYpPBpLFuECo46d3kfYMJwst7uhdVBnD1') { - throw {message: 'API.TRANSFER.DEMO.BAD_CREDENTIALS'}; - } - self.data = { - keypair: authData.keypair - }; - return { - uid: 'Demo', - pubkey: demoPubkey - }; - }); - }, - transfer: function() { - var self = this; - return BMA.blockchain.current() - .then(function(block) { - var tx = 'Version: '+ BMA.constants.PROTOCOL_VERSION +'\n' + - 'Type: Transaction\n' + - 'Currency: ' + block.currency + '\n' + - 'Blockstamp: ' + block.number + '-' + block.hash + '\n' + - 'Locktime: 0\n' + // no lock - 'Issuers:\n' + - demoPubkey + '\n' + - 'Inputs:\n' + - [$scope.transferData.amount, block.unitbase, 'T', 'FakeId27jQMAf3jqL2fr75ckZ6Jgi9TZL9fMf9TR9vBvG', 0].join(':')+ '\n' + - 'Unlocks:\n' + - '0:SIG(0)\n' + - 'Outputs:\n' + - [$scope.transferData.amount, block.unitbase, 'SIG(' + $scope.transferData.pubkey + ')'].join(':')+'\n' + - 'Comment: '+ ($scope.transferData.comment||'') + '\n'; - - return CryptoUtils.sign(tx, self.data.keypair) - .then(function(signature) { - var signedTx = tx + signature + "\n"; - return CryptoUtils.util.hash(signedTx) - .then(function(txHash) { - return $q.when({ - tx: signedTx, - hash: txHash - }); - }); - }) - }); - } - }; - } - function onLogin(authData) { // User cancelled @@ -221,11 +223,11 @@ angular.module('cesium-api', ['ionic', 'ionic-material', 'ngMessages', 'pascalpr if ($scope.sending) return; $scope.sending = true; - var wallet = $scope.demo ? createDemoWallet(authData) : csWallet.instance('api', BMA); + var wallet = $scope.demo ? csDemoWallet.instance(authData) : csWallet.instance('api', BMA); UIUtils.loading.show(); - wallet.start({skipRestore: true}) + wallet.start({restore: false}/*skip restore from local storage*/) .then(function() { return wallet.login({auth: true, authData: authData}); }) diff --git a/www/js/config.js b/www/js/config.js index f08c7b49d..6ac06261a 100644 --- a/www/js/config.js +++ b/www/js/config.js @@ -32,7 +32,7 @@ angular.module("cesium.config", []) "en": "license/license_g1-en" }, "node": { - "host": "g1.duniter.org", + "host": "g1.duniter.fr", "port": "443" }, "fallbackNodes": [ @@ -71,4 +71,4 @@ angular.module("cesium.config", []) "newIssueUrl": "https://github.com/duniter/cesium/issues/new?labels=bug" }) -; \ No newline at end of file +; diff --git a/www/js/filters.js b/www/js/filters.js index a07a9f660..9e04d1581 100644 --- a/www/js/filters.js +++ b/www/js/filters.js @@ -374,4 +374,9 @@ angular.module('cesium.filters', ['cesium.config', 'cesium.platform', 'pascalpre }; }) + .filter('trustAsHtml', function($sce) { + return function(html) { + return $sce.trustAsHtml(html); + }; + }) ; diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js index 891cf66a1..c325d0bb2 100644 --- a/www/js/services/wallet-services.js +++ b/www/js/services/wallet-services.js @@ -1662,7 +1662,8 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se function start(options) { options = options || {}; - options.skipRestore = angular.isDefined(options.skipRestore) ? options.skipRestore : false; + // By default, restore if the service is the default object + options.restore = angular.isDefined(options.restore) ? options.restore : (id === 'default'); console.debug('[wallet] Starting...'); var now = new Date().getTime(); @@ -1674,7 +1675,7 @@ angular.module('cesium.wallet.services', ['ngApi', 'ngFileSaver', 'cesium.bma.se ]); // Restore - if (!options.skipRestore) startPromise = startPromise.then(restore); + if (options.restore) startPromise = startPromise.then(restore); // Emit ready event startPromise.then(function() { diff --git a/www/templates/api/doc.html b/www/templates/api/doc.html index 170e203c2..b3cc0e3b3 100644 --- a/www/templates/api/doc.html +++ b/www/templates/api/doc.html @@ -60,9 +60,9 @@ <div class="item item-divider no-border"> <p translate>API.DOC.DEMO_DIVIDER</p> </div> - <div class="item item-button-right"> - <p translate>API.DOC.DEMO_HELP</p> - <a href="{{demoUrl}}" class="button button-raised button-positive" translate>API.DOC.BTN_DEMO</a> + <div class="item item-button-right item-text-wrap padding-bottom"> + <p class="item-icon-right-padding" translate>API.DOC.DEMO_HELP</p> + <a href="{{demoUrl}}" class="button button-raised button-positive icon ion-play"></a> </div> <div class="item item-text-wrap" ng-if="result.type === 'payment' && !result.cancelled"> <h2 class="text-right balanced" translate>API.DOC.DEMO_SUCCEED</h2> @@ -77,14 +77,15 @@ <p translate>API.DOC.INTEGRATE_DIVIDER</p> </div> - <div class="item item-text-wrap"> <p translate>API.DOC.TRANSFER.EXAMPLES_HELP</p> - <div class="row"> + <div class="row responsive-sm"> <div class="col col-20 text-italic"> - <span translate>API.DOC.TRANSFER.EXAMPLE_BUTTON_CODE</span> + <span translate>API.DOC.TRANSFER.EXAMPLE_BUTTON</span> </div> + + <!-- no text on button --> <div class="col gray no-border"> <!-- code --> @@ -93,7 +94,7 @@ <span translate>API.DOC.INTEGRATE_CODE</span> </p> <div class="item item-input "> - <textarea class="gray" select-on-click="" rows="3" cols="80"><a href="{{transferData.url}}"><img src="{{$root.rootPath}}../img/duniter_button.svg"></a></textarea> + <textarea class="gray" select-on-click rows="4" ng-model="buttonHtml"></textarea> </div> <!-- preview --> @@ -101,66 +102,148 @@ <i class="icon ion-eye"></i> <span translate>API.DOC.INTEGRATE_RESULT</span> </p> - <p class="padding-left"> - <a href="{{transferData.url}}" target="_system"><img src="../img/duniter_button.svg"></a> - </p> + <div class="padding-left"> + <ng-bind-html ng-bind-html="buttonHtml|trustAsHtml"></ng-bind-html> + </div> + </div> + </div> + <div class="row responsive-sm"> + <div class="col col-20 hidden-xs hidden-sm"> </div> + + <!-- no text on button --> + <div class="col gray no-border"> <p class="padding-top"> <a class="positive" ng-click="transferData.show=!transferData.show"> <i class="icon ion-wrench"></i> - <span translate>API.DOC.PARAMETERS_DIVIDER</span> + <span translate>API.DOC.INTEGRATE_PARAMETERS</span> <i class="icon" ng-class="{'ion-arrow-down-b': !transferData.show, 'ion-arrow-up-b': transferData.show}"></i> </a> </p> - <form id="transferForm" ng-if="transferData.show" class="padding-left stable-bg"> - <p class="padding-top"> - <i class="icon ion-key"></i> - {{'API.DOC.TRANSFER.PARAM_PUBKEY' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.pubkey" placeholder="{{'API.DOC.TRANSFER.PARAM_PUBKEY_HELP'|translate}}"> - </label> - - <p class="padding-top"> - <i class="icon ion-pricetag"></i> - {{'API.DOC.TRANSFER.PARAM_AMOUNT' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.amount" placeholder="{{'API.DOC.TRANSFER.PARAM_AMOUNT_HELP'|translate}}"> - </label> - - <p class="padding-top"> - <i class="icon ion-flag"></i> - {{'API.DOC.TRANSFER.PARAM_COMMENT' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.comment" placeholder="{{'API.DOC.TRANSFER.PARAM_COMMENT'|translate}}"> - </label> - - <p class="padding-top"> - <i class="icon ion-ios-world-outline"></i> - {{'API.DOC.TRANSFER.PARAM_NAME' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.name" placeholder="{{'API.DOC.TRANSFER.PARAM_NAME'|translate}}"> - </label> - - <p class="padding-top"> - <i class="icon ion-arrow-return-left"></i> - {{'API.DOC.TRANSFER.PARAM_REDIRECT_URL' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.redirect_url" placeholder="{{'API.DOC.TRANSFER.PARAM_REDIRECT_URL'|translate}}"> - </label> - - <p class="padding-top"> - <i class="icon ion-backspace"></i> - {{'API.DOC.TRANSFER.PARAM_CANCEL_URL' | translate}} : - </p> - <label class="item item-input"> - <input type="text" ng-model="transferData.cancel_url" placeholder="{{'API.DOC.TRANSFER.PARAM_CANCEL_URL'|translate}}"> - </label> + <div ng-if="transferData.show" class="padding-left"> + + <form id="transferForm" class="stable-bg padding"> + <p class="padding-top"> + <i class="icon ion-key"></i> + {{'API.DOC.TRANSFER.PARAM_PUBKEY' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.pubkey" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.PARAM_PUBKEY_HELP'|translate}}"> + </label> + + <p class="padding-top"> + <i class="icon ion-pricetag"></i> + {{'API.DOC.TRANSFER.PARAM_AMOUNT' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.amount" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.PARAM_AMOUNT_HELP'|translate}}"> + </label> + + <p class="padding-top"> + <i class="icon ion-flag"></i> + {{'API.DOC.TRANSFER.PARAM_COMMENT' | translate}} : + </p> + <label class="item item-input"> + <input type="text" ng-model="transferData.comment" placeholder="{{'API.DOC.TRANSFER.PARAM_COMMENT'|translate}}"> + </label> + + <p class="padding-top"> + <i class="icon ion-ios-world-outline"></i> + {{'API.DOC.TRANSFER.PARAM_NAME' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.name" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.PARAM_NAME'|translate}}"> + </label> + + <p class="padding-top"> + <i class="icon ion-arrow-return-left"></i> + {{'API.DOC.TRANSFER.PARAM_REDIRECT_URL' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.redirect_url" + ng-model-options="{ debounce: 650 }"placeholder="{{'API.DOC.TRANSFER.PARAM_REDIRECT_URL'|translate}}"> + </label> + + <p class="padding-top"> + <i class="icon ion-backspace"></i> + {{'API.DOC.TRANSFER.PARAM_CANCEL_URL' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.cancel_url" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.PARAM_CANCEL_URL'|translate}}"> + </label> + + <p class="padding-top"> + <a class="positive" ng-click="transferData.buttonTextEnable=!transferData.buttonTextEnable"> + <i class="icon" ng-class="{'ion-android-checkbox-outline': transferData.buttonTextEnable, 'ion-android-checkbox-outline-blank': !transferData.buttonTextEnable}"></i> + <span translate>API.DOC.TRANSFER.EXAMPLE_BUTTON_DEFAULT_STYLE</span> + </a> + </p> + + <div ng-if="transferData.buttonTextEnable"> + + <!-- button color --> + <p class="padding-top"> + <i class="icon ion-paintbucket"></i> + {{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_COLOR' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.buttonColor" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_COLOR_HELP'|translate}}"> + </label> + + <!-- button icon --> + <p class="padding-top"> + <i class="icon ion-image"></i> + {{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_ICON' | translate}} : + </p> + <label class="item item-input item-select"> + <select class="stable-bg dark" + ng-model="transferData.buttonIcon" style="width: 100%; max-width: 100%;" + ng-options="l as (l.label | translate) for l in buttonIcons track by l.filename"> + </select> + </label> + + <!-- button text --> + <p class="padding-top"> + <i class="icon ion-quote"></i> + {{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_HELP' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.buttonText" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_HELP'|translate}}"> + </label> + + <!-- button width --> + <p class="padding-top"> + <i class="icon ion-ios-crop-strong"></i> + {{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_WIDTH' | translate}} : + </p> + <label class="item item-input"> + <input type="text" + ng-model="transferData.buttonWidth" + ng-model-options="{ debounce: 650 }" + placeholder="{{'API.DOC.TRANSFER.EXAMPLE_BUTTON_TEXT_WIDTH_HELP'|translate}}"> + </label> + </div> + </div> </form> </div> diff --git a/www/templates/api/home.html b/www/templates/api/home.html index 15b4106a3..4eb1e30fd 100644 --- a/www/templates/api/home.html +++ b/www/templates/api/home.html @@ -9,7 +9,7 @@ <div class="light text-center" > <h4 class="hidden-xs" translate>API.HOME.MESSAGE</h4> - <h4 class="visible-xs" translate>API.HOME.MESSAGE_SHORT</h4> + <h4 class="visible-xs padding" translate>API.HOME.MESSAGE_SHORT</h4> </div> <br class="hidden-xs"/> diff --git a/www/templates/api/menu.html b/www/templates/api/menu.html index a4751ae51..ed55bc059 100644 --- a/www/templates/api/menu.html +++ b/www/templates/api/menu.html @@ -1,18 +1,13 @@ -<ion-side-menus bind-notifier="{locale:$root.settings.locale.id}"> - <!-- HEADER --> - <ion-side-menu-content> - <ion-nav-bar class="bar-dark" title-align="left"> - <ion-nav-back-button class="no-text"> - </ion-nav-back-button> - <ion-nav-buttons side="left"> - </ion-nav-buttons> - <ion-nav-buttons side="right" > - </ion-nav-buttons> - </ion-nav-bar> - <ion-nav-view name="menuContent"></ion-nav-view> +<ion-nav-bar class="bar-dark" title-align="left"> + <ion-nav-back-button class="no-text"> + </ion-nav-back-button> - </ion-side-menu-content> + <ion-nav-buttons side="left"> + </ion-nav-buttons> + <ion-nav-buttons side="right" > + </ion-nav-buttons> +</ion-nav-bar> +<ion-nav-view name="menuContent"></ion-nav-view> -</ion-side-menus> diff --git a/www/templates/api/transfer.html b/www/templates/api/transfer.html index ee0d5c8c8..c82098b73 100644 --- a/www/templates/api/transfer.html +++ b/www/templates/api/transfer.html @@ -1,18 +1,16 @@ - -<ion-nav-view class="circle-bg-dark"> - <ion-nav-title> - <h1 class="title" ng-bind-html="'API.TRANSFER.TITLE' | translate"> - </h1> - <span class="visible-xs visible-sm" translate>API.TRANSFER.TITLE</span> - </ion-nav-title> +<ion-view class="circle-bg-dark"> <ion-nav-buttons side="left"> <button class="button button-clear visible-xs" ng-click="closeModal()" translate>COMMON.BTN_CANCEL </button> </ion-nav-buttons> + <ion-nav-title> + <span class="title visible-xs" translate>API.TRANSFER.TITLE_SHORT</span> + </ion-nav-title> + <ion-nav-buttons side="right"> - <button class="button button-icon button-clear icon ion-android-send visible-xs" ng-click="doLogin()"> + <button class="button button-positive button-icon button-clear icon ion-android-done visible-xs" ng-click="doLogin()"> </button> </ion-nav-buttons> @@ -28,10 +26,7 @@ <div class="light-bg"> - <h2 class="padding-top text-center"> - <span class="hidden-xs" translate>API.TRANSFER.TITLE</span> - <span class="visible-xs" translate>API.TRANSFER.TITLE_SHORT</span> - </h2> + <h2 class="padding-top text-center hidden-xs" translate>API.TRANSFER.TITLE</h2> <div class="no-padding energized-100-bg" ng-if="demo"> <div class="item item-icon-left item-text-wrap no-border"> @@ -64,17 +59,20 @@ <div class="item item-icon-left-padding item-text-wrap"> <h2 translate>API.TRANSFER.PUBKEY</h2> <div class="badge"> - <br class="visible-xs"/> - {{transferData.pubkey}} + <span class="hidden-xs"><i class="icon ion-key"></i>{{transferData.pubkey}}</span> + <span class="visible-xs" copy-on-click="{{transferData.pubkey}}"><br class="visible-xs"/><i class="icon ion-key"></i> {{transferData.pubkey|formatPubkey}}</span> </div> </div> <div class="item item-icon-left-padding"> <h2 translate>API.TRANSFER.COMMENT</h2> <div class="badge item-note"> - {{transferData.comment}} + <span class="hidden-xs">{{transferData.comment}}</span> + <span class="visible-xs" copy-on-click="{{transferData.comment}}"><br/>{{transferData.comment}}</span> </div> </div> + <!-- spacer in small screen --> + <div class="padding-bottom visible-xs"> </div> </div> </div> <div class="col col-20 hidden-xs hidden-sm text-center" id="home" > diff --git a/www/templates/menu.html b/www/templates/menu.html index 799470996..e08e9427e 100644 --- a/www/templates/menu.html +++ b/www/templates/menu.html @@ -1,8 +1,7 @@ <ion-side-menus enable-menu-with-back-views="true" bind-notifier="{locale:$root.settings.locale.id}"> <!-- HEADER --> - <ion-side-menu-content - > + <ion-side-menu-content> <ion-nav-bar class="bar-dark" title-align="left"> <ion-nav-back-button class="no-text"> </ion-nav-back-button> -- GitLab