From f69a0be5c981b248e266c7b724ef04854eec59a4 Mon Sep 17 00:00:00 2001 From: dharengo Date: Sat, 24 Aug 2024 23:19:28 +0200 Subject: [PATCH] Separate Concerns, Add Action Icons --- .gitignore | 1 + card.css | 18 ++++++++- cards.py | 51 +++++++++++++++++++++++++ config.toml | 4 +- fonts/actions.eot | Bin 0 -> 2012 bytes fonts/actions.svg | 15 ++++++++ fonts/actions.ttf | Bin 0 -> 1848 bytes fonts/actions.woff | Bin 0 -> 1924 bytes index.html | 6 +-- main.py | 90 ++++----------------------------------------- utils.py | 12 ++++++ 11 files changed, 110 insertions(+), 87 deletions(-) create mode 100644 .gitignore create mode 100644 cards.py create mode 100644 fonts/actions.eot create mode 100644 fonts/actions.svg create mode 100644 fonts/actions.ttf create mode 100644 fonts/actions.woff create mode 100644 utils.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..95f0634 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/actions/ diff --git a/card.css b/card.css index b978c51..534e413 100644 --- a/card.css +++ b/card.css @@ -1,3 +1,15 @@ +@font-face { + font-family: 'actions'; + src: url('fonts/actions.eot?oot9zj'); + src: url('fonts/actions.eot?oot9zj#iefix') format('embedded-opentype'), + url('fonts/actions.ttf?oot9zj') format('truetype'), + url('fonts/actions.woff?oot9zj') format('woff'), + url('fonts/actions.svg?oot9zj#icomoon') format('svg'); + font-weight: normal; + font-style: normal; + font-display: block; +} + .card { --blackish: #0f0e0e; --whiteish: #f0ede5; @@ -23,12 +35,16 @@ justify-content: space-between; } +.actioncost { + font-family: 'actions' +} + .card.skill { --border-color: goldenrod; --support-color: var(--reddish); } -.cardname { +.fullname { text-align: left; } diff --git a/cards.py b/cards.py new file mode 100644 index 0000000..63bd6e0 --- /dev/null +++ b/cards.py @@ -0,0 +1,51 @@ +import ltk +from utils import * + +ACT0 = ' ' +ACT1 = ' ' +ACT2 = ' ' +ACT3 = ' ' +ACTR = ' ' + +class Card(ltk.Widget): + classes = ['card'] + + def __init__(self, cls=''): + super().__init__( + element('h1').append( + span('fullname').append( + span('cardname').text('Card Name'), + span('actioncost').text(ACT1) + ), + span('actiontype').text('Feat 1') + ), + 'Describe The Action Here' + ) + self.addClass(cls) + + def _getsetvalues(self, selector, value=None): + el = self.find(selector) + if value is None: + return el.text() + else: + el.text(value) + return self + + def name(self, value=None): + return self._getsetvalues('.cardname', value) + + def atype(self, value=None): + return self._getsetvalues('.actiontype', value) + + def actioncost(self, value=None): + return self._getsetvalues('.actioncost', value) + + def reset_class(self): + self.element.removeClass() + self.addClass(*self.classes) + return self + + +class Trait(ltk.Widget): + classes = ['trait'] + tag = 'span' \ No newline at end of file diff --git a/config.toml b/config.toml index d050d1c..3cebd6e 100644 --- a/config.toml +++ b/config.toml @@ -2,4 +2,6 @@ packages = ["pyscript-ltk"] [files] "https://raw.githubusercontent.com/pyscript/ltk/main/ltk/ltk.js" = "ltk/ltk.js" "https://raw.githubusercontent.com/pyscript/ltk/main/ltk/ltk.css" = "ltk/ltk.css" -"card.css" = "" \ No newline at end of file +"card.css" = "" +"cards.py" = "" +"utils.py" = "" \ No newline at end of file diff --git a/fonts/actions.eot b/fonts/actions.eot new file mode 100644 index 0000000000000000000000000000000000000000..f1761a401ed28a1db79dba36cae61aa832a6b2f6 GIT binary patch literal 2012 zcma)7TWl0n82-=9?96T}+e*t0w=Ofi?7HplwqUa}YlWQxAy7a}FGQr#F72|5*-O)w zxFkjz5;aP+yf!iMK@wlEQ63PYCXG=;qAy+^e1I2>A|Sy85Gi!m@5~N?C5`dlJ#)VQ zdd~l!Kj&Ofh)fJd0#y^E6O2oCJzp*7wiUV=x^6tKBl6NA8l?i|Fbb51ftUIzMQJ)r zSxV9bBtF^;$plTpmfL8wo}$!c+dl3MAz!eTrb(o(Jp-K^>Xs{OAo&7gWHgr?SNHyS z97b!w52llo^Kif#Wko(go;a83>+G-Rp>4jo@1| zxv8QKEqIgj*}`a&{Vx0gei(dXE?FE$LR-P}_*y=hOU?Fq?twpnHQpRAOip2+AY~=j zlPFzhC&)!4%nIK_GEWqBDgx9!Bg2YN8m5ZAT6o!A;EYGu5Z! z;{wKCRe}#!4#v1BW;i>Lhi7Km2cEik_0M?Ll6$G|h3-G)yx-ZpO`@um1H+E+!<|2o7vtBphxV zjD&_eKfAZ;)6=KV9eaa$jux?RyW*A|W1TMiz@3dsjJRq3bm<0S43|FWh}a!Tg*+nbtvD@1XP-ydm@Mv@ygbjP~8 z$2vR1b*sI?tQiS!QGMP9Nos0s>Djnz=lgwqJ^IR(%{4Wy+1J@->(xYkLu0qDcXULe zFN8w6ruv!`MV6aXRj*ZRD|zwUjO(GBFV{VLn`&{0pi4JCeEZ?-oGR`!-v2hi$G#WH zJ;Zr@A*muyB~nGk-Nd^X3q&$*GVUc^bL?x-FMjHyBK^X)vD0=W4{hfC1bVQdV{A`e znse4;gxABt0`Q1~Mc|l&CE&vjcHt&p;b0l^oer*{)$|U(ha?XqUT7*<08Tqt1m5Ui z3HUV!yKoa|4wfPBcW@1L)5$}lg%==I3{Td^B80Y=m@?$ S>}Pei^Q=Zub=+6~MgIagiD&Kr literal 0 HcmV?d00001 diff --git a/fonts/actions.svg b/fonts/actions.svg new file mode 100644 index 0000000..5f06caf --- /dev/null +++ b/fonts/actions.svg @@ -0,0 +1,15 @@ + + + +Generated by IcoMoon + + + + + + + + + + + \ No newline at end of file diff --git a/fonts/actions.ttf b/fonts/actions.ttf new file mode 100644 index 0000000000000000000000000000000000000000..7370d103e4143c83dda7d646efb6f47b6c69d27d GIT binary patch literal 1848 zcma)6ZA=?w9RELe*Sog3f`j$g2Ia1W)#-5CfpZCOaYB?EbSa_fYc#96w_uhcvc~;pVnAn?!txq zgBa2|0D3YW)h4CE%ku!t&nOSYk?|OBZ2+*;Al(>GW^*D+kydm%k)F`VZ`AKdk0D)? z)N&bcKo8Qoe<7tMqYHhuEu^ntjMp>inJngsi>uY;Kr{Er6|ewM3)HvBnJ=H@9z02G zy56ouFzvld1z2V1mC_2RG;S2?z1UuY0rY74u0vV*qz$b)U_h_I4pyM>M?hF*N`+F% zuo70mz@+pG&!F9IzXS+sRq8y93>cXLki&+`|K(vOr4@PuZE5sW4Nz^Ph}Rb+KCh4C zIiBWt8ORnX7K$Vh2uSAwl9Ye+Xy%)j#uMagvRR}GMamHf1fEC1#kI{Gxf6}Yv5kh` zP4s&ZoB&NWA`_N#5RTb7Rhko9S-_OgP(ta9`p-q+&ktb*4B-8$?SJX4moiu z_+xSYW;uKl!RxT2;l&$Q9*oCbz9=Y$Mkx^Q>QY}A9bFn4eD z_<%ZG<*Ev{G@q)kcOIhYqb`@!9F(+k?~g-FCZW;Z<@%eK}H9UDGLwEiF>;Ilo^NcxOGwv1~ohixqrDxh}mn`M&?J z7b~BB2o*R)T({TWe{<(Fr;6{He*cYyHpaUE)?uB-FLL%QTiH{Yr<>6mxHkbeknM$XG_Fx-~Koq871{F|%e%c`jZTnj7%N&TtW)s>p2908( zvycD{ruWtCO{cO#ESic=YuV_eaDGlWJ&`_xxdoxuh@HjgF?5qMGSVQ6=OpsZ!yJB3 S8wH#x7l1k9Fn5pSzxZDjj#kS6 literal 0 HcmV?d00001 diff --git a/fonts/actions.woff b/fonts/actions.woff new file mode 100644 index 0000000000000000000000000000000000000000..76dc96ba3020e76accd69a80d31fea6c4d59e77a GIT binary patch literal 1924 zcma)7U2GIp6h3!mc4oK8wo=&PuiKga?6U3dw#8;=)(SfX(m)YOXiG#I?b0s0nEh$m z5=vsEA*fNJ<+X{450dBuHp&A+)TA+JNc6>@2Os1GqXETxu|=; zKbcLBbMAA@xh|KQZ2ss$a2JWh5iSR(ZfA3uG_Yp_))QP}eJ7`LAi)h`-o)hz)mxt{ zOiY41vB>GuMETM%*ZUCMN-pd-;rBv%5`I10uV#y%wiVNb47i`+`*kiey}tXSrSS>G z3*WAu2qa23*(vf62{XdCm`^(+yFpJeALdINt64hZ*dn?niF1`XvP1|N23c&H4Qww! z>#@f1dh}dtJxOF@tinwR_%PD0NtK041snmBjalUvRdRRO3+NazXjOA7@J#S55E)6^ z_5bB?lFFQT4|_#eswJxR2`m(jvv4S^sER5oszK~ND=(B;J{pbfi^gJ84<3wv^YT!h zea+^}!a`Z_N2AdfuyE|w{3N@Y$>ng3w%vKyT|oh&W*;+{toWHCE3Wl6W~huYU-|A` zL9i@q%Cb_yU@)a=`oNjlGoLXpQ~q8kr5YvI+h72Bllb|)133Rmicpd^;eHYZ!}rk}Vs;<_)n%RdJc~+5 z5rPSOl(4}($KNR5othNLzOC+5us*n1(=>6~G|f@dG)yx&Y9`GeumAaUAt9vM5E8a8 z7L7Ld$0CDmpWa{d$=S0Pj=#oy$0l)Z`^GKXM!hb4$2S{}jihP*aODN)*=xgRz!)EWL4K zXQH!nq^&Jlz1AdRFAF5>sZ#kd*y>!s>v?$9zM5$(#Y_uqUtx>@CK9_rt2 z*kiv7Nkoidsj!o%T|O z#%LT0Sb&`lic|YzcRiNelgS>=r^nzlgM%KXJf&&uv6?-l;)IsX6fsri&Ky7djj6GFjKTol%@%cBj66uQS>|P0CqV6;EYJ-(v -

Loading The App...

+

Loading The App...

\ No newline at end of file diff --git a/main.py b/main.py index 05fdad5..ab6d71a 100644 --- a/main.py +++ b/main.py @@ -1,92 +1,18 @@ import ltk +import cards +from utils import * CSS = 'card.css' -def element(tag, cls=''): - return ltk.create(f'<{tag}>').addClass(cls) - - -def div(cls=''): - return element('div', cls) - - -def span(cls=''): - return element('span', cls) - - -class Card(ltk.Widget): - classes = ['card'] - - def __init__(self, cls=''): - super().__init__( - element('h1').append( - span('cardname').text('Card Name'), - span('actiontype').text('Feat 1') - ), - 'Describe The Action Here' - ) - self.addClass(cls) - - def _getsetvalues(self, selector, value=None): - el = self.find(selector) - if value is None: - return el.text() - else: - el.text(value) - return self - - def name(self, value=None): - return self._getsetvalues('.cardname', value) - - def atype(self, value=None): - return self._getsetvalues('.actiontype', value) - - def reset_class(self): - self.element.removeClass() - self.addClass(*self.classes) - return self - - -class Trait(ltk.Widget): - classes = ['trait'] - tag = 'span' - - -ltk.find('#loading').remove() -ltk.find('.ltk-built-with').remove() +ltk.find('body').empty().append(card := cards.Card('skill').actioncost(cards.ACTR)) ltk.inject_css(CSS) -(card := Card('skill')).appendTo(ltk.find('body')) - -import js # type: ignore - - -def test_func(): - print('Test Success!') - - -js.testFunc = test_func - -ltk.inject_script('testFunc()') - - -# from pyscript import document -# import js -# from js import Object as o -# -# options = o( -# filename='cards.pdf', -# image=o(type='png'), -# jsPDF=o(orientation='landscape') -# ) -# js.html2pdf(document.body, options) - def create_pdf(evt): from js import Object as o, document, openPDF # type: ignore - card.name('Awesome Attack').atype('Feat 20').reset_class() + card.name('Awesome Attack').atype('Feat 20').actioncost(cards.ACT3).reset_class() options = o( filename='cards.pdf', @@ -98,11 +24,11 @@ def create_pdf(evt): with open(CSS) as css: element('style').text(css.read()).appendTo(doc.head) div('cardbox').append(*[ - Card('skill') if i == 3 else - Card().name('Awesome Slide').atype('Feat 18') if i == 1 else - Card() for i in range(5) + cards.Card('skill').actioncost(cards.ACT2) if i == 3 else + cards.Card().name('Awesome Slide').atype('Feat 18').actioncost(cards.ACT0) if i == 1 else + cards.Card() for i in range(5) ]).appendTo(doc.body) openPDF(doc.documentElement, options) -ltk.Button('Generate A PDF?', create_pdf).appendTo(ltk.window.document.body) +ltk.Button('Generate A PDF?', create_pdf).element.insertAfter(card.element) diff --git a/utils.py b/utils.py new file mode 100644 index 0000000..f3a044c --- /dev/null +++ b/utils.py @@ -0,0 +1,12 @@ +import ltk + +def element(tag, cls=''): + return ltk.create(f'<{tag}>').addClass(cls) + + +def div(cls=''): + return element('div', cls) + + +def span(cls=''): + return element('span', cls) \ No newline at end of file