From 000feb8583686ca4d05c592fe6c157331add0edf Mon Sep 17 00:00:00 2001 From: Jeremy Edberg Date: Tue, 14 Oct 2008 10:31:45 -0700 Subject: [PATCH] new buttons and widgets --- r2/r2/config/rewrites.py | 2 +- r2/r2/config/routing.py | 3 +- r2/r2/controllers/buttons.py | 60 +++++- r2/r2/controllers/reddit_base.py | 10 + r2/r2/lib/pages/pages.py | 17 +- r2/r2/lib/strings.py | 4 + r2/r2/lib/template_helpers.py | 21 ++ r2/r2/models/link.py | 3 + r2/r2/public/static/adowngray.gif | Bin 0 -> 214 bytes r2/r2/public/static/adownmod.gif | Bin 107 -> 145 bytes r2/r2/public/static/aupgray.gif | Bin 0 -> 213 bytes r2/r2/public/static/aupmod.gif | Bin 133 -> 148 bytes r2/r2/public/static/blog_snoo.gif | Bin 0 -> 702 bytes r2/r2/public/static/reddit.css | 40 +++- r2/r2/public/static/spreddit1.gif | Bin 0 -> 679 bytes r2/r2/public/static/spreddit10.gif | Bin 0 -> 2103 bytes r2/r2/public/static/spreddit11.gif | Bin 0 -> 2247 bytes r2/r2/public/static/spreddit12.gif | Bin 0 -> 2117 bytes r2/r2/public/static/spreddit13.gif | Bin 0 -> 2162 bytes r2/r2/public/static/spreddit14.gif | Bin 0 -> 2822 bytes r2/r2/public/static/spreddit2.gif | Bin 0 -> 698 bytes r2/r2/public/static/spreddit3.gif | Bin 0 -> 675 bytes r2/r2/public/static/spreddit4.gif | Bin 0 -> 589 bytes r2/r2/public/static/spreddit5.gif | Bin 0 -> 607 bytes r2/r2/public/static/spreddit6.gif | Bin 0 -> 585 bytes r2/r2/public/static/spreddit7.gif | Bin 0 -> 688 bytes r2/r2/public/static/spreddit8.gif | Bin 0 -> 1276 bytes r2/r2/public/static/spreddit9.gif | Bin 0 -> 1312 bytes r2/r2/public/static/utils.js | 12 ++ r2/r2/public/static/widget_arrows.png | Bin 0 -> 955 bytes r2/r2/public/static/widget_arrows_down.png | Bin 0 -> 1005 bytes r2/r2/public/static/widget_arrows_up.png | Bin 0 -> 1041 bytes r2/r2/templates/base.htmllite | 44 +++- r2/r2/templates/button.html | 68 +------ r2/r2/templates/buttondemopanel.html | 189 +++++++++++++---- r2/r2/templates/buttonembed.js | 3 + r2/r2/templates/buttonlite.js | 67 +++++++ r2/r2/templates/buttonnobody.html | 31 +++ r2/r2/templates/buttontypes.html | 120 +++++++++++ r2/r2/templates/link.htmllite | 36 +++- r2/r2/templates/listing.htmllite | 39 +++- r2/r2/templates/printable.htmllite | 12 +- r2/r2/templates/utils.html | 6 + r2/r2/templates/widgetdemopanel.html | 223 +++++++++++++++------ 44 files changed, 785 insertions(+), 225 deletions(-) create mode 100755 r2/r2/public/static/adowngray.gif mode change 100644 => 100755 r2/r2/public/static/adownmod.gif create mode 100755 r2/r2/public/static/aupgray.gif mode change 100644 => 100755 r2/r2/public/static/aupmod.gif create mode 100755 r2/r2/public/static/blog_snoo.gif create mode 100644 r2/r2/public/static/spreddit1.gif create mode 100644 r2/r2/public/static/spreddit10.gif create mode 100644 r2/r2/public/static/spreddit11.gif create mode 100644 r2/r2/public/static/spreddit12.gif create mode 100644 r2/r2/public/static/spreddit13.gif create mode 100644 r2/r2/public/static/spreddit14.gif create mode 100644 r2/r2/public/static/spreddit2.gif create mode 100644 r2/r2/public/static/spreddit3.gif create mode 100644 r2/r2/public/static/spreddit4.gif create mode 100644 r2/r2/public/static/spreddit5.gif create mode 100644 r2/r2/public/static/spreddit6.gif create mode 100644 r2/r2/public/static/spreddit7.gif create mode 100644 r2/r2/public/static/spreddit8.gif create mode 100644 r2/r2/public/static/spreddit9.gif create mode 100644 r2/r2/public/static/widget_arrows.png create mode 100644 r2/r2/public/static/widget_arrows_down.png create mode 100644 r2/r2/public/static/widget_arrows_up.png create mode 100644 r2/r2/templates/buttonlite.js create mode 100644 r2/r2/templates/buttonnobody.html create mode 100644 r2/r2/templates/buttontypes.html diff --git a/r2/r2/config/rewrites.py b/r2/r2/config/rewrites.py index 625fbd17c..f545dca1f 100644 --- a/r2/r2/config/rewrites.py +++ b/r2/r2/config/rewrites.py @@ -26,6 +26,6 @@ rewrites = (#these first two rules prevent the .embed rewrite from ("^/_(.*)", "/_$1"), ("^/static/(.*\.js)", "/static/$1"), #This next rewrite makes it so that all the embed stuff works. - ("^(.*)(?8)b7#+h(#{{R30A^8LW000gEEC2ui01p5T000C&&`G&!op>(AQO?F78Xu+z zs8UV`;U2401ay%#OrAHqzB@P`FCh$0g2i6r21qtbjVAB83Nn^4U;vv1mLdQkh9n({Z+)&3Z~!7rO*{m?~IYr7SYD_vG#p$8)b7#+%pJuHmoU($873_HcB`LB*I(YK7{QIcAxvQw&^(&d+aDIF|K lY_l=~G#J<(opfB7z;TJ2DRF~`IZKnX^4yFc!s?0))&L8%Q)K`E literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/aupmod.gif b/r2/r2/public/static/aupmod.gif old mode 100644 new mode 100755 index bba8ab8af5781a72dbcb39b39939397d4dde1994..7ca148fa0d6d4c97593f0d60eead1089082be083 GIT binary patch literal 148 zcmV;F0Biq8Nk%w1VGjTf0J9DN|C4L~nREZFjsK&8|C@IIriTBzq5rLp|B7D!vzPzB zr~j30|BPY(i(vo%{{R30A^8LW000gEEC2ui01p5T000C*(8=i-y_5lq^J)v%F+pPn zVpf`GT74`VP7G`!@mw!_$m~5=0YEHtCI^D@aFiql&_vT=5LgXUMPjSSD!yGx1OPh{ Ch(8qo literal 133 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 literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/spreddit13.gif b/r2/r2/public/static/spreddit13.gif new file mode 100644 index 0000000000000000000000000000000000000000..26481667d8c6f15d31e8f81fa414cf92581314cd GIT binary patch literal 2162 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 literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/spreddit3.gif b/r2/r2/public/static/spreddit3.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0e9d89c33dad5cef13d0449d29639a401a54bd7 GIT binary patch literal 675 zcmV;U0$lxxP)WdH}&3k(kiE0>y69smFU2XskIMF-Xa2LUB8XY9`B00009a7bBm000W` z000W`0Ya=am;e9*AxT6*RCwBB{O`&D0W3iLzw^wbt8W+~VvPU({bSg&i2=wvdiPsp z*X%>LJ_8v{K&dycpGUcyte98{QU*5x3V>=hp15D$KI7!$e?U2w)5i|w@&E93H(`(l zNi&&R+2!oqbCsES^Qrq#{l{i}gKMAFThGA6I=j2-^fM-_3@(uMIR#~QHddd%efb9l zKn9Qt6a?7}aozbdCxH@|zyQbqa)E+CDGbM<0({bpKoj7c;|F#qsz`61GwIdGAJzSf z5ppMv?3>fqRM^n3t!Iev|Ghi6I@{a+!2pmA6anc0Vt03UkeHDHoCJzM!<9!=4oI#l zuln@q6Oe?9faHoACx$0vva>M0eEt+j0@*+jLViFCTR325X8Hc@%jDK_VKE71b+ucU zE-?N6BB5&J85|3g1qM3{rXCg+RyKC#Z(o0`nm;8ZE>m7b11R|7$T*ucV96 zdGWw@5gry>Q>}o20EQLI7_zb%Hg96Ewq-ban4zeMVcJxNh^P%4HXJ_m8mJPY6PgNu zD6gRCA0Yr#15pf0op5*C1*dxW1XL7eJ2<Z{Ibv^+FT#SlBrJ{Q3b=!?(_T4 zJ$~@;nTV{~|KC5}zkco+9w)D)%aBu0cJIzDI~%Lc_O{R8zWhT4KoOugP!^~Ls1g_l z%#O~k$B!NgkBCZ6Nnu;Fn!(PF!N!_FPM+cDVFm*OHf3e&j7$MRq1CHbb8_>k8(K3- zYFJ#mej^|t0OUX(9tI^v25xQ;8%P4#KoJH8pe#@gP$ftlXiHu}(LX`}s0OGKh(N*m z^v&ms=T1WcVb$t2SFT+7^yw3j1hOH5Kv|#~2%9-Mzgj_EtFyUIMqF4yN%_Z*@0&Mo zK6dQb&6_vP&CH~vqz>%e-O%2fP*BIqD*y^sNaB0*`uUP+U820Ku1@wUDk^MjY`=c} zx^w5w?tKSefBqelRVE@T35^Hj)OzpsjjI<08=*83D8^-yga z*Qsq=9R?y43RwWm-`weR(CTWna=YDna<|(dM8SAGZUozo$0M>1hXaW7`5cKvGMP*; z7&LwSa=EP6>w!SP@As?VVzEfl>2$eVZZ?}7$BCk7O@SmyfB_67N)jl6fMr>*uR)$T zn)Fa{s)ZjCePES|4W)poWxyPPfF6$r=QZfNNNw3K&j(~ZEZ8U&> zewurIrg>hiql}YGUmlftl8q8#wSf$9u-$IGUav;Zop8a`4MXm8#st9N3>(E^s9Y+Q zjKsEDEh8FXzu(uxY&NT~MTn*|&+|^FGndmUB$G+3(P$Lwcs!oXX5DTV#zt7FRBE*v z+jga^3a?_m{)=kxiHgf@%C0=7eIC;**w t{4Y-up2Guzgn9rloW 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 literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/spreddit9.gif b/r2/r2/public/static/spreddit9.gif new file mode 100644 index 0000000000000000000000000000000000000000..15535a2a5e15ab723d8d87b28fc1e84f1c46140d GIT binary patch literal 1312 zcmbV{{Xf$Q0LQ<3FlNjotTVl~*r@F^=U%07zJyV$*NTMXHoZLLI=&XAdllO}%j+g2 zEM|HzJ;_7Psnf(y*?jSfS>CgUM8>&7zY5@ z7f4G>>(M+T5D0p`er9Hd!{I;>Bo>RAOeUF39vT{wN~K&bx2~>EAQ0?4^do$j04t>M z^iXncae(&kMQq4jk zQbgDzzk9a-kDuDK4^r4p5(TOH=p0Wmvy$?pKFrhvVG()LbrQ!HiqbPOv$As%wr=ww z=JHVv2n;Iu0-8ai8;UC`rBx8o2U&%u8ztaOBnfnktiGWULf)uK5fk!t%>Yu%(?soC8K9qB)qx<1rZ8Fu%K}qP&)GP-HZrg%HUz>8W&DIqJ%zWrj{_ zNPqt!XL``iekj8YX%LKtI<#nq$bax#+##J0H4Z`gh;sBNyL%ZtFXKiXdf^vpZkX8E zw9Tt4k6|I7eYR?=K4-9FQW#9o-Gg@$dh-@dvmtyMaLkgwP8iOscp&EPcKHFdOI6?U~e0iO%>mKD!t1FBQ9HyiT2|| zLNZ44Utz5_79EMlW6ErVXTyF&$DeYI9Z$CUb9LiyVuvL=UD>;W0JE|DT|PNvN}~tz zG2Gy;y)y}-uL^J2!Via5~8)qf7sNX0EGambn{M%I^9h4 z4nt3ky&hrvuzm%eWHIJy0Nki^i@(ux(~yI7k7k zJ711@4(7l2qoR6vh3!0cS5 zu=_|t%2ZMe>3nNTO>vrW9Jgv$R&Tpkd;S)dmR(Y$hG_*d-4gYeTMba3OJb9KRB%+6P!>`2COQBRR9&~gbxjNd zG#d2R!BjeXxvpz$;)i?1j_XUjSP1A~U28wQ-cL2M!?B=}=nE$X`VX>P?!y#=0WRVQWOzRH*1`9Yo!7gfKK5zE|0Y7Rt;6WK#1E`zC2S#(5Mf46R|hOZ zLB#|{qoHRG#!k-7G~RAs_wmiZZvDqK4QuDd+p%K_%C)#4P`!F2Nx$(4Tx0C=2@l1pn7Q5c4wlOR#3@j^)3MPU}AE~11a&@9vDQeuV}l960?lbLA} zO(x^aG+q~7_y=_7LJ)M(MYp23ir_*7K@p^a|Dqs*)VLTY5o)j>9C*H$mvg@Jo&&*; zs%7;9z`%6v>c+a%Xtt!#9)b`jSY}z(9BZvok(pcHzaRiUUs5frKi~Jy3fqll3q%Zv zbUe-gk+#PQ5V_@AE{HA=(YmS*;yw_wm1-8m4iN5m{0a!SJ$?s-M_R`Pu?NIWy=Ow; zIFQy2M}t5H=;)3%fWQv$Z7>+>5PSe!)GXVD;4W~k(QHZH$iodt|AOG7nWkppg@C2M zwDTo6y8-7>*15@(>(Ta0U!>~#-MD2Jch^HaA6V7+=B|BWC$da{_-*e;AAc@%Tgj0 zU#%A^M}7RG)}X)TpK}UWFx%y;z!LD*8P)PWZ}tjBpLI1?^7(EzTb_FCLe=N%>XnMm zhIy^#v*oT&J%*F7&Gu31KHnIYrXJnMO=mFsW!dMRTU2}|M;;j&i3BO)tWu{y#rtmn zr+4A$Vk(ucy@@_Nl!0s9b^)?O>yF*)bX{r9vie3$Dw^8mn3Rae)BFY*7M-hSe*|d& z000SaNLh0L01FcU01FcV0GgZ_00046Nkl_=%tvk*+Z5z#8`FrKMhVkXC}^XX02r#mCq&a_q#D>1A~aC)9LYeB(vGH zH?6f&iiiL}N?BFaLLIGj-}gks7$c&-@3q$77zc!77-Oc`he1T8)O2oRj8X~_V+Iks zu5&F-MMPcKc`UQmUa!~7^lkWJ37ruMW!A;W$A(;QBLWrhmlHErD3->?> zA*J*#@Zy|HDLufV-KnaouImuvoY!?7{o>+%bC_!q0Hy$&+iOHTpU-XEhAn+$XLP&W d=2Cz0&kw-30S;yD)m{Jq002ovPDHLkV1i}I#%llo literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/widget_arrows_down.png b/r2/r2/public/static/widget_arrows_down.png new file mode 100644 index 0000000000000000000000000000000000000000..feac5025ef0da4d85df3365475fd5b6a021547ea GIT binary patch literal 1005 zcmV4Tx0C=2@l1pn7Q5c4wlOR#3@j^)3MPU}AE~11a&@9vDQeuV}l960?lbLA} zO(x^aG+q~7_y=_7LJ)M(MYp23ir_*7K@p^a|Dqs*)VLTY5o)j>9C*H$mvg@Jo&&*; zs%7;9z`%6v>c+a%Xtt!#9)b`jSY}z(9BZvok(pcHzaRiUUs5frKi~Jy3fqll3q%Zv zbUe-gk+#PQ5V_@AE{HA=(YmS*;yw_wm1-8m4iN5m{0a!SJ$?s-M_R`Pu?NIWy=Ow; zIFQy2M}t5H=;)3%fWQv$Z7>+>5PSe!)GXVD;4W~k(QHZH$iodt|AOG7nWkppg@C2M zwDTo6y8-7>*15@(>(Ta0U!>~#-MD2Jch^HaA6V7+=B|BWC$da{_-*e;AAc@%Tgj0 zU#%A^M}7RG)}X)TpK}UWFx%y;z!LD*8P)PWZ}tjBpLI1?^7(EzTb_FCLe=N%>XnMm zhIy^#v*oT&J%*F7&Gu31KHnIYrXJnMO=mFsW!dMRTU2}|M;;j&i3BO)tWu{y#rtmn zr+4A$Vk(ucy@@_Nl!0s9b^)?O>yF*)bX{r9vie3$Dw^8mn3Rae)BFY*7M-hSe*|d& z000SaNLh0L01FcU01FcV0GgZ_0004uNkl^xx3_|AtL-Jy)JM*pM?-VFr4$l z;c&TJlu@l(8)J-8Dy1ZZjK|~AX!IoyV=N3qDJ1|%DZ?;ijD2DfAm4@%qKds4&N-#D z+P4sbQp!0mGo14v2$GVjl2QgikYO4ko=&IZ@mSiF7(z&XeL9^EheO4^?RLBS{hs(v zr!$+)N*f4NLoxWLelsSHA&ygTn$2p9qIYfWb~8rGcOK=Sf60@Xyfj4I z?_skkV~I-rESE5uyx!FJVZAP#`g}ruK1~xA3$UzLo@BL(DS<*imIXq zb>9G#X2-T+K8Ief0LhhI@;qFv(DRf*R5OT3XW b^MC#T!ZjrBpEBP-00000NkvXXu0mjfSq;>2 literal 0 HcmV?d00001 diff --git a/r2/r2/public/static/widget_arrows_up.png b/r2/r2/public/static/widget_arrows_up.png new file mode 100644 index 0000000000000000000000000000000000000000..941fbbed09dbc046a495e55d3769ddd3d46eb505 GIT binary patch literal 1041 zcmV+s1n&EZP)4Tx0C=30(#vZTK^(yG?<7bRYJ3pW_E6Y^sD~&a2{bp;=22pn7?PDdZkydS zi6)zMvyECk^x!|Bw<3a|LJvI&qIinnK?Fe&qy>+jy%a={8V~Cxf`sD0z-NB^=JlHa z?+4X1J075G*j906S*lcPl5York0Z=8uWEgBsZfxa+P;5A0DL;Hnr7$XX7AbhsRvJ6 zwfMKM(cRMYc>wsWO0@k~)j`|=LY7iYg4hE5O~)?* zf8Ft0z(3HMHi#V{Z0KzRJcog}-so%KNdQf~uXVw*1$^mtdpdaU0_QZ-vcbCzoUT-B zl5^zV3dDbb_x>cNCgHh&xxZp(a&U41UWiF-FNgp{@Lhj38UaAeSa9gaXtcKgzE`ks zjYdBojz;@Wz`F~>>)M(%_){+--ors-=g!U;KH9FP*{KTvVR$?QWdr0PY;M5WSvYYU z3V@Qp6OFpvsUZMIQ)yY2BC+sdIa4^`&HuY~J8SMf$AB55p1%yt0dM+)Qrh)uJCk*- ztErsp^;R-J&apB@*H_g`1=kJZO3AfpFOPE?{d8%vj#74gt(P0;=#A9)3`Qp}yKdWA z#Wg9?$jC@Uh!JLyG8qcae*-wa4UcAHv3Tiq@ZLW)up2jRfMn0SWwo0vTUs*BP9r2` z4edfmiiE>)eglq%rJftJ7bXAz010qNS#tmY3ljhU3ljkVnw%H_00EszL_t(Ijh&Od zZo)7Wg-;;nuiY9;k(#K<+&)R)pfAvO=o57A&d>p=5<==4sbWAZh@k@uLP-1!ELd4c zOIt{A2O=k!q$EAlm9M|+W8Z6qbB>%Uq-GZ5oXli^*C$K{nVC@^P95K$aOxQKGcdy* zI!&xS09bqIG%@V`$&C8wwy<)em6eNbOFAvaOa^E-4gi6*8}YjpBEYGKmiFSiC|-MT z>H0zkW#djl(I2b*Z5h3b0~`ZZUDl!&Z+djkgf!8jIkgH!nCStns%D; zJa4nvp-1psMwbX_+LBaRV5 z48zcMJ-$tzw>`EusjBKRfV8=0j7_Ig+qUDDBJmWtuA7$n&;R)aV`SKyJ4MqW00000 LNkvXXu0mjfH|E(X literal 0 HcmV?d00001 diff --git a/r2/r2/templates/base.htmllite b/r2/r2/templates/base.htmllite index af4ef0f56..620c175f0 100644 --- a/r2/r2/templates/base.htmllite +++ b/r2/r2/templates/base.htmllite @@ -19,19 +19,41 @@ ## All portions of the code written by CondeNet are Copyright (c) 2006-2008 ## CondeNet, Inc. All Rights Reserved. ################################################################################ +<%namespace file="utils.html" import="optionalstyle"/> <%! from pylons.i18n import _ - from r2.lib.template_helpers import get_domain + from r2.lib.template_helpers import get_domain, style_line + from r2.models.subreddit import FakeSubreddit, Default %> -

- - - <% - link = 'reddit

' % get_domain() - label = _("link from %(site)s") - label = label.replace(" ", " "); - %> - ${unsafe(label % dict(site = link))} -${next.body()} +
+ +

+ + + + <% + style = capture(optionalstyle, "text-decoration:none;color:#336699") + link = '%s

' % (style, get_domain(), c.site.name) + label = _("links from %(site)s").replace(" ", " "); + %> + ${unsafe(label % dict(site = link))} + + %if not isinstance(c.site, FakeSubreddit) or c.site != Default: +

+ + powered by + + ${Default.name} + + +

+ %endif + + ${next.body()} +
diff --git a/r2/r2/templates/button.html b/r2/r2/templates/button.html index 030414707..a0bdb51cc 100644 --- a/r2/r2/templates/button.html +++ b/r2/r2/templates/button.html @@ -25,7 +25,7 @@ %> <%inherit file="reddit.html"/> <%namespace module="r2.lib.template_helpers" import="generateurl"/> -<%namespace file="printable.html" import="arrow, score" /> +<%namespace file="buttontypes.html" import="button1, button2, button3, submiturl, submitlink" /> @@ -63,70 +63,4 @@ -<%def name="submiturl(url, title='')"> - ${("http://%s/submit" % get_domain(True)) + query_string(dict(url=url, title=title))} - - -<%def name="submitlink(url, title='', text='submit')"> - ${text} - - - -<%def name="button1(thing)"> -
-
- - - -
- %if thing.link: - <% thing.link.score = thing.link._ups - thing.link._downs %> - ${arrow(thing.link, 1, thing.likes)} - ${arrow(thing.link, 0, thing.likes == False)} - ${score(thing.link, thing.likes, inline=False)} - %else: - ${submitlink(thing.url, thing.title)} - %endif -
-
- - -<%def name="button2(thing)"> -
- %if thing.link: - ${arrow(thing.link, 1, thing.likes)} - <% thing.link.score = thing.link._ups - thing.link._downs %> - ${score(thing.link, thing.likes, inline=False, label = False)} - ${arrow(thing.link, 0, thing.likes == False)} - %else: - ${submitlink(thing.url, thing.title, 'submit to')} - %endif -
- reddit -
-
- - - -<%def name="button3(thing)"> -
-
- %if thing.link: - ${arrow(thing.link, 1, thing.likes)} - <% thing.link.score = thing.link._ups - thing.link._downs %> - ${score(thing.link, thing.likes, inline=False, label = False)} - ${arrow(thing.link, 0, thing.likes == False)} - %else: - ${submitlink(thing.url, thing.title, unsafe('
'))} - ${submitlink(thing.url, thing.title, '?')} - ${submitlink(thing.url, thing.title, unsafe('
'))} - %endif -
-
- ${submitlink(thing.url, thing.title, \ - unsafe(''))} -
-
-
- diff --git a/r2/r2/templates/buttondemopanel.html b/r2/r2/templates/buttondemopanel.html index 8e61109a9..b3e001fb4 100644 --- a/r2/r2/templates/buttondemopanel.html +++ b/r2/r2/templates/buttondemopanel.html @@ -25,47 +25,158 @@ <% domain = get_domain(True) %> -<%def name="drawrequired(type)" buffered="True"> - - - -<%def name="drawoptional(url, title)"> -${"" % url}
-${"" % title} - -

${_("put %(site)s buttons on your site") % dict(site=c.site.name)}

-

${_("copy and paste the code for the style of button you would like\ - into your site. The green lines are\ - optional.")}

- -

${_("if the site has not been submitted yet, clicking on the button\ - will take the user to a reddit submit page, otherwise it takes\ - them to the comments page.")}

- -

${_("if you want to specify the URL that should be submitted to\ - reddit, include the reddit_url line. if you don't include that\ - line, then the current page's URL will be used.")}

- -

${_("if you want to specify the title that should be submitted to\ - reddit, include the reddit_title line. if you don't include that\ - line, then the user will have to specify a title when they\ - submit.")}

- - - ${buttondemo(1)} - ${buttondemo(2)} - ${buttondemo(3)} +

${_('the reddit button is the smart way to get your content submitted to\ + and discussed on reddit. pick the button you like from below, and then\ + copy/paste the code into your HTML editor.')}

+ +

${_("commonly used buttons")}

+

${_('use one of these buttons to quickly add reddit links to your site, or \ + see below for more options.')}

+
    +
  • ${badgedemo(1)}
  • +
  • ${badgedemo(7)}
  • +
  • ${point_button_demo(0)}
  • +
  • ${point_button_demo(1)}
  • +
  • ${interactive_button_demo(1)}
  • +
+ + +

${_("buttons with points")}

+
    + %for x in xrange(0,6): +
  • ${point_button_demo(x)}
  • + %endfor +
+

${_("customizing the look of your buttons")}

+

${_('the buttons with points have two additional options.')}

+
    +
  • styled=off
    + ${_('no styles will be added, so you can style it yourself')}
  • +
  • url=[URL]
    + ${_('specify a url to use instead of the current url')}
  • +
+

${_('Example:')}

+ + ${capture(point_option_example)} + + + +

${_('simple interactive button')}

+

${_('put this code on your page:')}

+ ${draw_interactive(False)} +

${_("and you'll get something like this:")}

+ ${unsafe(draw_interactive(False))} + +

${_("more interactive buttons")}

+
    + %for x in xrange(1,4): +
  • ${interactive_button_demo(x)}
  • + %endfor +
+ +

${_('interactive button advanced settings')}

+
+
    +
  • +

    ${_("specify a url")}
    + ${_("useful in places like blogs, where you want to link to the post's permalink")}

    + ${drawoption('url','[URL]')} +
  • +
  • +

    ${_("specify a title")}

    + ${drawoption('title','[TITLE]')} +
  • +
  • +

    ${_("specify the color")}

    + ${drawoption('bgcolor','[COLOR]')} +
  • +
  • +

    ${_("specify a border color")}

    + ${drawoption('bordercolor','[COLOR]')} +
  • +
+

${_('Example:')}

+

${_('to make this button:')}

+ ${draw_interactive_example()} +

${_('use this code:')}

+ + ${capture(draw_interactive_example)} + +
+ +

${_("more badges and buttons")}

+
    + %for x in xrange(1,15): +
  • ${badgedemo(x)}
  • + %endfor +
+ +
- -<%def name="buttondemo(type)"> -

${_("style %(number)s") % dict(number=type)}

- - ${unsafe(drawrequired(type))} -
-  ${drawoptional('[URL]', '[TITLE]')}
- ${drawrequired(type)} -
+ +<%def name="drawbadge(image)"> + +submit to reddit + + + +<%def name="badgedemo(image)"> + view code + ${unsafe(drawbadge(image))}
+ + ${capture(drawbadge, image)} + + + +<%def name="draw_point_button(image)" buffered="True"> + + + +<%def name="point_option_example()"> + + + +<%def name="point_button_demo(image)"> + view code + ${unsafe(draw_point_button(image))}
+ + ${draw_point_button(image)} + + + +<%def name="draw_interactive(type)" buffered="True"> +%if type: + +%else: + +%endif + + +<%def name="interactive_button_demo(number)"> + view code + ${unsafe(draw_interactive(number))}
+ + ${draw_interactive(number)} + + + +<%def name="drawoption(option, val)"> +${"" % (option, val)} + + +<%def name="draw_interactive_example()"> + + diff --git a/r2/r2/templates/buttonembed.js b/r2/r2/templates/buttonembed.js index 1da848330..d2d33ba93 100644 --- a/r2/r2/templates/buttonembed.js +++ b/r2/r2/templates/buttonembed.js @@ -33,6 +33,9 @@ if (window.reddit_url) { write_string += encodeURIComponent(reddit_url); } else { write_string += encodeURIComponent('${thing.referer}');} if (window.reddit_title) { write_string += '&title=' + encodeURIComponent(reddit_title); } if (window.reddit_css) { write_string += '&css=' + encodeURIComponent(reddit_css); } +if (window.reddit_bgcolor) { write_string += '&bgcolor=' + encodeURIComponent(reddit_bgcolor); } +if (window.reddit_bordercolor) { write_string += '&bordercolor=' + encodeURIComponent(reddit_bordercolor); } +write_string += '&width=${thing.width}'; write_string += '" height="${thing.height}" width="${thing.width}" scrolling="no" frameborder="0">'; document.write(write_string); })() diff --git a/r2/r2/templates/buttonlite.js b/r2/r2/templates/buttonlite.js new file mode 100644 index 000000000..e9e4cf66f --- /dev/null +++ b/r2/r2/templates/buttonlite.js @@ -0,0 +1,67 @@ +## The contents of this file are subject to the Common Public Attribution +## License Version 1.0. (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License at +## http://code.reddit.com/LICENSE. The License is based on the Mozilla Public +## License Version 1.1, but Sections 14 and 15 have been added to cover use of +## software over a computer network and provide for limited attribution for the +## Original Developer. In addition, Exhibit A has been modified to be consistent +## with Exhibit B. +## +## Software distributed under the License is distributed on an "AS IS" basis, +## WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +## the specific language governing rights and limitations under the License. +## +## The Original Code is Reddit. +## +## The Original Developer is the Initial Developer. The Initial Developer of +## the Original Code is CondeNet, Inc. +## +## All portions of the code written by CondeNet are Copyright (c) 2006-2008 +## CondeNet, Inc. All Rights Reserved. +################################################################################ +<%! + from r2.lib.template_helpers import get_domain + from r2.lib.strings import Score + %> + +<%namespace file="buttontypes.html" import="submiturl" /> + +<% + domain = get_domain() + if thing.link: + thing.link.score = thing.link._ups - thing.link._downs +%> +(function() { + var styled_submit = ''; + var unstyled_submit = ''; + var write_string=''; +%if thing.image > 0: + write_string += ''; +%endif +%if thing.link: + write_string += '${Score.safepoints(thing.link.score)}'; + %if thing.styled: + write_string += ' on ' + styled_submit + 'reddit'; + %else: + write_string += ' on ' + unstyled_submit + 'reddit'; + %endif +%else: + %if thing.styled: + write_string += styled_submit + 'submit'; + %else: + write_string += unstyled_submit + 'submit'; + %endif + %if thing.image > 0: + write_string += ''; + %else: + write_string += ' to reddit'; + %endif +%endif + write_string += ''; + +document.write(write_string); +})() diff --git a/r2/r2/templates/buttonnobody.html b/r2/r2/templates/buttonnobody.html new file mode 100644 index 000000000..4dd9e7538 --- /dev/null +++ b/r2/r2/templates/buttonnobody.html @@ -0,0 +1,31 @@ +## The contents of this file are subject to the Common Public Attribution +## License Version 1.0. (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License at +## http://code.reddit.com/LICENSE. The License is based on the Mozilla Public +## License Version 1.1, but Sections 14 and 15 have been added to cover use of +## software over a computer network and provide for limited attribution for the +## Original Developer. In addition, Exhibit A has been modified to be consistent +## with Exhibit B. +## +## Software distributed under the License is distributed on an "AS IS" basis, +## WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +## the specific language governing rights and limitations under the License. +## +## The Original Code is Reddit. +## +## The Original Developer is the Initial Developer. The Initial Developer of +## the Original Code is CondeNet, Inc. +## +## All portions of the code written by CondeNet are Copyright (c) 2006-2008 +## CondeNet, Inc. All Rights Reserved. +################################################################################ + +<%namespace file="buttontypes.html" import="button1, button2, button3, submiturl, submitlink" /> + +%if thing.button == 1: + ${button1(thing)} +%elif thing.button == 2: + ${button2(thing)} +%elif thing.button == 3: + ${button3(thing)} +%endif diff --git a/r2/r2/templates/buttontypes.html b/r2/r2/templates/buttontypes.html new file mode 100644 index 000000000..8b9c07e9f --- /dev/null +++ b/r2/r2/templates/buttontypes.html @@ -0,0 +1,120 @@ +## The contents of this file are subject to the Common Public Attribution +## License Version 1.0. (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License at +## http://code.reddit.com/LICENSE. The License is based on the Mozilla Public +## License Version 1.1, but Sections 14 and 15 have been added to cover use of +## software over a computer network and provide for limited attribution for the +## Original Developer. In addition, Exhibit A has been modified to be consistent +## with Exhibit B. +## +## Software distributed under the License is distributed on an "AS IS" basis, +## WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for +## the specific language governing rights and limitations under the License. +## +## The Original Code is Reddit. +## +## The Original Developer is the Initial Developer. The Initial Developer of +## the Original Code is CondeNet, Inc. +## +## All portions of the code written by CondeNet are Copyright (c) 2006-2008 +## CondeNet, Inc. All Rights Reserved. +################################################################################ +<%! + from r2.lib.template_helpers import get_domain, static, style_line, choose_width + from r2.lib.utils import query_string + %> + +<%namespace file="printable.html" import="arrow, score" /> +<%namespace file="utils.html" import="img_link" /> + +<%def name="submiturl(url, title='')">${("http://%s/submit" % get_domain(True)) + query_string(dict(url=url, title=title))} + +<%def name="submitlink(url, title='', text='submit')"> + ${text} + + +<%def name="class_def(class_number, width=None)"> + %if style_line(width): +
+ %else: +
+ %endif + + +<%def name="button1(thing)"> +${class_def(1, width=choose_width(thing, thing.width))} +
+ + + +
+ %if thing.link: + <% thing.link.score = thing.link._ups - thing.link._downs %> + %if thing.vote: + ${arrow(thing.link, 1, thing.likes)} + ${arrow(thing.link, 0, thing.likes == False)} + ${score(thing.link, thing.likes, inline=False)} + %else: + ${thing.link.score} + %endif + %else: + ${submitlink(thing.url, thing.title)} + %endif +
+
+ + +<%def name="button2(thing)"> + ${class_def(2)} + %if thing.link: + <% thing.link.score = thing.link._ups - thing.link._downs %> + %if thing.vote: + ${arrow(thing.link, 1, thing.likes)} + ${score(thing.link, thing.likes, inline=False, label = False)} + ${arrow(thing.link, 0, thing.likes == False)} + %else: +  
+ ${thing.link.score} +  
+ %endif + %else: + + ${submitlink(thing.url, thing.title, 'submit to')} + %endif + %if thing.bgcolor: +
+ %else: +
+ %endif + reddit +
+
+ + + +<%def name="button3(thing)"> +${class_def(3)} +
+ %if thing.link: + <% thing.link.score = thing.link._ups - thing.link._downs %> + %if thing.vote: + ${arrow(thing.link, 1, thing.likes)} + ${score(thing.link, thing.likes, inline=False, label = False)} + ${arrow(thing.link, 0, thing.likes == False)} + %else: +  
+ ${thing.link.score} +  
+ %endif + %else: + ${submitlink(thing.url, thing.title, unsafe('
'))} + ${submitlink(thing.url, thing.title, '?')} + ${submitlink(thing.url, thing.title, unsafe('
'))} + %endif +
+
+ ${img_link('submit', '/static/blog_snoo.gif', '/submit' + query_string(dict(url=thing.url, title=thing.title)))} +
+
+
+ diff --git a/r2/r2/templates/link.htmllite b/r2/r2/templates/link.htmllite index ab4413be7..4e759c693 100644 --- a/r2/r2/templates/link.htmllite +++ b/r2/r2/templates/link.htmllite @@ -19,6 +19,7 @@ ## All portions of the code written by CondeNet are Copyright (c) 2006-2008 ## CondeNet, Inc. All Rights Reserved. ################################################################################ +<%namespace file="utils.html" import="optionalstyle"/> <%! from pylons.i18n import _, ungettext @@ -36,12 +37,33 @@ else: # generates "comment" the imperative verb com_label = _("comment") + + domain = get_domain(subreddit=False) + permalink = "http://%s%s" % (domain, thing.permalink) + if thing.likes == False: + arrow = "http://%s/static/widget_arrows_down.png" + elif thing.likes: + arrow = "http://%s/static/widget_arrows_up.png" + else: + arrow = "http://%s/static/widget_arrows.png" + arrow = arrow % domain %> - \ - - ${thing.title}
- - ${thing.score} ${ungettext("point", "points", thing.score)} | -  ${com_label} - + + vote + +
+ + ${thing.title} + +
+ + ${thing.score} ${ungettext("point", "points", thing.score)} + | + ${com_label} + +
diff --git a/r2/r2/templates/listing.htmllite b/r2/r2/templates/listing.htmllite index 77c7f21d0..6764bde3c 100644 --- a/r2/r2/templates/listing.htmllite +++ b/r2/r2/templates/listing.htmllite @@ -19,7 +19,40 @@ ## All portions of the code written by CondeNet are Copyright (c) 2006-2008 ## CondeNet, Inc. All Rights Reserved. ################################################################################ +<%namespace file="utils.html" import="optionalstyle"/> +
+ <% + t = thing.things + l = len(t) + %> + %for i, a in enumerate(t): + <% + cls = "reddit-link " + cls += "odd " if i % 2 else "even " + cls += "first-half" if i < (l+1)/2 else "second-half" -%for a in thing.things: - ${a.render()} -%endfor: + two_col = request.get.has_key("twocolumn") + %> + %if two_col: + %if i == 0: +
+ %elif i - 1 < (l+1)/2 and i >= (l+1)/2: +
+
+ %endif + %endif + +
+ ${a.render()} +
+ %if two_col and i == l - 1: +
+ %endif + %endfor: + %if two_col: +
+ %endif +
diff --git a/r2/r2/templates/printable.htmllite b/r2/r2/templates/printable.htmllite index d5326b0da..a7eecccb8 100644 --- a/r2/r2/templates/printable.htmllite +++ b/r2/r2/templates/printable.htmllite @@ -20,20 +20,16 @@ ## CondeNet, Inc. All Rights Reserved. ################################################################################ -

- ${self.parent()} - ${self.entry()} -

+${self.parent()} +${self.entry()} +${self.Child()} -
- ${self.Child()} -
<%def name="parent()"> <%def name="Child()"> -${hasattr(thing, "child") and thing.child.render() or ''} + ${hasattr(thing, "child") and thing.child.render() or ''} <%def name="entry()"> diff --git a/r2/r2/templates/utils.html b/r2/r2/templates/utils.html index 74d633c71..775e91858 100644 --- a/r2/r2/templates/utils.html +++ b/r2/r2/templates/utils.html @@ -215,3 +215,9 @@ ${unsafe(txt)} <%def name="separator()"> | + +<%def name="optionalstyle(style)"> + %if request.get.get('style') != "off": + style="${style}" + %endif + diff --git a/r2/r2/templates/widgetdemopanel.html b/r2/r2/templates/widgetdemopanel.html index 9f1612c42..e4673dac5 100644 --- a/r2/r2/templates/widgetdemopanel.html +++ b/r2/r2/templates/widgetdemopanel.html @@ -23,7 +23,10 @@ from r2.lib.template_helpers import get_domain %> -<% domain = get_domain(True) %> +<% + domain = get_domain(cname = c.cname, subreddit = False) + sr_domain = get_domain(cname = c.cname, subreddit = True) + %>
@@ -78,63 +103,133 @@ function update() {

${_("get live %(site)s headlines on your site") % dict(site=c.site.name)}

${_("just cut and paste the generated code into your site and your specified %(site)s feed will be displayed and updated as new stories bubble up") % dict(site=c.site.name)}

+

${_("which links do you want to display?")}

-
-

- ${_("number")}: - + + + + + -

-

- - ${unsafe(_("%(site)s %(what)s links from %(when)s") % dict(site = c.site.name, what = capture(what), when = capture(when)))} - <%def name="what()"> - - - <%def name="when()"> - - -

-

- - ${unsafe(_("%(what)s %(where)s %(who)s") % dict(what = capture(what2), where= capture(where2), who = capture(who2)))} - - <%def name="what2()"> - - - - <%def name="where2()"> - - - - <%def name="who2()"> - - -

+ + <%def name="where2()" buffered="True"> + + + <%def name="text_input(name)" buffered="True"> + + + + + + + + + + + + + + + +
+ ${_("listing options")} + +

+ + ${_("links from %(domain)s") % dict(domain = get_domain())} +

+

+ + ${unsafe(_("links %(submitted_by)s the user %(who)s") % dict(submitted_by = where2(), who = text_input("who")))} +

+

+ + ${unsafe(_("links from the domain %(domain)s") % dict(domain = text_input("domain")))} +

+
+ ${_("sorting options")} + +

+ <%def name="what()" buffered="True"> + + + ${unsafe(_("sort links by %(what)s") % dict(what = what()))} +

+

+ ${unsafe(_("date range includes %(when)s") % dict(when = when()))} +

+

+ ${_("number of links to show")}: + +

+
+ ${_("display options")} + +

+ + +

+
+

+ + +

+

+ + +  #${unsafe(text_input("bg_color"))} + + ${_("(e.g., FF0000 = red)")} + +

+

+ + +  #${unsafe(text_input("bord_color"))} +

+
+

${_("the code")}