From 31a83d4edb22923dd8c2ea73923e0d015b0b1757 Mon Sep 17 00:00:00 2001
From: blavenie <benoit.lavenier@e-is.pro>
Date: Wed, 15 Mar 2017 16:29:03 +0100
Subject: [PATCH] - add new ubuntu platform - fix #400 - Ubuntu build: keep
 large screen code, allow camera enable or not, ... - Blockchain (advanced)
 search: avoid row-header to be display twice during loading - Index: add
 'apple-touch-icon' head for icon in web build

---
 config.xml                                    |  11 +++---
 resources/ubuntu/img/logo_57px.png            | Bin 0 -> 5021 bytes
 www/i18n/locale-en-GB.json                    |   3 +-
 www/i18n/locale-en.json                       |   3 +-
 www/i18n/locale-fr-FR.json                    |   1 +
 www/img/logo_57px.png                         | Bin 0 -> 5021 bytes
 www/index.html                                |   1 +
 www/js/app.js                                 |  18 ++++++----
 www/js/config.js                              |  18 +++++-----
 www/js/controllers/app-controllers.js         |   4 +--
 www/js/controllers/login-controllers.js       |   4 +--
 www/js/controllers/wot-controllers.js         |   4 +--
 www/js/services/device-services.js            |  34 ++++++++++++++----
 www/js/services/wallet-services.js            |   8 +++--
 www/js/services/wot-services.js               |   2 +-
 .../es/js/controllers/user-controllers.js     |   2 +-
 .../es/templates/blockchain/items_blocks.html |  21 ++++-------
 www/templates/menu.html                       |   2 +-
 www/templates/wot/lookup.html                 |   1 +
 www/templates/wot/modal_lookup.html           |   2 +-
 20 files changed, 83 insertions(+), 56 deletions(-)
 create mode 100644 resources/ubuntu/img/logo_57px.png
 create mode 100644 www/img/logo_57px.png

diff --git a/config.xml b/config.xml
index d10778f69..a98bf4b67 100644
--- a/config.xml
+++ b/config.xml
@@ -8,10 +8,10 @@
   >
   <name>Cesium</name>
   <description>
-  An simple App for Duniter
+    An simple App for Duniter
   </description>
-  <author email="contact@duniter.fr" href="http://www.duniter.fr">
-    Duniter team
+  <author email="contact@e-is.pro">
+    E-IS PRO
   </author>
   <content src="index.html" />
   <access origin="*" />
@@ -88,7 +88,10 @@
     <splash height="480" src="resources/ios/splash/Default~iphone.png" width="320" />
   </platform>
   <platform name="firefoxos">
-    <icon height="128" src="resources/firefoxos/img/logo_128.png" width="128" />
+    <icon height="128" src="resources/firefoxos/img/logo_128px.png" width="128" />
     <icon height="60" src="resources/firefoxos/img/logo_60.png" width="60" />
   </platform>
+  <platform name="ubuntu">
+    <icon height="57" src="resources/ubuntu/img/logo_57px.png" width="57"/>
+  </platform>
 </widget>
diff --git a/resources/ubuntu/img/logo_57px.png b/resources/ubuntu/img/logo_57px.png
new file mode 100644
index 0000000000000000000000000000000000000000..4adb392cbe5cf91b106c79dd1fd341fa2d0aeee7
GIT binary patch
literal 5021
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

literal 0
HcmV?d00001

diff --git a/www/i18n/locale-en-GB.json b/www/i18n/locale-en-GB.json
index 27bf18038..53c0f096e 100644
--- a/www/i18n/locale-en-GB.json
+++ b/www/i18n/locale-en-GB.json
@@ -326,7 +326,8 @@
     "WAITING_MEMBERSHIP": "Membership request sent. Waiting validation.",
     "WAITING_CERTIFICATIONS": "You need {{needCertificationCount}} certification(s) to become a member",
     "WILL_MISSING_CERTIFICATIONS": "You will <b>lack certifications</b> soon (at least {{willNeedCertificationCount}} more are needed)",
-    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renewing your membership</a> before then.",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a> before then.",
+    "NEED_RENEW_MEMBERSHIP": "You are no longer a member because your membership <b>has expired</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
     "CERTIFICATION_COUNT": "Received certifications",
     "CERTIFICATION_COUNT_SHORT": "Certifications",
     "SIG_STOCK": "Stock of certifications to give",
diff --git a/www/i18n/locale-en.json b/www/i18n/locale-en.json
index a9dcc9286..bf6b93721 100644
--- a/www/i18n/locale-en.json
+++ b/www/i18n/locale-en.json
@@ -326,7 +326,8 @@
     "WAITING_MEMBERSHIP": "Membership request sent. Waiting validation.",
     "WAITING_CERTIFICATIONS": "You need {{needCertificationCount}} certification(s) to become a member",
     "WILL_MISSING_CERTIFICATIONS": "You will <b>lack certifications</b> soon (at least {{willNeedCertificationCount}} more are needed)",
