[Sugar-devel] [PATCH Browse] Error page SL #3500

Manuel Kaufmann humitos at gmail.com
Tue Sep 18 12:55:28 EDT 2012


Added an "Error page" with Sugar style that informs the users about
they are not connected to the internet when the page can not reached
for any reason.

This patch contains a HTML template (error_page.tmpl) that is used to
generate the error page with the correct language.

Signed-off-by: Manuel Kaufmann <humitos at gmail.com>
---
 browser.py                   |  31 +++++++++++++++++++++++++
 data/activity-web.png        | Bin 0 -> 6064 bytes
 data/browse-view-refresh.png | Bin 0 -> 481 bytes
 data/error_page.tmpl         |  53 +++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 84 insertions(+)
 create mode 100644 data/activity-web.png
 create mode 100644 data/browse-view-refresh.png
 create mode 100644 data/error_page.tmpl

diff --git a/browser.py b/browser.py
index de546f2..c9bcc1c 100644
--- a/browser.py
+++ b/browser.py
@@ -58,6 +58,9 @@ _NON_SEARCH_REGEX = re.compile('''
     ^file:.*$)
     ''', re.VERBOSE)
 
+DEFAULT_ERROR_PAGE = os.path.join(activity.get_bundle_path(),
+                                  'data/error_page.html')
+
 
 class CommandListener(object):
     def __init__(self, window):
@@ -462,6 +465,7 @@ class Browser(WebKit.WebView):
                      self.__mime_type_policy_cb)
         self.connect('new-window-policy-decision-requested',
                      self.__new_window_policy_cb)
+        self.connect('load-error', self.__load_error_cb)
 
         try:
             self.connect('run-file-chooser', self.__run_file_chooser)
@@ -603,6 +607,33 @@ class Browser(WebKit.WebView):
         downloadmanager.add_download(download, browser)
         return True
 
+    def __create_error_page(self, url):
+        """Create the error page in the correct language"""
+
+        data = {
+            'page_title': _('You are not connected to the internet'),
+            'title': _('You are not connected to the internet'),
+            'message': _('You will need to connect using the '
+                         'Neighborhood<br />view in order '
+                         'to continue browsing'),
+            'btn_value': _('Try again'),
+            'url': url,
+            }
+        filepath = os.path.join(activity.get_bundle_path(),
+                                'data/error_page.tmpl')
+        html = open(filepath, 'r').read() % data
+
+        f = open(DEFAULT_ERROR_PAGE, 'w')
+        f.write(html)
+        f.close()
+
+    def __load_error_cb(self, web_view, web_frame, uri, web_error):
+        """Show Sugar's error page"""
+
+        self.__create_error_page(uri)
+        self.load_uri('file://' + DEFAULT_ERROR_PAGE)
+        return True
+
 
 class PopupDialog(Gtk.Window):
     def __init__(self):
