From b1e19b5023ae04ab60e658f7b3dc8baefc099989 Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Wed, 22 May 2013 14:24:25 +0200 Subject: [PATCH] Possibility to use a custom logo on login page. fixes #345 --- modoboa/auth/forms.py | 4 +- modoboa/core/templates/settings.py | 2 + modoboa/lib/templatetags/libextras.py | 12 + modoboa/static/css/custom.css | 7 +- modoboa/static/css/default.css | 507 ------------------- modoboa/static/css/login.css | 16 +- modoboa/static/css/logo.png | Bin 6799 -> 0 bytes modoboa/templates/common/pagination_bar.html | 4 +- modoboa/templates/nlayout.html | 7 +- modoboa/templates/registration/login.html | 47 +- 10 files changed, 64 insertions(+), 542 deletions(-) delete mode 100644 modoboa/static/css/default.css delete mode 100644 modoboa/static/css/logo.png diff --git a/modoboa/auth/forms.py b/modoboa/auth/forms.py index 301fc69dd..143299654 100644 --- a/modoboa/auth/forms.py +++ b/modoboa/auth/forms.py @@ -5,11 +5,11 @@ from django.utils.translation import ugettext_lazy as _ class LoginForm(forms.Form): username = forms.CharField( label=_("Username"), - widget=forms.TextInput(attrs={"class": "span3"}) + widget=forms.TextInput(attrs={"class": "input-block-level"}) ) password = forms.CharField( label=_("Password"), - widget=forms.PasswordInput(attrs={"class": "span3"}) + widget=forms.PasswordInput(attrs={"class": "input-block-level"}) ) rememberme = forms.BooleanField( initial=False, diff --git a/modoboa/core/templates/settings.py b/modoboa/core/templates/settings.py index 2a721f2e1..d146549d9 100644 --- a/modoboa/core/templates/settings.py +++ b/modoboa/core/templates/settings.py @@ -165,6 +165,8 @@ INSTALLED_APPS += MODOBOA_APPS AUTH_USER_MODEL = 'admin.User' +#CUSTOM_LOGO = os.path.join(MEDIA_URL, "custom_logo.png") + AUTHENTICATION_BACKENDS = ( 'modoboa.lib.authbackends.SimpleBackend', ) diff --git a/modoboa/lib/templatetags/libextras.py b/modoboa/lib/templatetags/libextras.py index 9e10c0085..2ed64725c 100644 --- a/modoboa/lib/templatetags/libextras.py +++ b/modoboa/lib/templatetags/libextras.py @@ -232,3 +232,15 @@ def render_tags(tags): {% endfor %} """) return t.render(Context({"tags" : tags})) + + +@register.simple_tag +def get_modoboa_logo(): + try: + logo = settings.MODOBOA_CUSTOM_LOGO + except AttributeError: + logo = None + if logo is None: + return os.path.join(settings.STATIC_URL, "css/modoboa.png") + return logo + diff --git a/modoboa/static/css/custom.css b/modoboa/static/css/custom.css index e9cf7f9b9..d9ccd63be 100644 --- a/modoboa/static/css/custom.css +++ b/modoboa/static/css/custom.css @@ -11,12 +11,17 @@ body { overflow: hidden; } +#bottom-bar-middle { + text-align: center; +} + .navbar-text { color: #999999 !important; } .simplepagination ul { display: inline-block; + margin-bottom: 0; } .simplepagination li { @@ -101,4 +106,4 @@ body { .table-fixed { table-layout: fixed; -} \ No newline at end of file +} diff --git a/modoboa/static/css/default.css b/modoboa/static/css/default.css deleted file mode 100644 index 99ed02440..000000000 --- a/modoboa/static/css/default.css +++ /dev/null @@ -1,507 +0,0 @@ -html, body { - font-family: arial, helvetica, verdana, tahoma, sans-serif; - font-size: small; - background: #153F65; - margin: 0; - padding: 0; - height: 100%; - overflow: hidden; -} - -div#container { - height: auto !important; - height: 100%; - min-height: 100%; - position: relative; - background: white; -} - -@media screen { - body > div#footer { - position: fixed; - } -} - -div#topmenubar { - position: fixed; - border-bottom: 5px solid #333; - height: 30px; - bottom: auto; -} - -#usermenubox { - margin-right: 5px; -} - -div#footer { - position: absolute; - height: 30px; - bottom: 0px; - border-top: 5px solid #333; - color: white; - font-weight: bold; - font-size: 1em; -} - -#adminfo { - float: left; - padding: 5px; -} - -#navbar { - float: right; - padding: 5px; - margin: 0; - text-align: right; -} - -#navbar label { - color: white; - margin-right: 5px; - font-weight: bold; -} - -#navbar img { - margin-top: 5px; - margin-right: 5px; -} - -#menubar { - margin: 5px; - /*display: table;*/ - width: 735px; - margin-top: 35px; - z-index: 10; -} - -#topmenubar a, #topmenubar a:visited { - color: white; - font-weight: bold; -} - -#topmenubar label { - color: white; - font-weight: bold; -} - -/*#menubar a, #menubar a:visited { - color: black; - font-weight: bold; -} - -#menubar label { - color: black; - font-weight: bold; -}*/ - -#page { - width: 100%; - top: 35px; - bottom: 35px; - position: absolute; -} - -#content { - position: fixed; - overflow: auto; - /*padding: 5px;*/ - top: 130px; - bottom: 35px; - width: 100%; -} - -#subcontent { - margin: 5px; -} - -#header { - width: 100%; - padding: 5px 0; -} - -#header h1 { - font-size: medium; - width: 50%; - margin: 0 0 0 5px; -} - -#loginbox { - margin: 100px auto; - width: 610px; - padding-bottom: 15px; - border: 2px solid #333; - background: white; -} - -#loginbox h2 { - margin: 30px 10px 0 10px; - font-size: small; -} - -#loginbox h3 { - font-size: small; - text-align: center; -} - -#logo { - float: left; - text-align: center; - width: 300px; - margin-top: 10px; - border-right: 1px solid #ccc; -} - -#logo img { - height: 70px; -} - -#test { - float: right; - width: 300px; -} - - -.uibar { - background: #153F65; - padding: 0; - margin: 0 auto; - width: 100%; -} - -/*.menubar a, .menubar a:visited { - text-decoration: none; -} - -.menubar a:hover { - text-decoration: underline; -} - -.menubar ul { - margin: 0; - padding: 0; - list-style: none; - color: #2a4069; - float: left; -} - -.menubar li { - float: left; - display: inline; - margin: 4px 4px; -} - -.menubar li.selected { - background: #ffff77; -} - -.menubar img { - float: left; - margin: 0px 3px; - border: 0; -} - -.menubar .title { - color: white; -}*/ - -.menubardropdown ul { - background: white; - width: 120px; - border-bottom: 5px solid #ccc; - border-right: 5px solid #ccc; - border-left: 5px solid #ccc; - position: relative; - z-index: 2; - -} - -.menubardropdown label { - cursor: pointer; -} - -div.left { - float: left; -} - -div.right { - float: right; -} - -.logo { - float: right; - /*margin: 5px 0 0 5px;*/ - height: 80px; -} - -.dropdown { - /*position: absolute;*/ - /*width: 250px;*/ -} - -.dropdown li { - padding: 5px; - cursor: pointer; -} - -.dropdown ul { - list-style-type: none; -} - -.topdropdown ul { - background: #153F65; - border-bottom: 5px solid #333; - border-right: 5px solid #333; - border-left: 5px solid #333; - /*width: 150px;*/ - float: left; - position: relative; - z-index: 4; - font-size: small; -} - -.dropdown ul li { - display: block; - float: none; -} - -.spacer { - clear: both; -} - -/* Mootools tooltips */ -.tip { - color: #fff; - width: 139px; - z-index: 13000; - border: 1px solid #cccccc; -} - -.tip-title { - font-weight: bold; - font-size: 11px; - margin: 0; - color: #9FD4FF; - padding: 8px 8px 4px; - background: #eee; -} - -.tip-text { - font-size: 11px; - padding: 4px 8px 8px; - background: #eee; - color: black; -} - -img { - border: 0; -} - -table { - /*margin: 0 auto;*/ - width: 100%; - border-collapse: collapse; -} - -tr.odd { - background: white; -} - -tr.even { - background: #F4F6F8; -} - -th, td { - line-height: 15px; - padding: 5px; -} - -th { - background: #CEDBEC; - text-align: left; -} - -th.right { - text-align: right; -} - -th.center, td.center { - text-align: center; -} - -th[class*=sortable] { - cursor: pointer; - /*-moz-box-shadow: 0px -15px 10px -10px rgba(0,0,0,0.6) inset; - -webkit-box-shadow: 0px -15px 10px -10px rgba(0,0,0,0.6) inset;*/ -} - -th.selected { - background: #EEEEEE; -} - -td { - border-bottom: 1px solid #C8D6E8; -} - -tr.table-tr-selected { - background: #ffffcc; -} - -input { - border: 1px solid #cccccc; - color: inherit; - background-color: #eee; - padding: 2px; -} - -input:hover { - color: inherit; - background-color: #ffffcc; -} - -textarea { - border: 1px solid #cccccc; - background-color: #eee; - width: 300px; - height: 100px; - font-size: 1.1em; - font-family: arial, helvetica, verdana, tahoma, sans-serif; -} - -table.hr { - width: 80%; - margin: 10px auto; -} - -.hr td.odd { - background: #F7F9Fb; -} - -.hr td.even { - -} - -.unseen { - font-weight: bold; -} - -.toggler { - margin: 5px auto; - padding: 2px 5px; - background: #CEDBEC; - -moz-border-radius: 5px; - -webkit-border-radius: 5px; - /*border: 1px solid #CCC;*/ - font-size: 1.1em; -} - -.element { - padding-left: 10px; -} - -div.row { - margin: 10px; -} - -div.row label { - float: left; - width: 300px; - padding: 3px 0; -} - -.missing input, -.missing textarea { - background-color: #F9D2D2; -} - -.error { - margin: 0 auto; - padding: 5px; - background: red; - width: 500px; - text-align: center; - background-color: #F9D2D2; - border: 3px solid #FF2A2A; - color: #FF2A00; -} - -.info { - background-color: #DAF8DA; - color: #166D14; - padding: 10px; - width: 500px; - text-align: center; - margin: 50px auto; -} - -.errorlist ul { - float: left; - list-style: none; -} - -.errorlist li { - margin-left: 10px; - float: left; - display: inline; - color: red; -} - -.separator { - padding-left: 5px; - padding-right: 5px; -} - -/* Custom confirmation box */ -#dlg-buttons { - clear: both; - width: 100%; - text-align: center; - padding-top: 20px; -} - -#dlg-iconbox { - float: left; - margin-top: 20px; - width: 32px; -} - -#dlg-textbox { - float: left; - margin-left: 20px; - margin-top: 10px; - width: 80%; -} - -#dlg-textbox input { - float: left; - padding: 0; - margin: 0; -} - -#dlg-textbox label { - margin-left: 5px; -} - -#dlg-buttons { - position: absolute; - bottom: 15px; -} - -#dlg-buttons input { - width: 90px; - margin: 2px; -} - -/* Permission tables */ -#accordion { - margin: 5px; -} - -.element { - margin: 10px 5px 10px 5px; -} - -/* Parameters or Preferences */ -#footer > #update { - color: #000000; - margin: 2px; -} diff --git a/modoboa/static/css/login.css b/modoboa/static/css/login.css index 955aeab60..a3b222f56 100644 --- a/modoboa/static/css/login.css +++ b/modoboa/static/css/login.css @@ -1,14 +1,28 @@ #logo { margin-top: 60px; + text-align: center; + margin: 60px auto 20px; + max-width: 300px; } #logo img { - height: 100px; + height: auto; } .form-actions { background-color: transparent; padding-right: 0px; padding-left: 0px; + margin-bottom: 0px; } +.login-form { + margin: 0 auto; + max-width: 300px; + padding-bottom: 0; +} + +.login-error { + margin: 20px auto; + max-width: 300px; +} \ No newline at end of file diff --git a/modoboa/static/css/logo.png b/modoboa/static/css/logo.png deleted file mode 100644 index ce411b737d726dd186304d5ef7133f69d3120af8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6799 zcmWkz2Q*ww6ka8)zWQRdXe)Y&x>!A{BzldydJth(ix#~tqIW^`AW9O^R}T?A(TPr! zs3C}d|MSkgId9IncV_N<-!1dv^d4(ckTR13000WaBQ*nDZ-Hx;KqB1x^enXk*WvjX zXsQ6}zCm_zA4K-rnreW%|DQJ<6=}E;60b+*J~;6o|2I4pXr4cAkQjx~RVSV$XQzJG*Vy(R=vW+@Q{4m zrko^rNt*c4+@|OZ0bvrEfdMHZa$dOb7vm*XbTKrwl`H_O+;YijIbhb{_$BjLwQ>2{ z`T*(FdPH@Q=&adPV`bh*p))hRf8qP*Ea>(+`1ZWs*@>j?%|TT~p*u%nhYC|0C7>G& zMGoCa5P+}f9Z~Dwo&5sqBcE|)oo*=2ovFgEdUa>drqe!<&vM7D1vbqk25sk)Y=D8P zH(Z9Sb7~I=di!Gh>*Ba*3Gq}TBGgJ~Hi3U6!-On99YF4|f7pAQ77Fif@F)OzQVIbq zb`GD^TwQ%m?@LNOEUl~rM-J&C7$#UJu$gym|8mFglu$J@|_kw@7+GC+gtD@%hnQo6_%FKDPeCj%%fB zhK_(=$uhv%NBm2kV-3iId35EwY9b_g3G_Zq9GtHIOZw{pYJeaEnY$EAq6QaW_2AQT z-*QK26gQ#>q;k0UaXl)z$bU_KwgLIWnPtaW>dv3IbpKfP-aRwFAEss@ooS*2ARr+J z5Fd;r>8|Sf#d?0?4T)J?eCpurOaQnzyi&TzTWMG4)@LqzV>6G_Qm7p;x>zPRkvXdL zI+=wDnY`dGwRn9%OrO$WEn?qbhVKG^^N$WyZx$Gkep8WJS&npTau-VV+C0Da1TVCG1*J`m!{GdQIx!!RBF&4hF3Lx&C<`sLbDA&0>w#{7;agDnLr;)Y8jw4P7M@L$HI-C$6o+K?p{)6XG zx^S#*Sie1X2BYiX;sUz84c?4QnRL|7x*7X-OZ*n640!#A{RV~CaXVM>Ln7J+XXoC( zBB7YgZTUE8{O{}A6mD0G{Fh?sDnRVzWlPT-g{ky?F!}1&oT<^sl$wiA>_I+K@Iv~% z*#-|E$VQPc!O*Wnv60rc&K^>-1R#=JvFN!LMzAeNTq`@?z+lrc(GG>8!`gyyhW_}$ z?|o})AYk_QjvxC?e?_=l;X)_Vlc2kz_sE4Uje(sujnavRpCdNv2v^zS^q%!&c$aKAq<){a{kg>Akw%&mm{u3rh*pcb@h1s@!+nzD_DUaq(K zdtN`u5|3WV)6v+jeRgPTJaY;xqqDA;UY}cbH;5QHYIn<$?yvTQ;u=@j|%Je37?Ba53`uAeBEQI;{~jq2XX?#*XAQrT+R1&vNDK= z-U+hc7&1H}F!v=*ft!xB)}pn!%$}>oA71=c{qwUMtD2Q1R~YI!LWLL9^|m>EF=)iX z3!;gWR4GoWYqKV`&=W{O4ab+nx=6HL%_Kh+DhUh&FAPGHJqv4mQRmAV3xs z6$NHvv+q?^&G7IL$|NAB?0EU*Rmky`^YP9=Xdjt;kq|Pm6Dgi^a@77yU}$7SRgyVs za2-K55EX`0#*Km8GR?Qb@*pP7fNHpAVTm z@TH@tZ~FF)3x?c(rftF4^${nEY_Pt!u#lyRdzwzu z0zTB`o6gnwu#-U%)4OwYM9fKuMpHP<8K{ z5NVb1)jV@+u-~Kr0E)(9ykzpbMw`< z)VFU@gD)WASPonS@b>l=4Gm#!P4?pi0pEFgSlwh5b^NWbU~jpz+>t@~Z-p(N_ec?Q zZs_XMJ(XVZmXEg*#(BzB-!{X&8Etxe-3nEQ--OC=8A$ZPfrgC@dlI`+(j)G0TTx)% zC{YCV&7!FaP+1hLW@5t7*ys)wsIk>d{)bU3omjB6WV{=!slV+};+j4_sbf7Mksh#b z$jtZ=N==_(9BB~$^QRq8U4GKS<9Tx&+R0c#rzJRs>jqUm|0lFx3|N{DX7+G zmfA$O*jVsZ18=vxXevA=0H8RvLV%u`@xx?UGEyMYUCX-Dh?T?gIR^;N0Sa3=8r<1| z1}U;zSX#d5rI6;3mS)r_rG_cZ_41dcaFe8R^9O8=6(w_NCc!%&>b6l(QS~}CVRMR- zf0-`D+T8uc;3utj65DD&s40w>BL{rP>pppA3c|PbcOWc*ma_`xl8~7cX%lId6DAK5 z41jSU@$?k_UT;H{HB$Cc!JAdQW$&WTUJS=kNhvA&mCj%wA^yat1^@` zGc%PnHL3^%$?)(nieH(vDbw%Z=!Dnj^kj2nVq)SIj?`fCXoPJt27}#2-Cx;Nv$j@b zVP+Oz30;vcsPFhU(%@A8{!TE!G2C*E5E6vEyXle|m_mW&GshZ?Mk$z`-4u!ksIIQo zGdGVrIq^=<%-pjk@8b#)bpe$7O{ z41ktGMT7Thg0{u?$4CQH>7sJTGq~h{&B8CLVNd->Gpt95k)3(b&;TWqs&UHecDW=ue|&zgjdiyDM~) zZPD2xPH7-AL4bfHn31W`lM;*oMs9;X{qWEe=U0qOO@B>B`i^rsWbz7D0Zfv=n~t`T zA`8X#m73Xcn9p#`7`~mzN{C3yNUQihn9NR$B>(W?17cVIIY)ZexA?trrQImhFf_N` zGkW2d#&xkT*qR zu;c%n$klb1JJ&EPXVKij7v1cOH5luMmU+>C9uGoG%qzKRYC03oGknCli1MPfJN{1P zpdG8Tft)z!cYAv)6Z#M4?c<|wYFaUFS&gSOH+-Eq(&q3J>!5s@JIs7Z5OQ{QVQVv} z_;e}|bGX;Ywij}Fi> zWe@iQIfojZ?DW^~-#8xGh>F4hIJ?BBk}f^Y8`hfnh0f8-f2v3m_olv{ss!4ziz+E8 zv8N%fkO1u|OVl(Z842^=@#>RA-HUQ@^~5eGb;zJE==_snp4E}jWR#<>P=bEdu#>%S zpMADD;_u@sHa9mnUWEs>lyl|Gq2f#AQ+Tq5j9iiMRBodTV>^Eo*!l0bH`{4!+2p*l zO$QQEv$|z>G11X*{(EDml~q*}I*O@J`p$Orw;>YF6FKCOfx9#r<3=ll$v-0C(6GWO zh05A@Q8V_KYqnQvd>ibKXh>}tA;zE9v2d@S?YyNVkU{K$FBdZg9}u6AkYNfaQj0?)A2lqDP`pXwQDGMv7q>hjW(dXuKJ zg#KTF3=fMFnUOV8>W=Qy!3-Iv6bsb()n7FMbkB8nV9RmYpx!S{eEM>q=$whZ!PEPg z%2FRmhTB4ch3mNdftiJ+!su}zTXlyC>r-dv7gDT@+8TT%(2|d>44q+A!34p$D7tfS zWGpN-_Bv)Ue~~1YBdtaGR0B)qD()CN+1Hzc)dT%>0T;d}p4)PtHvM5^)F$F|B3b*! zpj9}tx;WiH(t0KqE*b{+TGO?jFr!PzW%&P`e-kOXzBk3=rmSo4Q?tmm)HBnooMuVrPk)mNaW@dz;%)OWs;8(Wvv_fGh6wUL zq>W9DP2yrTn|%+Gs_~e7@OoLOH;}dg_4cSa%w*6?#AFTai?;W201*-sW7Y0!`5PUO%>QkEU|aoh z^u<@~huR-KZXfRR_Psw^55~p$CvL^_Uhh8&<(Q#};1Z%lRti=3)P99P2010!RIUdP zz|2f4cFLTd=4i6IT)zy1mr%N%ogJ5+$xaikz0aSmS*8PMC$Y9-=I`IWAlZ`H3X7+U zX`|!Z zu5Uq1!}6IEa2Zip*tf&Sbo6v~yK7}b4ck!1P0c*RFI_qj$2pZ8SD#A4?}ITK`EoBw z3ls`mDqX`AM(S9gQy)6W9*w6P1Z!pB)DJac^~d@i+7- zc;M34X834ODmaZdvircNcm0no&W`l1YW(WB+EEmo?_JDc4&a{?B9XBByldf?DMY6G zL085nWR0GNvW*~pf^dfOlM3h_lk`D#ROP+gzAhHgW0yuT-aeg1P!@d*Im6hgjI;XV^X!KltxdXU@ocD1<%MA(24H zQVerM18^EQYYLP`q&l>St|Rg%3t41h_Tv910gd(ewr|^1?)Z+rUbT1@{-T3X4>jec z`X(5{61i{`&9xwgSkp&{4^X5hMDSFFF_2d;J`LJlm)GQRvn5w!?La1CS$^Bs`3M6a z;lDp=T|`NGRPW4fE(3GSB!y87J?tl3bR<}JF#!}QfTpzZmH5Nx;{vc`8sag9jANpq zh!5^cmNX{CV}xkz7#O8usL^m{4aj@ka;~+oaWU`V+ZPE|Lqw`S1c!@TJ65_u;+S13 zX+!`@Vj!9i(I&~AUp##gM1{-2C{wxaz`O}tBVM})v|Mhs4|QIPf*T#00&?VVoX&sj zJPhz}Tq!3lbha4VT;^o~BI1gb&!eiu4FKt&lDAg=?wH-^C+KHC6bD$Iq&k+!u?;oX z%;(^1PsZ-QwM3*A#YSt%BoW8eUwT0XjkF@%Ud-SNRcUIg#1evt0C(pDUAr!}=gm*g zWs@MiQKV6H@io(;G( zL0(Ge$vyE+dp^JJD6(RmDe5%1Q3L~VcsW3*nA|X|`~jR6{$$5Cv&Ut66?ebK6Hn3q zj0*ro{yU9`a5kQeV}|iv#lvi}oMod^Q|(_GJ8nXh=_pdUnZOzTapHwy8ZteIbgi3v zfhkWYprD3G8@}3$>Kr~!(@9BPE1j2h8=Kj=dD+z&-c3w!Ni_f67cH4#=q6uh7_|zw zN^GA``^M>Ya72Xap-eY^Shid89-gidoW)r4TutM9EcfAk*kowk@l-nxIY09e<3o;- z!AFf|#0k!Nr&7koE_$!N@>s3>-G6R$?_;Ihu)chMs-gOk3#^pcfyp*PE4GGDZr_Jc ze5y}ejbe2|W_5QjC(f*e($VGBz&6OiWBk!F@_}m>^|)L2%%V=p1oLlad#>CoqA7rG pMb)_B)*TF=V)Sj2qe{*lmD-~E#9@fRU) +
  • {% if page.has_previous %} @@ -10,7 +10,7 @@ {% else %} {% endif %}
  • -
  • +
  • diff --git a/modoboa/templates/nlayout.html b/modoboa/templates/nlayout.html index 6ca651935..07a50cf2e 100644 --- a/modoboa/templates/nlayout.html +++ b/modoboa/templates/nlayout.html @@ -49,13 +49,14 @@