From 1e51d5ff23d3ff91cbfd466832a85992c06fde0a Mon Sep 17 00:00:00 2001 From: RudyTheDev Date: Fri, 16 Nov 2018 12:51:31 +0200 Subject: [PATCH] Add new wetland fill patterns; clean up pattern selection code --- css/25_areas.css | 6 ++- dist/img/pattern/bushes.png | Bin 0 -> 137 bytes dist/img/pattern/wetland.png | Bin 137 -> 17490 bytes dist/img/pattern/wetland_bog.png | Bin 0 -> 17656 bytes dist/img/pattern/wetland_marsh.png | Bin 0 -> 17542 bytes dist/img/pattern/wetland_reedbed.png | Bin 0 -> 17771 bytes dist/img/pattern/wetland_swamp.png | Bin 0 -> 17644 bytes modules/svg/areas.js | 63 ++++++++++++++++----------- modules/svg/defs.js | 9 ++-- 9 files changed, 48 insertions(+), 30 deletions(-) create mode 100644 dist/img/pattern/bushes.png create mode 100644 dist/img/pattern/wetland_bog.png create mode 100644 dist/img/pattern/wetland_marsh.png create mode 100644 dist/img/pattern/wetland_reedbed.png create mode 100644 dist/img/pattern/wetland_swamp.png diff --git a/css/25_areas.css b/css/25_areas.css index 2b2abe0c4..85f886bef 100644 --- a/css/25_areas.css +++ b/css/25_areas.css @@ -199,7 +199,11 @@ path.fill.tag-power-plant { } /* Teal things */ -.pattern-color-wetland { +.pattern-color-wetland, +.pattern-color-wetland_marsh, +.pattern-color-wetland_swamp, +.pattern-color-wetland_bog, +.pattern-color-wetland_reedbed { fill: rgba(153, 225, 170, 0.3); } path.stroke.tag-natural-wetland { diff --git a/dist/img/pattern/bushes.png b/dist/img/pattern/bushes.png new file mode 100644 index 0000000000000000000000000000000000000000..c9df1a23de5d8f38fcbb425305c837ac85539bd2 GIT binary patch literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=ffJ08bakkP61P*BIFjI0!gjoRg?$ z#I8~FKYDA#hBb`7EB{N}aAoRfaD1H{cH?V|EZ3D^^`W_{H5L6+3#@ANAEs2SKkzb& kfx(P*c9ZYHWe4Wp>E_^#SNxu_4rn%mr>mdKI;Vst03XpX0RR91 literal 0 HcmV?d00001 diff --git a/dist/img/pattern/wetland.png b/dist/img/pattern/wetland.png index c9df1a23de5d8f38fcbb425305c837ac85539bd2..41be0c436ae8e4f8019c6313e4fd53e168541c12 100644 GIT binary patch literal 17490 zcmeHPU5Fdk6&};pbv8AaI@C#M$W%@t!JeHT&5vd($#qui?3&22*X!>3DY=@tvpZOt zQD$aW@;?EX=mNt+O@{o{*7y>SoLR)B|bzfTO&rACda4Dpv0VnjKJ@Y4x zv?E8iTelRhU?uIHbG~!$cfNb>nR(DRPM&yZ@66pZ48!bQTxcx8Cma3k*$wZ(*478` zaa(ucY``$L?~nd=G2i<3oeVQ~ud}=wt~MVwOs_MGEU$%U`<*UWGfeeJzl+RsIAmLR z&2ej`_pko2#5z{3w4yYHW_J#+I}2MrKD~8f+1xs3>Q?DUeWuzs0HA|I#P&OFH!%9O zQjBZB_h^_ev9U>bu2wo41!Py7C)qjA$E-4|a;8|Wu$n$ADtbkd53`aWs=T1{qRa`R zA?Su6vgxZ-pMh^x-?ELR#<4UU{8uZjhhf*?`ChL#+bhp{{u(dpy3Pv{FG(C&aKU*u zM19T;4kjQOP6G#~?{q`QbJ++NwY-h6Rw_k-2CsBoo$erz8>HL;i+mq-d2v?Yi<~TT z;M3jk+ws&algDk`!EP9UpIGSEUH3vSSobD`99*6l7;@5V4q_M1x6>&M9fb3nKtW1r zp=YpszKi)K9C#bPiRU+ADF=&IAB0PIn4Kx0z`PJBbnFQ@(UplL;J!1#ExMAp#hOY| zT?NvNIUl3Y^OrrZT~FkCGRp-!Hy6oMWA9&aT+8bP4^;Vam!WWmXt;qwTnEnzCyJaX zEsGUH(hmueAqY8y#B2|Qc)-d07*Q)$*FlRZ?rZMNWJs+lp>*Xq6G+gM_@XU>9a~yR|96%<5T!tV|@%DcZ zt&NUm7urreDL$5GI+igEidBSlj5H2cEFIE-D_qOgZ4P5di!KX_W~x;_Dggj7oL4H0 zbi5eaR#i!qWr@RjSxTXG)8;Corb`uDR8>VRhE7ID7n5h|W>iG-YBr5UHwY0hwb-b` zz^ns{mPJi9RhR&h^$MqoGJF%n7H78vT-KC|pb1tiyHWSyqEqNBIzSgMTrta{rpW>< zyrLxwM*`Bh7DBR6Q7mlhgFrd3ZGj%~9XM}LJ7*KE#e%i8^a>IM5y+Gzi)%rm0NqqL z4dXI46TPf1vYs_j=dtL_j+%B* z-^X-qa7e*jr;%el>!YVFr(^CTCq{~HrS~*xmp*-Gn@ld}UWD%Lw0};b6u=ClWz08* z1n1i2YIGZJKm!i_VB8ng;f`n9SPm_|wi-3k?Txrm)+7O5ycoTwuKCO3u4ixVn!h~m zI`ll_I$<47#CS4e!#S_$SwV6ydm5gP;kv3QWu?lG5087Cbo#ix+Hl}rHi&Ko$`C2` z8NX2Icy^Lw?n3IAY?R!StT-{rC_E>FM|Aw)8C@=C$u7Gk@52?{68Hp^1|cGs(naYa zVt~k)s*BP^!~l^oRTrg;hyfyFsxC?w5d%cVR9%!VA_jdtqWm-b)z+I`jIFRw6* zfBW%$zx?pFclYnP@`+uq{9?ZG-orOuw0`iN*M9S(JZ`$NL3?b^&G z=brU9pI(_ie24MOsa?NzUOzE+=;9xry!P1(H?H0P&QGuZb>`wf#Jm19|H_Y4<~Vxv W(4~#{--d}Zi}NQMZ$9|glm7z!P!q=h delta 109 zcmV-z0FwXGhyjTKkR)YLNklwOFvM0Zpm@7}!Mu zh=4)sV^-MpTpbG3`hQhzC46{~m2f(IFX3c(ufXYA001@xn}SWjrof-viwF&0A@^vm P00000NkvXXu0mjf%G51+ diff --git a/dist/img/pattern/wetland_bog.png b/dist/img/pattern/wetland_bog.png new file mode 100644 index 0000000000000000000000000000000000000000..c0c70ba7c4886c730c9de0ffcccb0250e1062d44 GIT binary patch literal 17656 zcmeHPYiu0V6&^%**fat{QV@NOHdJz?NVtjw39*DC6t(mZMdGEP078INN+l3VRSI`ryR+-r zWN+P2A>Ea{yS{VIckcbpch5aDKlWFfH{Gzh|H^)XAXbl!md4>H>Hl4LK74oQ=RbxY zef808EfO5X5lRoS5_`%NrHVu4Pr-u7GT#R)^LEQMk5ISG8ThBP(Fa zv<5T(c=l+9H1)yERK>%(B$9G!Q-mibK++Wam})-%@@`wI;P0@Q$~l8su`a+Stl zCcstTcYm19kb#M}YcMn92P7xUo5^9@0i>9fD2?UwWKPbqqMYZ1?~@$EN;D(WtUxiW z!pI84lF=(u?1$e9j&3O9r43Oy_}^e=+VkoPP0!8EW#{;;?M%_EEXy>*(HuuX3(DPX zd1`~Q-1Q+yj8g)x=9qQQv@O!dRV((4H<-!zfts&qUA1~MkmW|)K^EzTTBq48L#H|E zTGOXK<5YvG=^72Hpav|@g??VR z!c-R^Y09tzRL^!MY`a!|bpVuY-86Q$14t7rr?8?Tv|%JHJ2Buc)KyRI2_fNFv~)Xn!Y}Fx638a=N9mj_R*F;gJY(y zIxg^w=wK$UqRn$Dlw2gdpcpHv<{wZ+%`Z&=vd}i#npV@Z5E_`v)7hK6mbrJ2F*gmY zuB9!+2~4^pxVGWVsSX&Lf}6gVk{hD7yLG~+Z;}5^7Hn%4I4F65*;ZjE1YjvM9J@v~ zD=6vNq*||6O-=O^OwU?+)K@eMSDfqw#+SHOSDjs%-dJAX^F|Kt>I%bCf+6JmvJ0r3 zCgv(CD^@h25-%|!*UlySiA#v7d6dGFkX1xU;h6X|O;~jYY1d8Ux)mih3cV=%bS-73>&J3HPu+p}- zWpOvTyp4-{)=-@r{4?9{xS{&a(6zxs3f{sh3D)C2y4P~r;of#)MCf{SgA{e?z27y2 zlS{a#q1!9%pTj6AFs*1Y^Q9KSiFUc*-_t9w0f+ry&=(cq?bEWc1X^%y(r=`zGeM)A z;~4m&S^qt9O&rNOj!S%`tHyatt?0;;~qem~a$6bc4_P=;i~zM9#up zc2?e7D>^IiAt(-lL@uTa(}lzUk}*~nrVEJyBx9^DOcxRZNXA%Qm@Xs+kc_dqFkMIt zAQ@wIVY-kQKr+Va!gL`qfMkr-h3P_K0Ld7u3)6+f0Fp6Q7p4n|0VHFrE=(5^14zbL zU6?K;29S)gx-eZx3?La}bz!=Y7(g<{>cVs(F@R)@)rILoVgSh)s|(YG!~l{pRu`rV zi2)>ItS(F!5(7xar&U*f>nAjT1%EeV4*o#K(5Vym!ynfmwbAi1LCk-bAQo;Xh*O`# z&-V#ph9QU#b`pg05J6mS|9Z!<4Fqw{`D3M_iNan>+P?^C<3`x^_#esS_Q+lXrEs-dH|l7Bk4{uX#rS##4BeF^hY0iZRDr+ zr%SopK6-rbyH}T&2JXD^;D^MIUVQbRzrS$Rop%o~Pw)EWb=kw^O9vJgckti-BSR2y#FshUVGEPE#uQa-!D(D-F|4zfybPo<2x_i zxBbaa_OAL+dXpNN*ucE-=Y5MOR^9f^t2W;E_>~7U|wK=)wrF{cgt%_5N%r z@v9>_9_CAIq7tpmmgeFK*_GBYcHRphtCXvpDatBa)5@ZvsZ!-WRuaT2FKE12;RI0^ zG+hwc>{DvYAgLZ$w!YLnl1+#Hn=P$Ik+1W7uh%R0mjr{_{TaRW-rFf#jCtFw7A57$i89PLg?*pF~%K~3yWSIjS ze?90Vr)HTv?7%K`qY&ANg?9d`7kS~TH(|=b;fWKYn6z4hxeL#?+bx_rj1F%g1R2so z%W!$qhx`%@z4gF^hd0nt4i&9FjF#XqI#akp>V=LX$DZIPJ~9yk>^l?8;v=b9l2d7@ z>j;`YA3zX!!LsLd8fm&7%VWXL&&TOmWA8cPxR%!o@2&IWCd0%TdV@_6!3MHaIZ@<9 zX<1ZtN&BE6>4JcHNY%z1v^>kPH%A>*mqlb+)ddCjfoYEWKv$s!A~2N~To?0WnY!%- zT@W>#E@(sEciVM-IEZNua#Nr8I$nTI3pV6BUo>23)%48u_~MvzO&Fp`gjj@7oRZ7` z0ni>D%@1^(Mp}F<&vYz(I4P_Gs6kNUplWF-3{d3^TeCR`QCPH!pw!H2osUZZaxpxw zEHSe2V%K)HDv6bf#6eA#GS`}EbE;U=B-IwHRYfdzosNz!1}Akr6mfdBTKb|JMgWmo zY&Ot9*+GjoRa3Mos>Y$yvN_AFXq;inDDf0%$UuU2O@>L@jhYV^ow?3uN3M$(F4t5+ z1~rHluGZ3p0|B7f0H_G6VnJK8@`*5K+a`J_aL|4OI+#wp77MM#&{QA_Xc?*`S)73a zg}j>zSA$T7rczOC6XjNlqQK3zsTQ0#r8Y++oTSuo_~_{9Fr|{6!3RMIl>cEWml!h5s6No5`j1Et0U|CNUobBP94#76_$#e8pp*yh}rG65X$sR(_ zj(Q+~b8U2;PE#dQucKz;?u##x8xsZ3-GISci35r@K+Ow8)yEFJE;}fCY~-=P_dAXW z;sEm-u9dX{gIbdZ8}spBTx$q6c9w6VT#;2fzN!sD<|=lj7FSBh)l8*k08uf_ijgl7 zOV{xw#(~3Vg~86!%rUV^P5u8_^Nz2~=~^;+We(b*xH2c*_-I>}w|d*#xV&dg zv-3#2XU9!D%05EZhBhg5*QsOmFz=(MEvIAVBRfXs-OBE1vMzo4&Ne+c%)H3Ex6}SP zou$CdaJHO$a|jq~m+SFuxQ-fd)DI?oQ3KuaY#YP8CC66cM!K_}G|Dx!K?wpc#^0GK zet6vUMQ!{eqy%a6KF)R3~-#)dJg_*p@EFMAw4AA^mmqR2{}A0HmKIOg9_AMMQ)vP+T|-qD*lS z5#b6H7fypHQ(QzuxB|t6(;&(e7ZDMzKyl$Th%&`RM1(6)TsRG)OmPtr;R+NNPJ<{@ zTtq~;0>y>XAj%XM5fQFHap5$GGQ~wigey>7I1QpqaS;*W3KSPkgD6v6L`1j(#f8%# z$`lt75w1XS;WUUc#YIGfD^OfG4WdkO5fR}E6cGzbam@_hdI4SZs*4_ar^OS0{Qk$#`!HB@VX4J1TOVMUGiMp*>Oax%WrkT780OW} z45L5EFz@z0|HvyxknW!rn{&(k-@JC>;(@cmJHPS#EoWZb%inzInP2wKeD6DZUuC}V z!qd$!KeqOcA6~x8Kls@_kB6P7)Z5D|l&1Xi&0PyWzIOYCTQ7X; zO8KTsyMEig<;~q!cVAgKG*@PW_x$0Bs~ZPDx93Ot`}W`T=CdbHeftML{fcqwjc2bO z{N26_=hwpn7fxTh9G!aU*H^xN=SPBT-~8FRUmWy*|M5r9zP#t|mtMD@+kceVc=*%1 zFa6zZuAMS|a@%Lh0-Skh--BQL^CNeyzVfMa_kNdoQr`QFcjT-4?`xlZ?6t<7{ePVQ k(!-?}KYT~|Vw?Gkxbd}5JimkhFwElNqs$=BLDyZ literal 0 HcmV?d00001 diff --git a/dist/img/pattern/wetland_reedbed.png b/dist/img/pattern/wetland_reedbed.png new file mode 100644 index 0000000000000000000000000000000000000000..19a61fe79305db1a295f75fd8f91b863d8066847 GIT binary patch literal 17771 zcmeHPe{3699lthEx~y9Z19he9baRWej-Ky_@6NuP<1MihlB~|M#A7L|wmjdxbB@|R z1-a9<>p36Gl*-25I#%`RrI$z%m(PPiL;|C(Cr4K$CATz+$us^3d)Sehaz-X3G$K>5yUOD!0|H6DJ(BC z9ItYU%JFpN6^M1BzoJFmP)8Ddm2l|4uE2!j6jYX-o}La)hk{ly!}5xvu$;gO0)s3V zdnWII5|g(#dLUJt1hloHS#V4%PrJAvZB05|fq)yR_NuHaSEvQb+ZFB*i);xLSU$+H zt(D1ddfqSyndY$#uAz3pyTmyg;Pg^3E;pO z@{BM%&+tNukEnw3Zcb1+&WGTcH31|o-85zz0pt`fsJw`N{1`sVW(>3ob>M(Sq4;fm zIJ%}9Rxt;hn3)3^$QJUMC|e)&S=O|v#;vSXMAL$?P?T*o+|nyyX_M~e=+0}UX&kLy$eJ;)_~@2q>S{eGlmS#A2s1FED<};x!lVtwU?4%i5nXfS|F8%#PPN|Gi?x*h^$4L7>i8LU88qa*0nEK0H=rU9=Z79;LHK?wpJ zP|)gu$VDU_8j4;GOQPBcsL8yMy)#ps3T*~?!g&$}ft?RRV z%oIS;hHeq<3RJ6T?OgICR}o&h7^^^Y52%>tmL`Z;Xc(V!5S22c zXyxcy1*IK}28BY_)PS2{b}Fw|`iffNswUfq@n2l44W^c+H$EhWB1RZ8FwKP+(GbIK z*@aA4lfr1XOKD9^SC{CMYx5G_#QDTjJ4(?>$g7g93S9Lh^jWnBY1GalPWi=1u0BU? z0^~DLkFnL2RR@}9bP-j$XdTubI{C$clW zrpT+bjcr-An_Sq&ReM%Xoqg_^?RMNqeHZB3&>@9xVO1aN)joQ$<+RDY;l!w*>y;a% zN|(O)y9RG^KKEAW)>8XtFG>rTdbBF@i8{f)b~)$%avwZ+H^!srVH=Fe zk`$7nZ1Zrl$FNy~*|CI)Zj5dBRv?5Tm3^8ov~=9o&e3Os25xTG# zz%nN4B6MLffMrb7Md-p}0Lz%Di_nF|0G2UP7oiJ_0W4#pELPSuF@R-E)J5pRVgSpSsEg2r#Q>HuQ5T^LivcWSqAo%g z76VwuL|ud~EC#TQiMj|~SPWnppI2R-^{>!?dGx&*)94E_^6{VUMPIH#YyBfhikf{F zMeV$YqW<;<`aDZflN?3;W}Kqb0~EE^df<+4^ikBZnSn%is&x8SpZeb5GdH|__bD^| z(bRoMS3m#A`Xle%{rgu>JTjj@4KHG`u?5s&vqWzE#JTY z_{VqdSl4Y_wX^rzf6qMq{GPjR-}R61id7RGH@^PIPyXmT55BT}*~^Dc#eV$jb%je_ z?08{JJ8<@&Z`w{BUO#xpzFk)p-n=#S8ecfNd1dg6pMJgP(!cDoe?gU&UB2tOb)EY= z4zBv^FDKp~KSv!;kFU*bNQS=qTXA@9`H8grt^J2P?jCxAPR$Q&SUo(u6+}V9!xcTx;p_lruJ$mxU{%3{9*K|L!b(0{?_dGLx_`v+RlV3gEJOAj__q=rP z=7;Y4Z1~G;@97g;R?cm`cm2*xcQEwCwvUYdVR+Mq$KG+pC!SpU*z!5~gB>6HGZS6@ zrz^Q@hYohc2F;&5IC$(co$H^=X5=s3{l=NcpWJl(^w+<6+c}AnZ#?qahgNU@nfrAp N1HD6ulRe`f{uhcWi8}xQ literal 0 HcmV?d00001 diff --git a/dist/img/pattern/wetland_swamp.png b/dist/img/pattern/wetland_swamp.png new file mode 100644 index 0000000000000000000000000000000000000000..da4a44a93349c7db1ffc21026ba11622120e5591 GIT binary patch literal 17644 zcmeHPe{37o9ltgmYQiEF`UhKK;$~K@h@J1Z&v$cNrE%M2;LxQhBus00zI&HkW8Znc zOYCFSi3`lS88wHKgwcVXcS z`sghVPr4L!;d=jX6?OliPf^s+<<|IwH<7(Y)15*b7)}nxD}^Gmrl{2BN)hNY(4%v3 z%CZMyZ~x?(7;PB?vFqh5mn{y#X=`|)1a~fsj_V6Ex@yEWr~6VB4FMFO2k1&6Z@XG$ zAXdfI(06~BjnP#TZ)PAi=m(@HvODM@rvzy^o?vudOwx)P=Vdi1NME1@j!&?h%JLG! z@fxRU98cF?v2-8$mMR&hHkR2|3y1z2h)sK5QDfP1xg0Nxai=uJ@~Wz`oWKeKgDe<# z-u6I+vE3^IkPs&WUA<%#J473Xk;DN4CqP7tn zL)T2FQ~+MuDu5}-7VW7N+Zc>k*0re(IeDjqE(@l`6x(jNtyjj;XZ_7FXzS2LnQ$W+ zLV2og|1Dsuc{H5JTj`+q7>;fkS|cb-0H{KsFfeJTC=D>l-S4|kT@%GSWA|ddSBrs4Fg&MS~n@o~dR3T~diG<9zhYm)Y7ZYXbTvYh-%4W3@ z+w}lqY9y0J191y2I$`R(EGU2hVnSpRKoXgxt_X}Q3Z|J848ed>Rd&tpjYZd>!{`XQ z{lYmhCvY$U(ZZ8TuyDWumB|4haY@;LrfP(NB4En`U0bryc?0qh8-FbZT1!q%0-oa$ znSx+2Ig}`buFH%9p$K(Zl1&|HE1;qc%(76!mM^LK<_uRQwG)1=d9)#^>d8<9B^Ua2 zZy**HzWPxTsHCQqYW>uJ?w=`X-LEDPvCuTyxU9NoDlo8?r?Wc>mbrJ1QJ#i&$7&Sd zR82Y~xQ^+SK?x2{p?%s-l?+gu-CE(>Z;}5@794vHmT>ZbvJFu40#WrbOHP5V7d_f@ zXizNXEgkp?X6J09)(X^XO_=Nm#(#0GE|^=H-gr?Glcs`pb&eAm$&?hoQbI=2WhDoA zIj2jxaETGQwl2|6TtrOu(+?e9ye20!feR0>h*f8hX6{s)E5JmESw4xxk^2xiLTbv|DQFlcxQIkk_Fp|?98Ak3My@LTNbu@ z%iFlHXARW3%|EmKrX8v8W4bnUNTItD_m>!No<~ z+o3xv?Vp1vZD1PFLgq6Kf+Ov6%D)ZQPy>$o!D?TWMt3~R#v*9dxe33K&d*jGWkul7 zi$w>Oe^0z@y47{^+^*5-R@a8-F5B|bLM>X$aKy`hRuJ6F?nKYWU^*eoqMTw|hg&^% zSQVI`$XMuJ*7a`%L=>s&(>l@Cak7(RWTNI6Y?R28tZHI{QS_V)J)&dl&*&mK3wGIg zd2g)fyub&bBnTF{gf2oC76VwuL|ud~EC#TQiMj|~SPWnp6Lk@~uo%EHCh8(|VKIPZ zOw>i_!eRi+n5c`;g~b4tF;N$x3yT3PW1=oX7Zw9p#zb9&E-VJHjETAkU04iY854C8 zy093)GA8OGbYU@oWlYpX=)z(E%b2K((1pbSmN8Kmp$m%vEMuZBLKhYTSjI$Mgf1)w zu#Abi2whkVU>ToNU44yTy?{3Qsf#lDO^dr8-uMRkJq%hO9?MeH!bXZ(yp^IpIEy}C zr>I$uqTaZXqO|)c>JsO!Juhyfs8!oXGK1rl-@dRkGx|KYZvQid!`G$uKiRwG>9hUo zHVyRNviiHbW~g(l@`e@7`xmPQEJBN2gC+ ze(0X}`M&phiVvKAukVb$_OgBKslVkPi+|(Ge}Ceo6VJZLtUI`Q=|>;+zViCi7f-3X zZz}XtPxXA|TQ6KU!he3>x;t)?KDgOlebp~|9)9etlcR%&J{Mbcc=6h&FS%`h@AJk( zV@F<_UU>V%y=#vA@RhIb&5!jz^4Uv|{{F;h7iD&aKkPtN)mP?)3c+ynC^_<{!t`-uF}{+mGJf(vzn*{^?lH2z&6zCvF?f{Oal_ zuYB$0O~)Txy7M<@Z@+NE_ikX0&1D{WN2LBadF%T5U*~@8{~pQ6*3rzPTW-ANUz7!A A5dZ)H literal 0 HcmV?d00001 diff --git a/modules/svg/areas.js b/modules/svg/areas.js index 7e1e0af1c..77613460c 100644 --- a/modules/svg/areas.js +++ b/modules/svg/areas.js @@ -11,7 +11,11 @@ export function svgAreas(projection, context) { // Patterns only work in Firefox when set directly on element. // (This is not a bug: https://bugzilla.mozilla.org/show_bug.cgi?id=750632) var patterns = { - // tag - value - rules (pattern) + // tag - value - rules (optional tag-values, pattern name) + // (matches earlier rules first, so fallback should be last entry) + amenity: { + grave_yard: [ { pattern: 'cemetery' } ] + }, landuse: { cemetery: [ { pattern: 'cemetery' } ], construction: [ { pattern: 'construction' } ], @@ -31,9 +35,16 @@ export function svgAreas(projection, context) { }, natural: { beach: [ { pattern: 'beach' } ], + grassland: [ { pattern: 'grass' } ], sand: [ { pattern: 'beach' } ], scrub: [ { pattern: 'scrub' } ], - wetland: [ { pattern: 'wetland' } ], + wetland: [ + { wetland: 'marsh', pattern: 'wetland_marsh' }, + { wetland: 'swamp', pattern: 'wetland_swamp' }, + { wetland: 'bog', pattern: 'wetland_bog' }, + { wetland: 'reedbed', pattern: 'wetland_reedbed' }, + { pattern: 'wetland' } + ], wood: [ { leaf_type: 'broadleaved', pattern: 'forest_broadleaved' }, { leaf_type: 'needleleaved', pattern: 'forest_needleleaved' }, @@ -50,34 +61,34 @@ export function svgAreas(projection, context) { return; } - for (var p in patterns) { // this iterates over potential tag values - if (patterns.hasOwnProperty(p)) { - var value = d.tags[p]; - if (value) { - var rules = patterns[p]; - for (var r in rules) { // this iterates over potential tag values - if (rules.hasOwnProperty(r)) { - if (value === r) { - var cases = rules[r]; - for (var c in cases) { // this iterates over rules for a tag-value pair - var match = cases[c]; + for (var tag in patterns) { + if (patterns.hasOwnProperty(tag)) { + var entityValue = d.tags[tag]; + if (entityValue) { - var matched = true; - for (var m in match) { // this iterates over any additional rules for a tag-value pair - if (m !== 'pattern' && match.hasOwnProperty(m)) { - // The only rule is a required tag-value pair - var v = d.tags[m]; - if (!v || v !== match[m]) { - matched = false; - break; - } + var values = patterns[tag]; + for (var value in values) { + if (entityValue === value) { + + var rules = values[value]; + for (var ruleKey in rules) { + var rule = rules[ruleKey]; + + var pass = true; + for (var criterion in rule) { + if (criterion !== 'pattern') { // reserved for pattern name + // The only rule is a required tag-value pair + var v = d.tags[criterion]; + if (!v || v !== rule[criterion]) { + pass = false; + break; } } + } - if (matched) { - this.style.fill = this.style.stroke = 'url("#pattern-' + match.pattern + '")'; - return; - } + if (pass) { + this.style.fill = this.style.stroke = 'url("#pattern-' + rule.pattern + '")'; + return; } } } diff --git a/modules/svg/defs.js b/modules/svg/defs.js index e81b7f8c8..f8a3b1e98 100644 --- a/modules/svg/defs.js +++ b/modules/svg/defs.js @@ -73,7 +73,11 @@ export function svgDefs(context) { .data([ // pattern name, pattern image name ['wetland', 'wetland'], - ['scrub', 'wetland'], + ['wetland_marsh', 'wetland_marsh'], + ['wetland_swamp', 'wetland_swamp'], + ['wetland_bog', 'wetland_bog'], + ['wetland_reedbed', 'wetland_reedbed'], + ['scrub', 'bushes'], ['construction', 'construction'], ['cemetery', 'cemetery'], ['orchard', 'orchard'], @@ -84,8 +88,7 @@ export function svgDefs(context) { ['forest', 'forest'], ['forest_broadleaved', 'forest_broadleaved'], ['forest_needleleaved', 'forest_needleleaved'], - ['forest_leafless', 'forest_leafless'], - ['wood', 'forest'] + ['forest_leafless', 'forest_leafless'] ]) .enter() .append('pattern')