diff --git a/data/activity-web.png b/data/activity-web.png
new file mode 100644
index 0000000000000000000000000000000000000000..d27964350a22e13fef454fb1923a722b5d64a921
GIT binary patch
literal 6064
zcmXw71yoe;)22Zhln{_cQX1*br9)t8kZxEIess5jbVw-OCE(Jrgn-1--7DQK^<B>Y
ze0$E_d+zT0&O38wo at XLPQ(X}cn*tjN2?-CRB&QABL!U1!4B$H!mGA+$p?S!FK41YK
ze=MtL;Q57{l7R;j5^LP^h0MNGPXqk;+EX6vspD$n>1_eAM)LOd=CpTl^suyWv*vV#
z*nT?_qd-C;dk2z}{_tP+VUCfi@$7VPXEPFv9QXZPUw6C(Q~;x-zuU{n(rUooLD=PN
zN?EsX(kvimYPOU>Eq7AlL%^4mD7~}9e5G9-%HdDb{0(zodl5F22W~usvM6<Ue{IM)
zVfO^vxYXR~?N^x=7<(ENbekSm^ByxF58G!A{halMsBG9jX4&9tl3u<*nwP?;9eI3x
zi=?U$K)oob7()G>;fx2@^1scFzW((E>{#=xzxZpoZlprtOgGs=;x6PWtcD>$$c>Q}
zVzHAy-+xvs!z#A_7m^GP4I(K;TY9lKiZYJkA6Z0x8EK))RLZsBL?O?uHi>#qe#3O~
z_G|7Ob=466iT)b>i3W^Y=EYG0F{lQRK#hjG_Rd@*w3We{@CJ(;4+c%$8LgDpW(&2?
z;#|X9Gg-3>ZGFjJjoOL&XhW_r(SA{=jW)@@+%*<_9US)JNWBe;-bQfW$Nf1%&ik#5
zHVd%Nlw<PAsPgsG6Uv*e<B$YgScZnDEpat)njR`m?WcELzDp>9&gA`#a$fWn&xUfY
z5rAJx>&u8FiiIP;y!m25PCyI~!P7_cqds{*Bh+juOOtyq){{jO0EM4N;pqYjoQEWY
z=ulpbj|}Rrkwsegw`vhAal2;QXKmLl)${10qz}t0DD?j$>ks+!M-}4X;okgFqCN-3
z at X))7u6LO}qc}6PF)%QSd=wo5fncGbI4w4PX=xE5B_;kz%+AGC($<!}vSRA%>q|}@
zZ?DRRdr$P=EcfST at cXuG=<~a|3)Touw}j`8Z5I?4hD*^(>FJSLT3X&e90%EYdA%nc
zanvy}QKKb9GIw(NoSRGC($a#35mx8ho8C2s2ir-|4I7U62B_hK1VuUUSV&tvem-(y
zLR*ZQ0IA#j>u@?3pRn+5gU`T!V$^|W$$4MDeQUjG)nt*gwPij$JXBTdW5k#y$mYY{
z^x~i}Qa66p%|G(8tE5Yv`OwPBN>fWq+TESU<vMv+mF3k2&C?Ag0gZ&`+~izhZtm!Q
zO=tY-vDw*OL<D+EYpcDZV_d{UJd&gUZb7%b>~Ku;vtr1OLgVrH#l^+i1_mH|``y@=
zbx-%(lK$r-f*W4vXJ_OT6xuB_`<J|uTpl-wtu42srDpjG5;Y;J;-5d0)6z&wWas&3
zxZMXq48t*HfW%w&HQBC;MFm>I at 8#v#d1Jpeo&*I1;43SfF4w&=FL4P7CgJcOo&gpX
zbl1nL+oziY`P;8ZNg;bvdpHH=+)9>~4C3PA`CjQf1Z_a{<mK=atNlq!Xd=FUp~m!k
zXlSEx*0i9d#aEXJ>V2G>MocB)pRuv=5iVX<R at U}!ucEN9F#2f!@DMRmHO(+8k(aQy
z=V0o0C{SNtFXybdj{a!Xd7eS|Qoc4SjNsET7d!iAPXx{u0#W5Va&f_L=6 at OiJxod>
zW at BS(_?McRDzB#YWlm#!VPPl?)6p*$cq34^brfss_>WFB3&$%w at g&{3<bk1)OeenW
zQ&UrJ2Xl2K1JibU`}>)hnM949wqw+$f%Ef20+Nz>uqcAKqZd&y<5n-{W#Pzy&GorD
zOJLL5rNe7&u9KK|sER_`Xnrv_tQ0R{2M11^#!x9~>F$=<m1d8q<BmJ^rN`aL63dNC
zAau<xUY7Fm at JQ?EBu_M=qoW%`-9msZIY&jPc?<R93Pwauwr~>uv}nKUBgFmfxzlP#
zz_O#FqN2Tv3u$8>5FYbCZTmLw45=go{bTZ^BI4umF)%SxtCu?hM7PKCY>!vkMV1#|
z7}r_nN2Jluxom2TyOENRkhuT-^O{MA96JK)d&&0WtM6mU>^>q at -_&BU$$6r>Dh9CX
zVt2BzWcagLKtTH$1ipU>0k*`(#(K6u2^=%VCjw34PDJ^a`T=3tVm{jQ#=jaGPIeNV
zhP%piN`4Q<jHO|8u8w8$+0NvQ$?*vY^j+ at Hrq*~j8$Yl14!z?|bLx#I>5h+XXJ|hz
zN;f4|YXLNG4lw$w7O);cHur0+PSH;dU;|;VgN&VA0G3C~t;{XkC+o1biwTu{Kc^LV
zjA87n?onoFG<Pf*0FjSR^VuaIAK%pMtO~WXmsit&UNtK2?seexj{7qecf#_vHsb+a
zXmDIpWr~&_n&{6RODTR!AV!FBN}HPvUX{AHE at z8;Qnsqkf!yD?PfSdt)DU2V83uj@
ze7^tZH6$d#Ig^#H4$GB6m2JM&n~PcfcN%nabJNq?JMO5gveIfG{>zB(`K|v)8u_3g
z$@cd44ci<ccNtp&cWf0KWfs=Z9J_xVg=F*d^M<C)0PGk~6WZFu at TuGy!e?xr9v=V*
z#U9x^JCiWOp~jpJ4i298xW|k2Mr68iCzxn4#iljslO-B)?ba|DEWh-lgG0F;2{A!D
zwK$uhwz{fn^gC+1&dE36dZYADB;70C=1RGN8@(@>Y~c_?LqoY)8c{EfzmF)a_V)H0
z>&JgbzR|BLg&!{dipxVMZ^E6mQj at RsrVR)-Pu0}ZE8co<Iyyf7_4gNJO-<VO!>9C;
zl4h@#v$L|a at uRp(zJHgZD1{)?%+(vGUUKvpVR_M7TU%@C>K6Il5;M+pZJzE_*KPJE
zGAPQ;?9Nmf{TbOs6zJ*df at J3~>#UmDD%e8XFK()~?Af$>Q+JM!%><n&)d0PEqQVgX
z_}zBK=@9$2Ha5NZKd}-^i at vT_H)b0T)8FHEM@~u6*4jvPJA}h55(NOjQi)|`FETRB
zPnR!s1Q<~nCVWj#XZ{kMW-;g~ulE71RifLkTti7sZJL_+IY+#CqucS=6 at pq}!_7ni
zq#kSQqO(g6508e%MtjMc^77cJsSktij_2zGVy8KJD6#%x00d&#V*m!P^?#upnk^|R
zV)|qIedv5lk_+26;Nfz1VfRQPPowZZFmHfm(GysWXhqjqn1LY-$Pge~(%Zk^T;*6-
z0Gv#828YwSmqp3^5b&UyEof-?(1LK4pO+}Y@*1H>Km>p#3-~$J)tm^&hd at cm`*niG
z+ at J7+`JamXW_w3RGwSXDd?vc4w2b;yz=QNGq6znbokF5QJzHCaXVj>{WM=;EvSG^V
zi5Ul)EL$w??NI1V*%yKRla$ZtETJYnE+dyV{0Ia>#fuj76>0z=rICbF>tLZ#<rT|>
zyQrdD>vBG~<Vo7QeP(Bl*0lkav|1pR7d*n;g#IkIdZ*S%{&(`dsfUR;Mwk5cYxjoa
z7Qh5vi`6iuefhM`WwY|858B%K&gGZ at 19=k`6&E`+S0;zN5%r2D24{oO69!~KpqQ;R
zrg~GrE0u at e%Bz$nTMH6<w{WnrJv|<iQDWSD{rnn3wTQxbeJ0a{Yp3Y5<=lg0)YapY
z4-NhAs(j_if21+LxxKv|df7ZbZvaR06*e$1Af{0eN&6F06zitfh|WA?Ze=AW?CrWe
zn&UpKw8CP{nQoUa%FVsD<0CWAF(hV4WUAXdiGT=WKPgvA*N123&}*R$-WkO7^vJ}R
z*=qfD0gD|=*~flMPTu at I%XOQ7dz&w}RLI1 at AnTJpwY9|vlnx7HXSe>u?1uKkfpGe4
zX&z at a<{okj7Z-KmrGx9cPuD1KnTU(L97xc3A(n%IS~o-IVd8!l?1-SJhwGu3vN7 at N
z>?@BXq8N|CT`_5vf}baHL at B&%OD=+~UaU-g)zOSgZMu;WSV?r3-C>ydsz-=tCv60a
zqG`O6W<_Qa6r6=;nSP=v7)C&>e3D3XD+sY8$Z2S11LJ4+QxBFnQQa0xez1;kdL6G+
z%?se@%FlHK+!bR9swCoiPmFX96a8iz;2)t94E5yCd3A|}gM%|<*pd1+27a(qW~$s%
zMvrB!+hh^T{r-J%8_c%gSB>*4AQ29oz8>^<U`o;>Vx;KMCFw>$SdCicz-UZ)Rsa(*
zC?+v7IalE0eXrh1PEOtk&4b_gOALy!ul0$%^)><6lnPyrkv(!CfhG>eq?{H+oRgIW
zxd_mgC2l!BJ|;`wi+TI*otgkT=i;Z+jXsPu=+$Iy9m!44mrv$be2>58|Nb4c-yOSI
zW!lW77emcu?csCceQ)M)!nYAhsdR53G^WI#Joak+^@%D`t_9yN#>e9xzkZv|Ix_jV
zubG*Hr<?!qe~Wq_jjwh-)<sY!ME$f)<=ftvzzhz!yE^T`;p%N8Kt)9zV)9VW727S9
z8wcRj-P;>JRFrHg#kwNQ$G6Gi{>jZv6NL3cGdf4qyPt_iUK<8Kz83x0Q9)Nmm7bS(
z%ref*GR(J!k#c1 at HaaRIGXLQ$BD;Sh`StXgk+O0u0~1hKCS~D>yGS*!<t2-Wfb8b&
zIV3W*9$eIAPh|`~Ic3l*C8;%)%V*@|=;B9+s*QpS<xg(?hl*V)4AEjjU7_^kkvzC8
zx^~c at rw+Xm`qIGWDhHyDr$;}8V-7wZiUA&FBo9 at L0E<CH6akHha-OzsIFN1%MUcew
zl)Siw>#)wx&y%iaku}~!8_JjJYHMlPQd_A8)01=0GY<az`NM)Uu-g%jNkFYM8g3WC
z9DBkw-TGmS$N0rybBwxR=v&Iwfa~SR!@E~QJ7z%GIv_KVKn&rs(>hlt>#~O;eS^_*
zbpiy)CUUd|=p6G#vF7Cc3{qvhS0^X63<F7fe`nl;4u1b*d<ih_(7=OFyJ_G_7>%7I
zJ2|d$`On6=dNb{p>wKxAu=Uy*WL+Z0*6bWH=FFY_eVtsZZ3IG?jbmYPk$oQ2&T?)i
zubIm%R7RYYo?g;s?PqS at m3RpvWwbue#>e>|(&;a|8itmET)BWS(bm>ZapX|K at p#Js
z0C<S~UHULWiKxH7pApu>53mP|JU6Z-_DzKYyLx30!0k2uRfTTey!3S#&uDEZJ|hn2
zy{&lXv9{X+BGWb6-P at bs#0Qc>shHU3gapwmySK5;&BBTFLS=$)up<hC_*JahjVYec
zQi}J07GZQ$eK3sd^wvLrqCs6<7{my)1w$(4yP^i_wzef!5(3fB9Lf at EK~A^EFg*j<
z*jJLJ at Rjt(l9L`CIWA;-^bKMkH6++;{S at c}fWMi3`CAS9CZ^^(l{dW?5GXQHG8CbH
zFDU3J&a4GwvY7aD4{Zl%Ypanj)wm9CpfV9I42o{7?_5_^rB;EG(ZGNBaCa^EW%2g8
zbVrr&28hCBQG^O#C2DlP>2rE**1LZ>4ix~77d#?>JeGKF^%ERHDd-aYb|UGVK7De2
zo|R3ehppa3jpz}BB~NI2Vj>@Lb9(oXzv)aP?wfM4(tmpDo_H+l`>4a;ZLaB?d-aZE
zUZO7+2nYr8|I8XM0sf|-q-1(yxV6?D2Bdrzv(<%#y;5 at PHlPe3y3~NsFF}9>MNy&c
zuESTXGg-xt=+YEM8X5_DR=faFcv8cAd*voXG8GgQ<XF$|u8(IWBF*jWl=h_dx{`Kd
zE6cGWEjW-m)5UfxYC0w$ydVwlcAxX&f at Jj#d7$7vYn;%rEO-$i<9|7=Kd~6-I_xPw
zV+0KhH?Mx?JpsA at +D%RUPvsH&CB?-J1at9ZCMG8NwLV%}iC)b;{rw8|mD{BIH&HVm
z&|utuL(EWz!b}wvF#`eu%G0^%#o-q~eFaKB6yxFP4tlyXL+p!FCtNB2sHxFt;O|RX
zu5mV~9%`xPfN at vTx$z?N^YcgRtS-C!+ChZN&{dnZXPwZ|Q{n5FnQ<xay<=ye#OC~x
zkT5wuPTM}xU=4j+E-|u-G!zsFp!xo8^@-G0j0~t9C!j!YAioI_g9h9+{eH+vO6utj
z8``en%D+{ou^4nQNqN=H{TZ{%FNykde7v^4KC_|nuIl%W$AA0bK2(6;7)=IrOik4d
z4YPJ~-Go$4Omap86Rw at +tKt}kPU+lqC*ndvkn30%f4Sz}xP6U`jKmwWG6X84g+|Bx
z??ws=7?}7}gpw6Men at YBNUs3%>c|)n9TW|4A;CwJTfL8CO<;=gR75#alH%f3d|o2?
zjg7ke2A`UZKj`bn5l8 at C&CKA0FV_9XD#Qjv&K;P3bo7ZR>uoJKIy%0L00ErQ_j3=>
z;4mX91#q|utb<C(P0IfS<mcC_&Z$6tQ}mAAx)<3E#?6Tul(I5AHN{wu3zStG4K80U
z8#BtvSWlO12jbs+>~jH*%E5YqrzK)7i^LtHm?^tDI64+|beQfkDX5lN?a$udi#0Yj
zx-XKy#EvMfsv_xoTy_zho}M1kn)wa+z{kF?!Z9BW*M4?>a2~1ydQ3jl at 0t_XqCEWF
zd9msAY?v!<frf@=8z7T}xS$_^=p-gwFrCe`cpj1b%%7zr%s`i6h0k6HT^RSj5Rb0t
zixt2$PP2~6El)NUmhYvdN>h(vm;^wJ=Ac at TBIvS2=%@M&R4PqMK<pV}xW!f?9%<Vt
z({8;Kt;T}<S4dtyl!iVF4%gx|X(_ybBv6Yh+t?JBJ^<~beN=z?<m~Lg7fM07Yaq1C
zD=Jd;B!Or(Zt(>D;_T%=(J>-j5UTETB3D42;iluv=9ZMyFfmzf(Hc%kd4)))7y)t~
z6=q3fR8(0_joDL=HI*>LYIzRC7z at _dFER4|NbM-(*5(xt(sBXbKeFro$|@Y*U8Ise
z^T&3s(UDB at A3UMg85kqPK+y6tv$FD=n)Jk0=Q at L)S_VsHWo4fgp^!2hUA$`b{>+}X
zS!$ov*>h%NPeVqDg;rW#Zpb4^M}>cWyPX$jG6dvreN&$Zz%bU%8(?w(Xw^qF3TOxc
zMjN_s6amf!AgU<ZSIg187-?}o4`P7#ejq|pooqw$N3qLOPR+_vwzg&}Dk{>z!vs)d
z+zg3GB$}t1-aM at Z+I_?z7y!Y4ue1I)g6a5Z#Y2S;upUT7C62${Nq7<rlUC)B4$ojm
z3AWE-4%R at vEYQ%W1*-noSnSxixOAt-jNIJ6fRo&XU#OEM48WQ_wsV!mjlkgVt*zgh
zn%>(tohpAeSHrbD(nyG-NBZA*Y3F#e9w5<_^mHyz5Y3x6h at n(=^{1AP3TkS2z<eO?
z2|q%{)5~iD7{o05*Hb)zReGU?HhpT(hAl-2sQzw~saQL|WnpEdBgFcen%Xx$PM8;P
zm3h_F3U=Qa|IzoMwXTi_XoGh4_F}E&E>tSlr4}`6soizakS6(cYTxU&q5hr;a{QW{
zEK5t+g at Cv}w4C)<X6R^YcEJl2cMlJXN=g(De2k;G^^CVoOcH*ux$B1m)56?=h1e=n
zLp5ZeqXNWN{;7$+xbVCWlw at FFIGuAmC1j6f!KdA=wTMMB&$5v?;c;_-QMU*;$EIr3
zT9oNi`VM`2=u@|}R$x}dhCoiS_Ls9)l$e6?ny}y*#mzW3sOE&QX4qS%&#A1Bl+#o&
za5A at iG$2Xf1esRjaG7GMXTiJHWynVibc6i;3P%X{o+h+C%_tbZ^4MPpu8agSC(7qh
zo5Z`vW&addVHj-$79Dw_2XTH81QlTssZM$#yP6l7yis%W{@C}4BWP$<Z!s%ZDM|Zz
z*E#J>_}TvtULDWNnzfs=tmt=1=z!TG_1XY<_ri69w&k^LaUFKLDcWOmo3BBAz5OdX
zib?*5F3=js37aNp<822HIQ38xR_<&}V*>a5S<6adAzW;Kgfwc-+E4c#cbr|mUIGT@
zd(`9To>fp at cC~2=r>_jR&k_b>6WyW(JJF)f**tyr?-HR9KJ#&UqUsZ&ZDcsBBamH$
b+)L8Yyp)z at E2ajf>qsDZb-8L8^U(hT_>9o&

literal 0
HcmV?d00001

diff --git a/data/browse-view-refresh.png b/data/browse-view-refresh.png
new file mode 100644
index 0000000000000000000000000000000000000000..0958cc119ee618b119392c9cb7039d15b495b3d3
GIT binary patch
literal 481
zcmV<70UrK|P)<h;3K|Lk000e1NJLTq000pH000sQ1^@s6z4<j%00004b3#c}2nYxW
zd<bNS00009a7bBm000j*000j*0ZdL*wEzGB8FWQhbW?9;ba!ELWdL_~cP?peYja~^
zaAhuUa%Y?FJQ at H10bWT&K~y-6m6JV713?gm-&`Xa!OE0J8X=99Bv at Dp{)BXakV-qN
z2#R1~XQ#acZS8IR0~!$#l8AbsB4{ImjffZ?i_FSqjrkZDX6NRehq?Vo0SatFQdv?#
z(ww9jNq3SiB-JGyNc!mN0DNBn68c+Wy5Bw at PzBnaxCI;nn-*JMt!?@)NCEgZ!7ES<
zCUjo3I;Nj at kTIZXg*PDn2jDz59l#ARE at 0UkvorwUyyW$)2&h at o7!u&TVSTkoQr-^g
zJUr_G=JfeUQqGd*h!CgGMUoyZ$&Lt#Ej~q(uH0A_%aV?VfEFw^+$D3i=xx|hpG{rz
zde#M`foJ>B1a at ux1!Q^vGQhQIUVuqgsCeXiZ(R)lvvj|$3c=gi=C3_iEeo6kwH+Yk
zL(;$+aM=Ttv--Q`pTMd=p<C?tXa=YQQ>NJhHh}5i7u6Z3bF6!kZY7;cI<uGzb76h}
XJ)PM3q=+B&00000NkvXXu0mjfaW%iu

literal 0
HcmV?d00001

diff --git a/data/error_page.tmpl b/data/error_page.tmpl
new file mode 100644
index 0000000..f421ad5
--- /dev/null
+++ b/data/error_page.tmpl
@@ -0,0 +1,53 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+  <head>
+    <title>%(page_title)s</title>
+    <style type="text/css">
+      body {
+	  font-family: sans-serif;
+	  text-align:center;
+	  color: #a1a1a1;
+      }
+
+      #browse-logo {
+	  align: center;
+	  width: 130px;
+      }
+
+      p {
+	  font-size: 1em;
+      }
+
+      #button {
+	  color: white;
+	  width: 150px;
+	  height: 35px;
+	  background-color: #a3a1a3;
+	  border: 0;
+	  font-size: 12pt;
+	  font-weight: bold;
+	  -webkit-border-radius: 20px;
+	  background-image: url("browse-view-refresh.png");
+	  background-position: 16px;
+	  background-repeat: no-repeat;
+	  text-align: right;
+	  padding-right: 16px;
+      }
+
+      #container {
+          /* we need double percent sign here because
+             of Python sustitution */
+	  margin: 15%%;
+      }
+    </style>
+  </head>
+
+  <body>
+    <div id="container">
+      <img id="browse-logo" src="activity-web.png"></img>
+      <h3>%(title)s</h3>
+      <p>%(message)s</p>
+      <input id="button" type="button" value="%(btn_value)s" onclick="location.href='%(url)s';" />
+    </div>
+  </body>
+</html>
-- 
1.7.11.4



More information about the Sugar-devel mailing list