From 111caf86a555c3e01389fd3b0fb2d3668086b31b Mon Sep 17 00:00:00 2001 From: Alejandro Giacometti Date: Fri, 19 Dec 2014 15:03:30 +0000 Subject: [PATCH 01/22] FieldPanel to accept custom widgets FieldPanel accepts a widget argument which will override the default widget for this field (torchbox/wagtail#848) --- wagtail/wagtailadmin/edit_handlers.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index e2ce14c35..7e457be2f 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -351,6 +351,15 @@ def MultiFieldPanel(children, heading="", classname=""): class BaseFieldPanel(EditHandler): + + @classmethod + def widget_overrides(cls): + """check if a specific widget has been defined for this field""" + if hasattr(cls, 'widget'): + return {cls.field_name: cls.widget} + else: + return {} + def __init__(self, instance=None, form=None): super(BaseFieldPanel, self).__init__(instance=instance, form=form) self.bound_field = self.form[self.field_name] @@ -397,11 +406,16 @@ class BaseFieldPanel(EditHandler): return [self.field_name] -def FieldPanel(field_name, classname=""): - return type(str('_FieldPanel'), (BaseFieldPanel,), { +def FieldPanel(field_name, classname="", widget=None): + base = { 'field_name': field_name, 'classname': classname, - }) + } + + if widget: + base['widget'] = widget + + return type(str('_FieldPanel'), (BaseFieldPanel,), base) class BaseRichTextFieldPanel(BaseFieldPanel): From 6ed3303ad0d4fbac6a66cb2e99290a5bdc42c607 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 8 Jan 2015 17:00:34 +0000 Subject: [PATCH 02/22] removed border from images, which conflicted with all other images from external django apps #502 --- .../static/wagtailadmin/scss/components/formatters.scss | 2 -- .../static/wagtailadmin/scss/components/listing.scss | 4 ++++ 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss index 084a323c8..de061d724 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss @@ -230,8 +230,6 @@ a.tag:hover{ img{ max-width:100%; height:auto; - border: 3px solid $color-grey-4; - } /* make a block-level element inline */ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss index af23d45d8..6d52793e5 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss @@ -353,6 +353,10 @@ ul.listing{ font-size:1em; opacity:0.7; } + + &.images img{ + border: 3px solid transparent; + } } ul.listing{ border-top:1px dashed $color-input-border; From 101fd1c0445e20f5010715368877ef1a60831ab9 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 8 Jan 2015 17:12:07 +0000 Subject: [PATCH 03/22] auto-focus on first field in visible content --- .../wagtailadmin/templates/wagtailadmin/pages/create.html | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index f21b93a27..9fce9a60f 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -66,4 +66,10 @@ {% endblock %} {% block extra_js %} {% include "wagtailadmin/pages/_editor_js.html" %} + + {% endblock %} From 6a36ed7f7ed3790784733ee80bdf5ee4587edf2a Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 8 Jan 2015 17:28:35 +0000 Subject: [PATCH 04/22] added title tags to inline panel icon-only buttons --- .../wagtailadmin/edit_handlers/inline_panel_child.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html index 0d6bdfde1..40f6e154e 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html @@ -2,10 +2,10 @@
    • {% if can_order %} -
    • {% trans "Move up" %}
    • -
    • {% trans "Move down" %}
    • +
    • {% trans "Move up" %}
    • +
    • {% trans "Move down" %}
    • {% endif %} -
    • {% trans "Delete" %}
    • +
    • {% trans "Delete" %}
    {{ child.render_form_content }}
  • From 6e166e03f5f18e5eac378f18e5ca7252124108eb Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Thu, 8 Jan 2015 17:29:24 +0000 Subject: [PATCH 05/22] better syntax highlighting --- .../wagtailadmin/edit_handlers/inline_panel_child.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html index 40f6e154e..b337bba87 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/inline_panel_child.html @@ -2,10 +2,10 @@
    • {% if can_order %} -
    • {% trans "Move up" %}
    • -
    • {% trans "Move down" %}
    • +
    • {% trans "Move up" %}
    • +
    • {% trans "Move down" %}
    • {% endif %} -
    • {% trans "Delete" %}
    • +
    • {% trans "Delete" %}
    {{ child.render_form_content }}
  • From 551bdcf8cabe88853726e1dec4b26529cebb90b5 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 10:15:56 +0000 Subject: [PATCH 06/22] font smoothing added where it was missing --- .../static/wagtailadmin/scss/layouts/page-editor.scss | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss index 50e77748d..5beae3e39 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss @@ -110,6 +110,8 @@ margin:0; cursor:pointer; background-color:$color-salmon; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } } From 2aa411c0412afa653a056b9d7b3e44df9ba67865 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 11:09:29 +0000 Subject: [PATCH 07/22] updated fonts, which had somehow become half quality --- .../wagtailadmin/scss/components/tabs.scss | 3 + .../scss/fonts/wagtail-icomoon.json | 15 +- .../wagtailadmin/scss/fonts/wagtail.eot | Bin 24856 -> 21296 bytes .../wagtailadmin/scss/fonts/wagtail.svg | 142 +++++++++--------- .../wagtailadmin/scss/fonts/wagtail.ttf | Bin 24692 -> 21132 bytes .../wagtailadmin/scss/fonts/wagtail.woff | Bin 24768 -> 21208 bytes 6 files changed, 83 insertions(+), 77 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss index 0473ae050..86f6beb06 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss @@ -66,6 +66,9 @@ content:"w"; margin-right:0.5em; font-size:1.2em; + font-weight:normal; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; } } diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json index 5d9595ecb..02b85fef8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail-icomoon.json @@ -1,7 +1,7 @@ { "metadata": { - "name": "Wagtail 1", - "lastOpened": 1410881728324, + "name": "Wagtail", + "lastOpened": 1420801397108, "created": 1405597423787 }, "iconSets": [ @@ -8564,20 +8564,23 @@ "minorVersion": 0 }, "metrics": { - "emSize": 512, + "emSize": 1024, "baseline": 6.25, "whitespace": 50 }, - "showMetrics": false, + "showMetrics": true, "showMetadata": false, - "showVersion": false + "showVersion": false, + "includeMetadata": false }, "imagePref": {}, "historySize": 100, "showCodes": true, "search": "", "gridSize": 16, - "showGrid": true + "showGrid": true, + "showQuickUse2": true, + "showSVGs": true }, "externalSets": [] } \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.eot index 8f46b77a41bb2dde0936a17529e8aa97f215b8e9..acbd8ce43d4fa615ff5fda318f49d38055b62279 100755 GIT binary patch literal 21296 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 G$NvMR5dXXY literal 24856 zcmb`Q36yPBd7#fe^Kj?s)I8iJD|^$P-220TBm4K*aY{1UoW31ER(NSt1ft zL}Rb+79_fQVY^&$YJeEbI2;mZdD)+P*34Atfo7y>xrJZGatC)OtT&U=u&yHI&DPJ5<5ueyYr$Hx_FAht@9A%oC>18wJ(gpw zUjB-G-LM%*)+gAHzwYJ}w^rZ+pWdUueC7`-d#+ zRae|}!-?0chhKZGWnK3@p0D3Tg7e?)u4TPi-e0=u=G));?zDJ{`xi)=Z@Tq$C)(dS zbhTw&e;v;sy7|OgZ?j%*e~bIS;eO$k6F1-RqT+|2v8>nR$p7NoZvC0tX(!w9E9AN5 z*iy5{v&$5%urA8ZKei^VdnMo4CjH#Ly@1=dtEW%#M;{ls8_y&6mYz7Nu|~b}v}U;$ z?X@b5g2Pi~Em}*~0qa`pdh6|{{`nMrV_P6?)jCSr37w`+{f|@6ochkGZ=HJT)Hkz| zbjGoRvJ`I@$JzkU3=ilgZMEy!(;RE3wWz+MK59){E7riWmK%OhP_6Dlui5VGRl{bb zb)M>V8)>)F>vY?_ojmh<&2DShTyJ%oy=J3zQ1#Sz9HkuJR~xq|&zEcUb-8x~rJht@ zQEY2+Am`X=P3?C>*KzrUt~&0rZG5z`XU|LS7hqxBmMvd>SAB`A2(YbMR<*oXUaYnT zz4~x*uvo9lVOc%Cap`?mf9zu$Ur{fVU43ceQqmsUv*#}_xZoWxezBD0Sr?r8vHG(5 zru9DSDeI5btXdFwQuUf&=U9**{pMHqYxQQWRr3QL6;;!3>ExmsWiZ*yacy;dc%C}# z*W0=uthamp^}%|7xVpZ!-j*ZTO$v#J6~DFh{vhbrf+53geyw)XR4SG9YiqUc+Ax?= zYy0(YxY`|T)v(^)r_z37&}gr9X!Bk*=&z^ije6F~zQ0za!rGwLt_R~SU2mjwDy=u$ zt)@)4{QL$lO6r`xJ*rZ5g_*9cqirk2&#@iXcDeE*&x`rFUg$;z&t=NJLgYrSPL&6? zvR%g^C%JhO$dIGHmJ2pty>VUzyy3V>7?h)^mL&DCb&FE%V*}M*J~}zIQYaK0+qJ#@ zv^v0&lgrEC(m0}oz-Ki?KK;Xy+z)QYhhFh{KU0Ok#3md2gU13E9EbV~ z#p%WjAV8}e9@rFYdmK&EXq>c;2aZmqpUQT8haQtr+E0RPyw0DbI(8t*{Em<{LZ64yXUU=9Jv3{!>WGmhpxHiL)ZR0$=kEe zSHG+7wqkDTy?Sd9q=Ut>x@hmOJouo>sk^Vfu7CXcu7XWC*1UDOdPbeJCSZJ*FcSUY z`VcHi8)>6n3w-|C9sUMG5{3;PwmbSk$0xBr^n+oIyu8B=@5#B-4%&fVpZ8ja554e( zhYq*At*eD*w|nSNx7%zVEH)SS?p<6g9&F#?0Mw3KEH*qK#`WgY#?w)FsJW!nQu9z4 zh0%efrc%wN15v03vkOWs%nlCD&&=*ykmQAZvorGt=b@zlrt7AKl0N$mu$DF;cEXu1 zwVLX2^$B`Rx2p__7YthUPLK}Y{i7eL!rgm*Zt-!RryqXDpZ&?(7ao7yyfd-=9cNhY z4bovJxc^5#nz?JwUF74HjlbS}C*Fjs{no|SW!6irE8u|FS;wt^gBW5hFKW&*C~HU? z8W8Jg@H(P;+iwk+l?|L#7qf?p1{OOqtL(vP=V7z03-Vj7%`0{9#y^#2lOz`gK{e<5 zULg#Np6@@(Wibp3T;{4l5ayC(wluZzo3NzVQz7)jao^ZyyL|KTv>#4~-VZ#EeqQHS zVLpxHg4+rUJ_UJxAzWG6x^B6JI8O6f161=5bg8hLRJyceC=bJ^^Sz{wD_wJvX znO)qv+IYXlTaE5pSHRf(sZ-$6uY*f-VBQ!NF>N&zq~&ym=`dB+-j~nMw_5Y_FWXP%^~1t#C8uGUX0#iAYJ>*Uck+|c zZgd*$w7otcGlCPxe@=JSs!Qe4WC$4#!iiF;Rjcky(_PitQmHfvzN;_{CdwvR1v$_4 z9M8)IDoCId3J#bA>ZOkGRX9vc^TV(b19pDmg?U(HA9|mUgy#v{fTp+#mJRm`ghId; z;Dv1Kau8w>+C@8`ccvHpkO&>k7-5#KTMVOmUT*c~(Qw-7`0yw%@@b@Dot`jIw>rwm`-m7J zc#;z-+p!ibPyHb>;)H#>{nUtd_qtoOyVcBScdt?BZ`cSlVGkhDbw6$Nnn4XB-{W$~ zp03K9`j5MMbFJ2ryPEtBc?E*s?sQZ6tF1|X{?^!Ax<;L|F|XFlgI;&IZkjS|niPFp zA4p{!JFA_({0+L~q;O#y9lzD?tk(UtW~&b)5>~{qgPa!B_=6eoT$;fX^22O~tG)Gl zchDWIw%TiyOWCV~_JE$!NSfB;IoER49rStUh|T-FN9*LT(;co-etT_QO6yUAoOz$T z^1L@(Z|Ov;rJ=obc$+k%JCJPbR7r7b6nIoI*n`!e-)gq}ff;z|SCd-%on~uQUZiKu zHLhAdxhSl)&XD#@r#Qkj;imP5Im-(&O=*`Qkyip=dQUdlyX=etjaZdtNHcYdrLPU@ z>UtS%8AWRB$lf#+$W&5UQ~snPDYw(;NC#w~hy9de%MZFTT)p*_k)*_+QI~wW zl%QIxGf6FmP!}xu+1J>E<}OvE&Srg;TgHP-y54{RlgDN}q>GFTPX_{Mbe%Rc*XhFS zT(@`VaIZT%H#ghu9X{0S&dr{03&J3`svHP|@F{m$n(IbF4xkAnA!-VC>4U9>PI*y3 z<0%3uy9lQ`5yAj{K!W8xhYQz+6qww)5-HYpBb_EiNG+0N5LoI{u85tK?0HhKq?l$& zqVJ3FYzyh(RyLkVT@)^NG+8!Z68M=$NfT{TD&koDc;l} z^G*Y#8O#7VXOyM^WYThqB#BmrltF$^H$WexP3g+U-`P&Q zTUsoCa^Bnw3`sKuD)j?>)RX4~0can%%meMvdc-n3_mAPZOV%}(byR7+aG%<%uq715 zhM~`xQfjb5Bcu+E44=tlMguT%*+>sCV(a3#824A7l~J38;WJ|Q9fpLtzB4OnH`+Sw z9~imF_wzwmj5dA{6~iF!`w@v_>8di8e)DIfFba_z?>bChxzs6dkd*)ToC+c1s8ZzJ z(O4X|-i3s21jb#NqP)wK>rpcaJepfxE=mInFUUEdzJf*`NC|mI9te1 z=kkp>E{BMlB7u>^uZFo=F`i9I)8+hpt~gmpCc<1Xb_=0$pLz}zjn!ZI394{aSa6d< z!JmpsX*pg@ME<+Ls;Vc{r>riv(;p%KX;D1Wi$=q=Wx3FjyctTFlX}WbbQ(xCTbjYR z%rALn6qzs*&WgD(5CPu&u;TISw2^EO#@ZY;~KUILDX0WFT{Am%JO$YWbwc?>%6b!elI22}e>LZ%?`yii!NjSVuaU`~vu8I~VR z@B&3LJd{VZ?<&s~@)L2c0M!#Ztr}7})8aW~%jkrUojtMxSy6fTie?e%t8s zLo?}Ln!LPGpL*HOqm_EituN-2yu&;O1(|J-^OzTx3$MD)ZBI=fs>hXFJee;o7E05F z1HrCcyWVr->~LyoUp;J;N;{^e&zoO3m`-2ZZeKE6E*+hl-(_EUZKY!SrTJoECKuIn zxv2s+v^&AAUjVo65Gp^SJV$K}|AGjZu)F>GQD?AMp&g^rLyHVW(#QI$zoy&1Y0WlP z_M(eXoBopt8@pfY_@aJyYVCl5prDrD4DR%jC@!J%+Cfz&E`!Ga?}A?|pwYTl2@EBn zUtyNXCzBW!0!%qtih=htE+w>I$iEwFctNb8Jf~6__>F2D`>Nj$iYZtsQ3X-WXUyNS9`$&OA8sR7(VHYmExk=+G zQ*1guHl2gmFz>@|al*RG`i%8W>#u={F*>l#Vlf(Yq4ncbe(-!>@C-d^8PR1tZe zPhNGYV6obGMx-GjL!9PK(&PU+<(#Yhn{$VjL&3&fIH?x9#` zOMUGg85qfD+g!?(ZGZP!hV6_-ymq%Crb5`pF5k9U+E@(+K95*a>bKN?wAOJ2zt{Sx z^=0e3Blyf96VkP5%L_6R1u+;fkhsJ>-ML_n9y4*m`KWLCNfSET*U%zBR z!FlJ>bLTnNyDy0H&>&#JbE}*McLE=$hB(DYgzMntnSva-k^exG9>F!e0JY3;Hlt_2 zy|n~@s+YjTJXhRMa9k&U;Z6ZH*=&34^0yleH;;i)n4?>szWOTt%s}PX<;k&E#x9Ld zrixGIQ`YB^l*dTUxCk^({g9^s9^pLDKIqh@2sJLQWzrac1%$yrjEBl_)X~w1-&r-3 z!WE*q_HPRiuA`=mz*Bhd`nJk8YfaVfGSp0O}ynu53_PRlO`Q8^B4VNyxrdc-lT25}+q3ve-}639_cC$*UNMU@Z%EI>9y zhVg}z*mmfO=v9g|XHv^F1N*WUGW+tF3Nd;(BK9C~B>@VSUkF6BLQ+e7ffaxoaM7Bu z&MnfOw}j6GzGx%0LFPasXDLK7iXAXW8Uz5+dC(;EN+HdUYEe?nX|E2;a)CNRs z_SSaWaU+*Z<=d^n7TSWsz`bS$>5>LH=-}9JephC|vaKnqsv=rC@+{G^u z3P_zDGtL2mKpC`3D*!D4n2?AZbh#e#rqG9@*4@@$K_mJoQ`(vktZF~Bp5J-{d%dVl zaGQ?t?&u>z=9a-h8zrCxn^uYOheM;PY0w(9v2u&@w@G3$LIXibbv0S!hapT-o*_#D z8XY6u>gu;Wk?J==MrpLMg(TjnED{U2+Y*jV2bfzN_uWA{rTj-2VUBzrK8>m ze9#dOg;QI&M1>?lcepRvmgxNFXu?2lmYvA;&9(F#0Y>C!eiT5VLNxi)00=4moaw;w zW(T~12gxdg0YoqH8R+^7Oxs8D-3lb+Pq7TlTAoR2w-MR%REO}UHlCyQ z=17Q2h#tEcStTgzwWwM$q#^tmWP5Fg< z&M9Ka(q^W(m9tlsVQF{@d2`CJGw3<)tkX-zGecv7d3UUmH`&O(kL~bjC#6apGXwV}N`d!ZAV$ zJ2SuM@xrc5IMS^|8|sYoGO94;*CizId6oPbVd;5)HYx`A>XAzWQ7S|PM77a2jllgI zXtLIDp^sk`xlt5$(jd%mDL6a0A({uKL9O1BEi7W_3$?6(iW(4rBkvePnSSk=%`%ZM z(Z#YNw^ETqH&Z_>7I>Nz3g(O1(+@^Q|1(qX_QlvY3#5_Tw3D8Q@e;eXrvij=XXcE0 z5R~;M(!SUq$J+EX1RzH2BDSJB8%Hq=O7l5vtxiBc3;ugysHj$=i^+y~k8IBvV#ef{ z%L)@ip>Rb`ql`9+rcPw&rCQM_;bFX}Cdc~EYi9iAk;vk@TUjbLG5<<4Dt^pBvBlba zDr04gsGF%Uy;8ImNvMX5gDX;gF%Y}0v`milZ?<~h^Ql|pxDmgcz{d5-ahe3>7kdyK zQPZK!@TnPrLBG=_{hFWp4GiTOcIk_83^XhU!=s;$;5-BPu|g?2%QqGPBzU;JT+uCQ9b!_<+)_;XVjA`cM(<~HuZ{{I0b2lz)j8C?BS;lA_ zGnk3!<3y8a#*wT|@;(!`J)U8l44;J<8;Y3@SGNS2O-9l)%wq&L2qiK)*n%{bz~m=} zJ&n|&ID?ns4iFJm=fcDX9Wbd`E=|+$t?FFg!LS?&MG(xx)#|8pNO?NII&wdeq)9T7 ziz^Ytl(IDviyxAxFKvdXqWAI42a|b=(68{?luXnl8W!X{5)m4^5lw?4Xi@t7vF6Z9 zELqY>ak5C8#qz~{?D}*qYh>18th6*%Q!5z&-L=o5JYf0O^$~97sL7#-_?Vt3=M!NL z>pLxrAje@SW)so>nTrRwb2)K_QKmHCq4or6Jzau`8C&0Z`uFNxx(L%Y>%!hIAdd!mGqKkKQ zNDM zDj!E_yz!60L($1fqjBlM?!v;iDHhJfL-;RjSg-4mMLkdna9Bu%kQLdumZrkEgyWH4 zT2F9+Fm4j`11SRg{pKsC*^*NPOfpfA*wN)$-XdB+s^hE|Sf-~97*CD( zU^;;*Nf=JGE%2*bzuE|@!YatE)HMvOeKqAV{6jg~&OSLPH6-O{nVA#hQYT~@Y;{l? zE)itho`(4GS#s*a-o9H2mYx+YVt zxTE)D4N)(K#Q)Z)BB}&_>=Tkj8o{(en}@{BeVw?u8PS|jM0^&R@n)%LK{9ecB$mY2&$Th)3n%9&k%}w*%pe)au?KKfs*1JRTddLrR4zM(DYd=~2>vYkz zE2igO4Me$^aq?7E?AAPEAoNpPT_U3aS1b$8$fe|7K4rQn*3j$ zx%M=3sN;$7l>b2V-ON)pZOS2wx~A$7r0&Amh4IgTYiD{b0^bmgeUg-onoFYmHp)?CaJps}A<;nV;QR znrJkjz;U_VUE9BMp#7nh*qQ+h6#3C0aXS-t-F-U*V*R97ia%`{p5^1_*B zIh~xEpPD_qi1;l*%znL8&}Z$ws!z=Q=cYS9ySjUBx;Rmv3}QT;jh&OJI`(sM(wv(v zfOFQVAA|D0L%hu~>$QyfP3re#RJXLd({<62b~i4;f{yZn$vQ49cdD8qn+KRGzzg#p z#2W4iT@j9{i!{h8Nts%z`Km_VKFCWsL9Hq1r>zy45pu6q9R|%2>g%<|x=Nw(8XdvL zVQLVw501)O;8pE%0^_+O(5k*#%ObGATGe2|LnBDD=Fl{ja2Hf&ih%;u+F53*VZk>h z6J4Ls9zlMLyKo;a@T+n(B!-%3#d$%jN*(NKuZwR z*XjH8MyknZjjm?c?sl|7Lb;U5$Vwg5#M2)4wRPzNsfbHIgrZ=DkvKu^O2sI-qfjlKQ(Sq)5=@K>%@igbPzEb-s(06NfcEe8NC*-D4Q@ZWPkALxMac+Fdp`j<9-w z&vO#`2l{#<<2x#Fa_%BroCvd;U^TddAD$3?L+s#&D{unh6r~U+2}45b9R)^-y5ZSf z*ox@X1TEQat-_l+($VEDc|rZMQuQhYgwj^KNCs?0xGT`5d{vtwo7F)>FhN&@Qb{pp)En{U~e>xQS~KXK!hgvRfS~MMoUB_dJ>asOOXQuvwEFr@yAd#FhB{Dg_BF6S6%n&+1h6`4!Ar*2-#Lq={52LO5}arbS5scNmLZY`a#Fp%&Z45%iF+ zp@+;8nK+8R$Ree((EL%ndT-bofNnxV^eI(egEu6>#uvntE?W{jrfm_AJxrtv{d$eW z97q%XCw2;+cw%Guu)hAdK6V}vB{?7?ppk=EJDcrE_;QA(x-*gYiTbC4S^L-^@sy2%U#zlAWBt@i;y}@PX-)#frZk zWAp3!`na#{@;5l@)ta|2|%zfh0Eai&?5xF!*^ zoq&bs)jmtUv_S>FfzfAx_SNa6M6GFYwxPkaunwqcq)nmcTQoWNk9rMGf=zZMTVl@(VlrvJAvTwar zfXm4Vz>#h{@76Z4MWE@=_4?dj*D}jMCe!@542dDjzRpD|5NVgx2 ztgTJN>Pi4IPvCo;r1@N`!?z$XP#rIiLph1lTt4M%5)mFs*L?sAq*=vvxygKCrYM$n zV#~$*gkwj$ri6^Mk=a;{jDLzu;+z&sr{vbb2dJhHPn|U%UPm;sVgb2?kBKLSUsgY@ z(qFRxS0%N8X*7u^l0OZJQiKWk?yDp0SzG}rSf51emFTgk7>h}`oJ2YZC?r%YA9#6I zb4g|)4G7a-0Jrmi`=BhLSYa(9R6IYGyxJ8sL`S*`9rTmx-PU3BvN40;NPfwDyvztw zpu=5+E-(>V>C_hZqE&4bfJv9Po_?tD`b&V+zeBBW;UHz*O$C`ab<9 z(7D)qtGby*k7&%cbLU1F_}b-&yDR6YcRD#PfJQOwWo@YRbBKYYE8KHC*CvH$V zqvZyLX9cDmW`y#31)d#5Zx+ z;L^Pk-LBmhN06zNB?6<%-7M#f)m2ih&Te9R>2U|hB&MB0u`Xs& zln)XJtd%fpZR1hsRnwo?8=_)Raj-D z1et=st9EL&9rfCdTCG!+d(cg(MzzwLX*08gEQ-Avih>C#0JcO~y(b~27gL&7%+f{XU$v)yX7vGHwf3)i&>SoqF)VUmRB zIpBQcee41O2^0|6#s$?yf)9v=TjYCd%=styHqzzlO{dF^dXjtEY_Z-K27ug%*8;hb z6%X&y^5Pldp@@xt2Az4Au*5tU%6;>#a&llNnqS?A=!h&mZ|#N-d+i!c3B-tC^;~)quCkb6b$=vwfSOqg% z*MbK&zNWv$_xqcSB`f)s_bMP3y2oecI;^wWL6%m<1*pk}&`S)v)^c5%MsS zh7yltZjCa5poT2=(zsv>GYlrf8TE^9A!)`0r^^@G_{BSN`Ft)nUnv0A>)Hhx6-OsmaEm}3SY}%Fuk9T1H7%Ei5N(P^a?aXINYZs;!`wm897(2 z+ z+|TC>2uVij#-4+f2XPExfi#UDC#}0tm6p#L11XZE7|sDtS#7NKsti9g9uy#Y-bsxH zZVAX?J*PnsQMAB}qRjNklX4Vwj5^(IGVUw+l&4vD-ekt~d}_KTuA!QC{^<$Q58F)k zX%G4Smdx;T)%c&2SbGdIv|WUKSW>))KVamnYeb@Q)hoqkAb@CbKXYsLsAvrUCz1B-FZk0yAIaJwg1PG?&Y(AR%1KrMggGx9HDLDsLTsg3kp4 zsf>eLHkF|L`5ULivj9OM`O9AxrPKs1z%(V64UZ^sgnT_J6YUsa#>|L(d;taYkZWy) z5xRc?`k$<;NBl_$paF*w z%qn%Omp~PP5BeGfH)~r>79}GyW^%fhyUZVb+d=rY5Bo+o3 zVHTR>8`C{TWRVy>aW@vk7@e)%7@DO&skB@#IMYFjk3qL}$g&V0t_YA0(606(DLv>G zy*LTJAqtgf|2!!8Z}lrdpjQAtg`Gwn4+@wvX}s?eZkgBCWj>~ni~bXlgYPE?<@}yg z3X?*7dmIx&N;#|`#xC`ZAmQVMMlL?cH?HobU#|z2H&v)ie`4IV0zM9xb>e7@K%)Cy zv?b=Kk4&>=E_qf6{zJ#T+$~DP=qWLZ0lP2JlA()acuJU|^U|+*2=>_4#gNNW0VXt= zXVaU$h8A`mALhiNBy1Et<~k7pMGw*mFKZ(OpcrYj?A1cW?dPBr!QV#lrmNO7jL(>@ z$;>+Rjh~r&!@M#GFf0roYa_r-A=wOTgG`UsEokWA0r3%{u(ITcNG^dV(JQpGMs7&k z3@sHa0Wn<0TPp@Nfi?1&U!$MuT49bub2aR9C0?6uT^c7I4xVKV=?3fB8hUY|;O__i zac{xzBn*f^B4kD#QaoC|lcmafLx3qp1hgL#O6sZs4ov0{pQ9M*{3IWi;3sZ7#ORGo zeID1W=<*BR4(tk)UqV6^D+1Gi6oj4;sDU;s=p?%j2L!MQXq7yUU5xl30oASGY(dBH zo%7+t@@?a zAG|0bFViUds2us66W@ZwYfOlu6s5u(i}*0P*{x9d#d$j-;Ew`5uZs(Ek=hx~ToO5X z)K`oqe6ulUM@fv1Vqy|o))Br<_|j>^>;`ZCRo#v6np| z`gp{xqh7-OKT0beG-++2jE?t;FPU?j=tM&+4)U#u&#O;kkG@d+oC9(8W`E{Wbn+QE zlQOzbwOd&{!B7-&BlFoec_t|>NjNAzTEHQS^M#TVMoF$*ku71Nja@1bM}v!jQBkT^ zUHtw+t$O9${LWo-Y`b>O&s|;MtzrRbFQQv~wF}Vo#f!mB6d?r`ij+}UsIo2mkQX*z z7C!Vj^pC5J{-M{HfFmHM#EG;_uuJDO{o`sS25W&ORmA+@IQME0cqbDL#pR5|rBUtpJaM(>@+^_}dJ z?+ClRKiWt67D$TpLc4fH>3I3|mCsh2HLG^G_V&ib>17jlO?-8- zGUZQwclxhpuAlk$GvA*5-rR$WbBk|S{EcR%c}Z($>%OJkOaEv2_3eK9y`8x%2*=f4A$N-B0fE_uR7QlX~_pvVTv$B5a00pT`dc>(kjBE51=~AV&tP zU|p1@J6tbi*DlvrX4f7c-j}be$mUxCUobM)G4_hrVSQC@M2eJYu1%Td+LURoO_}D} zlxePg-aU}LYs%dIG5@oF^nY8PJ5Str`-wNc>9qeLu>JoBY diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg index a54739410..9dd0ef242 100755 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.svg @@ -3,75 +3,75 @@ Generated by IcoMoon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf b/wagtail/wagtailadmin/static/wagtailadmin/scss/fonts/wagtail.ttf index 85d0d2ab64fd938a8329c8f380bfc9a7829da6cb..7447d813bda6ecd66b9d22b90abd2d4aea2c0be3 100755 GIT binary patch literal 21132 zcmcJ13z!_$b!OeV^{(ow>h7w3%=Gm1W2SpFGaAiIPtQoBd594bdLjW5U@#8>dLkZ1 zn3oN~m|&6^n@=XfCN?;`{<4n2Hj5pCy|ygyuD^sh*hx0duHzW2c>TpJVVzCZ>m*ET z|8uLmr}YH;%T{-F-MV$}xvz82{m;3lT4ItU+0y+Imqxc;vSQqe$3BCYui?D*`kQv$ zDmB<^lEiYjKe%_-p<8kFasM!`#@>T>@42=5$=}2Mqms1s;J)3vZctwK?~$Yn-@^0B zeTdLsQjmAs1n&Fx-E{k1?(*J$!Tse#^WZJl@A~{_j@~Cp+i%D7M{nA7*R9gU@}Ei4 zMGEc_ge3XAK|_a>DS$Q%c0v*PaGE?q~{V>sAN@=t$9IK6|(xa(#o{ja7 zPK=F~#zup&(ebhR=tO;nMfYJ2f$=f^w5lpG^Iso-{9pB$qB7;)&0FqOVzwDm?%TZi z-o``M;kecC3>^n9KX~xLzcz6E^@9)oVEBqFKDDD(+d-#)HjuqU@-J=O|EsiNO8(M9N`&hI>H z-Osa$$vSQ(Ca13sPfKJV>Qivf4^Eh5@NB z6*O5{!D@&Zuhgr7RxVZQ6O$OJkc*0zOF`(dB*>R4WxZ9QsmWA2L_|qLF=^c7MS01o zwEX+B%s4(WXZWQ<##fd(zMN}{Vk$aUxRJE1z%m2Nh@0_l%d&0D>PFDAS`WA)TZ+N) z<(w%pz90(XAgkb{0G&8&#{PT_Tkg6u{pBmmrRzsV&XbwE`7jdfm$z=buU6ZZ%jXnD zQ?2(P%U(w}Ez8uMx!kte`1?1?+pal`=*`x;;h`%F<;#kFQ?6V}B&tr@wzq6{R72sp z{N&I|d75i7n!u@63Zhj*lTkC&iz+3fSxBJBiY4Qrfg0SJP4PN%d zs#R<2^|7I$Lksio9X5`3gcmxJU_LU`ZyW0OF3fI;71Ml5<^4s@9&dc}=kI!pg|{)k z@y$ErWnXIi_h+AF)i1G8%ClSg0RJ8Ngk<3+tU&_ASiKmRKl1Lz#~XjkdgQEp;@KDW ze>FIg2v5G$%d9Uy^@>J{XfWL4r(7O-^Bwq*Lis80eagX;ZCKEA<*8YU6lVsfq^_ zU7wi3qzs}5xIwRI#4m$PH>#G!TT*RMO2h$FOq-MaM%?VZK3_m0&Qv&e|- zvlFZDSQF(L>g^>ey1sn*JgqcGr1SX!z8x)esQ1Dm)8plMRW}*L)bU1M&NZ(1mj!l! zA<;LSY4)q2H02tInHPd^n$y{Z#%h z4&ZpQ{lkvgUfs7F72B_ScGp$s$^OK4e_d($^3t|#^t;aAK0yTK^BY&B^7+(L2bghS zqW#0(Sg=yZNMR_cdtw}V(%5kxLHYXd_&i0g&@BYGp zk9-reWO`v?8uMx?B<7cxH%p<#&;Ru6AC-GgNh$Iy=1)m0az$f1ccQ^x;tzo5^WcrM z)sa`H(kv}YSAAx7_JRv$XFqe*QfU1v+kTC?+xP>g#ETS*w|r;Y{dg+o*Lq3g|B1g3 z2xgn~yC_XG7VV|4kRr|1Oms-JzSS$#Q_;7^JG%|QLey4=TtbfmP9!6_gf5L9M7RSO zB$8ttU8|33W2Y?8Cnv_*2_!Sc{$*rmwR%CZIEIPGJl`KJ6xLTOJC{@RhC(Td_9%Ko zrMh!Db2El%>6VdonU^vwi@cG;(6b~f9!W}tUGQ7W;0hHiExf~=++hOSzgChMAF zDVnKi23JkKpKX>JXNphIP7WBHjK>(j5e_R)q+LbgoQI)W+*A;###-g+LEWRS5Vg zA?E2>86rOV;5p@@ClewK#CcQVSIVFZ+N0IV6j~aU7>-YkN8uWB)Pb>P83?q9qgCTm zf@FD8kfU}|(WyGt2wW%U*(A}eQVm5()ryW@(`l8N1WkO>L=K;MMw9}5qFlj>M12)~ zL_?$XhT`>7vpFRlL~%}3Yt1CM)u^*+Q429%QJbkH(K6>TEuyJ|a+DkOY<3h?lRmUA zQkPUylosQJQ;+hA64BBM)lf$P^rjs2Apa|%xsXPnZsWU|dC{+|dFj-Y~JxK@-5RbsF%1}ETxW0)5NYWg(;skARXOIX5}+W^BVerq4KrC&RU=^uQphZ> zD#&O$2t;KG`kd=Fpfa9g{sK#@DsF(KiBgoAeibLiO`urDW3sN}843ViWtyr8v~3b_ z2X0qY*#XGKLqt;xQM8VWY07B5jHV)`t!pNPl!iWFX3X+XvgjI6H;q)%V!B32Wro%w z9d#VRVyXsJfexaN66hnoNM!&5LkW~o2jFYZQ>cm%O9sHRPJKxgpr)bMkSM0ep_>Gp zMmYqxK`t-}bgLX)$I(M7RYNxcr!iJ4V7H7hkPSn#eML72(i0j-!3uhdzq-(x56> z(z2-A(3dz+QPjfDco=Q1+4&6o2wsGmW9S-!mW@_|yeNVAlUbH*tI&3c$-(^i1smv0 zj+;qT0nMb*!|=-#tKvh7ATtdWO(V^RiUd94G7OI6n3`#+iq#x{8gt?|9n8voRG(7e zmm6vtbP$R9*b3-l4n%1!OUwX{(x7mus1XPt6RJRkp=CysmBDEia?#K#P_0lXCLf4! zM^T}OiK&8~LlAt9gUTjGpk|AMSOIj=llag$LfPXOAsRW5ghGfbdJT!AJeZP(ha6}Q zSk;gf%#x`0F>h$L;m~xIVVcUQE@p>ug!dGN`0L~&q2QYgtbU^~O44|E~ zL11w_7tkIWWHEwX?7Qq*Xy@v*<`}xGHvZ`@#WnPpHcgSQC?b;mB$LUkDlh(^G>w1= z%Y7pJeRehFLvnDe*7*5d5LO6_sBcpg`^6b@2@0gcwAwNw?E>;7{dI&5wXY?rbx#vG z_Amh{S5w0PEmt!EJE2=d@N=pKRm-B0)J_2~Nmp(m+K@}&UB@^KHgSy&XsxClM%}5U zXN-P6m(OpjjomUcbMts@TRxvV^`3q59Z=~Y-gh=aEyBQcACmg{-TX?a2RhlOFv8Io z3b-A0P&CGRm_|qN*3;+_VQkSoI*fTCnWfq|z0P4iKnIIHu9mZBnOx_T)RBk4Wo;!$9fVY7o;-;GtM9J zN}-sUjaOp{JuEm7|1`O2A%YM~xMojEdF17+xP{nO9d#g6%h_4i&)Km!2Ff(7uDD(; zjBLncvJjBTSfW2jt}LeOz5CPKSDBmUZ#4|twtEx7Xix8GJX)VHGd(!!Ec z)kKHm27{DN0r^y_(SV6WI=gfH$)TZ%-@WXffq_A7@cc|VqofDoeirK%V3_+cC(+yc z<*%w6CMWM$7O$jIW8K9y`TWYR+q@l@UB<%itiGi-arKZlT>bNQahY;rK2nINk_limdXCBT2TND|pTBLH&4vr`VT2|FPcm7T?n-GOE>dCDM}EUT7cLPDUkO~pw2 zcFL+>oc|9y?#swJ;W4nT=@};A1+7W6I7u384DW?K%oet)3#Gl%gQQXSN76SEzMWcc z{cI1^Xtp&4_G~l?ZGrtO<*J{Pq~|(rA(1S&F&u6onJ6IQOmXt#Xsp5)zljkdey7II z60+cn`+vFgXQT6-WN%c9-X!W1)gt*1$wCaVZmfXFR_H%p8Ff8ifPAG;1+ZWOE&ah# zz9m}!<#GjUH`Q2EI)eY$k+FlEgt2^|G{Ha2FOX`|LFqRjiN7lSRp(e@KDP}g^3!0DO=JqVT$UAOs)j}1BrP1m0SDgn~hbzjF05dk~} zNHSscYp!i&V_vso*}9?omKlfmTq%DF{jSQ3KOvYUct)1H5C+d2eryzw)a;#EarQ)K z%Y1)4XW5qLRR~veQ}Y~{j$x#=RZLjG?uBYiwhbfcuyDQMa3?fPPt|OdZ2C6MYtCJ# z%T7Z3gV`nH+kt7hisk?cXx)$O6crR@?nwj)mmB_UsTL%#kFqXkq}2JH#q-55eM! zI3X$~0sKVjHVLE&`R{n~_)xBUZKbkpaOCoVq4jxMfp9YWo>tEC?5CNv5uQW z5KNV6??pi&z|!5-m<#@BlkF%BTS8rljb;*L!A_3;Guxw`p7q^>p67N{`=tKchyIHu zjA(oXCYT5Wx0ap=DAKainyQ$4=o5m)?U~l@_D;kYrK6k(MV;4Kug%qK>K(Q3Xj5S( zmm5oB+F-v3jpi)BerVwGk&a&JXiarXf8W~NIx~UJ=IM@(-PG6LL9?SI*Ns)X0ZTv| zy{gH5Q$djEpx9B4>-vM;>!LA3w*gn~kt+NN?A6Rmzb3tazFX27#J+IUPhl!(E);{L zOSHd`FiQ#rv1ffL|0&u=1TaP3dS#+*L9dB%h)PLQ{y?ZH=zmgPC|OlZg63Uw3be)w zIa(vfS82vR4V~s2WV?Z4N(fFPd80t{f)WMA2~S`_z!vo$BW{~UzJl{K!+!uyndN{1-^Yw6Vm^xcLlgxy+&(L5#0wXZ8vS_eyD2OF(9knHu6Lr@U zmW`CyQPMXUzRh;ozP_LCHfagd_O$~bVL-JeB2b#~)f6;4B0`XZh{&)PH=fE*1e;L1 z@IX-O%}<2GVLD9h4{P~+E!-3)!*E|X-kYzdhEZvRCwhn{SX=)he~XqZYR`!FlGTa%h zS$;IvS__OBl`m!)mEZVqR1&TzchKo_Q5s9J6v~KoJA;-ZkDwya<5sm0i=3|`k;oI3 zPgr;oSa_4v3r*r-;NTaf@1rLmoFfJUceVM7##@8nNu{Gcn<5j))6$OSeMyOhh3$3=ZbndyP34Fl=VEmgd41}#7vX8Nv= zXR%X<&g@#5*F3mvpf(`Ow_eC%XCgv;&)YIBBh5q0LwI+B=bo@|&jF_#+G_eO;Ix5+++|nj79uklf$0`kYOkuw$?*JP#bfdBSD~ zEwY0=4-nRpL}x4DZ1h^?p`T=UtCjgP{5V_7Qin=7~4-&?$$w13@ zCuk+0Kv1*^9x&gU@}@)ciDoXPNJp+L5xQt2geEp<&EQa$yqH@~1|`pR(Y2u+7F{nE z^W0*HxEO)?&`y@!n8%)pIZlGCs08k@W2?$5ZqcyQYhiLFw8j^P-o0Yk+OBLDOepif zzXQwGX1lve#V@bGP79PBcoadOaqNV`b?l>H6V|p;j+KOeoBRP$7K$qcRtVh!7z}P% zC086JRKNn0Q=J-5slMZq%^n5^3%eX_>=r$4!q#M&Fe_{?7EpnOWdj#ht8=JFwkv!7 zvK3bjKR1dxz}A4hW)(V#j~NSf0(A&%JG7jnh1rVnV(>#ez(31V609_=DBu-vFV+tzf)d3emS{_1E2=D{)HCMfntz`Ng9~Ke+a0sz*-XY8&gE)`8E0ExeDR+%rBddfli$pS ziR`*^c|I9)67%Kqx~v~$r~CTW=r$Z<6!@l2@L9eEHkI?Fd!@%vzf*X%&6AMn&1IIB zSF8!E8M(30HL`Wbn=BYvWTHvG#KlvB^O|#?RO+_W=rr1J(z~f2CMTeHBaO$PddKAx zP-4<(0k&@7L6G+BgkkE9f0X%$fzqH%euVbPbY&;mDELm8EMytKv>&h;)7w-b{te{M zd2YtiOeGFaJtJ-;@{Z-hDJ^C~J4#oe4*8xB3*~b7nZ>@dk@gc*CD*@mk{NE7?Lh4| z!dNVTs{zzn&zu50e1uG8k6?EK)wq^+EO84ox%g=)t%}^^cE#MRLtN@=u)AVkiH*ay zB`dBID`2id+dz?(G-S2s17J>-+3fiEHy9eAU`G$TKAHZD8?Tb=)nGg9g6(h*Jesmn z1(uUF(pF(J!IB@X_ribZ%r}rI?(r(W4bXNsj%4-C!D4h_%F4zoFt z4O!V7-BbMHgXelm?NX#)Kk){?mp_Jfjlc`-8{omt%BDw2_txPQGnpELS+u#Juqi$t z?NU^ysycfcH&Yl`VXg;P)!|naK_0Lj5K#05!%a+%rALLQD~2V<^tP=Px2>3nr^lj; zU{1lu?fd3)9@_B1gfFJ8$AVzfjIDR|T@eff)!B5qU^ZU8FX2b_NTZ=+*HwGv6_9hF zkjf`c$bD7PqFKH1C$uF~C94pW&hy9_>ZbkJ--V2V_~L(k9iu1kj%RD6ynGBkYWEx=&zp1E;k1Q1?A42IJRUz4S zGxl8%W8XCg|Nl#+o1{CXFL#V{v-Fden_9H*+O*9z_g!0S(K#QIn|y22WUSbd9CcPC z$V5w1)6&~&eM@1AN4(bDF<9N){c9H4OFcpujU7g(YHA<&opz*~LB^M&X}&B)cO+>? zbGE4=fnhM6Ir{-l+7W5o&!im89bd+TVLumXCxMrWiAEoG6k^^aN^FvTc0lnRD{a4k z)A7`SXQM~C#`9#S#{pEtHeq&&u)%-n`0M2S;&GUA73@V4IV^~dChs|)rUsWUrN%S9 zcs#Q#o`8$AKbVmV?Zz>Ft(Ab81xBTWeXWS5bwGuW?9Kco9+!rtm6-4QB)lKf_D60x zB}a}`@T|jz9(=aSaE^jE8JH4RIN4DM_vdg+P6}79N)`TA_(aZM@RgcpQFzYUdfROu zTE0A|!izz}O0Sy+GwS;f)U&Fo%^Il}(S zLQ%mMW!tn4p%O)QropW0g}9*yOHh-P8QeB!99HY7ygch|V$qff8uL*+jo#O(qIR&n zio|8WiV4C^k+#&F)VLu?5bd~PBR1N#M@iExJ%>GgVa%nbMs1EaTmApJ81};;NRIa8 z#v*}9m2E3zwQkA_%+6fH2GGZBl!zVfSm0!6h(A`HS!J%<;Vs1roQAImo{Iw5M*_+$3a zj{(h&amQd&r`Pq@oo?Sv8%Ir7*R*N&msG>p;_JZgM^&Bw^Wxu}R&Thhc*arq;Co$A z>!DK}0G@i8AHYh`Eft_uN&V20@InwIJxOy2XtF^-&Ox@;t7*J62&IdZZ6Q^K$(pU4 zcxYl1+XwRs@bAmuMvaiiB;$oQ8+~u^YfbywH?EHC;}2QZ#YjD~NlsugQ))nEIQp;& z1a5w_QF(*?9!%R;zi}Ki^Ty8+jQDB+1A7$jWn_Rf&ao~+(zjPMENrxl ziSN=9)>?%k`x>nW1Onx!%jNRU@$ntya$jG$ykmTPCn6X$F)NFA(X1C%+_<{3v9G+k zD?0$IgYS9+*{;>)zKxaYrgCvMiY=C2Fl|{z*1l4y59G!`gvjk2Ypiu)y~Wn%9~Mh6 zTC_87ES2Z7APJ+M3+~O%l}j6|t8W|y5OmRSCOsqV!&bU0%?Qgu+o02GrC9#vsgY=5 z8|HT~1u+RVknb>z3-!>k0^_rv)nS1Sa0^bx4Svt|*&4@tK++ylFZs>Ol z77#%iSJYdT4uhX>Zt4f?qzk3n(3oiPJ+mLrx&1MI)fp@Ui-Uz42T7jO0nU1CDSU=_ z!1xVsq9wZ7_yN25dr13bZX2u*nqTNFK89|i{z8}?#H5IY#&eLpm^r!164}ZUP(Lix z3Q;mNj5d~Ue1^TCn|jiD^9PXl&tVF@-jE!!k%?Hm1V>>w@VdrxdfJU;(W&(A-y!~W zZb0W+klrh10s4{{p4g&kqQuY>8`S%Y(Qe^VZ_{KT8!6I%qY1#;hn@)0vZR^?* zV(V!lH^E3Bh&c^z(N>50TMD;htU(51U;hm#jjyvkF!=dqUY{X zKVI_Xi*4(-?CyBH;5Xz{KV}lgT#jHl@xRtv$H z_B3q6TQ*xBT;B!pyy-(P5y8fL9j;SThwLRm8!txnhg4jDxEYqc zxMlbT&94P%Bjn0zA=A#ZB(!^?=^)IHCgRD#%;N2E0`Zd~{EP^)ec~cdH$IdZ#EVSv z1d_=zJV@d=;5!meB;tcupJa^VHT)%Bk|w0PQH4`V6+kr-PSI~|tc7l)L8ITgkaHNe z)4$~=bZ$w$wg`-51dV#DDKFWM(-U9J$9o*?Rc5{ATYGy)6IjTw^X7NQV%@%%rgy_q z_1@kM%e<_OO@TsU#g=@}po8}XjF_szIoj0?xP;mw;NnGM!*Ez;VQ{!+`aLZl7x{QR zXFD-@w(%Z6M};{~&SxJ5YU-T`QzbYaLLb%Pr>~O#VchomQ{i~G9XgK%{mDc=R-6pN z9P~Q8iUvy)nWkW;fsZ(rQBJ!H2J=_+H>E6cX!;Lzpc0-$IS6lvoQ1#|Us%+&$lj$W+6?`m;Sn?qXlQ^1C8J zUA{aWg>AbFe|sWJ51sfvU(J65|6_42`eB5Pi7&y^CE3!{{^1IZxV9alH!?7sjdRI< z*W%GO-|~u)ORrsa$>6e!s+VNp=AM}?6lSxRrj~oaseAgb8XLQ+pN>(>H%z>~Q{K?m zzo}B$)Ze$EO!tiwq3Z^Ia#^ltAnCDBaSMJ#&@L{?%z+RHW;2(nsW{s!s9Ze?a-&$p zmAKXTl9^E4kbIAHJ#-c9U~jeJ$~SIvgTTGb%qM#W26~ctlQ6N=04CmaGH+ICvYi=^ zaUfu@m*B*R0Z&KBa<0vtz`+6!!#h!yj~}PsJnBetLOBUzT}JPW^tac1TIHMXh_qO+ zB^e_AJmulknHe*ZG##4SFAt~=pN^a+5rsDiCmTOZRov&ig!+ZZ{s`ud?688*H8lcH zoiJogLs!)>TjCHBAnCgj5Zz;61CM+$uo7v zX+Yp^$Tj$yeaNPbaS?t-?2(J0{9zGZcW$uoBD)(Kqi_y3K&jLwWG^<5o5Uuf+1+mg zC>Y+6*)QIafsW9`*hB4W(^?nFtESOxH8CfoQoBh_3C5!)y-F>x_lWAey40l8qvh0I zQT-n-)%=HOOTykOa=mINqDCZakr#h)LGL)F_~)P(WJseqs~MA)X^0G}H7V;&SKfAw zg_LKTpiT)-Fp^iTkPI!i@pqA{R%0KS0*KlMQh(DcCXzi4`#9bjJO<6SGmpsKcpkQ( z#!pDyWlvbSAW=k~tYcX)dncX7J`_OpCk*~YVDOUg)r;Um2YikueFw;@hS7ZUWZ|8D z^0r3{SBLzIhW3=1OD2kbgBu=RvNw!RSv~PY*<%gEh3)*)jk{AL+4O+>N#!)e%pL;F z{tCda2@4J0*)@FqE7v4U=YHEuT&4_B6$l||;@A-pTF8}AC#Q41;hON8h>|E0~Q=&u%*?pxbW*fA>7))Vbd(Z2%FK9bmr zIs_Dsx9L1Lne6T^sEI@>)d!nRUpbvh#MNSVcQWC*rU4CKu2#=$44+r6J~K13bLZ^L z%F(|=bai)S6A8Gf(;GTKVe|`U=0p|`3ccOkJ!=SKtYNPrM>{w5C%X>V z_SrVJjche-rKE`?$mZATPx;v;OIZhqXqnUicjeDvlwUg@+1&*EZGni$s0P3*@I&NB zB~{LwJa~;a^M53pHk2jlyMMU{|0&nHp7=g?r9OdM12Q5ykWc(?oTLO4fm}qX^SGe% zhO!~eB{(Z=m`*2czI``mgrCUIl zPD(>@SL3`K=YE`D!%6vn9Vh-|kAXg&(#<%jOseNS&GP`R$8i#^XK)_INonXFSG*-0 zNT0`bySNXehj69zl#bF+eW`rPL)Z0+Djh=l>qOsJuuSK%hkitM<*Vhp=*9Gy$OHLzsG+gJ{&)o_-t|}2!e&+(Qr@r=cym3 z-<|$=`oCtrmwkWtYq?VH{kd0qoSuh!ew_bE@5ssS2BYZ(Ko+I4X3@Zrl zY=%`Sg}aD9G)c#QD@9=oy6yGQbeTdJnrKGhh-MUyXhz|PW)zNSMqv$kS2goSH17ls z-YeaX-~D(~?Na=|)@_g*`{8wcvqX0F5qNl>l;+M|dvD*h|KQ1y(#6QQ7e=;&AavU) v&(;fKw}aeXq`FxYu?t1+mTo}Ybuj7_01mE4s;xMw;1TLbG3h99=HveX#Q^W8 literal 24692 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 QNd=EkM~X>DfioZf58HG0uK)l5 literal 24768 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 From 9d7b26a5d4999f2e8bd161b5f3760f46f411eec9 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 15:55:13 +0000 Subject: [PATCH 08/22] added link to file for images and documents. also updated styling to file fields, which had become lost in previous field template refactoring. --- .../static/wagtailadmin/scss/components/forms.scss | 3 +-- .../static/wagtailadmin/scss/components/listing.scss | 1 + .../templates/wagtailadmin/shared/field.html | 2 +- wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py | 5 +++++ .../templates/wagtaildocs/documents/_file_field.html | 4 ++-- .../wagtaildocs/documents/_file_field_as_li.html | 4 ++++ .../templates/wagtaildocs/documents/edit.html | 2 +- .../templates/wagtailimages/images/_file_field.html | 10 ++++++---- .../wagtailimages/images/_file_field_as_li.html | 4 ++++ .../templates/wagtailimages/images/edit.html | 2 +- 10 files changed, 26 insertions(+), 11 deletions(-) create mode 100644 wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field_as_li.html create mode 100644 wagtail/wagtailimages/templates/wagtailimages/images/_file_field_as_li.html diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss index fd0832b70..65abb480b 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/forms.scss @@ -803,8 +803,7 @@ input[type=submit], input[type=reset], input[type=button], .button, button{ .boolean_field &, .choice_field &, .model_choice_field &, - .image_field &, - .file_field &{ + .image_field &{ padding-top:0; } } diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss index 6d52793e5..10b4bf7eb 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/listing.scss @@ -355,6 +355,7 @@ ul.listing{ } &.images img{ + @include transition(border-color 0.2s ease); border: 3px solid transparent; } } diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field.html b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field.html index 9113e1b6b..8177b7724 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/shared/field.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/shared/field.html @@ -1,5 +1,5 @@ {% load wagtailadmin_tags %} -
    +
    {{ field.label_tag }}
    diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 4b21fd3c0..8c66474d0 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -65,6 +65,11 @@ def fieldtype(bound_field): return "" +@register.filter +def widgettype(bound_field): + return camelcase_to_underscore(bound_field.field.widget.__class__.__name__) + + @register.filter def meta_description(model): try: diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field.html index 13ba6a819..3df57ae30 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field.html @@ -1,7 +1,7 @@ -{% extends "wagtailadmin/shared/field_as_li.html" %} +{% extends "wagtailadmin/shared/field.html" %} {% load i18n %} {% block form_field %} - {{ document.file }}

    + {{ document.filename }}

    {% trans "Change document:" %} {{ field }} {% endblock %} diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field_as_li.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field_as_li.html new file mode 100644 index 000000000..0911fc998 --- /dev/null +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/_file_field_as_li.html @@ -0,0 +1,4 @@ +{% load wagtailadmin_tags %} +
  • + {% include "wagtaildocs/documents/_file_field.html" %} +
  • \ No newline at end of file diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index 62b9df514..d5c2f5620 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -21,7 +21,7 @@
      {% for field in form %} {% if field.name == 'file' %} - {% include "wagtaildocs/documents/_file_field.html" %} + {% include "wagtaildocs/documents/_file_field_as_li.html" %} {% else %} {% include "wagtailadmin/shared/field_as_li.html" %} {% endif %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/_file_field.html b/wagtail/wagtailimages/templates/wagtailimages/images/_file_field.html index ef61bdacb..4f1d62903 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/_file_field.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/_file_field.html @@ -1,8 +1,10 @@ -{% extends "wagtailadmin/shared/field_as_li.html" %} -{% load i18n %} +{% extends "wagtailadmin/shared/field.html" %} +{% load i18n wagtailimages_tags %} {% block form_field %} - {{ image.filename }}

      + {% image image original as original_image %} - {% trans "Change image:" %} + {{ image.filename }} ({{ original_image.width }}x{{ original_image.height}})

      + + {% trans "Change image file:" %} {{ field }} {% endblock %} diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/_file_field_as_li.html b/wagtail/wagtailimages/templates/wagtailimages/images/_file_field_as_li.html new file mode 100644 index 000000000..bce019852 --- /dev/null +++ b/wagtail/wagtailimages/templates/wagtailimages/images/_file_field_as_li.html @@ -0,0 +1,4 @@ +{% load wagtailadmin_tags %} +
    • + {% include "wagtailimages/images/_file_field.html" %} +
    • \ No newline at end of file diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index cd36f9f5c..d602d33ac 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -35,7 +35,7 @@ {% for field in form %} {% if field.name == 'file' %} - {% include "wagtailimages/images/_file_field.html" %} + {% include "wagtailimages/images/_file_field_as_li.html" %} {% elif field.is_hidden %} {{ field }} {% else %} From 9fe6f04d7b11a0d3c7fc6c850e290b94bd29f126 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 16:42:20 +0000 Subject: [PATCH 09/22] fixed failing test. added more meta information to images and documents --- .../scss/components/formatters.scss | 5 +++ .../scss/components/typography.scss | 16 ++++++++ .../static/wagtailadmin/scss/core.scss | 7 ++++ .../templatetags/wagtailadmin_tags.py | 5 ++- .../templates/wagtaildocs/documents/edit.html | 38 ++++++++++++------- .../templates/wagtailimages/images/edit.html | 19 ++++++++-- 6 files changed, 72 insertions(+), 18 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss index de061d724..f9000fb7c 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/formatters.scss @@ -225,6 +225,11 @@ a.tag:hover{ } } +hr{ + border:1px solid $color-grey-4; + border-width:1px 0 0; + margin:1.5em 0; +} /* general image style */ img{ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss index a2d315fc3..0a1b504e8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/typography.scss @@ -58,6 +58,22 @@ kbd{ padding:0.3em 0.5em; } +dl, dt, dd{ + padding:0; + margin:0; +} +dl{ + margin-top:1em; +} +dt{ + color:darken($color-grey-3, 5%); + text-transform:uppercase; + font-size:0.9em; +} +dd{ + margin-bottom:1em; +} + /* Help text formatters */ .help-block{ diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss index 40fad99f2..15a7adfc2 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/core.scss @@ -314,6 +314,13 @@ footer, .logo{ @include column(12); } + .divider-before{ + border-left:1px solid $color-grey-4; + } + .divider-after{ + border-right:1px solid $color-grey-4; + } + .row{ @include row(); } diff --git a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py index 8c66474d0..cb049d0e8 100644 --- a/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py +++ b/wagtail/wagtailadmin/templatetags/wagtailadmin_tags.py @@ -67,7 +67,10 @@ def fieldtype(bound_field): @register.filter def widgettype(bound_field): - return camelcase_to_underscore(bound_field.field.widget.__class__.__name__) + try: + return camelcase_to_underscore(bound_field.field.widget.__class__.__name__) + except AttributeError: + return "" @register.filter diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index d5c2f5620..0c4644ee1 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -15,20 +15,30 @@ {% trans "Editing" as editing_str %} {% include "wagtailadmin/shared/header.html" with title=editing_str subtitle=document.title icon="doc-full-inverse" usage_object=document %} -
      -
      - {% csrf_token %} -
        - {% for field in form %} - {% if field.name == 'file' %} - {% include "wagtaildocs/documents/_file_field_as_li.html" %} - {% else %} - {% include "wagtailadmin/shared/field_as_li.html" %} - {% endif %} - {% endfor %} -
      • {% trans "Delete document" %}
      • -
      -
      +
      + +
      +
      + {% csrf_token %} +
        + {% for field in form %} + {% if field.name == 'file' %} + {% include "wagtaildocs/documents/_file_field_as_li.html" %} + {% else %} + {% include "wagtailadmin/shared/field_as_li.html" %} + {% endif %} + {% endfor %} +
      • {% trans "Delete document" %}
      • +
      +
      +
      +
      +
      +
      Filesize
      +
      {{ document.file.size|filesizeformat }}
      +
      +
      +
      diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index d602d33ac..f8a0a7ad4 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -28,7 +28,7 @@
      -
      +
      {% csrf_token %}
        @@ -47,7 +47,7 @@
      -
      +

      {% trans "Focal point (optional)" %}

      {% trans "To define this image's most important region, drag a box over the image below." %} {% if image.focal_point %}({% trans "Current focal point shown" %}){% endif %}

      @@ -64,10 +64,23 @@
      - + +
      +
      {% if url_generator_enabled %} {% trans "URL Generator" %} + +
      {% endif %} + + {% image image original as original_image %} + +
      +
      Max dimensions
      +
      {{ original_image.width }}x{{ original_image.height }}
      +
      Filesize
      +
      {{ image.file.size|filesizeformat }}
      +
      {% endblock %} From a076ec6cd0d244d9cb1fe0bf87aadd200e6f1b4b Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 16:52:42 +0000 Subject: [PATCH 10/22] resovling test error --- .../wagtaildocs/templates/wagtaildocs/documents/edit.html | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index 0c4644ee1..f8dc6cf52 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -34,8 +34,10 @@
      -
      Filesize
      -
      {{ document.file.size|filesizeformat }}
      + {% if document.file %} +
      Filesize
      +
      {{ document.file.size|filesizeformat }}
      + {% endif %}
    From db03fd8e902b9386d494629dac29b9b75e3209c2 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Fri, 9 Jan 2015 17:09:15 +0000 Subject: [PATCH 11/22] making missed strings translatable --- .../wagtaildocs/templates/wagtaildocs/documents/edit.html | 2 +- .../wagtailimages/templates/wagtailimages/images/edit.html | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html index f8dc6cf52..9897b41eb 100644 --- a/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html +++ b/wagtail/wagtaildocs/templates/wagtaildocs/documents/edit.html @@ -35,7 +35,7 @@
    {% if document.file %} -
    Filesize
    +
    {% trans "Filesize" %}
    {{ document.file.size|filesizeformat }}
    {% endif %}
    diff --git a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html index f8a0a7ad4..dd31a1ba5 100644 --- a/wagtail/wagtailimages/templates/wagtailimages/images/edit.html +++ b/wagtail/wagtailimages/templates/wagtailimages/images/edit.html @@ -69,16 +69,15 @@
    {% if url_generator_enabled %} {% trans "URL Generator" %} -
    {% endif %} {% image image original as original_image %}
    -
    Max dimensions
    +
    {% trans "Max dimensions" %}
    {{ original_image.width }}x{{ original_image.height }}
    -
    Filesize
    +
    {% trans "Filesize" %}
    {{ image.file.size|filesizeformat }}
    From 98f74fcb5a7cf57d13749872d8b340d44a21e357 Mon Sep 17 00:00:00 2001 From: Robert Rollins Date: Mon, 12 Jan 2015 15:51:37 -0800 Subject: [PATCH 12/22] Added class name and UI elements to identify page type while editing. --- .../wagtailadmin/templates/wagtailadmin/pages/create.html | 2 +- wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html | 6 +++--- wagtail/wagtailadmin/views/pages.py | 3 +++ 3 files changed, 7 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index f21b93a27..441eb7c97 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -17,7 +17,7 @@
    -
    + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html index 51f9d8ba1..a4abe519d 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html @@ -2,7 +2,7 @@ {% load wagtailadmin_tags %} {% load gravatar %} {% load i18n %} -{% block titletag %}{% blocktrans with title=page.title %}Editing {{ title }}{% endblocktrans %}{% endblock %} +{% block titletag %}{% blocktrans with title=page.title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }}: {{ title }}{% endblocktrans %}{% endblock %} {% block bodyclass %}menu-explorer page-editor{% endblock %} {% block content %} @@ -12,7 +12,7 @@
    -

    {% blocktrans with title=page.title %}Editing {{ title }}{% endblocktrans %}

    +

    {% blocktrans with title=page.title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }} {{ title }}{% endblocktrans %}

    {% trans "Status" %} @@ -28,7 +28,7 @@
    - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 873780cdf..65c710e05 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -255,6 +255,8 @@ def edit(request, page_id): page = get_object_or_404(Page, id=page_id).get_latest_revision_as_page() parent = page.get_parent() + content_type = ContentType.objects.get_for_model(page) + page_perms = page.permissions_for_user(request.user) if not page_perms.can_edit(): raise PermissionDenied @@ -373,6 +375,7 @@ def edit(request, page_id): return render(request, 'wagtailadmin/pages/edit.html', { 'page': page, + 'content_type': content_type, 'edit_handler': edit_handler, 'errors_debug': errors_debug, 'preview_modes': page.preview_modes, From 1714f333108df5771533956e24580f701557f4e2 Mon Sep 17 00:00:00 2001 From: Robert Rollins Date: Mon, 12 Jan 2015 16:05:36 -0800 Subject: [PATCH 13/22] Moved classname from form to body. --- wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html | 4 ++-- wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index 441eb7c97..b7aa3e557 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -3,7 +3,7 @@ {% load i18n %} {% block titletag %}{% blocktrans with page_type=content_type.model_class.get_verbose_name %}New {{ page_type }}{% endblocktrans %}{% endblock %} -{% block bodyclass %}menu-explorer page-editor create{% endblock %} +{% block bodyclass %}menu-explorer page-editor create {{ content_type.model }}{% endblock %} {% block content %} @@ -17,7 +17,7 @@
    - + {% csrf_token %} {{ edit_handler.render_form_content }} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html index a4abe519d..a557bd0fa 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html @@ -3,7 +3,7 @@ {% load gravatar %} {% load i18n %} {% block titletag %}{% blocktrans with title=page.title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }}: {{ title }}{% endblocktrans %}{% endblock %} -{% block bodyclass %}menu-explorer page-editor{% endblock %} +{% block bodyclass %}menu-explorer page-editor {{ content_type.model }}{% endblock %} {% block content %} {% page_permissions page as page_perms %} @@ -28,7 +28,7 @@
    - + {% csrf_token %} {{ edit_handler.render_form_content }} From fb49cd68e381925b5980ee6da8637f761b1b2a90 Mon Sep 17 00:00:00 2001 From: Robert Rollins Date: Tue, 13 Jan 2015 09:59:45 -0800 Subject: [PATCH 14/22] Add 'model-' prefix to body class. --- wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html | 2 +- wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html index b7aa3e557..b7bd30413 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/create.html @@ -3,7 +3,7 @@ {% load i18n %} {% block titletag %}{% blocktrans with page_type=content_type.model_class.get_verbose_name %}New {{ page_type }}{% endblocktrans %}{% endblock %} -{% block bodyclass %}menu-explorer page-editor create {{ content_type.model }}{% endblock %} +{% block bodyclass %}menu-explorer page-editor create model-{{ content_type.model }}{% endblock %} {% block content %} diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html index a557bd0fa..f7f0bd9e8 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/pages/edit.html @@ -3,7 +3,7 @@ {% load gravatar %} {% load i18n %} {% block titletag %}{% blocktrans with title=page.title page_type=content_type.model_class.get_verbose_name %}Editing {{ page_type }}: {{ title }}{% endblocktrans %}{% endblock %} -{% block bodyclass %}menu-explorer page-editor {{ content_type.model }}{% endblock %} +{% block bodyclass %}menu-explorer page-editor model-{{ content_type.model }}{% endblock %} {% block content %} {% page_permissions page as page_perms %} From d73e618e83b85168f64defd1bfabb940c5b1adab Mon Sep 17 00:00:00 2001 From: Matt Westcott Date: Wed, 14 Jan 2015 22:06:38 +0000 Subject: [PATCH 15/22] docs and release note for #880 --- CHANGELOG.txt | 1 + docs/core_components/pages/editing_api.rst | 6 ++++-- docs/releases/0.9.rst | 1 + 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index f8378da49..22d894fe8 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -9,6 +9,7 @@ Changelog * Added thousands separator for counters on dashboard * Added contextual links to admin notification messages * When copying pages, it is now possible to specify a place to copy to (Timo Rieber) + * FieldPanel now accepts an optional 'widget' parameter to override the field's default form widget (Alejandro Giacometti) 0.8.5 (xx.xx.20xx) diff --git a/docs/core_components/pages/editing_api.rst b/docs/core_components/pages/editing_api.rst index 94bbb8e88..2087f8c87 100644 --- a/docs/core_components/pages/editing_api.rst +++ b/docs/core_components/pages/editing_api.rst @@ -23,8 +23,10 @@ A "panel" is the basic editing block in Wagtail. Wagtail will automatically pick There are four basic types of panels: - ``FieldPanel( field_name, classname=None )`` - This is the panel used for basic Django field types. ``field_name`` is the name of the class property used in your model definition. ``classname`` is a string of optional CSS classes given to the panel which are used in formatting and scripted interactivity. By default, panels are formatted as inset fields. The CSS class ``full`` can be used to format the panel so it covers the full width of the Wagtail page editor. The CSS class ``title`` can be used to mark a field as the source for auto-generated slug strings. + ``FieldPanel( field_name, classname=None, widget=None )`` + This is the panel used for basic Django field types. ``field_name`` is the name of the class property used in your model definition. ``classname`` is a string of optional CSS classes given to the panel which are used in formatting and scripted interactivity. By default, panels are formatted as inset fields. The CSS class ``full`` can be used to format the panel so it covers the full width of the Wagtail page editor. The CSS class ``title`` can be used to mark a field as the source for auto-generated slug strings. The optional ``widget`` parameter allows you to specify a `django form widget`_ to use instead of the default widget for this field type. + +.. _django form widget: https://docs.djangoproject.com/en/dev/ref/forms/widgets/ ``MultiFieldPanel( children, heading="", classname=None )`` This panel condenses several ``FieldPanel`` s or choosers, from a list or tuple, under a single ``heading`` string. diff --git a/docs/releases/0.9.rst b/docs/releases/0.9.rst index f70778bd3..c3b0f5c1d 100644 --- a/docs/releases/0.9.rst +++ b/docs/releases/0.9.rst @@ -18,6 +18,7 @@ Minor features * Added thousands separator for counters on dashboard * Added contextual links to admin notification messages * When copying pages, it is now possible to specify a place to copy to + * ``FieldPanel`` now accepts an optional ``widget`` parameter to override the field's default form widget Bug fixes From 4a804967d93d7f70513c8fa5622579d91aa7812c Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 3 Nov 2014 10:30:19 +0000 Subject: [PATCH 16/22] Added Willow to install requirements --- setup.py | 1 + tox.ini | 1 + 2 files changed, 2 insertions(+) diff --git a/setup.py b/setup.py index b5654c7cc..bd0f4de7f 100644 --- a/setup.py +++ b/setup.py @@ -40,6 +40,7 @@ install_requires = [ "Unidecode>=0.04.14", "six>=1.7.0", 'requests>=2.0.0', + "Willow==0.1", ] diff --git a/tox.ini b/tox.ini index a01c890fe..df523d812 100644 --- a/tox.ini +++ b/tox.ini @@ -17,6 +17,7 @@ base = python-dateutil==2.2 pytz==2014.7 Embedly + Willow==0.1 coverage dj17 = From f1ebd96c1d2a47394a4f709df1fe886be226f87a Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Mon, 3 Nov 2014 10:30:32 +0000 Subject: [PATCH 17/22] Added get_willow_image method to Image --- wagtail/wagtailimages/models.py | 8 ++++++++ wagtail/wagtailimages/tests/test_models.py | 14 ++++++++++++++ 2 files changed, 22 insertions(+) diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index 27eae6543..1d2cff3f3 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -4,6 +4,7 @@ import re from six import BytesIO, text_type from taggit.managers import TaggableManager +from willow.image import Image as WillowImage from django.core.files import File from django.core.exceptions import ImproperlyConfigured, ObjectDoesNotExist @@ -80,6 +81,13 @@ class AbstractImage(models.Model, TagSearchable): def __str__(self): return self.title + def get_willow_image(self): + image_file = self.file.file + image_file.open('rb') + image_file.seek(0) + + return WillowImage.open(image_file) + def get_rect(self): return Rect(0, 0, self.width, self.height) diff --git a/wagtail/wagtailimages/tests/test_models.py b/wagtail/wagtailimages/tests/test_models.py index 059653681..45ce3174d 100644 --- a/wagtail/wagtailimages/tests/test_models.py +++ b/wagtail/wagtailimages/tests/test_models.py @@ -1,4 +1,5 @@ import unittest +from willow.image import Image as WillowImage from django.test import TestCase from django.core.urlresolvers import reverse @@ -268,6 +269,19 @@ class TestGetUsage(TestCase): self.assertTrue(issubclass(Page, type(self.image.get_usage()[0]))) +def TestGetWillowImage(TestCase): + def setUp(self): + self.image = Image.objects.create( + title="Test image", + file=get_test_image_file(), + ) + + def test_willow_image_object_returned(self): + willow_image = self.image.get_willow_image() + + self.assertIsInstance(willow_image, WillowImage) + + class TestIssue573(TestCase): """ This tests for a bug which causes filename limit on Renditions to be reached From d751e762983b4a1437fe2e2b564ae63c1db94829 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 15 Jan 2015 11:34:22 +0000 Subject: [PATCH 18/22] get_willow_image now raises SourceImageIOError ... when the source image cannot be found in the filesystem --- wagtail/wagtailimages/models.py | 8 +++++++- wagtail/wagtailimages/tests/test_models.py | 14 ++++++++++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailimages/models.py b/wagtail/wagtailimages/models.py index 1d2cff3f3..a544793fd 100644 --- a/wagtail/wagtailimages/models.py +++ b/wagtail/wagtailimages/models.py @@ -82,7 +82,13 @@ class AbstractImage(models.Model, TagSearchable): return self.title def get_willow_image(self): - image_file = self.file.file + try: + image_file = self.file.file # triggers a call to self.storage.open, so IOErrors from missing files will be raised at this point + except IOError as e: + # re-throw this as a SourceImageIOError so that calling code can distinguish + # these from IOErrors elsewhere in the process + raise SourceImageIOError(text_type(e)) + image_file.open('rb') image_file.seek(0) diff --git a/wagtail/wagtailimages/tests/test_models.py b/wagtail/wagtailimages/tests/test_models.py index 45ce3174d..0d5455840 100644 --- a/wagtail/wagtailimages/tests/test_models.py +++ b/wagtail/wagtailimages/tests/test_models.py @@ -14,7 +14,7 @@ from django.db import connection from wagtail.tests.utils import WagtailTestUtils, test_concurrently from wagtail.wagtailcore.models import Page from wagtail.tests.models import EventPage, EventPageCarouselItem -from wagtail.wagtailimages.models import Rendition, Filter +from wagtail.wagtailimages.models import Rendition, Filter, SourceImageIOError from wagtail.wagtailimages.backends import get_image_backend from wagtail.wagtailimages.backends.pillow import PillowBackend from wagtail.wagtailimages.rect import Rect @@ -269,7 +269,9 @@ class TestGetUsage(TestCase): self.assertTrue(issubclass(Page, type(self.image.get_usage()[0]))) -def TestGetWillowImage(TestCase): +class TestGetWillowImage(TestCase): + fixtures = ['test.json'] + def setUp(self): self.image = Image.objects.create( title="Test image", @@ -281,6 +283,14 @@ def TestGetWillowImage(TestCase): self.assertIsInstance(willow_image, WillowImage) + def test_with_missing_image(self): + # Image id=1 in test fixtures has a missing image file + bad_image = Image.objects.get(id=1) + + # Attempting to get the Willow image for images without files + # should raise a SourceImageIOError + self.assertRaises(SourceImageIOError, bad_image.get_willow_image) + class TestIssue573(TestCase): """ From 347158cb4157ca62bc529c73db737bd367274cef Mon Sep 17 00:00:00 2001 From: Jerel Unruh Date: Fri, 5 Dec 2014 10:58:14 -0600 Subject: [PATCH 19/22] Fixed a bug that prevented sitemap url generation override in a Page subclass If a developer wants to turn off urls for a specific page as documented in http://docs.wagtail.io/en/latest/contrib_components/sitemap_generation.html#customising they should be able to add: def get_sitemap_urls(self): return [] but get_urls() calls only the parent class rather than the specific child class. This bug is also mentioned in issue #833 --- wagtail/contrib/wagtailsitemaps/sitemap_generator.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wagtail/contrib/wagtailsitemaps/sitemap_generator.py b/wagtail/contrib/wagtailsitemaps/sitemap_generator.py index d22f88112..e5e43b03e 100644 --- a/wagtail/contrib/wagtailsitemaps/sitemap_generator.py +++ b/wagtail/contrib/wagtailsitemaps/sitemap_generator.py @@ -12,7 +12,7 @@ class Sitemap(object): def get_urls(self): for page in self.get_pages(): - for url in page.get_sitemap_urls(): + for url in page.specific.get_sitemap_urls(): yield url def render(self): From cc0d982bbb334d2c4f86d4ac19e74bcef23d3f78 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 15 Jan 2015 13:56:37 +0000 Subject: [PATCH 20/22] Added test for #854 --- wagtail/contrib/wagtailsitemaps/tests.py | 16 +++++++++++++++- wagtail/tests/models.py | 9 +++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/wagtail/contrib/wagtailsitemaps/tests.py b/wagtail/contrib/wagtailsitemaps/tests.py index a556ce156..a2d0498d7 100644 --- a/wagtail/contrib/wagtailsitemaps/tests.py +++ b/wagtail/contrib/wagtailsitemaps/tests.py @@ -2,7 +2,7 @@ from django.test import TestCase from django.core.cache import cache from wagtail.wagtailcore.models import Page, PageViewRestriction, Site -from wagtail.tests.models import SimplePage +from wagtail.tests.models import SimplePage, EventIndex from .sitemap_generator import Sitemap @@ -47,6 +47,20 @@ class TestSitemapGenerator(TestCase): self.assertIn('http://localhost/', urls) # Homepage self.assertIn('http://localhost/hello-world/', urls) # Child page + def test_get_urls_uses_specific(self): + # Add an event page which has an extra url in the sitemap + events_page = self.home_page.add_child(instance=EventIndex( + title="Events", + slug='events', + live=True, + )) + + sitemap = Sitemap(self.site) + urls = [url['location'] for url in sitemap.get_urls()] + + self.assertIn('http://localhost/events/', urls) # Main view + self.assertIn('http://localhost/events/past/', urls) # Sub view + def test_render(self): sitemap = Sitemap(self.site) xml = sitemap.render() diff --git a/wagtail/tests/models.py b/wagtail/tests/models.py index 36daf65c9..56b69baa0 100644 --- a/wagtail/tests/models.py +++ b/wagtail/tests/models.py @@ -306,6 +306,15 @@ class EventIndex(Page): for path in super(EventIndex, self).get_static_site_paths(): yield path + def get_sitemap_urls(self): + # Add past events url to sitemap + return super(EventIndex, self).get_sitemap_urls() + [ + { + 'location': self.full_url + 'past/', + 'lastmod': self.latest_revision_created_at + } + ] + EventIndex.content_panels = [ FieldPanel('title', classname="full title"), FieldPanel('intro', classname="full"), From c9d4e42b632efb11f6a59b64af72147a9d5976e8 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 15 Jan 2015 13:57:43 +0000 Subject: [PATCH 21/22] Added @jerel to contributors --- CONTRIBUTORS.rst | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.rst b/CONTRIBUTORS.rst index 85654264d..dae2fd56e 100644 --- a/CONTRIBUTORS.rst +++ b/CONTRIBUTORS.rst @@ -38,6 +38,7 @@ Contributors * Robert Rollins * linibou * Timo Rieber +* Jerel Unruh Translators =========== From fd247e69cdb331510d355d1d44203ed0a6ee3e50 Mon Sep 17 00:00:00 2001 From: Karl Hobley Date: Thu, 15 Jan 2015 13:59:54 +0000 Subject: [PATCH 22/22] Changelog/release notes for #854 --- CHANGELOG.txt | 1 + docs/releases/0.8.5.rst | 1 + 2 files changed, 2 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 22d894fe8..d0ca8a047 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -16,6 +16,7 @@ Changelog ~~~~~~~~~~~~~~~~~~ * Fix: On adding a new page, the available page types are ordered by the displayed verbose name * Fix: Active admin submenus were not properly closed when activating another +* Fix: get_sitemap_urls is now called on the specific page class so it can now be overridden (Jerel Unruh) 0.8.4 (04.12.2014) diff --git a/docs/releases/0.8.5.rst b/docs/releases/0.8.5.rst index 447a68d33..9cb718254 100644 --- a/docs/releases/0.8.5.rst +++ b/docs/releases/0.8.5.rst @@ -15,3 +15,4 @@ Bug fixes * On adding a new page, the available page types are ordered by the displayed verbose name * Active admin submenus were not properly closed when activating another +* ``get_sitemap_urls`` is now called on the specific page class so it can now be overridden