From 6a0367eb7a3527bbbd8bb0503cae9786d54505b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?tr=C3=A9meur?= Date: Mon, 4 Nov 2024 22:05:31 +0000 Subject: [PATCH] Show portfolios --- build/assets/fonts/04b24.ttf | Bin 0 -> 19556 bytes build/assets/portfolio/blue.png | Bin 0 -> 7376 bytes build/assets/portfolio/brown.png | Bin 0 -> 7205 bytes build/assets/portfolio/gray.png | Bin 0 -> 7225 bytes build/assets/portfolio/green.png | Bin 0 -> 7732 bytes build/assets/portfolio/orange.png | Bin 0 -> 7685 bytes build/assets/portfolio/palette.png | Bin 0 -> 840 bytes build/assets/portfolio/purple.png | Bin 0 -> 7338 bytes build/assets/portfolio/red.png | Bin 0 -> 805 bytes build/assets/portfolio/yellow.png | Bin 0 -> 7786 bytes build/style.css | 386 +++++++++++++++++++++++++++++ generate.py | 3 +- indexgen.py | 9 +- portfoliosgen.py | 37 +++ tcgcore.py | 187 ++++++++++++++ variables-template.py | 1 + 16 files changed, 621 insertions(+), 2 deletions(-) create mode 100644 build/assets/fonts/04b24.ttf create mode 100644 build/assets/portfolio/blue.png create mode 100644 build/assets/portfolio/brown.png create mode 100644 build/assets/portfolio/gray.png create mode 100644 build/assets/portfolio/green.png create mode 100644 build/assets/portfolio/orange.png create mode 100644 build/assets/portfolio/palette.png create mode 100644 build/assets/portfolio/purple.png create mode 100644 build/assets/portfolio/red.png create mode 100644 build/assets/portfolio/yellow.png create mode 100644 portfoliosgen.py diff --git a/build/assets/fonts/04b24.ttf b/build/assets/fonts/04b24.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bc02f7e70a5978ba3b0913fcaed588e5b42a63ff GIT binary patch literal 19556 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 Tm2ewCYz`xw2{vEXHt>G{hLS&D literal 0 HcmV?d00001 diff --git a/build/assets/portfolio/brown.png b/build/assets/portfolio/brown.png new file mode 100644 index 0000000000000000000000000000000000000000..df9b474ea98b1b42d11b37e13b0eadfdb22f7886 GIT binary patch literal 7205 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 literal 0 HcmV?d00001 diff --git a/build/assets/portfolio/green.png b/build/assets/portfolio/green.png new file mode 100644 index 0000000000000000000000000000000000000000..310fbe5faf47d8025d92282f3d73d2a2eba3fcd6 GIT binary patch literal 7732 zcmeHLc{J4h_eZH{K?oI%u`gp*+c5T>LAESKV-^O(U<|TlD@&G;EmD?JLb7F-Qc^v# zWly2BFo+Pz??XL3J?Hm5=XaiSe&7F|IkS8|?|bj--ut@u{XU;NvF4`w``Hh(Gchsk zH#E?(0DirIkMW*ez<22CkOr`hK4WD|v%vX-s6JjKvIh}F3#1Z3!~imhi78;XG|Syb zv~GXY<|2<8ixa40a$exgk=51jt#V|&!wHz-Q+~xI?YG1=MUxH8JvXPvA8*9x&Ga|O z+8fKXFQz(pRxDmy8!&5`yFa}i8rB)eh)$Z6OPbarNP1(-)!hTHgdO3S<8GA8HT&GF zh z%^O!LKh_12_%M7YPhG(_Q5Hfcl=ERDJ^eU)<^rvK)@93Xjnc<4Y|(FT9BU-G3bPEb zDc^qafNkB;B{MT~l79Rv=j4SC2VNFdv}ZZ4F0f0uxsi+5(-+&WSO(XMjS?^CG0JT0 z0$GI;!k@4>eO-PUva)xY|CMkiG+eE5KA}4&LEv0Y(;|ON)S{AgS>(85Uf8~Yoe|EC zH9TY`dgFEegP}0ZdJPF7p0e_z`|7W-QMruwK1vo)K5K7qP`1IjkCRGZy_)zz)ch!j zQ)i;BBhym)v}FP0`3cmheu2(8!O3I+0|RNp``3#O*edT`D5yKAeJX{(C6#YcWC*=E z1uo)&=*68%CEdu^wJuSZmG3`UlzyxFrA<&gL^Hd`sMp59y{VGq^6rmX6^=cGv$vkIcxFRlQEKPA{t;{;1-iMV^KK1GkkU89 z%r5!&3E74PhU}=Gzj_F2v3#|;;8F3%5uW?+b@m~d;^lU8o`^hqHt}3mx$v}WhXAQr z;Hlw51Nbu=*h3B29Ov68#hH`A!fqWKkkOoX9QWE=;&PDhn`1}I?}bDU-$kIH&gHVG z8*4htxub2SUsu%(IA1#SB@~O6=SX>KMU$U+prdsco^;l0yW}E_J_;i5VUFmTbj}sq zRiE~IZZ7#f2lQl$QRQgke3$#0X)$iV`<>8CXhywud{JrLrKG(x`YID&o=LW~Dv#xj zE#-VXoA|T`W|}PQuIsbfhgh?&FfE#9VtM*k&JT%Vs02=

Wb}X~5PslQQ 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 literal 0 HcmV?d00001 diff --git a/build/assets/portfolio/purple.png b/build/assets/portfolio/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..d025fac1cd6810cb1e5c2ce8072339bf6eb14190 GIT binary patch literal 7338 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ġ*2dBtHzle$AjPi&@K1db(yh@ij8lR6$Z$&%wM3lj- zo6O{_AEErWMTcv$3lm#Tsqyc@=bTTD(P{SnRG~8V<@DgKTGK5eHO%LY4x_whRK9dQ zwTzEtM7(mjH(Zsc@<7#ouf2lf>S}wQm4s@qK*4+T`WfDsHPMoH?}W8qHYrkFy50?9 zdTFftF1#1hpd~Y5FF$81PJE~I`D&llJ?FQRPfNm@St0s1&>kk%fR`RYSsyUnT_3wX zmf3Z#tuaMjr{w@#izZ-2=0*l9FAMBRG{Ko7gCjcQ0T~Yp6|Bsdn3PpKs5pWHz<}TZ zJF*i-c=|<|FoaCR2%9TlVOXjLU{BWZqyeWr4NM504g?fYSmijovIiO@pa2XU#Dn7K zL`QpIgg1H7;QNMIRv5AgVK`ufEwDxq4QCnvLC7FvV9*mDWH&kCkz)*rEL^lVP&_dr1RU%Y>y|C;+I7(`*QXiaB=>qdCG zni%1Y@zF$Q0-1>3d_}?$NRk{34#mO28$toD0L8-r1XNy$NB|U-h>8kIsNbk`o#+gl z69L$u0?B2_AP+!55D*9e4~3Dy6-6LONGP6&2b%~IiUfxdiAX@LEk=$w1_^Wk_W;?6=A!V$8e^ZI6FIHgg1hM zYBpWr4Y>Sh{b)LpH#ZXmvbinLIKq!9&~a`6aWhVk>qi&C9_M5Sfak~0 zg#F7-{twB3A}Poz0ssKT14u9#00a?=N8se3Fr++y!ovvw2`2w1JKdSYaL3UAH9Js8 zP%AJ&H?@LD{#+`lKk@GNz{Wa&l0o5cFv)&OCJz^u{W)3LjT7Uq*(%HaFFlku0lytF zpx+N0cyxg$q3o}t@TXoIht7ZT_j4Woiz9&4{|@qx^!-<^f93i|3j8DRzuEP#T>nUc ze+2$FyZ+zgV*k6C0-V4vAa}4-;!V|21k0=)R2@q?6Vt9&8`l%$^TUu_z*Xer6q zrb6I6HIV-R^VL_jXLhP#wNL82dAV#}N^D-JyJ6p4?DV30TBO;lqslGeV3k+LiK0u5 z4b=hJ{f@3{(FtA34cD_7QHddjpF76p6u#FF&-Y8)cnv0grJafITK>9B%a7x?BRFPd z^9B26A8&D-5zGhs!3b+>oNA!UVVA;NyiWtHuJ5be0zyEgBY-%+_^ zUYqyB!wn$F`I~nyh}hAcn6aM_VdH3rwfSnlelqsuk7-QEku fqAp}$4<;EpUANmp^f^ldwPw;iVW63zZtL?u=?_PB literal 0 HcmV?d00001 diff --git a/build/assets/portfolio/red.png b/build/assets/portfolio/red.png new file mode 100644 index 0000000000000000000000000000000000000000..1d2a356752cb586e50cb9da4a4cf2aeb271f4634 GIT binary patch literal 805 zcmeAS@N?(olHy`uVBq!ia0vp^`9SQ=!2~2f&hisyU|?*?baoE#baqxKD9TUE%t>Wn z(3n^|(bnUzgUr!*`z4D)*^N6aQZnYgS)|k#bW|xqBeyk7)<^GelNzsQSNGxvQ3W58 zH@ao-l5?0t&Kh0n+%eIXb+~T$w!csE*C?>$WvDd%HjCyf3crV_ceGbUYLZippH1Qg)=v4Idb|G|+xcX}{B$liGh2Thf$pVx({|68$~(1Umc^nKQcr&u z>uJx~Zn65RRrdYK`we0)gc-#ww`^mXHo=8UDdkF_qo`QYmaHW+JTBMWIc)#xNAQzL zCqo&Pk27TjC|cHiu>Wy)ZRDI;C6f;oE_i-)oBbk(4Dk%poZr81Y>QTRcp$mslGVQ` z;TeBb_FlZG|aA+dt$bfziTQ;1OBOz@VoL!i*J5 z?aP3I>?NMQuIw+kS@^_c&Xfht1`0`*xJHyX=jZ08=9Mrw7o{eaq^2m8XO?6rxO@5r zgg5emBA4IO#WAGf*4sOZc}$KHZ4db-O<16HO~K*-oA;*j70!jsEa{G4*feCyZ?JfO zW8mOna=jE{bfPWs2#bK|dF}lvXD3JgZojcj{(I}PlYP_QhZ^yTpMFy@qgM5C#pbhp z_Ln`4_{x62`4Js@@`nA~P08lJe2)F9IMGX%E*Por%zabuX^t;*Lm;bj)*Uw2fn17E8n8+CzJYD@<);T3K0RUtZXd?gs literal 0 HcmV?d00001 diff --git a/build/assets/portfolio/yellow.png b/build/assets/portfolio/yellow.png new file mode 100644 index 0000000000000000000000000000000000000000..b4204b7175afa89ff13dbcb0ededbef709777c34 GIT binary patch literal 7786 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 19: content.write("" + str(int(sketch / 20)) + " completed\n") content.write("\n\n") + if len(variables.portfolios) > 0: + content.write("\n

\n\n") decksofinterest = [] for card in tcgcore.ownedcards(): if card[0:4] != "sig_": @@ -238,7 +245,7 @@ def indexgen(): mastereddecks = sorted(mastereddecks,key=lambda d: d["date"],reverse=True) if len(mastereddecks) > 0: content.write("

mastered decks

\n

") - masteredcount = 1 + masteredcount = 0 for deck in mastereddecks: if masteredcount < variables.maxmastered: content.write("") diff --git a/portfoliosgen.py b/portfoliosgen.py new file mode 100644 index 0000000..67e6435 --- /dev/null +++ b/portfoliosgen.py @@ -0,0 +1,37 @@ +import datetime,os +import log,skel,tcgcore,variables + +def portfoliosgen(colour=False): + if not os.path.isdir("build/portfolios"): + os.mkdir("build/portfolios") + if colour: + if not os.path.isdir("build/portfolios/" + colour): + os.mkdir("build/portfolios/" + colour) + thefile = "build/portfolios/" + colour + "/index.html" + else: + thefile = "build/portfolios/index.html" + if os.path.exists(thefile): + os.remove(thefile) + skel.headerwrite(thefile,"portfolios") + content = open(thefile,"a") + content.write("

portfolios

\n") + if len(variables.portfolios) > 0: + if len(tcgcore.getpalettes()) > 0: + content.write("
\n") + portnumber = 1 + for portfolio in tcgcore.getpalettes(): + content.write(tcgcore.portfoliogen(portfolio,"palette",portnumber)) + portnumber += 1 + content.write("
\n") + if len(tcgcore.getmonochrome()) > 0: + content.write("
\n") + portnumber = 1 + for portfolio in tcgcore.getmonochrome(): + content.write(tcgcore.portfoliogen(portfolio,"monochrome",portnumber)) + portnumber += 1 + content.write("
\n") + content.close() + skel.footerwrite(thefile) + +if __name__ == "__main__": + portfoliosgen() diff --git a/tcgcore.py b/tcgcore.py index 9df36a0..99198e2 100644 --- a/tcgcore.py +++ b/tcgcore.py @@ -174,3 +174,190 @@ def filterwrite(page,colour=False,sigs=False): filterstring += " " filterstring += "

\n" return filterstring + +def getpalettes(): + palette = [] + if len(variables.portfolios) > 0: + for portfolio in variables.portfolios: + if portfolio["type"] == "palette": + thepalette = {} + for deck in portfolio["decks"]: + thepalette[cardtype(deck + "01")] = deck + palette.append(thepalette) + return palette + +def getmonochrome(): + monochrome = [] + if len(variables.portfolios) > 0: + for portfolio in variables.portfolios: + if portfolio["type"] == "monochrome": + themonochrome = {} + colourdecks = [] + for deck in portfolio["decks"]: + colourdecks.append(deck) + colourdecks = sorted(colourdecks) + themonochrome["colour"] = cardtype(colourdecks[0] + "01") + themonochrome["decks"] = colourdecks + monochrome.append(themonochrome) + return monochrome + +def portfoliogen(portfolio,thetype,portnumber): + if thetype == "palette": + portstring = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
" + variables.name.lower() + "
" + try: + if deckmastered(portfolio["red"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["red"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "" + try: + if deckmastered(portfolio["blue"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["blue"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "
" + try: + if deckmastered(portfolio["orange"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["orange"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "" + try: + if deckmastered(portfolio["purple"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["purple"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "
" + try: + if deckmastered(portfolio["yellow"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["yellow"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "" + try: + if deckmastered(portfolio["brown"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["brown"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "
" + try: + if deckmastered(portfolio["green"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["green"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "" + try: + if deckmastered(portfolio["gray"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["gray"] + except: + if deckmastered(portfolio["special"]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["special"] + portstring += "
palette portfolio " + if portnumber < 10: + portstring += "0" + str(portnumber) + else: + portstring += str(portnumber) + portstring += "
\n" + elif thetype == "monochrome": + portstring = "\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n
" + variables.name.lower() + "
" + if deckmastered(portfolio["decks"][0]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][0] + "" + if deckmastered(portfolio["decks"][4]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][4] + "
" + if deckmastered(portfolio["decks"][1]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][1] + "" + if deckmastered(portfolio["decks"][5]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][5] + "
" + if deckmastered(portfolio["decks"][2]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][2] + "" + if deckmastered(portfolio["decks"][6]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][6] + "
" + if deckmastered(portfolio["decks"][3]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][3] + "" + if deckmastered(portfolio["decks"][7]): + portstring += "■" + else: + portstring += "□" + portstring += " " + portfolio["decks"][7] + "
monochrome portfolio " + if portnumber < 10: + portstring += "0" + str(portnumber) + else: + portstring += str(portnumber) + portstring += "
\n" + return portstring diff --git a/variables-template.py b/variables-template.py index d442cee..1a71490 100644 --- a/variables-template.py +++ b/variables-template.py @@ -11,3 +11,4 @@ collectthreshold = 2 keepsig = False tradestatement = "" maxmastered = 20 +portfolios = [{"type":"palette","decks":["one","two","three","four","five","six","seven","eight"]}]