-    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renewing your membership</a> before then.",
+    "WILL_NEED_RENEW_MEMBERSHIP": "Your membership <b>will expire {{membershipExpiresIn|formatDurationTo}}</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a> before then.",
+    "NEED_RENEW_MEMBERSHIP": "You are no longer a member because your membership <b>has expired</b>. Remember to <a ng-click=\"doQuickFix('renew')\">renew your membership</a>.",
     "CERTIFICATION_COUNT": "Received certifications",
     "CERTIFICATION_COUNT_SHORT": "Certifications",
     "SIG_STOCK": "Stock of certifications to give",
diff --git a/www/i18n/locale-fr-FR.json b/www/i18n/locale-fr-FR.json
index b492f1da8..3e54b3fcd 100644
--- a/www/i18n/locale-fr-FR.json
+++ b/www/i18n/locale-fr-FR.json
@@ -327,6 +327,7 @@
     "WAITING_CERTIFICATIONS": "Vous devez obtenir {{needCertificationCount}} certification(s) pour devenir membre.",
     "WILL_MISSING_CERTIFICATIONS": "Vous allez bientôt <b>manquer de certification</b> (au moins {{willNeedCertificationCount}} est nécessaire)",
     "WILL_NEED_RENEW_MEMBERSHIP": "Votre adhésion comme membre <b>va expirer {{membershipExpiresIn|formatDurationTo}}</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a> d'ici là.",
+    "NEED_RENEW_MEMBERSHIP": "Vous n'êtes plus membre, car votre adhésion <b>a expiré</b>. Pensez à <a ng-click=\"doQuickFix('renew')\">renouveler votre adhésion</a>.",
     "CERTIFICATION_COUNT": "Certifications reçues",
     "CERTIFICATION_COUNT_SHORT": "Certifications",
     "SIG_STOCK": "Certifications envoyées",
