From 332f64abeaa1ca51443a5453a5c773dab7e884a2 Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Thu, 29 Jan 2015 10:04:11 -0800 Subject: [PATCH] Initial version of mod detail pages --- src/css/main.scss | 4 +- src/css/templates/index.scss | 2 + src/css/templates/item.scss | 46 ++++++ src/css/templates/mod.scss | 2 +- src/css/templates/mod_page.scss | 93 ++++++++++++ src/data/applied_energistics_2/mod.cg | 2 +- src/data/buildcraft/logo.png | Bin 0 -> 35577 bytes src/data/buildcraft/mod.cg | 2 +- src/data/industrial_craft_2/logo.png | Bin 0 -> 16119 bytes src/data/industrial_craft_2/mod.cg | 2 +- src/data/minecraft/mod.cg | 2 +- src/data/thermal_expansion/mod.cg | 2 +- src/design/pages.graffle/data.plist | 78 +++++----- src/scripts/constants.coffee | 13 +- .../controllers/item_controller.coffee | 36 +++++ src/scripts/controllers/mod_controller.coffee | 3 +- .../controllers/mod_page_controller.coffee | 141 +++++++++++++----- src/scripts/models/mod.coffee | 25 +++- src/scripts/models/mod_pack.coffee | 10 +- .../parser_versions/mod_parser_v1.coffee | 12 +- src/templates/item.jade | 13 ++ src/templates/mod_page.jade | 15 +- 22 files changed, 392 insertions(+), 111 deletions(-) create mode 100644 src/css/templates/item.scss create mode 100644 src/css/templates/mod_page.scss create mode 100644 src/data/buildcraft/logo.png create mode 100644 src/data/industrial_craft_2/logo.png create mode 100644 src/scripts/controllers/item_controller.coffee create mode 100644 src/templates/item.jade diff --git a/src/css/main.scss b/src/css/main.scss index ee93094f7..f0868f76c 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -57,10 +57,12 @@ $color-background: #AAC9FF; $color-background-panel: #FFFFFF; $color-background-toolbar: rgba(255, 255, 255, 0.75); $color-content: rgba(230, 230, 230, 0.90); -$color-error-new: #CD0000; $color-error: #F3C2C2; +$color-error-new: #CD0000; $color-footer: #3D1D09; $color-footer-text: #FFFFFF; +$color-link: #0000FF; +$color-text: #000000; // Z-Index Layers ////////////////////////////////////////////////////////////////////////////////// diff --git a/src/css/templates/index.scss b/src/css/templates/index.scss index 987f78f4e..67ae54cad 100644 --- a/src/css/templates/index.scss +++ b/src/css/templates/index.scss @@ -9,8 +9,10 @@ All rights reserved. @import 'crafting_table'; @import 'feedback'; @import 'inventory'; +@import 'item'; @import 'item_page'; @import 'mod'; @import 'mod_pack'; +@import 'mod_page'; @import 'recipe'; @import 'stack'; diff --git a/src/css/templates/item.scss b/src/css/templates/item.scss new file mode 100644 index 000000000..dcd6130ae --- /dev/null +++ b/src/css/templates/item.scss @@ -0,0 +1,46 @@ +/* +Crafting Guide - item.scss + +Copyright (c) 2015 by Redwood Labs +All rights reserved. +*/ + +.view__item { + a { + text-decoration: none; + width: 100%; + + &:hover { + .itemName { + color: $color-link; + text-decoration: underline; + } + + table { + background: $color-gray-faint; + } + } + } + + table { + width: 100%; + } + + td.itemName { + color: $color-text; + font-family: $font-family-normal; + font-size: $font-size-normal; + font-weight: bold; + padding-left: 1em; + text-align: left; + vertical-align: middle; + } + + td.itemIcon { + width: 3.6em; + + img { + height: 3.6em; width: 3.6em; + } + } +} diff --git a/src/css/templates/mod.scss b/src/css/templates/mod.scss index 2f380c661..0538e3a3c 100644 --- a/src/css/templates/mod.scss +++ b/src/css/templates/mod.scss @@ -25,7 +25,7 @@ All rights reserved. p { font-family: $font-family-normal; font-size: $font-size-normal; -// text-decoration: underline; + text-decoration: underline; } } diff --git a/src/css/templates/mod_page.scss b/src/css/templates/mod_page.scss new file mode 100644 index 000000000..22281719c --- /dev/null +++ b/src/css/templates/mod_page.scss @@ -0,0 +1,93 @@ +/* +Crafting Guide - mod_page.scss + +Copyright (c) 2014 by Redwood Labs +All rights reserved. +*/ + +.view__mod_page { + & > div { + vertical-align: top; + display: inline-block; + } + + .sidebar { + position: relative; width: 18.75%; + padding: 1em; + + .titleImage { + position: relative; height: 16em; width: 16em; + margin-bottom: 2em; + + img { + position: relative; width: 100%; + } + } + + .version { + position: relative; width: 80%; + margin: 0 10%; + margin-bottom: 1em; + } + + .homePage { + position: relative; width: 80%; + margin: 0 10%; + + p { + font-family: $font-family-normal; + font-size: $font-size-normal; + text-align: center; + } + } + } + + .mainBody { + position: relative; width: 81.25%; + padding: 1em; + padding-top: 2em; + + .name { + font-family: $font-family-header; + font-size: $font-size-x-large; + margin: 0; + } + + .byline { + margin: 0.25em 0 2em 0; + + p { + font-family: $font-family-normal; + font-size: $font-size-small; + font-style: italic; + } + } + + .description { + margin-bottom: 4em; + + p { + font-family: $font-family-normal; + font-size: $font-size-large; + } + } + + .section { + h2 { + font-family: $font-family-header; + font-size: $font-size-large; + } + + .panel { + background: white; + padding: 1em; + + & > div { + position: relative; width: 33%; + display: inline-block; + padding: 0.5em; + } + } + } + } +} diff --git a/src/data/applied_energistics_2/mod.cg b/src/data/applied_energistics_2/mod.cg index 5b65a1e5d..ebf5eb581 100644 --- a/src/data/applied_energistics_2/mod.cg +++ b/src/data/applied_energistics_2/mod.cg @@ -3,6 +3,6 @@ schema: 1 name: Applied Energistics 2 author: AlgorithmX2 description: A technical mod which adds an advanced, computer-based storage system -url: http://www.mod-buildcraft.com +homePageUrl: http://www.mod-buildcraft.com version: rv1-stable-1 diff --git a/src/data/buildcraft/logo.png b/src/data/buildcraft/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..93cd422191cfeb6a51348cf0cf60cb02393c24bd GIT binary patch literal 35577 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 z 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 literal 0 HcmV?d00001 diff --git a/src/data/buildcraft/mod.cg b/src/data/buildcraft/mod.cg index b2f0ad6fe..e5b1b1967 100644 --- a/src/data/buildcraft/mod.cg +++ b/src/data/buildcraft/mod.cg @@ -3,6 +3,6 @@ schema: 1 name: Buildcraft author: SpaceToad description: A technical mod which adds power generation, mining, and building systems -url: http://www.mod-buildcraft.com +homePageUrl: http://www.mod-buildcraft.com version: 6.2.6 diff --git a/src/data/industrial_craft_2/logo.png b/src/data/industrial_craft_2/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a88dc55ed5f40c0d47517143f6f9e9e811c2568c GIT binary patch literal 16119 zcmcJ0byOYCm*;!9ySoH;_lH|>g1ZKS!^15PcZVRs0t5&ef)m^w9uVB!-F5Sw`R&f^ z?EJBR?Djd;RekGzu2r4Ww{M?{QdgBnMb&{P2ceCYuINGJgC_?HCP2LL=c0f0j@06;hc03dY9ZqX3^JAv$? zpbrKBP;vihKtNVD5dZ+g`AJL9T~9?>*wWdN-Q3FA!kXRN(d92U03hlu{CDVR?QTxx z?daeH7WNjS`8N*XzvF+%95ht_#^P=-Mx&>qP9^Q^W=+M%&dbh8145yqq7rqp`Y5a^ zBlj=(-zPB|TX%OCVGa&2FE4g49(HFp8xAfZAt4S_%Ub8j{$Fzvq! z`JZxRtihIUpIqEOIXhAPBiG!**~49ohUOnd|LgjfosKU5OOX@!Utaz7kHg#Cg@cQo zljFYwxqtfjALjjUsDEbu9rkZt{kt;Jzo8M9cC$8jcXrcqc6Ih0|D`ga{M2(|H`kgX$^LE@c1VPAOY@w0sb@b zzXJ6BJHUS?{tF<=@lQ#T zxnK|?v9%>;Pa8?$7`izpe`Osyw5~5_<2eglTM8&&NYfdUwfD>A72&BK`+D}W`_w+y zE^j6B6^0+)0c9TVCzIKS&SHoP@c$)2For47Zzvs((uNC}{`qh*^ur=D9sE=fq2A{_ zm1$SA9-;UqPc2k!aWx<9r*KU5&ZlGDv+rhB_kx)I zcl^X=AuisJdI63AgCAVO^)PFDP6^;P3GZzRLZGG`hBe6hHWul7(UupM^wbMUX5`hjiAJUR1+WmJMu%1estV!YSr@EjXQ71z_lV`-lhYN$vre!@R3Tdz;%d4)GQD_ zI8;6n!H!2y-zZ^woPOoJViUqZ<{wLgKz`(hP=yX*4L#B$GYOXEcp6wgi+_sSxpUYI zw}A&F5PJ6nhwD>NR%~(2rBEpYl7a@}`5XZ1s6BZ?=2B=pgyeCkZkM&dNE?6JZJ7{` zA7{W1IPMikz)+F|ROw^pq}XynFRR4U;)Ptr~%NSbu)U;=I(MfGmab z%UHF27z%VWTMPuH0VtCxl}7!U?n5!XCvbf(G>zMeZ3CIJ3c#CjRxfTyx+?Vo*2efp z1k#u_6C|A6EIu;6G*gW3t4Si)0c_zf{R)rZ%DZKCA>9772}TS-opW@C*ZzVOCVUkR+gR{f>m1*>t;yOvAhD&j0*+T@nqno9r^c61de|^qN~05K+Pgh=8Tg zMGldw=e5S?V!UUA60Pg7+>I%^FiO1Z#zz`Jk$`t2=$ffa=@+KjgHMMu#Sm>hSKlPw z5hPwu!R*6KKXCu*<-HiSuH3oxUOitOpJoCL#XUqFjt~}r=!J7-$iumOuBJ?&kjDs_ zj8zRb;*(0u>t{0t5!nuEx`9~k*8|iZ*4H#js?R9d&Qo>O>mg1MnPrVt|Gsrbx0tUVM!bzBzIH5 zWzA#eam0xWw>cSAOW_}v@2m2>O%JJCHkK}k=c7Mb4m;q`c3MB1))2Pq$U$?M2)#z^{V$L5tzdc4`&?48imL+}WYNIW zj7uc~7k|P=7AJ=Q)7Ck3Q|B+sfhW4P>7*aU00Xe?R`uUr>6)4n;=2a2yAE;8tkm6_ zwoTX}HmSrc*2^u#k;a(&aR^tszOIv7B_2%C!{C4)W* z3-rmg1P~N&JGL;I$BYR;Xf{$JM*B5dQ?fVN+;&Wj5bg_m@xi+uceB@^n9%7kd7(}q z&~uiLIys@~s#JhCgW;a@AaNE$bQqY=J-r>$yo>DG({{GLb@2E*Yo~U0HPd*R^9WE1 z@p|D%m=bu;QN-AJu@Lk5{hH6i2hjyMd`$M9V}>#EgW(j=+i`1h`&x5a9itsTm+A1Mid*H}wO*4+jZih?~9? z9}5K0VDZHzoOBcYS1B%=o?I!vKvMY%TdY_!4I~NS zG%SM+Yz0(BXp7*S_3xNrI+0TT^lCCd9Jxi+EN)t9 z>Ore8UuhrVf6qP$xRy9`x9oSv7~YYGIob&7*iKFkK>wOH!$(KBEoke*azN#=)XVbY zF4-mxz1zvGCN^QSql4dP*<}it0k^hdTT{a-b)+E#-`N1k6Q*d@^DV5D@V9b%`2w*R z;oDn`=($Qe8ahJ7+5wC$Tcj1B+GvFW&O0bI2QdMC9zT?~~S6I~>6e>t1L3Y}7 zLfUs5{az%O2P|>QoRrgtCZUZzdXqm80P><+d3aWtL5^*>L9si)(Yok<&)g?{Pc(E> z6&Q*l8ZfhJ3d26SsawJ*a|JmlSRk#YU}9ohu45)<7ccm{40l?h$Teo9F7%zG7m&?4 z6TFo7JG090o^Wzl#a;w+$mSPDsbl~YC`c|`Jwn{A?k?^lgOx3ypek>L6*=e~TlSN= z8(A!&b6IU4%>A*S?C0i(j(6y$ej|6zG*14d@rF9L`Uf3%-xHLum!V=3{_YV*yl3_0 z+`FI9=fN8>bwyU^#?n!>+H+_w^85qnnOB#J};%LzW9W8MLl98$91F82J z(=At>JrIKxN{z?T2OH1fyApQ zWsA3`*T6v#b`hwJ;z}wxp$(Rh4Pk5&e-x~VItU|NvEH8TSuEvTE1$bbs z3~#{OpoXB^*|YBy1FCL)i%g-GuTtX1rp>9Z67uinn>Sm6oh;7l-BE>S=u5AwSw2ak zyhCvItkRP|eSMLMpeR&mii?%t30u6=tZP){=XOIK89WKI_#wopJ%Wz)=(4R&v?+$e zKX|V4y=6h1o>_>)@FG#=_x;f+smmh60sa%XQH~uF{H21 zXr#Vn`ST5}mZn=G^ZUaeGUCb;{u5D{bTU4B-^g5$CG!jNet~rW>f4r8WWA#;`e!tc z(lP!ILUWgjg`{uzn#8_XEXUZ+k&E3oc*htL4oKYDvc$;RUatt;cW=1`^11Z7=UDZ- zJ5$e>7)7Yk5v)CP&hO7%Lum0lppB+2if$nIc4cB`(@O?7ioopPxN7w}N0IOp+Ehbz zneWXME*BQej5%`CUyP)}c51D@b9>1mCgQ~zJF3jIR)6t@iNiymfkJ3`9z+b|6Kj10 z((cC#lQ$&+ZiS_&hmw}R^RpRrHGPVMiytQZPhX}=)(h~ z*a6&NsaAGcZ$xI^o-40M&erG&_kL1naXFIsthu3k+=c>srGzKZxzf9$RuOP=mIm>K zrKUeB7y1wy(MonfrG>(-BMNH|E>5MGru4FJ3RJq66NF6ZbsNvkx$mC8bgOWri1^07 zcYDzS)iNUss_sdyKJ3))2#Mtdy*g!qY=H2OFf)W#(@7X{p4%W5rNh-+inQ*?rKQgq zG+jR2v3(p~h^{fMl?)gl`+^ffhkO_>B+5C!qmsvA)b8Zw97nBO(wzKfFs!l9NylXI z{MEi}r#xfea%e&wQ9dOy9Ks2}q0 zZ1=Yvar2Gn3GL`gh>M1WVm=MgITsQuaZtjbRB7q#hLp~zM*jN3ULZt#S#EesmgzT_ zJhVYsO36C`YcnrZxWYMO8@sH ziQ3)^2rBzgiLIyy6d6Ey(2QDo`h0_Rk&ZT0QBzLDtOlB8mPX^byw7+ifOaNyLr09^ zKdZ@!^`M@@uARXyayetXxPX+xA&~b`+f<14UXcGtYdP7V8H`E4$-yE z_`tfMTVKR}cFd}@HP|j3AX52G+Q|oLJOtxl!sr%_El)(kkKNZ*A=@4Ep$5=oWP?b8JsOx-h8`?~ELD8GQLq1e0bb@3D=5WBjkOXs^!a_x~J z=Q{3%cu?!Jr>ViDhaJ(tVU|n~t3<_eg1o)~_3UPdk92LN@x33n*ITsF27Q+Bo{@pu z!xML~ukE20C0`JP6m)YErj?X%nzY<7qd5h?B+hX8B<+Q zkoh;a+q>ur74C!=K>M_REp>Q!vR`yjkdVZnrd%+>3}A+e;D`~0(#t?&)L!C83w8=` z$E=4(hF=!DUYbIL3XdSM#|ui$L{%A$n`iN){-SPOaVZkcO!d7msVRBv>Ke(mkYWEy ztRz4y+1-o=K*>HXp<;@VHUQ;m~_p953f-?U&;hRJEa|K#H&@-vqSPPjLTp!-Fm~<1RxO}J|q?@XU!+=jw0O`7D zj;U#o8AEXO&I50Z+&S6GfAsGgrq0~=+uK;6b>i1|wC~tu=GbxC5N&nz#Z?Ubsqyo} zL`+J0o!$%YgN3u|bM?gK)C_hebNP&}XHvp3t|DM17iT;b#?gi^WDc&&PK0ml_ zD+;$f@!>4x(nH(6`c77Eo4T_JjSwUak+0iEW(af0QS`%q?KB5UowDXxrQ^pXeo%p( z{qC)!!q^3r_idM8`J*^lIX?8gy47p1sW}hdKlzEP5P0w1(11H_|Ex!-o(&FNwg;(+ z>8`!^D_K+cYFVx*aeM^j7c%JDc`|rf+h09Z(aI$)0uTS*pDm{-iG~T0VlzCa85m45 zj15XBW5rg1Oaws*m~k`_ zJH~YJ;=|=0e5qxPB99F|RQF4qYfGR(?)z)E@(*LPo^r~u*=BXLCHPzISY>!uT^vB5f1Mq*@P56%G(%NF7ws&5sgpi+Y7bd)CUa71K zmmq0+NaJN5dTDe2BYz$4)A4${sG(tx7M>6X_Ex>9E|<=X(vJ1mHkvyO**;$00ev;1 z*!d_Ib-AAN3>nvB9%)Gzt@7P!Q;5^sm557R6k;=g#urgpo`N`@rmW2JO=}<^qaXkk z1d(&wzDe2Liq#g66)q_jTJX|m37+m62qhYK=7niHzjuz1F@H$_4uVl9>PMxBak!@9 z^haS+4G*cD*&&?35(3&E$OPP|<0ui~LXpCq160?(Fj~TFaxvAzC8*+}A?)|({=#>| znW?65V)1lzKQFN$1M;VSfi##MYl`vR3)_rYAwR6c)&qqARP zG3Ok+J(+nT8&hi`iM^A)lUVmAs`-p&&P3Hq>vQ|7^O!Ohryo};?P|N_hr0=vim?uL zLb6cbwukTjw+VoE9^kwR{(SWX7oS`-d8ZkpZ31?EXSl|dpiR4e?%me8>`Db?Qc%1d zv?k5ni^qpRZcvQS2=@gttncfWI>#hrX!4dS>THCmzj7YRd&-C|8Vp+jx(-!-+rKd- z(gn>X;UUmW6zvlKS;itB6XG&TGt7cD9wX1&7BUD%+dz{7ZNqpJ3s0EzZ%@BNB1R4I zR@l8<(;Mq&Kby+yXZT9LxojMM!%hEj@m-g$a(H>@7pDL9X%p1d&TEFZpOk$V3-n7!m-=Y$bXgB=$)ZnGF>7Y-->Q4OahFmBv zZ*Mm4@LX?0PR4d*l%tu;+;Jg33-kew1*r=i>KzA*HDTF!d-P#DNf#_$th|Dm0|buN zG>^I!uzYlsN5#p;TnB%F@jpxZ^kC!nCr{yQS$T7P%k4P}Azp*khJvj!SE_Nm4eksx z;L8cZi2lApqPG)w$OreNdO&LV;=EhX;wfNm>P!&1kLudgjYUo~P;E?}M2>;y0}`$j z-%(2v^g|pG?GH?5EDNWOOjM^q6)8Y$*Fbz%y1P2Dch29f7X}0WH@U=6PN_6TZg(U& zXA20et8&Ept(LNIi||nv)h&&K{_c3>z)K~s@MmrEYyJBBYura@uw0w?WWjqLPu7LoiM=CekZ$GfkfD^; zDCjhs27+0Ut_>7A@M6Uis&W0*Kq_azBmoQfgZtUi1^FPoNetVH=tyB0@oEoBYS89y zmF$-j3FAWH-M2RElopyhaBF{0KD~--K$=0Tmj-lY`8eIx*<4rM82!Z|MvZr;qCs06 z*-zk!(bIt^Ge90H42oF(FhSd9g$&RMPhd;A)-MHc_`sb$KvjLZ>iREHMXGkB{na-Km`JphS*V&X_ zE1oro~b{Ffg61s>?Mpe2A-t1Mt zQ-LKH_5_5IH;QIM4^y7+)LP?pJf1Z~c{1nv6jXZ!2mo%T-!?8FF=^_oo)~PtJL6Ul z75VRd<2Slv;XX~Q2DX?VNcm>O$5ZzWMJ3k*w5msHzc;_Bjb+7S4(Qv-%Ze)QDfjr` z`eei8+P{xee(hth-~W9^#!D)i?SqbxXVh~n9l=9?7Bx7j5g(P>*E=<4tfJatWs-WD z2@V>yP|sI;HxTuG$QPh`Tra0aM|?!o#F9{a?y{=%`9;ZXuK)^Gi%Y_2otf+k~O20O#Hn>YwR~i+BNs%rR$ncn8p)9CiFJLOkLLd%)CRXK)sBj1^_0mYe z)NIZ}5sL>G{94Ffj2sWrVQ^p0Z zz}eFyHW3QF27LLz-@SF8v%eS;@917-A=OKm_go|zFFtp%=d$P`0pEYou{nw7P_A}p zREQ3-faIAiP_1G|$_WYA`21iDvE#L`v;8v>CX6KSd;6ya8#ZwIg2`$@ZiDDYASOCDbIZPPBLE0j$dEAaa0qO zU}-Uxwp+Ani#>ZmFpa(n-k%fmQ|DJsN1S)BM5RP|-2Zu>vv;}@zcAmWhbvS-t~U*p zs@WChhONwo&Sys*h@*A8G-f+1H18zC#E-Y~wo_0lx% zBS(VM#D~GvsFcuJb~)~hv7zy%kHJWx;#gCdV-0)2g1ErHqLAfWOI?2=R!k2MrE&N2 zK^M-KcHaXFR)MP`o)nBL9nE;dpxKl6IVl$ARZiE~3wLa6iAkRMl*tf{QqnZ=aElQbqnu%QbwBu_CQ{~N)T-se zY3Lapj1(U8wq$I#?q#;pB_F`XXG0m&5^g4mNQ>%ZHog48PkhJKHh? ztC{refZpzy{o5QSTfRuHeoBpJ`O)fo51zNUSVn^)*6^BqBUed25xd-oDAvktN?`n(G8XnC)Xvd7CmWH` zLBa@l=ZS zZqICeVbNhBxdL6pL9RmxNCur#f$N+AJZNBrZ-~l~o`RUgd@T$mqCs^;Ty|Kl4L=|g zwqQ>Zb#ot~0Y4#~V8Q;DVn$2)br()Qg&)tXgB?jiYE5`laimPAmXKrUmaC;Wn9 zRdlTpKV%Q<(UT7$025;s4$)d&f(#DnneP7Q7g*G&FXp@!G^#r#z0We28OOYT)kqp6 z#EAa=MFo%;^V)|~wng&yY zDUEB6gaGWSQgMwA^~drhVJ;J$0z?k84iCA6I5qn_+76kq!FtoNft3=a5<J=k^)?d_uFf<9aX3~7 z27j4tv!D0hYxiVxOH;-$>p@?$JT-pm z#A}8`dVp|o&y_38c#P7Rz}Mjc`<%HwL29y=SZ*<2R}Ll_hnxUzFB_Z}SEh4;DGd}k z(v6fLW#}nc*|A`{uT-lhW5|_Rn>2Js4{}N`zXqy^v+V;KvN)l+c1@*GSRbi##z87c zc)b#buYMwt)3e|EEPWAE)i$gq=ijof?$CZb(|bU4d+`iN3TI;h)33gX<4PsFTwS;kW^_a3OK#P zt&8P(Iz_~LZ*d`BWgpQY^AbtL>@x?V5JEr+Y%09&9HqFj~dDPf#z%_C<2mzyU8W( z87xn%O8Ad?sn_s9ORx{u=Q-kqLOp+G7z33|JE-a8rV+mYY**GL<|kmO-K5Zzzxr@q z$@DaFs)@Mt)Kw$ZLuZNak`D3|`TRhs$q_fjhxLty&O9a@V?^Bk5Z;L|8SLL716;&< ziUYp%5~{yyLU_PN1SnC+qS3f+j}G_)HvTL`f4C}A*0-?QA-_=!Ii62;`CPFcuLcc4 z>B~Z#w=3;Qb|a_xi{ROQ+T5bGzeNd+lhL<)wud~$ESs+fONx1V7oq+%A&QR5V|KyE ztHAs1@a5&7n|wXXm%FN72y`L1s=!&4O>YIy=Z|8D+ZT%*;%{#UBc^vBdTOK${C;B6 z;EjKpXxnDBrPXz!ye=Py z1p^wWL#8gj5baAn7@8qqly92F#f<%mqAJ$gIF_J25D-J(cG@cDC5vYH?Qu_VR<_Yr zDPlP+CwM0|TpBr=jnx>9I}Blc8nOet*Mz}#kUd z$YykihuF4hR|6AdA6e2Y%G-$cm`7YpucvVH3!TuDX_FvuxnnTy6s{yjK6-5=hx@|( zB3kJokeL&8LLXfM0Y1f4?dSIg*_&&2hm^-p0|jF}-TNuD3-d{BiZ74lyJ zD&KU3-H`HA+_>m&*3rS1$CT-CB&U1=#ZnililX8Pz-XpB;alv7fjD5t8$@3C7> zvzn7n^F$gna#K2$u(DVnq=aswv%}OGEct#i6LUjC@QTD;mac>8L8VV+gZhFY%hvm* zWa}8V1In@vY@}Ml*=-L}6ViF4K2_lF}be zEs|&=D{00^bttFaS9J(>nzDPTzU<)Sz?^oaWJ0c{U)vL|GVst>aNTuYue0P*LHtVU z`v!ec@c`+;>f-w}wz;Tajti_=gZV@JE|fBE(W3AJZjT|Eul5t;CkEPmjOualXqlTX z6llNPu?&LJnJSqFit+|fK|`nNhj1cE46hsYl$P2&^atN-TfMjb*2U8CU1sg^L9f|r zDk!^w%YTwr`?$9cP#pYsLl{IMTXdL|f|T!C>lzZ(#opP-YOyquC!aCh4w3+vPY2GN z+j5b_@CJ#zOK|U#&zPScTn4f^Q)(gc^Q-P48p3>MEX2Gm)J0q}PT;JvzDjY&)OUtj zG^Poib;XP9PV_xX_{*qaFBn;3zNk%wXz8IU+*6SGEhie14^vbfVGq5CnT3GU3{v2) zgFJ7t;HjJ`;PeZ_704do%?)tlz7#!3gI_NqWlDYt^!{mOb)U3u=@&(GkeIK87fni` zXww#M!ylY5l7$c0*4dUZ=vK6_*$CUT%QVO)jv4LT2UWUm<6F2~%RdlF9)u-;2VQ6AzzKw7V=#8-k`mm-)OnWcu(pf?)dcoZs zxRY8q9u&ylUwqY}YC}F#z|z%Zx=CaOkcx2h5%E@l`^WAiuDNRP;_EW6jrp<8ke$-ReogA)wC$4qF#zBd_biS<(c}j zO!Ky0(7;(n+~2y4H67x1Fq6$r_^|*E7BL=*DD#Wn#H>3`?>^dYPUiMIwNtMxpOA{@ zJh%agVYu!Kh(l9>HOsk{er+ynS@5Ng=<;NiQ=L6Ls84Liz{Er(wr|%>&4yxk6AGW} zhlEuOp4-}i6s9>BY@mTg5JjO5s&*|Edyv`2MlA5C#X?qKlRbhdj(0Xof+**`S$_x{ zQ>THGe-Y69mub9Y#t!>Zb8eb{2|hr(t5SkY@m=}7B`9QL2pyZt(j+Kh`aKp*tR`hI z+=PQi3GO)_x|$N8teXMi-QDzUG@Suv5MK3=DT)W&-z#jfn=vX>iJnw9U-Eog6m-UZ zT-Xfj7{<*ShP>6;|6X0gd#MG9HD1;hd9;2t%%c+59TzsgUY+ZDP6RhDlL%$27w!^Q z{bx;kLK>-CR+Nj(>_M_c1}TZ?W2X&*WjELGL*h}SD<}}_*CRUi1P|)H`Q>QfvEC{; z$KoVfw7g`bGc_*-K{OC$4vc%)80xlCqfp~wAJ*L&Zs9aqA0Kt95cL~(1K3NN!HD#S zw4`;WRKUyJW(ni+sT(%zr;ZUbFB@T9?;}}wK@~p^bCKD_Tgnm(<93*@z;?v z8RaTo&*x~PZ<=cg>Mejx5F4TI$V^!zK4G_t(K-3ka2R$hDRM8yiUT)lae4U>9 z1!yA@Tyv_^7T4Ry<@?d5t7=^yUS?T=%c`&hk@R`kloFOMLlM**>~Ioc-GiL`TD>~I zyc_M1B_5(9Lqq|s_XH?tQmQsSz|cN}hR%`vPQ#8Jn24z#NbuL|W`qbTG*Q9#8;JB9 zUWhBD%< zszbMW$cFnAtpk$tvy%l`qG?m?GuMhnl++lkEDQXHsopt>84{1C7Gr}tL^Cwo;>Zm@ zC~*pV zSK#ybnY!R^LAASc=x3~>D3KaH^y*%bv=D3}IZ%VF1Pk0!f_9%{eD+~q|-snxyHyVy^t`uHm2?Tqx-Yf|tGFQMRj>N}!BKx(t zJwo-jU=FQG$zkjB2is0(naw2(VfEp}IT45hk;Hu#`S+yK-wJ@hbtA4xws)V3V~`H} z$2?#kAKh0%jd1`vg^|QyH?h!yZC(v$A0$HnnBk3m4O`q$x8jY!?hl*|StOqM2487G zcRyIwKWj@dxXC_rZVOWlQLrq%&2@;f;zy0&mYRBvUS)axmbLIjJtB~7o)G4#zbowH zXaA2m+2eS=TuACsPg3oDVvS<3R4}+$_Vb;_9xiIHhn?mdh=qZiOmLlBxgFrl^lw5m zgDqG-DzeRPnHj!EN{!8XM)3W(h*Tj`o58@yVJp;!U#kn0h#W>+O_Y^B(Sek{uoVwf zLOJtOc7QK+v1HMoK6Eje!y+7zzv?`09Q$1V7;r9}+(jJJ_@(!F{yX)I~$&bymm~)l)=OP&<-N3A`78rW7Mk~CTDexN;H&b><@}1v^=gW;*5XE9P zA_7Rg_spO%_xp%gm4MG2-7kPOj%K3LHL)g>!MXYofk5DeX#(<|Y8DE+Akf&wf($EM zidvXXS2~D7CTP|r$fXUlBn`0R<8SKs+AsbMf>uYhx!fH%OnuDXUbWDAX|iJ@HpjMh z&WV&3wy^fhHiZq{wQQq3|E*`z=Y!Rbpj+EV>K&}9sSEX6NV z=c2Z3O1E5l9^p-KtWw+QvOB#=Zf`X?PG=9SlKjcGdZ9twPG-{mi&CzVWyT?+O(GBCwAd2iNUs!Kk z5?tES#}|?3W(nxF6S5+*MzVLKN_>j?-GWaV7{ei$huNvbm4g(aI>pT*`3~q zbGKo2|3Eq$LX>uHSp7`2eczoKq61Tb<8L@&x>nJRf8U@ZUfycE6h@jd=ig=IJV*C6 zIdIU_Wa4Ek#69Kiy^9!8GB3)fH$?HTu{`!;9Z)Zm$4K4!%vJJ4ezBBwmFa2$~zm|4%HHeCk1~7QQgd@D6qEfg?{{u=xF?`z>TTR-+I)+ zsSBH)g^o1}A7`)iZqg#{#}R4<{pd;}!hXDnEGYsxXx<+l)Vol)2`Oe&=$5>cD3Ack z8Go%I6P@d!_E4fgjXVv|HrV3fliT{xr-`Zksoyo12+^v@lG5t=yD<8U3YhVntaaJJ zn*rpk<(=2O1%x8 zmSUThEt)|0S^WMi;XW{%GHR0Hc;O{0&v6S97qmHJzyz`C^{TkWercwl1(U8(3*MxA_8XG`&`pY7W`b_cq-YzHY=U%HDO| z)IC$)4kN~1*;oKVE9RUq`T!EEy~_Obn-gI)@CoK*ei#MC)#mN{_N7#xcd%Csv$kFE zPJ_F9uL2eV`_&n`jnhimzWsJfp1^BEw26A{*VKz~D6RB;gl0K9f5wCu#&gs~JYsyY z>(a>}VVn#5Y-isfJW|-XyOU_^nso9QR4pDI)G03o&cKl=l6lz8t=7m zZw_<`tqO@YeO}FJVH~r#h;LG{Q_Pa2(S@2ml_&UK4#2wtTR$7(%(Ni`x3e!4IqOAw zt?IIbbQ=l2XCjHJ`rer|!Xyu)E~}PnK58500?*=J!qHOU>45_w>xxC6vE|BNF`kKI zHiz`*U|&YI!=`P{_eU<&FYT2Y`6PZc8k-eHG+v|b*q;|(aR`7VdFcB7abvUnD#8Dj zoEfH*!L?SlqbgU*1A9y#t7~6FSVR*lFN&#Y(`)-F$P1aAjd>3XJNuGAlOYuu7&(Jh z5MZK*Hz>cwZ!0`$pd?6*R_8>^o+F?@I-Y4;fU?2QhnR)x${k$?aR0_Xwj7_{`AakEvm08e0hRtiK+!X0dM9E>2xVxjv!v>W;b(fwbMIcIFT6 znd281p}J{0tI&zAa<02{jO0FJ@OCXeXX4Da8%m6Ib%h;7n) z^jK`U%;W5&yz;)^v7&KKTkNT)v^WP2;px}1aSRbz(Z@UtGlV<4;w zq^6nup{|-zE+4i#2X*N;$Q_Z0IubLAAM25<(q+RlNxVb#DveA>UuqmZa$X|OT-e$5 zi&UA+r0vg)A%!o*UuV`c*XaR~UB)yaLJI3XD8OvV-Ga`pn*3#2;kzq+KxDukuQL;? zo%sNrgH~g}LLqn0A*_J31#R`OkwDz9pRXA5f2&AueN$#J!I>SgyR~hP*16fXTCmd< zF?SvZa^)c!V8D#Nx8dQ3FQ~_X2excgdCsc&Hh7EsB2_M>Q!563e;6^HX{AH-P=jjV z%R?hXeU8GaFXdZ0t|i?Fop4tCykf*UPI-U&C7)}sb~g(Duo+sI{XK<86_y{sR~R^RdI@Qmoxhyxq38<@D_1MZifbA|?D?jKmzzxQOpk3Do5QZJX{9?#0Z< zHKK|&eYe^HftoZW5DMI{#&++(hmSq{T^74Qsc+ff_@V34NcW~rR99dnzLHG6Lo=^d zCh0|h-$Y+7q+M)SMVn16Viy z>2O8YQN4O`Ck}c2gGqH=>g_MLu#Ko!`&QVzecfMXUkz8b(eeDpWyOaBBk-r(U|c(? zLd3pVA6x=PWT!cz$0>7k7$RERWiqWnS988v*c3aKm?ULHN5tyO%-5Qcv(J1w4Q>%N zpB-Zs&i#5s8-Ap>c%I_6p|gGbjN0GUatD=2sGwyZ@Xpr0Ob}Z^dVw5dIt)E2|Nin} zHF(za)JLUpeD|DfQRM4S8^>zUOIC@U!I{DVzs5l$yXogVXv>d864NG}P1U*gWd`;J z9f37`%c76E5&Ca~OZl)9NVrS5igu}l) z7XQiXSF!^3S+=Qdj)=}5_ti#5F$%Ae{PK5%X39Psk<$APH0slCHqCr0C(WPz(^@=P zd*!o3xZgGB@{JSBJ(0>>J(3+ddJ_vD3-3)$oX(azv8#T58&jq`t3@lob5`I_m${xlDJHS%;cE~&AhkRlVl&C5pI~xAoobW+`36V)K#Iy z!$SWYh#Dqh>D$+*7R2Ktv%Vfy&|zJ+F9xA6X;%As(eUQU{-PD5yw>iRxzMtKQ`d=B zX}e%50}U4FyUo*z8gD5dGIm$4ZY>2S zkJlp}+v14$s4p{XZ1JEEOa>-?G3R*oLc5>$=^PKg18X049xUD{tFc!65Zp}2R8L%OpQOQ@T*& z5r)KX9Ce3eFB@YzJ;E`s`WmfzD6)yuc4G^_vwHv!?v^_XI+$rXMZrF}lwdsz6HewJ zqgc@p{G4z;AxahBCJY}JktQl9Q`O38%SXOhA5mQ4tHEMe6G4*4#^d!or(IyvAurSN zIWGOd)WAnA;V2uE&`sX@@m@i%Pe_+^o)Z z=ULJLrnm-^a3k?PCT;;3(|t5PbEYN$BfR=H%LknM$NdbOXVFv7{j4KcxFNN(*D=ju zCwe{*W3G*E32OJ1I=)>GKCDIRiXgP~%thjw94(2bLl@7voN#r@$@Toe%|Z7pKgiOA z*1LjL>nRVzbj$|ltfpL^>|QBzp~0F`OR+A>mq4NysL+Qea*iiR6TTO{XSp}}@-F@b z-2yKeOXo)R3V|C&{hQf=77T`+XSM9MOAJZ7JwJRqcby!Wtp|UV-tfyYUAlSVK4`3d32c|6#Y?pWD)&A!W(nHf(sqZ(oZ??!0bS-xad z&(QToZh);PiaYDmsNR};^tB}z^M&q`&7V%^<}LWT|Bi(5XO%1_e|2wam{fFl@&b!#ij$$932ELB#sTD$-ZK9b;j};n4l+qod(cMqJ zoY{w7ng!v9O?jF-JaUz_{t9ckrJSL4ET1fp75h5Pw0wqm7y1r)D{LD{+fMBA$?(9k z_j$j1r@v1TcD+}I^L^@W_%wQjMul&1^vDLHt4qe^R_!0xc}X&VopBPcIu}*TI7^kU z6#aLZ-9x6e2sz$n-Wi{I7MW0+3#ce&2T?M`fvd3kQeewg}E=iktBeV@6hKTS4w69u#GiofZu znEgp**u`E-^-#2JI?T+HaZg6}oah(msvy?-vK+nj;?M6f;DCH}>U=b9vG-;_%*-{_ z(`s>N)OQJbtlasM`R0ZHKSyT&@6X`|)uzI{A+CO$(3rI35dPText {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 \cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} -{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red0\green0\blue255;} +{\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc -\f0\b\fs36 \cf2 Quarry} +\f0\b\fs36 \cf0 Quarry} VerticalPad 0 @@ -950,7 +950,7 @@ by SpaceToad} 0 Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;} +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural @@ -1082,15 +1082,14 @@ by SpaceToad} dWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBW ZXN0aWJ1bHVtIGVmZmljaXR1ciB1bHRyaWNlcyBjb21t b2RvhoQCaUkBgaYBkoSEhAxOU0RpY3Rpb25hcnkAlIQB - aQWShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsy - OGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQB - Zg6EAWMAnQGdAJ0AhpKElpYGTlNLZXJuhpKEhIQITlNO - dW1iZXIAhIQHTlNWYWx1ZQCUhAEqhIQBZKEAhpKElpYH - TlNDb2xvcoaShISEB05TQ29sb3IAlJ0ChARmZmZmAAAA - AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh + aQSShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5 - AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYNTlNTdHJv - a2VDb2xvcoaShKOdA4QCZmYAAYaGhg== + AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYHTlNDb2xv + coaShISEB05TQ29sb3IAlIQBYwKEBGZmZmYAAAABhpKE + lpYGTlNGb250hpKEhIQGTlNGb250HpSZHIQFWzI4Y10G + AAAAFAAAAP/+SABlAGwAdgBlAHQAaQBjAGEAhAFmDp8A + nwGfAJ8AhpKElpYGTlNLZXJuhpKEhIQITlNOdW1iZXIA + hIQHTlNWYWx1ZQCUhAEqhIQBZKcAhoaG Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 @@ -1192,7 +1191,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort 0 Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;} +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural @@ -1215,7 +1214,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort ManualSizeImage YES Offset - {0.01932367192046051, -0} + {0.019323671920460469, -0} Shape Rectangle Style @@ -1230,7 +1229,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort ImageSizing 0 Offset - {0.01932367192046051, -0} + {0.019323671920460469, -0} shadow @@ -1634,16 +1633,15 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0 ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp bmcBlIQBKwxieSBTcGFjZVRvYWSGhAJpSQEMkoSEhAxO - U0RpY3Rpb25hcnkAlIQBaQWShJaWBk5TS2VyboaShISE - CE5TTnVtYmVyAISEB05TVmFsdWUAlIQBKoSEAWSdAIaS - hJaWBk5TRm9udIaShISEBk5TRm9udB6UmSyEBVs0NGNd - BgAAACQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAC0ATwBi - AGwAaQBxAHUAZQCEAWYMhAFjAKEBoQChAIaShJaWDU5T - U3Ryb2tlQ29sb3KGkoSEhAdOU0NvbG9yAJShA4QCZmYA - AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh - cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5 - AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYHTlNDb2xv - coaShKOhAoQEZmZmZgAAAAGGhoY= + U0RpY3Rpb25hcnkAlIQBaQSShJaWEE5TUGFyYWdyYXBo + U3R5bGWGkoSEhBBOU1BhcmFncmFwaFN0eWxlAJSEBEND + QFMAAISEhAdOU0FycmF5AJSZAIaBIAqEBFszZl0OJIPN + zEw9hpKElpYHTlNDb2xvcoaShISEB05TQ29sb3IAlIQB + YwKEBGZmZmYAAAABhpKElpYGTlNGb250hpKEhIQGTlNG + b250HpSZLIQFWzQ0Y10GAAAAJAAAAP/+SABlAGwAdgBl + AHQAaQBjAGEALQBPAGIAbABpAHEAdQBlAIQBZgyfAJ8B + nwCfAIaShJaWBk5TS2VyboaShISECE5TTnVtYmVyAISE + B05TVmFsdWUAlIQBKoSEAWSnAIaGhg== Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 @@ -2024,7 +2022,7 @@ BuildCraft 6.1 Preview: More Robots!} 0 Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;} +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural @@ -2156,17 +2154,15 @@ BuildCraft 6.1 Preview: More Robots!} dWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBW ZXN0aWJ1bHVtIGVmZmljaXR1ciB1bHRyaWNlcyBjb21t b2RvhoQCaUkBgaYBkoSEhAxOU0RpY3Rpb25hcnkAlIQB - aQaShJaWBk5TS2VyboaShISECE5TTnVtYmVyAISEB05T - VmFsdWUAlIQBKoSEAWSdAIaShJaWDU5TU3Ryb2tlQ29s - b3KGkoSEhAdOU0NvbG9yAJSEAWMChARmZmZmAAAAAYaS - hJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsyOGNd - BgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQBZg6f - AJ8BnwCfAIaShJaWB05TQ29sb3KGkp+ShJaWEE5TUGFy - YWdyYXBoU3R5bGWGkoSEhBdOU011dGFibGVQYXJhZ3Jh - cGhTdHlsZQCEhBBOU1BhcmFncmFwaFN0eWxlAJSEBEND - QFMAAISEhA5OU011dGFibGVBcnJheQCEhAdOU0FycmF5 + aQWShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsy + OGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQB + Zg6EAWMAnQGdAJ0AhpKElpYGTlNLZXJuhpKEhIQITlNO + dW1iZXIAhIQHTlNWYWx1ZQCUhAEqhIQBZKEAhpKElpYH + TlNDb2xvcoaShISEB05TQ29sb3IAlJ0ChARmZmZmAAAA + AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh + cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5 AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYNTlNTdHJv - a2VXaWR0aIaShJucnZ0AhoaG + a2VDb2xvcoaShKOdA4QCZmYAAYaGhg== Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 @@ -2176,7 +2172,7 @@ BuildCraft 6.1 Preview: More Robots!} \pard\pardeftab720\sl280 \f0\fs28 \cf2 \expnd0\expndtw0\kerning0 -\outl0\strokewidth0 \strokec2 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tortor. Nulla eget molestie metus. Cras vulputate felis ut lectus iaculis, nec iaculis dui auctor. Sed nisl nisl, feugiat mollis elit vel, gravida euismod est. Vivamus porttitor tempus euismod. Proin at condimentum nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum efficitur ultrices commodo} +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tortor. Nulla eget molestie metus. Cras vulputate felis ut lectus iaculis, nec iaculis dui auctor. Sed nisl nisl, feugiat mollis elit vel, gravida euismod est. Vivamus porttitor tempus euismod. Proin at condimentum nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum efficitur ultrices commodo} VerticalPad 0 @@ -2263,7 +2259,7 @@ BuildCraft 6.1 Preview: More Robots!} 0 Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;} +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural @@ -2478,7 +2474,7 @@ BuildCraft 6.1 Preview: More Robots!} 10 Text {\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160 -\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;} +\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;} {\colortbl;\red255\green255\blue255;} \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural @@ -2811,7 +2807,7 @@ BuildCraft 6.1 Preview: More Robots!} MasterSheets ModificationDate - 2015-01-19 19:14:03 +0000 + 2015-01-28 21:33:51 +0000 Modifier Andrew Miner NotesVisible @@ -2891,8 +2887,6 @@ BuildCraft 6.1 Preview: More Robots!} Canvas 1 - Frame - {{558, -0}, {1998, 1417}} ListView OutlineWidth @@ -2905,8 +2899,6 @@ BuildCraft 6.1 Preview: More Robots!} SidebarWidth 168 - VisibleRegion - {{-320, 0}, {1801, 1275}} Zoom 1 ZoomValues diff --git a/src/scripts/constants.coffee b/src/scripts/constants.coffee index 30750c5a4..08cf9d139 100644 --- a/src/scripts/constants.coffee +++ b/src/scripts/constants.coffee @@ -49,12 +49,13 @@ ModelState.loading = 'loading' ModelState.loaded = 'loaded' ModelState.failed = 'failed' -exports.Url = Url = {} -Url.itemIcon = _.template "/data/<%= modSlug %>/<%= modVersion %>/images/<%= slug %>.png" -Url.item = _.template "/item/<%= slug %>" -Url.mod = _.template "/mod/<%= modSlug %>" -Url.modData = _.template "/data/<%= modSlug %>/mod.cg" -Url.modVersion = _.template "/data/<%= modSlug %>/<%= modVersion %>/mod-version.cg" +exports.Url = Url = {} +Url.itemIcon = _.template "/data/<%= modSlug %>/<%= modVersion %>/images/<%= slug %>.png" +Url.item = _.template "/item/<%= slug %>" +Url.mod = _.template "/mod/<%= modSlug %>" +Url.modData = _.template "/data/<%= modSlug %>/mod.cg" +Url.modVersion = _.template "/data/<%= modSlug %>/<%= modVersion %>/mod-version.cg" +Url.modLogoImage = _.template "/data/<%= modSlug %>/logo.png" exports.UrlParam = UrlParam = {} UrlParam.quantity = 'count' diff --git a/src/scripts/controllers/item_controller.coffee b/src/scripts/controllers/item_controller.coffee new file mode 100644 index 000000000..0a305f0f9 --- /dev/null +++ b/src/scripts/controllers/item_controller.coffee @@ -0,0 +1,36 @@ +### +Crafting Guide - item_controller.coffee + +Copyright (c) 2015 by Redwood Labs +All rights reserved. +### + +BaseController = require './base_controller' +{Url} = require '../constants' + +######################################################################################################################## + +module.exports = class ItemController extends BaseController + + constructor: (options={})-> + if not options.model? then throw new Error 'options.model is required' + if not options.modPack? then throw new Error 'options.modPack is required' + options.templateName = 'item' + super options + + @_modPack = options.modPack + + # BaseController Overrides ##################################################################### + + onDidRender: -> + @$icon = @$('img') + @$name = @$('.itemName') + @$nameLink = @$('a') + super + + refresh: -> + display = @_modPack.findItemDisplay @model.slug + + @$icon.attr 'src', Url.itemIcon display + @$name.html display.itemName + @$nameLink.attr 'href', Url.item display diff --git a/src/scripts/controllers/mod_controller.coffee b/src/scripts/controllers/mod_controller.coffee index 8a63359fe..23ce9be36 100644 --- a/src/scripts/controllers/mod_controller.coffee +++ b/src/scripts/controllers/mod_controller.coffee @@ -37,6 +37,7 @@ module.exports = class ModController extends BaseController @$nameLink = @$('.name a') @$nameText = @$('.name p') @$description = @$('.description p') + super refresh: -> @@ -59,7 +60,7 @@ module.exports = class ModController extends BaseController option.attr 'selected', 'selected' @$version.append option - # @$nameLink.attr 'href', Url.mod modSlug:@model.slug + @$nameLink.attr 'href', Url.mod modSlug:@model.slug @$nameText.html @model.name @$description.html @model.description diff --git a/src/scripts/controllers/mod_page_controller.coffee b/src/scripts/controllers/mod_page_controller.coffee index 6cd16d7c6..bcc13133b 100644 --- a/src/scripts/controllers/mod_page_controller.coffee +++ b/src/scripts/controllers/mod_page_controller.coffee @@ -5,10 +5,12 @@ Copyright (c) 2015 by Redwood Labs All rights reserved. ### -BaseController = require './base_controller' -{Duration} = require '../constants' -ModPack = require '../models/mod_pack' -RecipeController = require './recipe_controller' +BaseController = require './base_controller' +{Duration} = require '../constants' +Mod = require '../models/mod' +ModPack = require '../models/mod_pack' +ItemController = require './item_controller' +{Url} = require '../constants' ######################################################################################################################## @@ -20,52 +22,117 @@ module.exports = class ModPageController extends BaseController options.templateName = 'mod_page' super options - @_modPack = options.modPack - @_recipeControllers = [] - @_delayStep = options.delayStep + @_delayStep = options.delayStep + @_effectiveModVersion = null + @_itemControllers = [] + @_modPack = options.modPack + + Object.defineProperties this, + effectiveModVersion: {get:@_getEffectiveModVersion} + + # Event Methods ################################################################################ + + onVersionChanged: -> + version = @$versionSelector.val() + logger.debug "new version: #{version}" + modVersion = @model.getModVersion version + logger.debug "new mod version: #{modVersion}" + @_effectiveModVersion = modVersion + if modVersion? then modVersion.fetch() + @refresh() # BaseController Overrides ##################################################################### onDidRender: -> - @$title = @$('h1') - @$recipes = @$('.recipes') + @$name = @$('.name') + @$byline = @$('.byline p') + @$description = @$('.description p') + @$homePageLink = @$('.homePage') + @$items = @$('.items .panel') + @$titleImage = @$('.titleImage img') + @$versionSelector = @$('select.version') + @$wikiLink = @$('.wiki') + super refresh: -> - @$title.html if @model? then @model.name else '' - - controllerIndex = 0 - delay = 0 - if @model?.activeModVersion?.isLoaded - @$recipes.show duration:Duration.fast - @model.eachItem (item)=> - recipe = item.getPrimaryRecipe() - return if not recipe - - item.eachRecipe (recipe)=> - controller = @_recipeControllers[controllerIndex] - if not controller? - _.delay (=> @_createRecipeController recipe), delay - delay += @_delayStep - else - controller.model = recipe - controllerIndex += 1 - else - @$recipes.hide duration:Duration.fast - - while @_recipeControllers.length > controllerIndex - controller = @_recipeControllers.pop() - controller.$el.slideUp duration:Duration.fast, complete:-> @remove() + @$name.html if @model? then @model.name else '' + @$byline.html if @model? then "by #{@model.author}" else '' + @$titleImage.attr 'src', (if @model? then Url.modLogoImage(modSlug:@model.slug) else '') + @$description.html if @model? then @model.description else '' + @_refreshHomePageLink() + @_refreshItems() + @_refreshVersions() super + # Backbone.View Methods ######################################################################## + + events: + 'change select.version': 'onVersionChanged' + # Private Methods ############################################################################## - _createRecipeController: (recipe)-> - controller = new RecipeController model:recipe, modPack:@_modPack + _createItemController: (item)-> + controller = new ItemController model:item, modPack:@_modPack controller.$el.hide() controller.render() - @_recipeControllers.push controller - @$recipes.append controller.$el + @_itemControllers.push controller + @$items.append controller.$el controller.$el.slideDown duration:Duration.fast + + _getEffectiveModVersion: -> + return @_effectiveModVersion if @_effectiveModVersion? + return null unless @model? + + modVersion = @model.activeModVersion + modVersion ?= @model.getModVersion Mod.Version.Latest + return modVersion + + _refreshHomePageLink: -> + if @model.homePageUrl? + @$homePageLink.fadeIn duration:Duration.fast + @$homePageLink.attr 'href', @model.homePageUrl + else + @$homePageLink.fadeOut duration:Duration.fast + + _refreshItems: -> + controllerIndex = 0 + delay = 0 + + effectiveModVersion = @effectiveModVersion + if effectiveModVersion? + @$items.show duration:Duration.fast + effectiveModVersion.eachItem (item)=> + controller = @_itemControllers[controllerIndex] + if not controller? + _.delay (=> @_createItemController item), delay + delay += @_delayStop + else + controller.model = item + controllerIndex += 1 + else + @$items.hide duration:Duration.fast + + while @_itemControllers.length > controllerIndex + controller = @_itemControllers.pop() + controller.$el.slideUp duration:Duration.fast, complete:-> @remove() + + _refreshVersions: -> + @$versionSelector.empty() + return unless @model? + + effectiveModVersion = @effectiveModVersion + versionCount = 0 + @model.eachModVersion (modVersion)=> + option = $("") + if modVersion is effectiveModVersion + option.attr 'selected', 'selected' + @$versionSelector.append option + versionCount++ + + if versionCount <= 1 + @$versionSelector.attr 'disabled', 'disabled' + else + @$versionSelector.removeAttr 'disabled' diff --git a/src/scripts/models/mod.coffee b/src/scripts/models/mod.coffee index 57f4a8d01..4ba6f2a68 100644 --- a/src/scripts/models/mod.coffee +++ b/src/scripts/models/mod.coffee @@ -19,7 +19,7 @@ module.exports = class Mod extends BaseModel attributes.author ?= '' attributes.description ?= '' attributes.name ?= '' - attributes.primaryUrl ?= null + attributes.homePageUrl ?= null super attributes, options @_activeModVersion = null @@ -62,9 +62,18 @@ module.exports = class Mod extends BaseModel return unless @_activeModVersion? @_activeModVersion.eachName callback - findItem: (slug)-> - return unless @_activeModVersion? - @_activeModVersion.findItem slug + findItem: (slug, options={})-> + options.includeDisabled ?= false + + if not options.includeDisabled + return unless @_activeModVersion? + return @_activeModVersion.findItem slug + else + for modVersion in @_modVersions + item = modVersion.findItem slug + return item if item? + + return null findItemByName: (name)-> return unless @_activeModVersion? @@ -100,6 +109,14 @@ module.exports = class Mod extends BaseModel for modVersion in @_modVersions callback modVersion + getModVersion: (version)-> + return null if version is Mod.Version.None + return @_modVersions[@_modVersions.length-1] if version is Mod.Version.Latest + + for modVersion in @_modVersions + return modVersion if modVersion.version is version + return null + getActiveVersion: -> return @_activeVersion diff --git a/src/scripts/models/mod_pack.coffee b/src/scripts/models/mod_pack.coffee index d63613c66..e7f1d29a2 100644 --- a/src/scripts/models/mod_pack.coffee +++ b/src/scripts/models/mod_pack.coffee @@ -22,10 +22,12 @@ module.exports = class ModPack extends BaseModel # Public Methods ############################################################################### - findItem: (slug)-> + findItem: (slug, options={})-> + options.includeDisabled ?= false + for mod in @_mods - continue unless mod.enabled - item = mod.findItem slug + continue unless mod.enabled or options.includeDisabled + item = mod.findItem slug, options return item if item? return null @@ -42,7 +44,7 @@ module.exports = class ModPack extends BaseModel findItemDisplay: (slug)-> result = {} - item = @findItem slug + item = @findItem slug, includeDisabled:true if item? result.modSlug = item.modVersion.modSlug result.modVersion = item.modVersion.version diff --git a/src/scripts/models/parser_versions/mod_parser_v1.coffee b/src/scripts/models/parser_versions/mod_parser_v1.coffee index cfd4419d0..90e7716ed 100644 --- a/src/scripts/models/parser_versions/mod_parser_v1.coffee +++ b/src/scripts/models/parser_versions/mod_parser_v1.coffee @@ -42,11 +42,11 @@ module.exports = class ModParserV2 extends CommandParserVersionBase if name.length is 0 then throw new Error '"name" cannot be empty' @_rawData.name = name - _command_url: (url='')-> - if @_rawData.url? then throw new Error 'duplicate declaration of "url"' - if url.length is 0 then throw new Error 'url cannot be empty' + _command_homePageUrl: (homePageUrl='')-> + if @_rawData.homePageUrl? then throw new Error 'duplicate declaration of "homePageUrl"' + if homePageUrl.length is 0 then throw new Error 'homePageUrl cannot be empty' - @_rawData.url = url + @_rawData.homePageUrl = homePageUrl _command_version: (version='')-> if version.length is 0 then throw new Error 'version cannot be empty' @@ -58,13 +58,13 @@ module.exports = class ModParserV2 extends CommandParserVersionBase _buildMod: (rawData, model)-> if not rawData.name? then throw new Error 'the "name" declaration is required' - if not rawData.url? then throw new Error 'the "url" declaration is required' + if not rawData.homePageUrl? then throw new Error 'the "homePageUrl" declaration is required' if not rawData.versions? then throw new Error 'at least one "version" declaration is required' model.author = rawData.author if rawData.author? model.description = rawData.description if rawData.description? model.name = rawData.name - model.primaryUrl = rawData.url + model.homePageUrl = rawData.homePageUrl for version in rawData.versions model.addModVersion new ModVersion modSlug:model.slug, version:version diff --git a/src/templates/item.jade b/src/templates/item.jade new file mode 100644 index 000000000..f210ca3c3 --- /dev/null +++ b/src/templates/item.jade @@ -0,0 +1,13 @@ +//- +//- Crafting Guide - item.jade +//- +//- Copyright (c) 2015 by Redwood Labs +//- All rights reserved. +//- + +.view__item + a + table + tr + td.itemIcon: img + td.itemName(width="*") diff --git a/src/templates/mod_page.jade b/src/templates/mod_page.jade index b4587dd6e..848b93ad3 100644 --- a/src/templates/mod_page.jade +++ b/src/templates/mod_page.jade @@ -6,7 +6,16 @@ //- .view__mod_page - h1 + .sidebar + .titleImage: img + select.version + a.homePage: p Offical Home Page - .recipes - h2 Recipes + .mainBody + h1.name + .byline: p + .description: p + + .section.items + h2 Items + .panel