diff --git a/www/img/logo_57px.png b/www/img/logo_57px.png
new file mode 100644
index 0000000000000000000000000000000000000000..4adb392cbe5cf91b106c79dd1fd341fa2d0aeee7
GIT binary patch
literal 5021
zcmeAS@N?(olHy`uVBq!ia0y~yV6X&X4mJh`h8~ILRt5$Jwj^(N7l!{JxM1({$qWn(
zoCO|{#S9F**Fl)kNn>^e0|NtliKnkC`$J}aJ|l%o{ehbp7=*PvT^vI)?!BE=UK1L+
z?fCxRcP3Q_=T$MOEM!q!5aKMZ*s?CcG4ah~jU;(lx7ukRIg=S>KEC|XxUsuSxoHba
zz(fZPF0YCAnuNTBF8$7ZK5z3q`GX!RijI=^_k6GX{rRN4W%>NA*WbSht;>GP```Xw
zKF`-^eT#o*_g>FjR^6v|jNALY?2qsFlYC#d3Yk3R-S{@wKV?FHgm9B7_pBfn){;51
z+I%^iT`t~#t@mCssO*T6SL+<rlvx=*!O#A$nk%!>X%h3HT8{DsH<l)By>!B~)JNxs
z&*bEn;TyAOS@Gt~%4q&Akf(cW@?Z9+f48$)Dh1zqbtsrCFSJW^*@x|4!&k1gpKq?^
zZ1qEQ<?`ID=x-5IxebbTZuxlYf_dD+uK#Zx`eJoD<*e)3k9D3j^bJ%K;QYbJ%{AL$
zp-@*tv&Ob;sp#u*EBkokv{r_3-{n2}uJ`fPK0$8P7^jZ&yC%s5e6r{I^eI#*o7W()
z<#pf}=Axr1+cH1=JoY-|;LKuo{b|?gdd-raDz)5G`VuO&l4E&;&)JlfY**`C<9W?O
zvY)g&PtV}rE#@0^ET6CFN72hf4Ykas>ka$73TJYBU$;L>H)&SJVm6`2*E@}UA5Bq`
zQ4C>L_qUAOw#@!x+=(0Me4)QSYC9S$vbyTCPUo7Ub#yt$PA0b?fzQQ%m+Xk%oL()z
z^uL;ddx}@IY~6B&`&k>JuSYC+uw&Vbp0=wdFBdGxU0x6~{pjR^K#Px^iYhyDN;ozN
z85TOYyt%yDe%b#C8^0QrPSz@KXeyF#Jzc!9zN{%Mu2~~tuWO)$!H?C;I{LqUysLln
zqS*2YTS}9rYP~b^sVTIJ(<_}Mb>W25jPzH(j=%Z;<k-Z=c^iBDo?M#3@vG&QN8ZYu
z*=^c)`n2!(opQeWaN#?TXX_^4zGtz(>Pnl+m*6gq?t|W~j$asV{#@L@Y^`wiHv`cO
zzkSz~F2`ujT{?@snMZ8>?x?-dLT5NGKPf)@<Y<S&w|murKWzo$ZHykzTM}#>oIJBc
zui<VGyRhu_U6I_kf82VqFZfEA_rDvxkHfhC@^H&*Y46pGce^gH-g-4*f6de*|6X-i
z=Ct<sot|*J{*Qg_OdhFOnyH7wPkcFg|Fq70MOG!H`E?&w+0=cXTBLaF-`v?xw`uR{
z$eg95^vHP0w~xA;@*>)PTrzsP_4G9F*;U-9r)-I5HPCg=lb@x@d|u#2YDU|Xe~EMV
zgua{VoUWB7(RRmZ*W@=hw|xv}H1Q3tt9QNb_B6*vb@wIXB~>qqZW?5D9%1A;If3u+
zbnpK7lyxt=wdV8c-g_TmAD7D}u_IuP!?On!WqWO>+;?ZWxU*5g_wo7j`;K~__i=nO
zefid>-2WV7UT-V$maVy#-~9NcVZO!HS&R1GKQ&E|`}D5%Cw0ME%l=RL%r<jdj9gLJ
zypo98tEDVaE|zn2Uc6ZJWoI4FWsz;i?!CTRu5tbTKXs;E|ChJl3%am6ipQw*K!MzR
z%k?MkPj1Sz-Kze3YNkl*G?{y{DNBvEWV~OTxmso8QH6HB>AQV;L+?$vCMg$w`#0mI
zu!8NO7jw_0mgM`LEWCcd^{m{N%gp|E6|Zj0ydvkmihus+zf1TuU5;+C`Yx3#c~`Ng
zYSF@(RV!cg<O-fhoLSV$%9ks#zUa&akKOmL{(AkzXQ#-+e><BwSt2>?@_%=~U|Y8<
zLHp@#!*25!0j{4u@>jJ5M8bMDt#QB6bm*eai7iiyCOSO1wfZU>!(oNE@?=qoi@IH#
z)<5%q|L5qY@AZs#1HR62cKznkEg9m@koBohyzYB9gV-FKQ@j2Bv+iqJCI+Vl&A)p3
zo%Dw-Y{xH$d+lC!@_@<32F9C@uhukNF+Z}*L@6iH!enyx{I|}V?tS!&`*k`+Y|m#U
z|1%Zy&)xlHvZ^7G<;LDp=HKPH4@3SL*2I|$1{NMUranO+d13nV3@4ejAE!MJn7w`G
zgCF;F*`9yiHPiaFpxN5UQ)|EfYyJ24(C#}ETtjYoRfd1wcru`evCovNC_*bar)=84
z9|jhaI8q-4g)RDZ{BbvjQeRl-nX2E#+iJJYdKsL*AlZw5-n_qsd;fQGtQOmU_;>NL
z;F?z{le?^B9Bpi0%d++EnRub)^n_c<3vLFUD;91!{CnHyC$-^*IcHSt;)+G8ConI_
zE|Rd9S)Jx|jm5M)!!0&yrrM&b*H<)@9&zF{7inGXzWP>`^tQ{a-0B<!mutn%eMD>Z
zq>r}GmrY8(wyCP2ZvOP=a(id?#_KUIC{1E->zn7%e(r98m9vKCspn5N%9yQ<bn^|h
zy!)${ap^*a%|+%n4oNrh{5Y7E&#)=CNc>*JmZ>jxnDNf@_c~_y+S-k&cxnPuioTM>
zik0(CQf8`{{z+SOY5M6S54BUD@W!8-HBIHibNSt_mv$)}-laA3|F6%BUjK7@F4?B|
z^Z5StzunghYTi%~D(IHj_sjC1?*9pgz908I*kpaQc*D=9wTvqzwmEHEwtiAy=1e0=
z!LQ1JEADUMwLY0WL3#S6b0(U65+yq~$$oqGC#Cos*S<3|_zy7q?>lw2+`jW_R<_Nl
zOsTb#{Vqp!Gb`ycb_;L0d^$vC@um+3RYmeWEh<{Yc543@&t7@!pXcP)w{=_8*@9cn
zMW{}R|0ii!=kC0Bt$n^sq)E&&Cy^5AsV9z}ZT#~={ygJ_Y6q+9_x?C^Gj)W#aoOXV
zvC)~~#{945M)voe-aWJxdGdVW%{4A=Ef>uc=Us`LyYtJDEG_<ew}|J4E=%qelrc{1
zD80wXrZM@tj@4VAg&R)VRQ^oL%*}YBy`d$lv%6TR_FO>SBX+(w|CXII&zs*Bq^sj!
z>)P?#B4NXu`Nb6v4*q}eS=8I2&WJyKg6L&~pAR$SZq6?IaOzI$l!!wckGee6zUA=m
zc=;pykGaf+&5t_VE(X4NqS;$;)-mAn*Cnkd-h9mZKY?dqsK&WxC3p8{d(Rb^J@?+<
z%hB_!lG~LQriwh1O+D9RpSUri^3O*1ohJ9XZZl>`$*u37TV14~zh248NQU`BiF8y?
z^P{=)LM2bKliF-~95!`}GzyzdHn^*DDyd+}#koFr)y%q=>RD+X6iT%JuE!)Ier;!Q
z(C>3BmgoNZp5oVA^yk9z<>9=G)bhD^U)$%Yu%Nhbx=35UjB{zKU`DByrK}^*o7=tG
zZoI3eC*Eoj?B?yh+~z09D%pSiZLiXm%%jO{J3KOvw9XJQ-!(Z=-Q&X6T?#5}iG01Q
zf-86GRQ*pC*l@FXhEb{7tfN8yiy{kUYk9c)v&z291kSbGY{r>4)vIRpuJ8TxZ9EV1
z|K50G_I9Sray>_*eJd+fXGY#Ooc2v&S*-pcw)zL!rXB%JDRE2h^!{Gbdtt|({AuxD
zk9~8W%DYjk>+aU8GWWJOE3=nR+MIv<=9^<VmAj8hUKdX9;9hyoF{^mv><hL_nde$B
z4+soAxR>AeY4`i0j}^1tYfASSl=$=RRR3fd7j^XD-gv>#jp|ogSXlBW+sdUX?XtZh
z#liPJy-_)oZQhe}cPrm6_Vv{hd)CFWVArNKFFm4mvahslyOt&sv`?6a|5PmRxw4FN
z0cq#v96dAB_{X=~`9D5PJ|DRyN4J^%TS`b({jDv1nL&9zyHl3k7jKf2;$L=hv+6b}
zUOgj`cyq3zH(H#Rd~NcstC~ykP0M(oUG_NpUH7r=D<2<L?|-`BcP+2?nyTMi4V7&x
zHpOg+IuJO0u9EWNici}LbL1x-diC}8&25hrvNvs?w6#uq<=)*z$Im`4*y$t{YcC+v
zdo{L=g-PVrEgAFHB>}y<y<v)>Ru>xuPF?d0s`NS`*t?|0Jg>3%*14m$>{miX>g0EC
z&(E=$<o3<Ydk<fU`K;URT`zjNUffFXbA8Df6f~)_;FL?;+^+`Ld!(Hv+&#BVmi@<h
z@q33JXa1?~PIH~oddqA6dZ*&KAzaT-6|UM7IDxPE!ke!lR|Rv$yc-_w>fCzi{K4YJ
zoY{9;x1Ee-i1>4GHLvIg5rwVpg7uOj@7sl6ADG%ubgWr-Q{BA%Uo5s=n6KpLQXz3Y
ze(t$7>F?FetePfW;@Y(T*2OLLR)<%9U9A;-V9Ce6RyGC4A9X2qg>_+BT@@l1?L&%w
z+*!Kl(XMFuRm;m)Pp|(Vd}7t#6B|VfeguCIci6BxP;#lIwZQe8`^04>&rLX3ni_F%
z<)z{a>I;=LHaax3u>SOIG7<fnSaeb4DZ5>e)AIFQH!kPwPQD~k^=0Ma^v&~jHM_n)
zs}`_<o9lbSex5l8=ggEoms520%C&&t%Ow}AW`>76-!7QwYrf3?O}h8(-`6!dT94_T
z=UVXE<jHzJyNk9q8;!)@?pqfUX>#rs+hvoBCcM6vXZ-ubG;c?>2s{6q)OX$e8-Dz)
zVB_7>vn_Wr2cM-!=-2I2M8u0fJaGI|XJ7n$AK!s}YvVs(pZ?!-|CPLwT^gM~Zg@1k
zDf7}^b>q)lxqUac^(*Y2dz$@Qj?j{L?vLrAM|QY&xJO)5@tEz|{A6d^l2tOZ6ld=}
zbm8#SoEK6jcl>%#@ybHqu2kBSlk-mf`Q`=Jg%YoPICXmS&x(UgV!FRt4jpourWbu_
zMNsUne<CGo<|Tb;@cgz+HYMNc_WPv8$~%7dWp{M;Ik^0|z527{#B2TD)l09;Omt<m
z>@<J-J^X>l!zoRl)c9-E^hADV8n2aCHcs84XJmbM)7k$e(--Yybbj94Z<lm+dSp!b
zU6;D=yJug}NiR34wUe*@_U74%i87~7pB4<}DBju8)3d<)`Z|^J7ae7@c8R|K(PZSC
ze*fU&DWM^Ok%7&55<8rlJ@e)tI2wB^*|IrNbdJ`;ujSJhzGi$k+on-v@3k4zEZ#4j
zll6=F{_GFudBaz3)wR1iYe&GFrG9ZGv$kH}S9!Ahn*Y5ycipc4wfS&Bo|Dh+|FYP{
zHD&K_Svl3sdptY0I&#w!?{#%W9~WI`KKyy=!(L9!JLPMgYPbD)cja|-&8n>#lRojE
zo$x-J<L9HFbDjhi|1<g8B){9b>2Lx2DM#!5za^P>m#Y}=d;ReE*@yEL_DDQgyC<@<
za;ebAx!*6&WotEKkC*#)jPI|>_bVS?-@d+W?*xUpxz))xt>l%z{W&7`R7~u=N6q`N
zi$A-AYJT11UArxyJg5GjdwHDx%w5wRx1KV4y7p1tldxGw#Y?nJd7u2r+ae-s74)g@
z3-k66RtY7wy?f=B{ay9><k`tn+(n)}TYaT!f9Cw(7bezSP0g#%4gUQ3^QVYSKQ4=D
zzd3ok+vSKkPfVS?b-DRD$3A(RS^IC<JzKbTQdEYN%}SHJJ2sw`bzc?NWKJ?o+4<$%
zKDV>0%;svpx4ZDa{Z^F!;->U7HH{xSI>efFEO$v?zPI7VwJFD}<<~9PvE)zBBtO=D
zw}XE;Ppka-*ZXk(xlIufiHGLA`Ir^l&9iJLr}Vl&^(k&j2X@KY#7J@6wfy<uKyBz$
zQ{EH5x8Kh>`1-3+&5w?0jCW==s{YC`-*j`0&#VdOW`BP5sVcMb>&o8Ur@q&|m9Vwb
zes?aXJ!$Tx8&dDH@A;g6opfY{s?hVR9JdO3tr|PbbS6)q6DIj5?0E0nTP&{&+cp)v
z);0fl=d-bgpWXLR#>LB~9Fm>ySfV0yrR4OJjp@%Mrhj`m`+e5sx2w<eZGN|An?UP1
zEfX&tE8)#*D=vxcuJcw~J8wak3HQ9qYwpBsZ+5@4>(mb0bdPu2=kfjivdZh-kHc@D
zv%Ju^b^G^B^-RS(%}=J)iy2%OTv+{SyUeOvx05e)+_kKns_#?z<EXT@Z_tICIup`o
z{rUNvL0wPe^!j@z=l5qn%bC}fHuFL6t1sKG3mPtr*IqUMb%Dm+XD7MU0=N&B)=927
zvHZ;mKAWwn5wQma#Ewp}KlkL{?sbdPzx$Qi>9cg*nN+{&nvS0Cx7%l>@;AD&{=Y6;
zUze!L<ZL`+jmYM}J=$v8*W=gjTVu}~uld&JLu&j=zq#J`<14&_N?p#p+m&cxa<psh
zQJ#Ifbe<j%?bLkwvhdxl8LRGkHm?0_Rk50TPSl3WCQ6V0Zv9p;|DC9zkMTQ?mH#sy
z{O)=cWqxguLyKI>uG7gqllF2?j+^=KsO`hlQridOQQ6uRv6@v$MxmKg9w*5vY2}LA
z3MQFYM_=y?nJRunU3#OoX|7e)EtAx~^HUz&VpuyhsU`0rmv2Gmu_#t|U*_tF1*a~q
z&M95avDxBW(ypzyChv~jn7EE<{c7iLT}xI<pIVsm`^WrU*}~#odyky7Rq|n<#+a|+
zy6Na)wZjJ)M8amDn{`z<<RUAtjjn8Rc<1To3&q3QB)j@%oitNj6H~qR*FIJGybQMM
z+DEw^)}~#t6ALQ)BIchl$y7jQ-$4V*ix*w5?MZxI@A@UaNVMbwSLYQbm8j;-++8o1
z=p5<pjBl~&o@-+>B_SZAIB}L~3tLW%w$x<7rm0HKJlCTCgswg0#kWUk+XMD#_pc_O
zTYvF+eAP<xx3+}>&eh$Wvf6R}nxcIMhyHX)tab};+^BI(!$R-S?o$u;zR3<f+HY-L
zm{;aeXn5~U=3%D)+Z3c{eEJhKeebj1vKrY-tanYmozKr3*u}GEPj9oX?oQ?J-I|~B
zS&icEzYSk@Gf?uM#_HW)rdsH4%zV7V`TOQ>DWzlUgu;t|zMIbXI-k|(yF}v$i)Rch
ryZuvjcCFpJamBmkuP)dB-}LeRg{Cmx(2M6l18EGNu6{1-oD!M<w_DY;

literal 0
HcmV?d00001

diff --git a/www/index.html b/www/index.html
index b22e78549..18dad2743 100644
--- a/www/index.html
+++ b/www/index.html
@@ -6,6 +6,7 @@
   <meta name="apple-mobile-web-app-capable" content="yes">
   <title>Cesium</title>
   <link rel="icon" href="./img/favicon.ico">
+  <link rel="apple-touch-icon" href="./img/logo_57px.png">
   <link rel="manifest" href="/manifest.json">
   <!-- build:css dist_css/cesium.css -->
   <link href="css/ionic.app.css" rel="stylesheet">
diff --git a/www/js/app.js b/www/js/app.js
index 1bbfe6941..2dbd8086f 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -315,8 +315,10 @@ angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'pascalprecht
   $rootScope.rootPath = (hashIndex != -1) ? $window.location.href.substr(0, hashIndex) : $window.location.href;
   console.debug('[app] Detecting root path: ' + $rootScope.rootPath);
 
-  // removeIf(device)
-  // Automatic redirection to large state (if define)
+  // removeIf(android)
+  // removeIf(ios)
+  // removeIf(firefoxos)
+  // Automatic redirection to large state (if define) (keep this code for platforms web and ubuntu build)
   $rootScope.$on('$stateChangeStart', function (event, next, nextParams, fromState) {
     if (next.data.large && !UIUtils.screen.isSmall()) {
       var redirect = !$rootScope.tour && !event.currentScope.tour; // disabled for help tour
@@ -326,7 +328,11 @@ angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'pascalprecht
       }
     }
   });
+  // endRemoveIf(firefoxos)
+  // endRemoveIf(ios)
+  // endRemoveIf(android)
 
+  // removeIf(device)
   // Automatic redirection to HTTPS
   if ((csConfig.httpsMode === true || csConfig.httpsMode == 'true' ||csConfig.httpsMode === 'force') &&
     $window.location.protocol != 'https:') {
@@ -370,21 +376,21 @@ angular.module('cesium', ['ionic', 'ionic-material', 'ngMessages', 'pascalprecht
     .then(function() {
 
       // Keyboard
-      if (window.cordova && window.cordova.plugins.Keyboard) {
+      if (Device.keyboard.enable) {
         // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
         // for form inputs)
-        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
+        Device.keyboard.hideKeyboardAccessoryBar(true);
 
         // iOS: do not push header up when opening keyboard
         // (see http://ionicframework.com/docs/api/page/keyboard/)
         if (ionic.Platform.isIOS()) {
-          cordova.plugins.Keyboard.disableScroll(true);
+          Device.keyboard.disableScroll(true);
         }
       }
 
       // Ionic Platform Grade is not A, disabling views transitions
       if (ionic.Platform.grade.toLowerCase()!='a') {
-        console.log('Disable UI effects - plateform\'s grade is not [a] but [' + ionic.Platform.grade + ']');
+        console.log('[app] Disabling UI effects, because plateform\'s grade is [' + ionic.Platform.grade + ']');
         UIUtils.setEffects(false);
       }
 
diff --git a/www/js/config.js b/www/js/config.js
index fc82d1666..d4a810825 100644
--- a/www/js/config.js
+++ b/www/js/config.js
@@ -16,26 +16,24 @@ angular.module("cesium.config", [])
 	"timeout": 10000,
 	"timeWarningExpireMembership": 5184000,
 	"timeWarningExpire": 7776000,
-	"useLocalStorage": false,
+	"useLocalStorage": true,
 	"useRelative": false,
-	"initPhase": false,
-	"expertMode": false,
-	"decimalCount": 2,
-	"httpsMode": false,
+	"expertMode": true,
+	"decimalCount": 4,
 	"helptip": {
 		"enable": true,
 		"installDocUrl": "https://github.com/duniter/duniter/blob/master/doc/install-a-node.md"
 	},
 	"node": {
-		"host": "g1.duniter.org",
-		"port": "443"
+		"host": "gtest.duniter.org",
+		"port": 10900
 	},
 	"plugins": {
 		"es": {
 			"enable": true,
 			"askEnable": false,
-			"host": "g1.data.duniter.fr",
-			"port": "443",
+			"host": "data.gtest.duniter.fr",
+			"port": 80,
 			"notifications": {
 				"txSent": true,
 				"txReceived": true,
@@ -45,7 +43,7 @@ angular.module("cesium.config", [])
 		}
 	},
 	"version": "0.11.6",
-	"build": "2017-03-14T16:13:13.246Z",
+	"build": "2017-03-15T07:26:50.512Z",
 	"newIssueUrl": "https://github.com/duniter/cesium/issues/new?labels=bug"
 })
 
diff --git a/www/js/controllers/app-controllers.js b/www/js/controllers/app-controllers.js
index 62866dbf1..e2384e581 100644
--- a/www/js/controllers/app-controllers.js
+++ b/www/js/controllers/app-controllers.js
@@ -105,10 +105,10 @@ function AppController($scope, $rootScope, $state, $ionicSideMenuDelegate, $q, $
   ////////////////////////////////////////
 
   $scope.scanQrCodeAndGo = function() {
-    if (!Device.enable) {
+    if (!Device.barcode.enable) {
       return;
     }
-    Device.camera.scan()
+    Device.barcode.scan()
     .then(function(uri) {
       if (!uri) {
         return;
diff --git a/www/js/controllers/login-controllers.js b/www/js/controllers/login-controllers.js
index 611796945..27854b8d0 100644
--- a/www/js/controllers/login-controllers.js
+++ b/www/js/controllers/login-controllers.js
@@ -27,9 +27,7 @@ function LoginModalController($scope, $timeout, CryptoUtils, UIUtils, Modals, cs
       return;
     }
     // removeIf(no-device)
-    if (window.cordova && cordova.plugins.Keyboard) {
-      cordova.plugins.Keyboard.close();
-    }
+    Device.keyboard.close();
     // endRemoveIf(no-device)
     UIUtils.loading.show();
 
diff --git a/www/js/controllers/wot-controllers.js b/www/js/controllers/wot-controllers.js
index 5690ed8df..194a710b7 100644
--- a/www/js/controllers/wot-controllers.js
+++ b/www/js/controllers/wot-controllers.js
@@ -382,10 +382,10 @@ function WotLookupController($scope, $state, $timeout, $focus, $ionicPopover, $i
   };
 
   $scope.scanQrCode = function(){
-    if (!Device.enable) {
+    if (!Device.barcode.enable) {
       return;
     }
-    Device.camera.scan()
+    Device.barcode.scan()
     .then(function(result) {
       if (!result) {
         return;
diff --git a/www/js/services/device-services.js b/www/js/services/device-services.js
index 6e2598e69..573e1ecb9 100644
--- a/www/js/services/device-services.js
+++ b/www/js/services/device-services.js
@@ -38,7 +38,7 @@ angular.module('cesium.device.services', ['ngResource', 'cesium.utils.services',
       // endRemoveIf(device)
 
       function getPicture(options) {
-        if (!exports.enable) {
+        if (!exports.camera.enable) {
           return $q.reject("Camera not enable. Please call 'Device.ready()' once before use (e.g in app.js).");
         }
 
@@ -133,19 +133,41 @@ angular.module('cesium.device.services', ['ngResource', 'cesium.utils.services',
       exports.clipboard = {copy: copy};
       exports.camera = {
           getPicture : getPicture,
-          scan: scan
+          scan: function(n){
+            console.log('Deprecated use of Device.camera.scan(). Use Device.barcode.scan() instead');
+            return scan(n);
+          }
         };
+      exports.barcode = {
+        enable : false,
+        scan: scan
+      };
+      exports.keyboard = {
+        enable: false,
+        close: function() {
+          if (!exports.keyboard.enable) return;
+          cordova.plugins.Keyboard.close();
+        }
+      };
 
       var started = false;
       var startPromise = ionicReady().then(function(){
 
-        var enableCamera = !!navigator.camera;
-        exports.enable = enableCamera;
+        exports.enable = cordova && cordova.plugins;
+
+        console.info('TODO');
 
         if (exports.enable){
-          var enableBarcodeScanner = cordova && cordova.plugins && !!cordova.plugins.barcodeScanner;
+          exports.camera.enable = !!navigator.camera;
+          exports.keyboard.enable = cordova && cordova.plugins && !!cordova.plugins.Keyboard;
+          exports.barcode.enable = cordova && cordova.plugins && !!cordova.plugins.barcodeScanner;
+
+          if (exports.keyboard.enable) {
+            angular.extend(exports.keyboard, cordova.plugins.Keyboard);
+          }
 
-          console.debug('[device] Ionic platform ready, with [barcodescanner={0}] [camera={1}]'.format(enableBarcodeScanner, enableCamera));
+          console.debug('[device] Ionic platform ready, with [camera: {0}] [barcode scanner: {1}] [keyboard: {2}]'
+            .format(exports.camera.enable, exports.barcode.enable, exports.keyboard.enable));
 
           if (cordova.InAppBrowser) {
             console.debug('[device] Enabling InAppBrowser');
diff --git a/www/js/services/wallet-services.js b/www/js/services/wallet-services.js
index 602aa1d31..d4f4fd2f0 100644
--- a/www/js/services/wallet-services.js
+++ b/www/js/services/wallet-services.js
@@ -360,7 +360,7 @@ angular.module('cesium.wallet.services', ['ngResource', 'ngApi', 'cesium.bma.ser
             //  - same wallet uid
             //  - is member
             //  - has a pending membership
-            //  - is not expired
+            //  - is not expired (in sandbox)
             //  - is not outdistanced
             //  - if has certifications
             //      max(count(certification)
@@ -388,7 +388,8 @@ angular.module('cesium.wallet.services', ['ngResource', 'ngApi', 'cesium.bma.ser
           idty.needSelf = false;
           idty.needMembership = (idty.membershipExpiresIn <= 0 && idty.membershipPendingExpiresIn <= 0 );
           idty.needRenew = (!idty.needMembership &&
-          idty.membershipExpiresIn <= csSettings.data.timeWarningExpireMembership && idty.membershipPendingExpiresIn <= 0);
+                            idty.membershipExpiresIn <= csSettings.data.timeWarningExpireMembership &&
+                            idty.membershipPendingExpiresIn <= 0);
           idty.canMembershipOut = (idty.membershipExpiresIn > 0);
           idty.pendingMembership = (idty.membershipExpiresIn <= 0 && idty.membershipPendingExpiresIn > 0);
           idty.certificationCount = (idty.certifications) ? idty.certifications.length : 0;
@@ -701,6 +702,9 @@ angular.module('cesium.wallet.services', ['ngResource', 'ngApi', 'cesium.bma.ser
       if (data.requirements.needRenew) {
         addEvent({type:'warn', message: 'ACCOUNT.WILL_NEED_RENEW_MEMBERSHIP', messageParams: data.requirements, context: 'requirements'});
       }
+      else if (data.requirements.wasMember && data.requirements.needMembership) {
+        addEvent({type:'warn', message: 'ACCOUNT.NEED_RENEW_MEMBERSHIP', messageParams: data.requirements, context: 'requirements'});
+      }
     },
 
     loadSigStock = function() {
diff --git a/www/js/services/wot-services.js b/www/js/services/wot-services.js
index c77edffff..e408f6d91 100644
--- a/www/js/services/wot-services.js
+++ b/www/js/services/wot-services.js
@@ -69,7 +69,7 @@ angular.module('cesium.wot.services', ['ngResource', 'ngApi', 'cesium.bma.servic
               //  - same wallet uid
               //  - is member
               //  - has a pending membership
-              //  - is not expired
+              //  - is not expired (in sandbox)
               //  - is not outdistanced
               //  - if has certifications
               //      max(count(certification)
diff --git a/www/plugins/es/js/controllers/user-controllers.js b/www/plugins/es/js/controllers/user-controllers.js
index ba76816c2..82280fc82 100644
--- a/www/plugins/es/js/controllers/user-controllers.js
+++ b/www/plugins/es/js/controllers/user-controllers.js
@@ -241,7 +241,7 @@ function ProfileController($scope, $rootScope, $timeout, $state, $focus, $transl
   };
 
   $scope.showAvatarModal = function() {
-    if (Device.enable) {
+    if (Device.camera.enable) {
       return Device.camera.getPicture()
         .then(function(imageData) {
           $scope.avatar = {src: "data:image/png;base64," + imageData};
diff --git a/www/plugins/es/templates/blockchain/items_blocks.html b/www/plugins/es/templates/blockchain/items_blocks.html
index 7fceae146..8479ab0fd 100644
--- a/www/plugins/es/templates/blockchain/items_blocks.html
+++ b/www/plugins/es/templates/blockchain/items_blocks.html
@@ -1,18 +1,5 @@
 
-
-<div class="item row row-header done in hidden-xs hidden-sm" ng-if=":rebind:!expertMode">
-  <!-- compact -->
-  <a class="button button-text button-small ink"
-     ng-class="{'button-text-positive': compactMode, 'button-text-stable': !compactMode}"
-     ng-click="toggleCompactMode()" >
-    <i class="icon ion-navicon"></i>
-    <b class="ion-arrow-down-b" style="position: absolute; top: -2px; left: 4px; font-size: 8px;"></b>
-    <b class="ion-arrow-up-b" style="position: absolute; top: 10px; left: 4px; font-size: 8px;"></b>
-    <span>{{'BLOCKCHAIN.LOOKUP.BTN_COMPACT'|translate}}</span>
-  </a>
-</div>
-
-<div class="item row row-header done in hidden-xs hidden-sm" ng-if=":rebind:expertMode">
+<div class="item row row-header done in hidden-xs hidden-sm">
 
   <!-- compact -->
   <a class="pull-left gray button button-text button-small no-margin no-padding"
@@ -25,18 +12,22 @@
   </a>
 
   <a class="no-padding dark col col-header"
+     ng-if=":rebind:expertMode"
      ng-click="toggleSort('medianTime')">
     <cs-sort-icon asc="search.asc" sort="search.sort" toggle="'medianTime'"></cs-sort-icon>
     {{'BLOCKCHAIN.LOOKUP.HEADER_MEDIAN_TIME' | translate}}
   </a>
   <a class="no-padding dark col col-header"
+     ng-if=":rebind:expertMode"
      ng-click="toggleSort('issuer')">
     <cs-sort-icon asc="search.asc" sort="search.sort" toggle="'issuer'"></cs-sort-icon>
     {{'BLOCKCHAIN.LOOKUP.HEADER_ISSUER' | translate}}
   </a>
   <div class="col col-20">&nbsp;
   </div>
-  <a class="no-padding dark col col-20 col-header" ng-click="toggleSort('number')">
+  <a class="no-padding dark col col-20 col-header"
+     ng-if=":rebind:expertMode"
+     ng-click="toggleSort('number')">
     <cs-sort-icon asc="search.asc" sort="search.sort" toggle="'number'"></cs-sort-icon>
     {{'BLOCKCHAIN.LOOKUP.HEADER_BLOCK' | translate}}
   </a>
diff --git a/www/templates/menu.html b/www/templates/menu.html
index 22b8b1538..39ef5fcaf 100644
--- a/www/templates/menu.html
+++ b/www/templates/menu.html
@@ -167,7 +167,7 @@
         </ion-item>
 
         <!-- scan QR code -->
-        <ion-item menu-close class="item item-button-right" ng-if="$root.device.enable">
+        <ion-item menu-close class="item item-button-right" ng-if="$root.device.barcode.enable">
           <span translate>Scan</span>
           <button class="button button-stable ink" ng-click="scanQrCodeAndGo()">
             <i class="icon ion-qr-scanner"></i>
diff --git a/www/templates/wot/lookup.html b/www/templates/wot/lookup.html
index 3e0b66e68..a4ffcfbd7 100644
--- a/www/templates/wot/lookup.html
+++ b/www/templates/wot/lookup.html
@@ -5,6 +5,7 @@
 
   <ion-nav-buttons side="secondary">
     <button class="button button-icon button-clear icon ion-qr-scanner hidden-no-device"
+            ng-if="$root.device.barcode.enable"
             ng-click="scanQrCode()">
     </button>
     <button class="button button-icon button-clear visible-xs visible-sm"
diff --git a/www/templates/wot/modal_lookup.html b/www/templates/wot/modal_lookup.html
index adfff54a0..4716864fd 100644
--- a/www/templates/wot/modal_lookup.html
+++ b/www/templates/wot/modal_lookup.html
@@ -20,7 +20,7 @@
 
     <div class="visible-xs visible-sm text-right stable-bg stable">
       <button class="button button-icon button-small-padding dark hidden-no-device ink"
-              ng-if="::$root.device.enable"
+              ng-if="$root.device.barcode.enable"
               ng-click="scanQrCode()">
         <i class="icon ion-qr-scanner"></i>
       </button>
-- 
GitLab