From 227188b01217ccdcbd7e4ea59b9caaf9078853f6 Mon Sep 17 00:00:00 2001 From: Matthieu Cailleaux Date: Tue, 28 Dec 2021 21:12:51 +0100 Subject: [PATCH] feat: add actor contextual menu to export --- CHANGELOG.md | 4 + README.md | 12 +- lang/en.json | 4 +- lang/fr.json | 4 +- local-deploy.sh | 3 + media/actor-sheet-print-actor-button.png | Bin 0 -> 98512 bytes module.json | 2 +- package-lock.json | 181 ++-- package.json | 11 +- package.sh | 9 +- src/constants.ts | 2 + src/main.ts | 1198 +++++++++++----------- 12 files changed, 691 insertions(+), 739 deletions(-) create mode 100644 local-deploy.sh create mode 100755 media/actor-sheet-print-actor-button.png diff --git a/CHANGELOG.md b/CHANGELOG.md index ec21bff..e3e5a32 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## In development +## 1.1.0 + +- Add contextual menu to actor to PDF Export Characters sheet + ## 1.0.0 ### New features diff --git a/README.md b/README.md index 0464ab2..5578340 100644 --- a/README.md +++ b/README.md @@ -28,12 +28,8 @@ A print buton is added on top of sheet to export as pdf ![Print button](media/actor-sheet-print-button.png) +A Contextual menu is added on Actor menu + +![Actor button](media/actor-sheet-print-actor-button.png) + ## Comming soon - -## Module link - -https://raw.githubusercontent.com/mcailleaux/WFRP4-FoundryVTT-wfrp4e-actor-sheet-print/dist/module.json - -## Module Beta link - -https://raw.githubusercontent.com/mcailleaux/WFRP4-FoundryVTT-wfrp4e-actor-sheet-print/dist-beta/module-beta.json diff --git a/lang/en.json b/lang/en.json index 0967ef4..2b4e6f2 100644 --- a/lang/en.json +++ b/lang/en.json @@ -1 +1,3 @@ -{} +{ + "WFRP4SHEETPRINT.export.pdf": "Export to PDF" +} diff --git a/lang/fr.json b/lang/fr.json index 0967ef4..e0df64e 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -1 +1,3 @@ -{} +{ + "WFRP4SHEETPRINT.export.pdf": "Exporter en PDF" +} diff --git a/local-deploy.sh b/local-deploy.sh new file mode 100644 index 0000000..086ca8b --- /dev/null +++ b/local-deploy.sh @@ -0,0 +1,3 @@ +cp -r ./dist/* $LOCAL_FOUNDRY + + diff --git a/media/actor-sheet-print-actor-button.png b/media/actor-sheet-print-actor-button.png new file mode 100755 index 0000000000000000000000000000000000000000..55d857f0bd35debedb4a29866b69590c19ba2bf1 GIT binary patch literal 98512 zcmX_ncQjmI*!3_$^dy4lM1tsDbRvRiA$l7k6TR0_20tz8=-rU$z4u{69Yn7&Y7C+? zdjGudde`^IU3Z=P=Q;Q6y`TN;C*qTa5-AZa5dZ)nRZ)Jg4FKRk9-fWI_zz!Fgzm~7 zUN~;rO78%bBlKGji$_-S>hb_U4UG840`Fl>=&Wq$1^|$C|IdTd?^OI10Jtwuc`vWy zZMJ*6nZux;+(eEZ6gLpJYS31#&?`$e5+AB{b^hc$A|9mDD8Lr%@L$ZY9*ghz_#|`h z6W#dvdss;Mg-C?XZ+-8APs{Bp+Dp$$WOy2~s+~rn4vI=WV`t48%0@~i$+8=?X>E&t zgwgsyZO=}QT(7o@(3hB_ysz8&0)=^W)F|{p>qio7yYFeOT(MJ5$3&A8Xlt^q=|t~z zZ?Zqu|LP>gOxkyTeBt^`z-6gSUsE-&=(4PByM9tbC>wfZvjHztf-$CRq%vmk?VE*7 zF7RBQPO(Nhe|L6yh3Fr5miA3U+Y~ao8o}VaBg5)L@4dM)`$+Fi6b)`fq!UvrXn7Yj zHnZL`ijJ^C`5bcYfcVNz4v8}Jl|TYgL9Y-xsI>1{E%y9id3hdoY>j-fpAX(s&$uN( z1qK1tQ^HymTQQ4GAX%EY3AP+)hUn_sv$4j$<-z<~PnMjYF(+x*SN@gaFrW7_@$mJ6 z)wfjOM&W-s)-da`SJLO6qybKDsclc2K9!~xWnz`Lax{!m%tDTC{OQNZ>HYoYnkQH{ zU1E@_fBMakQ2&CQGu`{UTYE-+cnMOaD$0#=^=eDX`P|hk4qs`(HC`_y;w{F~(qPDb z&2*^Og!pv7;<&WwEHBcs=h$uG^9zqWZap(n1@9at86=03W_Fn8Ntn-Ox z(}?DJnk{G3o+dYHHB|ETG%?-&6w9Fed{X)`4ls?bz2e{>7xv7DViX28PO`~V&N);b zwaNS$bEtZ0oN2UV#70VYmo>>wmE*iU(h%CqcWU^VoJ(%Id?IA zr&#Sb(HxJ5fjOCRoFg%{k03nmGEd5bDCc$h@aq^I_;+44{u&if4@mEH zga%c1puoPLg>qbz=Zrwr-g{rVdYT==k!VN`xk^^}Z*{cZFNfn-$E=KwKzEBC*$Eoq zPuG0O>DYDWe~BxLMdWVE{ebmaR{$rHEMP%JOb&*N{VhMJ=#M)i$|O?Gu){fgpJ5ly zyq@ESSSD7~%MTS$-&#%}z zk4mA1Iny?M5vKCq0Ijm2m+s^CEO#Hd}QqYV$#9`zY2Mz@>P2jmZl zSDV{U&P4CvZm84~9|yS^1DsV?Jhxgx$06|x+zb=bYs^%xnVSA!RNODYuhmP7@lBC6 z4(8-G_g5F+{+7w-*_<3G!2@BC?J*eS3B>%;)gdZ-rUX!s5_(*nB0fqIfEDU9ORI^-q#mF$@cAtjQ z?n-nD_nZ21{}OIc=uG5^yd59z&!#~0cwd-78Z?8^`822m(+dV7Fr(CMPtaBQISM_|_Q^zXn{fq6Z zMu?EszU_`~khZ@EoM@dP`1VvG#IXIdAF<^FK1`1oe92nxQm3>mMVvLRpqdMp%IekM z3O2f}I!-vZbX6&!1#ToI^a?I(Ifq#sjBlo4^|RwC^U&y_0?r&Ri5Y! zD&A4|x8}{fHSwP82GM23*v+1SQj)B!-l%GP)pa%s*`a|6-@fjqiXA@>;X39;e{XHe zY*Kg8xXmMt-0@kJj%}OmGp<}C5R(k^{n%d+J$c8qpzRZ4Wx_MvksH7YQ?6sv$fvn1 za=!Q_L0lz>LTAhIVEz=!8=TDU|KSj0nBR{(H!%4`xV6utrE<$l9KQ{-3l595iF~(_JMW)`;l}rrYLUqZDXK8 zH-9k&LRf>4oDGU=#F-e5L;sX5NuiiZc##^CShU$@g467o4RpQji}56TrC()c=_ufw z+Q^qkdQrCQTEXQQ=#f4{{)BJ3)wSNoy48ho7Jts&v`fk~=Y82fD?Bm>QjB4=sQvt_ zy(ERnjmN)dD@`{iB+AY5JjQA($9LAb>PJhi6Liks)hjiqmkpw2$eH#arEx_L?%FmN z`wB~wg$y+P(d{qR@TL;&%XeN>5qM^b4UBG(ThtwHqzo6Ga$jweuLO0v4$sO}XSH;t zkqLzR-MRD(S1ndpCbzl8qDD7?9uw{!(CRokOk$*68SDDFL@vM^Y6>W_rZ8>h+~*zC zA7xmFvOm^WY2pw27eMJE5V)`md9sxpII=+O{cYCgmHks0Q|h}Ov4Z30h3;+@6K_x0 zYkNgPW9nBJ*KE=w595n2t+sM;FWx{!%ISvo8vTKoGPH=nA%Ky=c#(~~@dF7ADe(*opFPTZ-Gi7gm~r>!G+f^opR&fFZr}XZ}CGf z*bI>tdEJYHx{VZIqn6U{PRA$uIL7lc^IF|>yF7a&|M1UE@{@;-t0KA~8;)Kth<24> zQhTl6*H%klhWkb%0BJ`+BfurbxvbGfm)+^Qhz_d@$&`3fBDof0Nhb02iDv2Mh?Kmj zfJo&qg>EPHd77pjr3pSkwwO3(K$4j;ke!T~9AZRvr!3TIzGY_^_>S;$-N&lXk%~9M zZ9>ZfZ?`z$!i9Zce20`mqQ4|Lyeh!-wCuZ-E=C>X%y^45p_U)4&N{Q$xAV3;R@-od zX252at5m%+GOzx$B=@4lZ=#$BM!#<5CN*-B6Xe_R9KSl{q5_;oNmjh{_i$sK>;5p` zk`p?8@fza~k_o@5S6Ku9or`xI$Z1eHYZ&HXVbUyJ3wlOMSBq0Y!>zCCT4&@Xnr3sN zBaYl3!*}H>qQH2J;inOfHY|4JM_5y}P)V&Y>iL^cgav(sb|kcvcjagHoVpQVTb}vR zr)*`oB{sz;4|S!0dwlw98%4kKb5^li{FO>=OLa|?96L2a`zN2xYCE`f)$%AH1%jen z4KAe|)&ER8lr*YdW8HV?Ppj*tH2|_xE$U_4rF-#BB}EF18SIw{unjaJmTF^)1@^)+ zU(?tf50V(`7K`u6u;ZyFA%Ka>A8S0``MSh-Fs&EH_y_nUx6$~y zJ*|A{!K%p?=|oxJ@DdLIIpXfjW!iF@GdC7UBD84lpNZL2XzGAE`E3OaNJ-<>wpq=cQBD!B^AW+K1+^S(HL6t*gG%T~0+=LfF}+)Dwku z>Ma&T-Y*Ny+E}dxwHnhIz%w+o`d$%J?EUMq9)>-g8Ho{y5b70}7>o_2N8tRO7Zx;> z8aXw{YLj$%7wQ|LzRF7eJZ{tUiXLllgfJEQ*2Dj&y;|k0k=Gf8Zu@21j<(aszk<$G z%K&aY6WY7~qKHaq+Q5H-nLPA@FmLzw01<#X`&>`i_sDS-8H0x723N-l$qQDpv2(%| z($8(m?&Mgu%-3({?4T5h8O9@_fS9(A)K9Oh{|Hvty|xdjQA>Aw_ofAy<(tvG5YOq+(Fpxcy($OZ*_gaOc%zV;SnMhz_g9(IIIygvR0Ven>^yK0llBnVHGIZt&MD>g? z-0VF6q(&m~p9%$TmzqRU_a7XFUA03h4XsA_;UwPKnX>@6}i9N{@i2tdPi z3+`E?ob9D|VZX?FFtC||04Z3Rn(2N7>#(X3L>b>ogGSNEx!KkfPJAA-XC&V95F(0I z+pa=kTb&;DBQ6^kvT%|fPA@lpNi_DNG|BNoQ9KesB#Vp54UIXp*mRKQ ztgO74r!A~Uc=5{>M`vEQ6>=bDLNdwJ!7VoCh@j^t1lJTIMAuf%9-FM@UQEso-0bg_4cW3 zbSJrwkK2etBv<2d>?F6v-Oz&-t3d%L5AdB)AE9cXT83!E;<2C5pT{+UA$uMrtbaey zsytm5$NSEz#sNz$Nnks&ThQI#xNC?TZM5Tzv&#H7Q$J8>O1v>xm@bs?x(WwJ3dy;q zZwS0TZ<41?#y{C<@tE#on^Xut8zPW7jJsL62Bk3F9dcpwnEV^YHf8S##dpeu3JMAo zjf{TS!V}DWKl?NAckQOOiIqQl-PEk$ z$WrvohYCLn;UV)P*rv|?wk*r`+=YkfROq1q>MuN++p%(a9Kh#f_+d1-);3`5&gZv0 z^yPG;seb7@MsGLxd;>0oOaJNqqd3jA@Z;v--=QEmnewX2M!Qnn4bpyt4I{)*(AItajIlegor$Z&?fW4D+P~Nk)1tC*$B1S5gPNjb7P*F)Bmi z*E?JdnlDb|;C3sHR2`gWi-bejIA}qGi^iC|b!X-)Q+X-#btx<#b#A_n41sTDZHz|# zm4mMC!&QsOSbT*tnZ{0&wx{sOFH;Gru87(FFEFlb#gI*@QpYqi1MDsAEyGiM#t+ZJ~=D zg#BSg1~J7a)6Xx5O)Td(?OT4^SKe#&ca8W(_cmaC<#yy`zOOO0`X+kAa$?D+6wc6n|%6Qq+ zFUz}pe|Nr4AbSy1d*qANyg!jamwt&hYJHRa{lF2fv|0t>7yY6MN4`ItU6NFQOGD(4 zR;&M!V2g56${}~b3M|V_Riqk%;J|q~#rZM2=V!8zzdPA0@FBVTMZQ6GF;iBtWxs61 z3Z58>804I{;Il*O18v_$Hx(^-s>ImV_Wjm1GLpIQmn;O2zl5yO?Wf#d<}7pWB8x~{ zJ{M}Fzoa&CehroWJg5Pl6A| znS3mc2jQYPvSm5QZU57_=w%H^NW7* z+xs8n{-_l=@e1;k$0;7~c+@5e!$NJ^iF&z>@mdXhe{+HzZQONdm! zLN~JLs9y|7aMFYn;ongp9t{-f+!2XU50-IxhRRV3xaiizTtkdv_!o{k1Qe zW&+{7>Nc4mmMdXSYRi$E62 zfGR6j>)~p$I~-yeO|$57j$%sjwU8=)tmF;b#HwrrtOLFiTNceh2Y&4l1DvrH5s!S2 zM;ooQX;Uhfez-h36iGp(gdS}%KPa%G|&9I$(OS5 zt9oZIV>-ap(%#g!NXZjLnMJ}~KhvXuK%8Pdp#<~gFq zbLNy&V~l6q?1wR>RzXk8JSP2iYx=+D@t#B(QyEHxG&#^q7X4nj$M>S6gEOt7qBe^G z9aokdOE7ZOft?{orj>{|<_{bPOTPzt^+1|In@y=5R@5;{Y!8$laE(R|l$m+7{nq6A zGr$ZYaV1@&(l1-^Iw&J{K3MWE{GBPOZ$!;E6DF+*Jus3}&SZ$Tv zVERpLIE9LIM-CDzZw8(z4l{05`}OsDGf*tiEL>!Sip0N%*`7VN6>sj(PmB9(f+~+7 z_=IaS#AjdQM$PaK!mr-=|G;wE5S;Zn9FaUb-+$kR|AOD~i>A!iL|w|+z(q96!~Kx5 zOl$<(^=<}rKl(&h9GE#c53(43L3$2Aj4-u~{D zy8VV6nb!!zA!Cj^E%bDPmb4uz?%7VaBV&L0}(3cz)>CB*^fb_+7~G zWR&+)v1aW->Ldg2t-3>2(uE3{QrxgNq}zMM#dR;|dxEwCVP^xQYZU7L zzj(iWx17ZDt?Wni!0i*+pOrP=onP_YRZK81=TTu%$ktF14LEx-Yb?JSY74M3fH-R^e#fQ>NG5zZqNHq+o|e= zm4qUagRn*niRC6es&SeY#Y%xv;gAmfoHiPaF1?H8ZviUtO`LKh?e1~V0Es*OA(_(G z8TA|L+(@f&SP%rbJ8Yj-d+$6x+qCthMs7{QV1Y$B+#U;7tt z2SAFp!<93}4=@9sG4e9Q>v7YnlhHms4ZSL*p$-3O!*DJiXDZ0R5{o_$Zi-;N!G7PFa%+)w-@OQe<*YTg;_ScVh?)x&UQWc|8 zvjqRCa(KKB_bnFUR_*jGz(u8dA7n!S6DWC9Rx3#BTXUpu) zr(1a3idm6$oM`nSx$N>-l@gPX;qFf`qh_zyx#SpzlTcxDU~;S^2{GV{6QhkW?l%IT z|KN?tVVJN!36>*>(S?y1VA0Ze=)vqnCADS-ZaVbYTLEASD9Ohh1jc->%%oT8g*z@T z4s=W7HdiHoLce1%%(2ITvMXRR{AQr&)0D<)2}7R@&lJ7X34Z(0>bV}#7+EgBH;6&F zz$P9>7mf_B3PH@M!&r{RJTYhv#-dUR`MWSW$GA+Vj+RQMxaAIq%-^34Ed3MpUi3al z^kK2ZDVv}bjg_0Ve(*xGi)-(C>Oi>cjRgb~ueAGv+lzqdW`$t=L0LvMu-h2W&;T znk>}iO~K9O=so9w&#W=g+~*)8lyAY4;Pi-r5I?v7Zk(XUz&~|XMe3Da$ZM!7 z#Uf-g>g(@07oro0>u7tyG*jIDM5@di+55{T2hi?+#IQHJ0US=ghcfAsNJAqd%2#;a z8kO`Wr|WT?7P@7DI}u3=X!-Co#2*h4wP#T{#-eBXU9?4QaaCqsyk70Co}g@WEfK_v z?|+Z8xJiSf3Gv1wfesap9$%qdQ{Sqx*d23#^x0B+R2&E;(!8iGlUC_D4>3F(tdft^=M?aYI9!$o!IzMFfIY~49pj# z)|ye6GO#$vL%m=VdH0u3kotC; zDehb}!aEyX2G@9WY3$gd=-9T`*b0?{Octs)nyP`OQ+^%f^CAx4LGG`Y`9L>+sgsk* z2R4Q?!BePs+nUj&HqcRI>lXB^E~jC+y4pjbHA#B=x4|KK*#-4aS5%#;klXgF>)xGO z0U&s1LB-Snd$!Wh&F%FSDCmK^DR*~&x4g`yv&?zm-S2;9`^Dg_h;ylDHMvim$gI)g z_s=QSVmPQtbwn78`hdzL@oG& zDyB!_H{<~)l)j7DpHZ-(sV$-P!#@P;zw0~)vmnPg0uN;p4N;nBn5}2Ff(ZfHUS|M8 z=prh@zH_qrDKFs@T%WT8(rrrFWnAq7L@Ag&5%?I?3sf}r32Nz02_x1v)OIq>Efn7Mne*UW#lN2zlT?HY*15(g(HHO zzS!dH>q^mfDr!u6a{$iu>2lU=Tr<(``Ip{?gVlQuAXrrroo*4 zyKDwARuVzV4_K9A=Vng7KV|*8J@uxv#C4#TdiJ4#dnxX=F=r5YVwmQ2u=JWQ;BshP zu~qKy!^)h1<*qm;#>dKer=sb~Gdl(H5TU^SM~2Jrt+BN}oF)ib{#caBWSkWs{{ zjNdXvK$pfq=FuwCnt!7^)+tSh73?$YSq_#q&W-b18C>McAD8dHgQWBhMP^Mn@9z#| zD~J#FBP9d7!_NnP(+Js5fB7;E^fM3>zyV?d>54Toga;;8hSO<;zLhq}=x0##h?+0! z|Cz_ZlD8l8V3GINlE%5-{dbl655QeEJ^HhH?vA3JD7P|Mp`=bw&VwZ|DY#)$1ke~^ zgd6K=PTZGs1!O1J4{gTLT%1E%y_{E=iwv-e|BxOq>*He%+8$7VGbK!i2oOulL2+#i zo(Gbn+`g6r%MQKlpas(3!K0b?cDNIAFUy;sF*`yiJll;fTpoSIr#pp-fABUZ`6pnW z!W-j2XI5n?^Jmork1;~E0r01#5^H&F!?o4lH`zXS>lL#Asp zxy_OaME#!f^)_7iIHHAFf+3#S7-Ee#pzoh^%1E&D?0xK1)Y}x0V&hK9LA@l|n=aXD z93&?OG8}K$XlZuQMLnnr!ai&JR`z-ca_|rdu{_zyTs~pD-1kBnhm^7BLN~L$PzcB| zX5OxK%Oa4(GvK8#Q^W<%o1fDlj(J z1wFX1PC9}wO8nSSJ1d>G(C&viu%FSlnYX!(3*dWyTa~Jn_hG=q;gv)c{vi#9<#a7$Kxhk_;d0T1J=qx^BBZCVw1cLTJ-=E47-T3bNH?-^D zyDM~1MQ0}i+dl=)Bn4G`0F10rJ2!>O^+J@pzYH8-(UV(5@jtEnob~Yz(qel;ABN!U zQ%!wYS)j#rqnva6l8~#62SwwmTcR~EigR3}5?Ev-|lfqh=Un07)#f&Z_9}PwX$UW&a zSJ#%YV^=SGGP_E(saYhvh+t|yYb*=(WB*=M8_whrc~|3RhrEg#?bRFJADX(*bO?*v;`{yPR^F#~7O@r`F~WjdZ*RjJvx z-bT-8iw>#j2+H^7qF0Ri~BEeztLg5z4rC0k-h3okuUqeNL&*6S0^rE}J zprN4`it5>mK9FZ?4lmbM3$f=fUAozroepd(DH(t}3q3Y6rkRqnHZ(=mvEPUC`MukR zuI~vtT&Z1;Q;p&?`kz>&ia8ejO*kXj%03HN1mMl0JZ`+Lp2OL`xF`*0cI3>G^78 zwTr`QVi(V6xRPl$$DW#^I45L%)rJBk&dJSVTl1>~1X3}#>?aVUTyH zO6%dWSEaW@e+yDgUm>p-Ve3Ini+N)?7HFwaQOq6!zY@nphwM-zl3!%sWV5t&-9iZY z68X`vwsvOw;4x(W5#ZlxiTskhF);3}W~3(znGy*}pFiT`faLye5w6xo$X*4P4v>@V zd3bcrb;`$1)LFcOt+GG|&3&}fgr#qouvj_BYV|0Jhi)Gi_u}=x&+zR&sMNX<(lO>& zN3m0BB14@-hH+_AgQCf1|AO>q_=k8s#nUdG>1^j|cSCy3#}Mhi-}V({n-!z6&KFJ# z&A(Q%oO-j=Le|?o8FRb%+Z43@Z`PQq=sLKLK6zp>Dz(-Ybu-DxpaDS6;6Atz0d-9A ztKD!z0WSh?3ec&8!<&wts5)BnUUa4i(Pa?u+W0RC6-97-Up=~W+Vygsnp*a)kKk3+ z{Z#?tw4y3eC6UbtcxmR>s;Kq}7D2PJshq~DG!p+nR-f^~6My}^SB7WCgKmAfdFqTv zH5wjlY@6R{0^bIZmpoNXO~Kxh;jO9JU3oD#&qQu1Mb(ZvdT6#{`Zmg(Hn5_Y zH%Va?q}yK2samxS|EqJ%lQgJbwGdi*T0YCR7_R_71|Z6aRn6Ap2sRqx`m>Kd-#$&^ z0{VX>h?9JjW@7JK{xNRqkd_P?DETRZNt|Xy7XXfyPcNuzeQ%mLJ;vXeU=staxc95wnw)S3%tsy}9V0iPh z(06B~4quPQv4^fk49}>!dEOg#zsN_F(1#pfNhC$qmgUgJAcS*GRJ=Z%^^yIJp*S51 z4Orm$!HHSh%Rq6>zZz5#|J}}!$a(oW{ILR!@$>o{qGY7<>Y|rfObB&hi(7)Tn^#(0 zb3yM__|=b{%C?zCZ*S`%&yk3p>!UW$y@}8-k**F}wJTg*!+?XeK^F45Aiq7XB!k1c zBF!3dA13q^cM~IeKki^L)2Zz&Q67jtw@f?di=Fp&|3KnOi%0y+$#B-j!d=i-fp6?% zt?m~}eUUd8L9)niz5cPBvDTGF;7JrSrE)=;~_ka>@xih6%HEP2+o!u#Wix>*xBwVBPu)EsIM}%X0L{$ zj3^HsG{+;A#1CC@a!n|`H%bZVR$G72WAWWF&~K+12Heu7vND8<{%X@cGj@sl|I&l} zI7q^Au|1kwa~B%9mcMD9sAaYJ*-K2(Q;|V)_t9@0b%C2Awp!uql!5i`5k+f@+)k>q zFu-i3!#gfSU||@$NopJ)pi`7o*5sqtvP3{RV+P}DUImISpv($iYmjoC%RGC@r{=ia z1l;y10J9&+PEg(uTu7QEj{Wx3>&*h8%ZLETfICMg7GeM0vp>hpoay!hl!`4_DiS)l zh(Kgnt&@XKb7Lwh8Wz=N_F2T95y>XUyx|F7FR;;KgZ>)iT3zdhiK*sD0+1B{xR>(N z`7IDGH4cOaJ(EZqc|onS$SGt!M)LjzCv(8v%(p*vQXM1(PcLLIgNPv959mtZy=JR0 z{?y%Aq8%BgXV-1iS0)B!n^f1L~S@ejn(swPXsJ;K&gRzvG@6qYaU0o=DD#q|LX0+Yeo13r^33=2K(y;AUAE=n*fpk8j=`|Z23Y_3@w0z3 zg(7jmW906-0I`%d&uv`Pw8iK^ z8wYVpr%)0~w1|@E@8kxzu;dh}!2X2I@J~{K4aWKoI-MH9f6V*4G#Da7N4ts29hl_G z3-1Q?0@DV*QmEmmy&w?T->0^aDEWS%M9Yjkb0fElaiTm&^RS5>;2a-4gIf1?TpKT8 zC4A=w0~DJntB9X$(b9X5Z4z}#dFcMo=Nc8Oq~MSYI(am>YMe)ZvbBJ@tFgwEWAA+v%76_?VRu<&Q)1D`FvgB@1kmmv@8g3}D_EFV} zz)yPH?{@)g5^qQkIk7GrlFcf!w}F3L(OykmGYJEnFS@_Iyd#% zzxks1X5(-z{D7k6(KhWQ@?s^Bg{hmmPd?@C=lak-p>rKsNj7F7vVYeZl6fXn9VAf; zd<%)%@KtJuhb*z!nGGWw4J1(b+vul<)+?qqpxz2s=QIGIOSe$Tw>pi936q%6MpOr3gLy#PD zsDGh)YWK{D?TDQNzoT=j`jRHd8JX1eFit!Y+x z7f(yk-I<`P={p&-yz+N&9=b-mv+^_!C%pus)C@pga};qS1QA!0NXHGvp$eK9(x z=uF`h+oV2F^z@6&%NLdj0vmtuad`0_O_Q3heVb_v8kL7BI(6z>!~k7y(#zGf|MIKg z@B>~!4fax$h%EQj?4{YODp_&@^`3$oc%H?mHsfNqzr|@*v+#mr-fGFN7!&&-Vp#H|QLq&SpptdTTXJ#qm^jPjZc*mjR=F(C`6pSSf1zj`^4RY5 zm8q)ao3=2%c$v=gHeQ1EaF=4LBkmY?Qx4+KEwQ!FAv5_u1e*>wTZs+58JbG`vihNZ z(x^J!;MV~&wKdqtowL`d^Aje8qnKG7glV22F&r&pdMhrrV)-Y{kNG+!R?LSK({SVx zHSl$FKDQUB_neZK(~PTYg0R5g$;7LAl`Q5e$9UdNHRo`8aQfan*;ei8BUeCVW0 z5qIwTk04i$VGO-6R;~6aINywd`tZfY;ba8ulSlT=@$hg<71|pS6xPEaSQgsj_M&n@7U;vsHW5*ewR4MdR(Y^d zL`ykX{XyLOwD@9uPWo}OmMA$IiRv7OKPJs}hG$jT8*vBA$Q-=CIm1_FuVueC**#y9 z3jDbexTJ@eQV|V2X|`Fz-vO|F)Q>At*tNzhjME7rYB@C(O#x9yRvXgC%HXKRlSc~s zVI?tc%FmtoJM)TgF9ZK9t9lIT7#wK@Z2#+YJDgVCOxMoFdZ>b#q+X*kjVnZQqFkO; zX-Z&jla>2?qOF!4xzB5WSh>`r1J^m=r3o2rxE@(gppn5K-og}5?2*?afh`x}+)ESJ zF@2UCuAIF5r^s@V;|x8-YGfSB+=rOVTtyeM_sQyZKZxaCoU!n@KEKpe2d zt_08cLetcBAX-& ztbXnjU^rTO#AUOeQJ5n!B5Wfoq94P-vP^38+BG>j|MN#h%hk=qy82dU*87EoQ5G$7 zEE(*fA(fWMWqx+9ozy+F&}S?kN|`fzbnk+)V<4T;L+&fUBSKl8jmB`3Qm$nSguDRt zfWPRnI57|E;Q4h{QSfuklF9aY)?!5V=JMD;H!ecCHvY|~UZ`1(n?P$0Zui)bvUhMq zRISVJLK4uja!}$Qh%G&^?YCNUTt-W^zy&>N=;g12h;i+=BkAe7FqjG z_qf>9eVceXScMy^PMYFAs8b0MBonh`enAdraetoPy=X?vQ=PiCUJfxQzV$Rs5f2BIdPeV?g%dr2j9 z)!X@&&BW9oaSi$liVxo|vR`1KVpOHL&-E~~Glld0cb=+SvABJq!j*jZ9HFeYFJTnF zT9b-4ZMdznesr~)dB6RK&;6I)(GxtN$tc?=vk^n)koLx@{W!t34IgDWe7=VsWp>g- z815~hghf*j?Z%mUAn26bue4VdcmkKL1P}suvhz5RVihi$O}(v$HlEazt+@tuWxPj; z_e^~WUN{inO=<4SpYVI@xS~<%-w_XKU(TCF=EIX0{T9=}r%d_|+00A;?)){G5&bIn zfZ&8yR)V15p{`eRSU^HOgLbqFfE>Y)AIS8$ANi>-OQ184mw8mGUeZNcJDd~4z-+|G zrCRaY0o>&33t=7JhP31`S}eBPK}?#KZVmAxJ%=gHoA8v^W`YqkiJT8Yir_gR%-AH{ zx@lgNdyyEt>J}&&Xz`g!?AU94Q#Tn3VT^agx&15ErU9-y)Y8zEV_c8hyso^VcrDQk z4MS|FxY1(~GJoonG|`C%MRA)vbhMFu8~=P^WqZFSt~{hn{_bT=*Sg$F*sXx~)E+HS zdzR&y5)`z<^Fz7uzw*)&2jJT<1S~vM{_}FSS0grN@dvN~-IFUhF?SP~NY{8Qj_W zsdkESd3u_EmxLZI*|eqDOhO-HTV3kU##+bkxayaSM+GSz-d#LiyBv!xiAf-eHSq1v zlpWASOTDn%Y_{tduN-;!IUz08)1O0BYTXT{22X~LDL4kpYc(YW@lTpf`dj6f9%N4F zO~_Fmcoo5xE&%>7s~sG>YnT{-G6tS+Eh_n(Z#x)^;#@Y^=?(bo#l_g^p*9-0z)`lx z+u&MVn55`-C#XSZh8OfQQ(_*x#>r4VM3w1mjQpuSQ(>UZ<)O5JtX1#UxzTM7B|1-9 z!XIYEnzSJr*ra3a=8eH3Mvd?F_?%QHj={}*GnU1=Gf&LuNGo`syJ)REoN_;H2Jg8> zDbTz)N87_~-g3JlrKInGX?c4_Oeicff%#fK)imKv0+s4fjDxfZkAgI ze7CW|c`L&3*F`;pcKO)Q{4)2gY_n|;y_^p;*V00}4pfy<)&ImLLpMr|fau|#MV#C% z85tzq=4SiS889f!;A@Tg*hqaYo&C0`^@m`p#2tn$g7R!{T6R8&oE*2l*OnWfXjNTe z+b)aT`gGFCK3b+Z=NCv=In-s9S>Eo75MxkbdedLTADZTN**gpF+THgHtx>lb9`0Bd4O8n>?EK=$q|fwY+3iw~AN&2ul%5qfsaw8=yHeBL zYb5~*{h)-6mUCi3<1%lgtE}FvMfOFwxs7%SQjN?=FwC5dpywBF5vb9>Q=ij8 zJz@`(>!+3hds9iQ_;&V(NYvN+3@SXYsA$?bRs8cEaPBCJtpEJ0;G1%r#PwZ=T$ zB0u$6m$`wI-Q1Sz2jpY{sEYB7u4o})GlwJSCce%H(;>;{fui^>4dK36?GDcz`4qz- zptcc9$BF(%_7Jgh3*Uw*;79($9ebG96qy>UD`MB-zo2U8`uD;&Bbv!Or2!LQ=X@VT>4^qX$UC==9m|#q$r`FYfEUuj@R|<2XLo2$!qgzIUt_9hiEhCFeT4 zwk_^=QZvQMmm^S(6 zQm7<9LE|z*l#3$;q$c)t?pd zPk%3Zf|;J6uFu7l+S(Cw9kN>$A>ky)Mu&sAHs;Hk0;{C zyyaz5ZqDkY#)dA3ppAB!5%_AU?NgKKjlexWg9tmJ&uZhTHASZ5B?*%wSpD(4I=$3W z5!C_C@OPlw_$HVxm^OqrQ|s-0+n_A zU{>W}rAcy{kP0H54dv?HP77vaorNoCkz5GfrxoL|D+?mOTiHvX6L8Rh6Lz_tf$&g; zlS_{O@LN-x$mq+{M1^Pp3T-8;lF8{mlu6I**z>04Rn!9*r#PRb9U(z*SrO42{v z8E#9aD>4U{Rb$in&DGLa%(1N2@xfZvZu*VlohQaoV78xrx83*ZtyM{#XF-DQrY*Y6 z5zCC5J#WJv1V57($o%9b;Lf8x)z7fpQ0EVMGP?&^s-fHMto<_qqnyBdY8sm=*JNM* zW&HT(eH)J(CTF(pWu3>ntJU0k{*$`8rSO*~QD03qtTQkun(m3k-j8Xi2k1%b3_n@n z)UCvcirjeGkme`G^EV3qyMBV|LreM9f#??T0Q7K3TSMg4_r6uzE!?4)-KeyTDObDK zNvR16%$!GDp&T-U@WS+Y4}U0OJn7erclHqd&i2eWTgtBMmC*(OxC; zL*#%IhjxX&RS1cs`~qH-<^u-{CQ?c{HqL&!qWnk|V>#T(ardIsr9G&%f02Ja;i;ODYB z>?_X$=yO{n;u_))xUTu#h0tuCr8fpNQ{@sjA+sThidtimYev`MJ6^%R*`D6e{jLFW z>@nuh^Erd*I^t^HX$(>RWu}kQU7ehLGl!2|R<%pXNnlfWrB-sqgdC#wVv)d89C18t z&J`V?Z~tmSbv;t~5G`)j-Kkv?6ZKV?U!!87?QbRZ8b#Z?5O+tWG4&zFA`%ah3utv= zUkyL4?Mj3wEXcCCpRb4(_c1<{OnsGS;5s-8bU=)wJNU41Pa;uR`6~i|2a?5)_jVi*{CF^BMGdj@ zn{ZVNOt4u~yJ}9zr05sU{X9Pu!zAa^BiKp|1`wfT zB#%FwDKr9mdHveWqi<~j`9l1{n+w7afo+deGa`V75VATEKXLKFOCYnEsfR3>^q>zcz}_(TmZbSfmg!mL>!V4$uA8Ml zHuo}~NkaGQ(6=vpx;0pCiiIZ5zcPNd-BDF2$LuGH^q0z8xkJIf@`uKwi8)p~dn0QN zegyY1^bm#g2t^$M;xfh0zg@K2E*DvdeSh1B$y733A4umHx7SMY@)J%XUG(tU>DzWH zq>PAMU_;STp`uUr1md*6BU%LR3$}UA98=U zTj5JrgnhAaj{dS%j?{jy7>NHR?2g!%#7V?<5r&ab!MbSR1*C83EP?D|RyL>n#wk%L z+hYq;7Zb0}xv1Bh^|Ci|{;s{va2Q51FKX;bBZ|evNLE=0u^G3ZzV(E_QbExek|{{<6ZG z8)H=TSbK+MH`BC%XEeP!JszR3!djUef|%c4b=$KLK\#xuFDCIq}0%Iaho@6R3|C1tYeLJsXae{9)xO+{ClbDmZkh@?_5ycUz4 zV7h6%5iTN`oErb{z&b?HTZCTL4I2gwK3%O1o*3LGl9%6rTsKPWlPBexUX38r`MB5E zMt%I1aJ zI)%bqW>jPvY`>P~$Xl#Cfha~g$(Cl4!Oms0xG;5d)HW{URU+o=xnCl%5_qAN2oBv{ z?8?wy9qVxfUf|1<%a}`fdnA(4R!In}tA)qPw5Du8jydfqf60#%Y{b|ZcT7cCjr-I& zQnSt6X37aiJ-NJ~iJ~>??jfR!(WiQWpe!vWpZd*D*z*yOr+^m(!@Jgb+DcQ3tA^b@ z6lsTZNBIWvL9yR?Nof#&yNXE&I#x*?t)?_BPAe$vW~e0)|_jsgsekYXOreQrKRys+hNeU3Rz6a?I}Q=sY zHsKN4axSNVkf_|^XR%3t0wb~MtL9Z|dE2L*D+;wA%5ZA3+LwjOxT`q!fmQ?Dr@Za@ z#+bN=mclwknhQi-|Gnrwe~6#6S*-gwXG0pms=6G#p1}UVK`JgSSiHC2VgjnygNBav z^p$U}uDz#Zg9XjMnvwPTRGJ~GS&$<-KteGY1g;*vkCVZH*ky3y7c5NYx%Y5hjJFCu z>|}^hxy*k{d_wAuDU{harEyu&DUk*hc+oP)cjqvrFMXSNs;@bhK9Q8v4lwTa`+j6* zP|hNCRrMZ)ZO2DOOHh@13fFtH@&MSk3|PFo2Wn z&cMB?sxNfq8wg>BWim{bT|9}hC%Fd;M8X~0T~_U6eP7JECeb3(G&qSM^ur9$#c=OW znVgpS2i&FT@)I&L8-b{%k&0suKOtqsQ|zj=ai_xDJ9Fl@i2DLrmjJ)`aFQgR;J-JK z&CnD3&NO6;=>{{;cefGtEYgFLPu^teS50=>nWyy|B*yqG@f`lpp{1DVa;ACHC`ym+ zM_2|S3%=_0ffPsa!ajp$U$o#x&Tb;%n@g6GYF(}1=Ttr3z9>gM+mYWN z#Z-ev|42m96Gkbr&C#{${T2(3i2xS^vEQKKVya@^mBHn4#qQoCp z#~ai+-;V?meCIS*eof{%r?N3pT%&$(Se~_UMpPX8qenHs0hDC4clguPj8FGv3p}V7VO7 z`FTy2{%&|Sl1U0;RXXsZ#Myu=fz>HQtBD^HW5|PLtuYHUp*qv0k9zXoQsYr&bHW3~ z2RSj3F-_JtR64_Y;POqWebZ21YYzkG4ClaRHDGQxJ!fG0=;UA`KrHy%+8cz;h}T03 zyN#9r-tfzlv1UQKjS(%KMYG?%T^m^IeV_H+Y|(u6nfEB^LN}RkN_>8R&-?4F3$O2v z7RduSa;EWRCcM#ehSE64heV=)CeX$7PbQhS5%eEa8Xs9!^HzXFJ6uKT%Q6FC&Wmn8 z(m%8wPa5}&`*ktSRJ)d$wFEYr)wgR3Esj90jE0gFSkn4?;@7G?@U}BQQ`4n9TPR6* zfNKJPVNH!T@$s&*EsH~?NADDAzdLYFk-z7Ss9NM=6un9J79iI$1PF%@OI7>hCznEtx-WtZI-+Y2?vH zuN(@X0qz$$0Q`-C`BTLnGDDF!yh3YT?>We_uH<6FZw;Yo=v;F`zH| z#EJ0NpU1i8*-&HC1PgfvQY&hjyym41t?=m@(-$fjsNp@foc8?ac?Twtflboy6e6R+ z^{f+d;O)Jv%jo-Zt13asn0>*kg@SmK;d!o9RtGYHPXhqXWd*>}|d$S~!06QsmDX+}m`7;h?DkQNscU3u6b z4z`B34Ek-4E>mF`Iu@KnT4}10Wy33rijC+xNa|$d;OG-oE+wym*MF+sdTasgRdjm_ zN#HAMd!7rm*UPTKbjuXFFQHgo;n5I#&c#M5-ehFH+DTW|d#yY0z;)fpU-bBhmp7%L zc0iDBY&{~#I>lHvWQg$&Bhdej6$Da)(Q) zE!>J1E6Dn<^}^tU)Z)k3yS>>D=T>CGg|p_yI4$SP)1TPA1zzq}Z=joAZdOFWp71o`}E9Ubd9W;c1fIeQlrbA7$bEEsN)dmo=do5#ecD;;jekjQJc zY*F&~J^`Ev$^8!5OJ;C%&dj}oKUFq7stK6XEUcEDTDC<46Sg8{h$jH-&y^J5C~-;F z148w)I)=T0Qqex*NH)eGh+fQuHW&FXIaL|}P3TFjh92J8IUG(2h6CIY!`qe9=`~dD z(ehJ(hon?_;Azs1mrADuDw^9%5}d}HcP0T;WMPrvyq&Y_E_iM00b`BF%AX#*j);lu zLjTRfEdSmIsgUq)eF#O?uc_<;_SGEVNR)u@4o}k+X(s8e4jOcZ% zdxP`AB9s&BNZa$kCy&jUYf*zfZgYN90nV9_BZl+pxKd{RZWyQaM6>(fv%aqyK%3Es zYgyO9`!JNaXHOg(@6q}|(w~?NyOC>n)z^H3as~G|Y(OWEjKjvOnMR-5Cm2^Tly;_= z0gLa8rokb%PKkeeP&`$~ze28m^7Xh}Arzr~v`WbTku>`DS`-QV(D^dbhdp$OIA}Lo zFMw)5CPB)*a($-PLD6c0^q{euB8FN9#RjqFq91abxV~s#B<#5B?!f34vT}A#16j;i_?#bC5 z@$zClsxx`lYMcSkcXX-g#T0tmnvZ4q+!Sybp>P54s4@5-U17wCUaHp5fCN66Y}4Kr zKw5Z6vrD_t_@O)L3C%_g!$q@P;#u@rtfs}CB9$B?K6Q#cJqEn-kwl^rA^G*MkO0R^ zwDU+-dyT|?meSzQP7a|8iKmHrDgAa@BwfL#Zou7yQ@n6+^oXg--XO*-q*JSL?^7#m zC(E_!XK)hajYi1c4tz^VgC~}w;sQMJvY$ngH>~9%^)aWr2REdb1Sd!MWCNJFa)Aq6 z`*sP@KP3|DLyp^oI5}eA$_qV~ByfdUOS``jU4wN_`mw5@5An_mwLO*arB8@q$IEo^0w ztSKQhk7oT}VM-Ps@Spj6z3({YdYHNr23sn~)E7rAKGZ#21jyc|#5rFpPznq8NVN8M84h1KD(Zjc+jDL3}r|Coz zY_hm{<~qW{ZHIPbMi-iN4eKhBe#Bgy;$Sjo2kEfAPD2&mxBJ(~8Mt;k>=eOxcm zv(^Tor|<5e)Y-~%OnUFYtKY|XYw^skr0ciJ8x#w!0d6#-?1|+b^D`3i_%$Rpn9%Ovj!G2I3tap283?WhM zTcu=M;Z~aJE8Y0sPp_@4xbikqyl>a-J9QWL@%YSyirGxwotxm@&Kxi zdiZr%sPuEXQxnNjz2dwNHhMV*>>IJ8mkg>r0>~=+kZmjpul$wROwxAQ$SX39Sd~R< z1X%RWiugtYUFZ_!Yo2-T?k@Y$?4)_Qp8S$M|JJXn!x@VR!lpjYo%SJ;ud1QVDr>2U zyC)Jje?Gz*^Ry_~%WQ9z$LhbbGnJuYm(CXQzjI<}5_ zFB4<;e9j3v+4RbUK`6QIdB5HE* zZZDkji@WDV=-!Jbp&%fwWti?g>PoT{k8}0+EvjOpGU@MP9CT0c`ahcFeF%P_+A?Og zv|ri1Uu;%H7aERigFaKO(jzY9_Se4Gf6Q3n%uTr$py04LeulYXhyi%iaZLP;ApZL+ zT1z@SHx_!p!wKfzsY&ADMA5Xz4&;zyjY0JQ&`VT zecD+5d{xNQpReRnPi^TnTd{!r%Ei4YLwCx3pA*GX#Y3-lUzD78m>Bs(^17xHyw@mM zB;B4*ekhi&gEDkmd$7MZ6|`{V>t`u{AzsIYB(WpKf4DT_3MFuU?QY2=AeUWpqrsC| zn_@OSPneWKN_VoPwCe^lRuiQF+jrg$6I#0#4)EW;EGZYYIA%wtKe!Uoi-0N-*+x=I zMu;BIz~|>jX{ZdkZM#$x{H{|U=(;wb)pgarajC_;%5OswI?`s?U0d?J{gt7hDX;Ua zA$seA{Cn`Me!AG(FKdJX+BBFjbSt3sR_R!M_LE^_Q$Go_NP~x4oLpJ*-T^e&xS z{*!3uId^<3e+qqTK;r&Z?;B%0Aqkh-r^hp?!Y)#U(Rw={)&ixXcu2Q#pR6S3BSUh* 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

)7e5|ELQH($t_Yw( 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 literal 0 HcmV?d00001 diff --git a/module.json b/module.json index c5634d0..4c82b23 100644 --- a/module.json +++ b/module.json @@ -4,7 +4,7 @@ "description": "Functions to print actor sheet", "version": "${MODULE_VERSION}", "minimumCoreVersion": "0.8.0", - "compatibleCoreVersion": "0.8.9", + "compatibleCoreVersion": "9", "author": "Skeroujvapluvit", "systems": ["wfrp4e"], "dependencies": [], diff --git a/package-lock.json b/package-lock.json index 41a00eb..9857e97 100644 --- a/package-lock.json +++ b/package-lock.json @@ -90,15 +90,15 @@ } }, "@discoveryjs/json-ext": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.5.tgz", - "integrity": "sha512-6nFkfkmSeV/rqSaS4oWHgmpnYw194f6hmWF5is6b0J1naJZoiD0NTc9AiUwPHvWsowkjuHErCZT1wa0jg+BLIA==", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz", + "integrity": "sha512-ws57AidsDvREKrZKYffXddNkyaF14iHNHm8VQnZH6t99E8gczjNN0GpvcGny0imC80yQ0tHz1xVUKk/KFQSUyA==", "dev": true }, "@league-of-foundry-developers/foundry-vtt-types": { - "version": "0.8.8-8", - "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-0.8.8-8.tgz", - "integrity": "sha512-DjWRdl9PHh5CrnqmQBw19Swe/W1asmD5PjU0arMHL1Ni7Zo91o7eHoHqciOAU0M/Nu1BK0CH/Q+nXpNY9dsr3Q==", + "version": "0.8.9-9", + "resolved": "https://registry.npmjs.org/@league-of-foundry-developers/foundry-vtt-types/-/foundry-vtt-types-0.8.9-9.tgz", + "integrity": "sha512-CLpFu5XY6BnxVNou28MKZcvmjWWzv+UYLZ21QL+9OxFegMr5iE15pqyNHcTuJPhmJwnBD2WYUzl+vsAMjUfLLg==", "dev": true, "requires": { "@types/jquery": "~3.5.6", @@ -107,8 +107,7 @@ "pixi-particles": "4.3.1", "pixi.js": "5.3.4", "socket.io-client": "4.1.2", - "tinymce": "5.8.1", - "typescript": "^4.3.5" + "tinymce": "5.8.1" } }, "@pixi/accessibility": { @@ -489,15 +488,15 @@ } }, "@types/component-emitter": { - "version": "1.2.10", - "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", - "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "version": "1.2.11", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.11.tgz", + "integrity": "sha512-SRXjM+tfsSlA9VuG8hGO2nft2p8zjXCK1VcC6N4NXbBbYbSia9kzCChYQajIjzIqOOOuh5Ock6MmV2oux4jDZQ==", "dev": true }, "@types/eslint": { - "version": "7.28.1", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.1.tgz", - "integrity": "sha512-XhZKznR3i/W5dXqUhgU9fFdJekufbeBd5DALmkuXoeFcjbQcPk+2cL+WLHf6Q81HWAnM2vrslIHpGVyCAviRwg==", + "version": "8.2.1", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.2.1.tgz", + "integrity": "sha512-UP9rzNn/XyGwb5RQ2fok+DzcIRIYwc16qTXse5+Smsy8MOIccCChT15KAwnsgQx4PzJkaMq4myFyZ4CL5TjhIQ==", "dev": true, "requires": { "@types/estree": "*", @@ -505,9 +504,9 @@ } }, "@types/eslint-scope": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.1.tgz", - "integrity": "sha512-SCFeogqiptms4Fg29WpOTk5nHIzfpKCemSN63ksBQYKTcXoJEmJagV+DhVmbapZzY4/5YaOV1nZwrsU79fFm1g==", + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.2.tgz", + "integrity": "sha512-TzgYCWoPiTeRg6RQYgtuW7iODtVoKu3RVL72k3WohqhjfaOLK5Mg2T4Tg1o2bSfu0vPkoI48wdQFv5b/Xe04wQ==", "dev": true, "requires": { "@types/eslint": "*", @@ -521,9 +520,9 @@ "dev": true }, "@types/jquery": { - "version": "3.5.7", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.7.tgz", - "integrity": "sha512-Why+9t1KuqWtIqYKtbk6wgWbE1PjyXJOyGkpmTUh0RX5p4HL7nnRuBkjAO9P2r9tGQP6bLWxl77jRLew3V5xXg==", + "version": "3.5.11", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.11.tgz", + "integrity": "sha512-lYZGdfOtUa0XFjIATQgiogqeTY5PNNMOmp3Jq48ghmJALL8t/IqABRqlEwdHfuUdA8iIE1uGD1HoI4a7Tiy6OA==", "dev": true, "requires": { "@types/sizzle": "*" @@ -542,9 +541,9 @@ "dev": true }, "@types/node": { - "version": "16.10.4", - "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.4.tgz", - "integrity": "sha512-EITwVTX5B4nDjXjGeQAfXOrm+Jn+qNjDmyDRtWoD+wZsl/RDPRTFRKivs4Mt74iOFlLOrE5+Kf+p5yjyhm3+cA==", + "version": "17.0.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.5.tgz", + "integrity": "sha512-w3mrvNXLeDYV1GKTZorGJQivK6XLCoGwpnyJFbJVK/aTBQUxOCaa/GlFAAN3OTDFcb7h5tiFG+YXCO2By+riZw==", "dev": true }, "@types/parse-json": { @@ -754,9 +753,9 @@ "dev": true }, "acorn": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", - "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "version": "8.7.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.0.tgz", + "integrity": "sha512-V/LGr1APy+PXIwKebEWrkZPwoeoF+w1jiOBUmuxuiUIaOHtob8Qc9BTrYo7VuI5fR8tqsy+buA2WFooR5olqvQ==", "dev": true }, "acorn-import-assertions": { @@ -853,15 +852,15 @@ } }, "browserslist": { - "version": "4.17.4", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.17.4.tgz", - "integrity": "sha512-Zg7RpbZpIJRW3am9Lyckue7PLytvVxxhJj1CaJVlCWENsGEAOlnlt8X0ZxGRPp7Bt9o8tIRM5SEXy4BCPMJjLQ==", + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz", + "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001265", - "electron-to-chromium": "^1.3.867", + "caniuse-lite": "^1.0.30001286", + "electron-to-chromium": "^1.4.17", "escalade": "^3.1.1", - "node-releases": "^2.0.0", + "node-releases": "^2.0.1", "picocolors": "^1.0.0" } }, @@ -883,9 +882,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001267", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001267.tgz", - "integrity": "sha512-r1mjTzAuJ9W8cPBGbbus8E0SKcUP7gn03R14Wk8FlAlqhH9hroy9nLqmpuXlfKEw/oILW+FGz47ipXV2O7x8lg==", + "version": "1.0.30001293", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001293.tgz", + "integrity": "sha512-A4I5fB8Kxo0p/H3aXlaOkBp9mD0GspKmXfWHXOzcl0iHLi07EEVJdJeQPT4Yv3/dffRnrwluYZyXvMjbr6WhIA==", "dev": true }, "canvg": { @@ -1030,9 +1029,9 @@ } }, "debug": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", - "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.3.tgz", + "integrity": "sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==", "dev": true, "requires": { "ms": "2.1.2" @@ -1051,9 +1050,9 @@ "dev": true }, "electron-to-chromium": { - "version": "1.3.868", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.868.tgz", - "integrity": "sha512-kZYCHqwJ1ctGrYDlOcWQH+/AftAm/KD4lEnLDNwS0kKwx1x6dU4zv+GuDjsPPOGn/2TjnKBaZjDyjXaoix0q/A==", + "version": "1.4.28", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.28.tgz", + "integrity": "sha512-Gzbf0wUtKfyPaqf0Plz+Ctinf9eQIzxEqBHwSvbGfeOm9GMNdLxyu1dNiCUfM+x6r4BE0xUJNh3Nmg9gfAtTmg==", "dev": true }, "end-of-stream": { @@ -1160,9 +1159,9 @@ }, "dependencies": { "estraverse": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", - "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", "dev": true } } @@ -1483,9 +1482,9 @@ "dev": true }, "jest-worker": { - "version": "27.2.5", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.2.5.tgz", - "integrity": "sha512-HTjEPZtcNKZ4LnhSp02NEH4vE+5OpJ0EsOWYvGQpHgUMLngydESAAMH5Wd/asPf29+XUDQZszxpLg1BkIIA2aw==", + "version": "27.4.5", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.4.5.tgz", + "integrity": "sha512-f2s8kEdy15cv9r7q4KkzGXvlY0JTcmCbMHZBfSQDwW77REr45IDWwd0lksDFeVHH2jJ5pqb90T77XscrjeGzzg==", "dev": true, "requires": { "@types/node": "*", @@ -1596,18 +1595,18 @@ } }, "mime-db": { - "version": "1.50.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.50.0.tgz", - "integrity": "sha512-9tMZCDlYHqeERXEHO9f/hKfNXhre5dK2eE/krIvUjZbS2KPcqGDfNShIWS1uW9XOTKQKqK6qbeOci18rbfW77A==", + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz", + "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==", "dev": true }, "mime-types": { - "version": "2.1.33", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.33.tgz", - "integrity": "sha512-plLElXp7pRDd0bNZHw+nMd52vRYjLwQjygaNg7ddJ2uJtTlmnTCjWuPKxVu6//AdaRuME84SvLW91sIkBqGT0g==", + "version": "2.1.34", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz", + "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==", "dev": true, "requires": { - "mime-db": "1.50.0" + "mime-db": "1.51.0" } }, "mimic-fn": { @@ -1669,9 +1668,9 @@ "dev": true }, "node-releases": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.0.tgz", - "integrity": "sha512-aA87l0flFYMzCHpTM3DERFSYxc6lv/BltdbRTOMZuxZ0cwZCD3mejE5n9vLhSJCN++/eOqr77G1IO5uXxlQYWA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz", + "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==", "dev": true }, "npm-run-path": { @@ -2172,9 +2171,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.20", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", - "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -2215,9 +2214,9 @@ "dev": true }, "terser": { - "version": "5.9.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", - "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz", + "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==", "dev": true, "requires": { "commander": "^2.20.0", @@ -2234,13 +2233,12 @@ } }, "terser-webpack-plugin": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.2.4.tgz", - "integrity": "sha512-E2CkNMN+1cho04YpdANyRrn8CyN4yMy+WdFKZIySFZrGXZxJwJP6PMNGGc/Mcr6qygQHUUqRxnAPmi0M9f00XA==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.0.tgz", + "integrity": "sha512-LPIisi3Ol4chwAaPP8toUJ3L4qCM1G0wao7L3qNv57Drezxj6+VEyySpPw4B1HSO2Eg/hDY/MNF5XihCAoqnsQ==", "dev": true, "requires": { - "jest-worker": "^27.0.6", - "p-limit": "^3.1.0", + "jest-worker": "^27.4.1", "schema-utils": "^3.1.1", "serialize-javascript": "^6.0.0", "source-map": "^0.6.1", @@ -2284,15 +2282,15 @@ } }, "typescript": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", - "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.5.4.tgz", + "integrity": "sha512-VgYs2A2QIRuGphtzFV7aQJduJ2gyfTljngLzjpfW9FoYZF6xuw1W0vW9ghCKLfcWrCFxK81CSGRAvS1pn4fIUg==", "dev": true }, "uglify-js": { - "version": "3.14.2", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.2.tgz", - "integrity": "sha512-rtPMlmcO4agTUfz10CbgJ1k6UAoXM2gWb3GoMPPZB/+/Ackf8lNWk11K4rYi2D0apgoFRLtQOZhb+/iGNJq26A==", + "version": "3.14.5", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.14.5.tgz", + "integrity": "sha512-qZukoSxOG0urUTvjc2ERMTcAy+BiFh3weWAkeurLwjrCba73poHmG3E36XEjd/JGukMzwTL7uCxZiAexj8ppvQ==", "dev": true, "optional": true }, @@ -2340,16 +2338,10 @@ } } }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "watchpack": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.2.0.tgz", - "integrity": "sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.3.1.tgz", + "integrity": "sha512-x0t0JuydIo8qCNctdDrn1OzH/qDzk2+rdCOC3YzumZ42fiMqmQ7T3xQurykYMhYfHaPHTp4ZxAx2NfUo1K6QaA==", "dev": true, "requires": { "glob-to-regexp": "^0.4.1", @@ -2357,9 +2349,9 @@ } }, "webpack": { - "version": "5.58.2", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.58.2.tgz", - "integrity": "sha512-3S6e9Vo1W2ijk4F4PPWRIu6D/uGgqaPmqw+av3W3jLDujuNkdxX5h5c+RQ6GkjVR+WwIPOfgY8av+j5j4tMqJw==", + "version": "5.65.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.65.0.tgz", + "integrity": "sha512-Q5or2o6EKs7+oKmJo7LaqZaMOlDWQse9Tm5l1WAfU/ujLGN5Pb0SqGeVkN/4bpPmEqEP5RnVhiqsOtWtUVwGRw==", "dev": true, "requires": { "@types/eslint-scope": "^3.7.0", @@ -2384,14 +2376,14 @@ "schema-utils": "^3.1.0", "tapable": "^2.1.1", "terser-webpack-plugin": "^5.1.3", - "watchpack": "^2.2.0", - "webpack-sources": "^3.2.0" + "watchpack": "^2.3.1", + "webpack-sources": "^3.2.2" } }, "webpack-cli": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.0.tgz", - "integrity": "sha512-n/jZZBMzVEl4PYIBs+auy2WI0WTQ74EnJDiyD98O2JZY6IVIHJNitkYp/uTXOviIOMfgzrNvC9foKv/8o8KSZw==", + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-4.9.1.tgz", + "integrity": "sha512-JYRFVuyFpzDxMDB+v/nanUdQYcZtqFPGzmlW4s+UkPMFhSpfRNmf1z4AwYcHJVdvEFAM7FFCQdNTpsBYhDLusQ==", "dev": true, "requires": { "@discoveryjs/json-ext": "^0.5.0", @@ -2405,7 +2397,6 @@ "import-local": "^3.0.2", "interpret": "^2.2.0", "rechoir": "^0.7.0", - "v8-compile-cache": "^2.2.0", "webpack-merge": "^5.7.3" }, "dependencies": { @@ -2457,9 +2448,9 @@ } }, "webpack-sources": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.1.tgz", - "integrity": "sha512-t6BMVLQ0AkjBOoRTZgqrWm7xbXMBzD+XDq2EZ96+vMfn3qKgsvdXZhbPZ4ElUOpdv4u+iiGe+w3+J75iy/bYGA==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.2.tgz", + "integrity": "sha512-cp5qdmHnu5T8wRg2G3vZZHoJPN14aqQ89SyQ11NpGH5zEMDCclt49rzo+MaRazk7/UeILhAI+/sEtcM+7Fr0nw==", "dev": true }, "which": { diff --git a/package.json b/package.json index 2787bb4..276ebaf 100644 --- a/package.json +++ b/package.json @@ -2,18 +2,19 @@ "scripts": { "old-build": "tsc -p tsconfig.json && cp -r ./src ./dist", "package": "sh ./package.sh", - "build": "webpack" + "build": "webpack", + "local-deploy": "npm run package && sh ./local-deploy.sh" }, "version": "1.0.4", "devDependencies": { - "@league-of-foundry-developers/foundry-vtt-types": "0.8.8-8", + "@league-of-foundry-developers/foundry-vtt-types": "0.8.9-9", "husky": "4.3.7", "prettier": "2.2.1", "pretty-quick": "3.1.0", - "typescript": "4.3.5", + "typescript": "4.5.4", "ts-loader": "9.2.6", - "webpack": "5.58.2", - "webpack-cli": "4.9.0" + "webpack": "5.65.0", + "webpack-cli": "4.9.1" }, "husky": { "hooks": { diff --git a/package.sh b/package.sh index 859e47f..433b50b 100644 --- a/package.sh +++ b/package.sh @@ -1,6 +1,5 @@ +rm -fr dist npm run build -mkdir -p ./dist/lang -mkdir -p ./dist/styles -cp ./lang/* ./dist/lang/ -cp ./styles/* ./dist/styles/ -cp module.json ./dist/module.json \ No newline at end of file +cp -r $MODULE_DIRS dist/ +export MODULE_VERSION=$(jq ".version" package.json | sed -r 's/["]+//g') +envsubst '${MODULE_VERSION}' < ./module.json > ./dist/module.json diff --git a/src/constants.ts b/src/constants.ts index 304554a..dd738c1 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -1,6 +1,8 @@ export const i18n = () => (game).i18n; export const i18nLocalize = (id: string) => i18n().localize(id); export const i18nFormat = (id: string, data?: any) => i18n().format(id, data); +export const user = () => (game).user; +export const isGM = () => user()?.isGM ?? false; export const TEXT_SIZE = 8; export const LABEL_SIZE = 6; diff --git a/src/main.ts b/src/main.ts index 2b05b6e..4b3cddf 100644 --- a/src/main.ts +++ b/src/main.ts @@ -4,7 +4,13 @@ import { Row } from './elements/row'; import { Image } from './elements/image'; import { Box } from './elements/box'; import { Util } from './util'; -import { i18nLocalize, LABEL_SIZE, MARGINS, TEXT_SIZE } from './constants'; +import { + i18nLocalize, + isGM, + LABEL_SIZE, + MARGINS, + TEXT_SIZE, +} from './constants'; import { ItemData } from '@league-of-foundry-developers/foundry-vtt-types/src/foundry/common/data/data.mjs'; import { LabelledValues } from './elements/labelled-values'; import { Text } from './elements/text'; @@ -13,633 +19,27 @@ import { Column } from './elements/column'; import { Separator } from './elements/separator'; import { Blank } from './elements/blank'; +Hooks.on('getActorDirectoryEntryContext', async (_, options) => { + options.push({ + name: i18nLocalize('WFRP4SHEETPRINT.export.pdf'), + condition: isGM(), + icon: '', + callback: async (target) => { + const actor: Actor & any = (game).actors.get( + target.attr('data-document-id') + ); + await generatePdf(actor); + }, + }); +}); + Hooks.on( 'renderActorSheetWfrp4eCharacter', async (app: ActorSheet, html: JQuery) => { const actor: Actor & any = app.actor; - const actorData = actor.data; - // @ts-ignore - const actorDetails = actorData.data.details; - const actorStatus = actorData.data.status; - const actorCharacs = actor.characteristics; - const actorImage = actor.img; - let actorImageData: string | null = null; - if (actorImage != null) { - const texture = await loadTexture(actorImage); - actorImageData = ImageHelper.textureToImage(texture); - } - const currentCareer: Item & any = actor.currentCareer; - const careerData: ItemData = currentCareer?.data; - const careerDetail: any = careerData?.data; - addActorSheetActionButton(html, 'print', () => { - const docBuilder = new PdfBuilder({ - orientation: 'p', - unit: 'mm', - }); - const labelledRowHeight = - Util.getHeightFromPx(docBuilder.doc, TEXT_SIZE + LABEL_SIZE) + 1; - - const skills = new LabelledValues( - 0, - 0, - actor.itemCategories.skill - .map((item) => { - return { - label: `${item.name} (${i18nLocalize( - item.characteristic.abrev - )})`, - value: item.data.data.total.value, - }; - }) - .sort((a, b) => a.label.localeCompare(b.label)) - ); - - const talents = new LabelledValues( - 0, - 0, - actor.itemCategories.talent - .map((item) => { - return { - label: - item.data.data.tests.value.length > 0 - ? `${item.name} : ${item.data.data.tests.value}` - : item.name, - value: item.data.data.advances.value, - }; - }) - .sort((a, b) => a.label.localeCompare(b.label)), - 1, - true - ); - - const traits = new Texts( - 0, - 0, - actor.itemCategories.trait - .map((item) => { - return item.name; - }) - .sort((a, b) => a.localeCompare(b)), - 4 - ); - - const weaponsMelee = new Texts( - 0, - 0, - Util.getActorItems(actor, 'weapon') - .filter((w) => w.isMelee) - .map((item) => { - return `${item.name} : ${item.WeaponGroup}, ${item.Reach}, ${ - item.data.data.damage.meleeValue - } (${item.mountDamage}), ${item.OriginalQualities.concat( - item.OriginalFlaws - ).join(', ')}`; - }) - .sort((a, b) => a.localeCompare(b)), - 1, - true - ); - - const weaponsRanged = new Texts( - 0, - 0, - Util.getActorItems(actor, 'weapon') - .filter((w) => w.isRanged) - .map((item) => { - return `${item.name} : ${item.WeaponGroup}, ${ - item.data.data.range.value - } (${item.Range}), ${item.data.data.damage.rangedValue} (${ - item.Damage - }), ${item.OriginalQualities.concat(item.OriginalFlaws).join( - ', ' - )}`; - }) - .sort((a, b) => a.localeCompare(b)), - 1, - true - ); - - const ammunitions = new Texts( - 0, - 0, - Util.getActorItems(actor, 'ammunition') - .map((item) => { - return `${item.data.data.quantity.value} ${item.name} : ${ - item.data.data.range.value.length > 0 - ? item.data.data.range.value - : 'As Weapon' - }, ${ - item.data.data.damage.value.length > 0 - ? item.data.data.damage.value - : '+0' - }, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`; - }) - .sort((a, b) => a.localeCompare(b)), - 2, - true - ); - - const armourLocation: string[] = []; - const armourLabels: { [key: string]: string[] } = {}; - for (const armour of Util.getActorItems(actor, 'armour')) { - const maxAp = armour.data.data.maxAP; - for (const key of Object.keys(maxAp)) { - if (maxAp[key] > 0) { - if (!armourLocation.includes(key)) { - armourLocation.push(key); - } - if (armourLabels[key] == null) { - armourLabels[key] = []; - } - armourLabels[key].push( - `${armour.name} ${maxAp[key]} ${armour.OriginalQualities.concat( - armour.OriginalFlaws - ).join(' ')}` - ); - } - } - } - - const armours = new Texts( - 0, - 0, - armourLocation.map((al) => { - return `${actorStatus?.armour[al]?.label} : ${armourLabels[al]?.join( - ', ' - )}`; - }), - 1, - true - ); - - const petty = new Texts( - 0, - 0, - actor.itemCategories.spell - .filter((s) => s.lore.value === 'petty') - .map((s) => { - return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}`; - }), - 2, - true - ); - - const spell = new Texts( - 0, - 0, - actor.itemCategories.spell - .filter((s) => s.lore.value !== 'petty') - .map((s) => { - return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}, ${s.ingredientList.length}`; - }), - 2, - true - ); - - const blessing = new Texts( - 0, - 0, - actor.itemCategories.prayer - .filter((s) => s.prayerType.value === 'blessing') - .map((s) => { - return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; - }), - 2, - true - ); - - const miracle = new Texts( - 0, - 0, - actor.itemCategories.prayer - .filter((s) => s.prayerType.value !== 'blessing') - .map((s) => { - return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; - }), - 2, - true - ); - - const allMoney = Util.getActorItems(actor, 'money'); - const moneyNames: string[] = []; - const moneyByName: { [name: string]: number } = {}; - for (const money of allMoney) { - if (!moneyNames.includes(money.name)) { - moneyNames.push(money.name); - } - if (moneyByName[money.name] == null) { - moneyByName[money.name] = 0; - } - moneyByName[money.name] = - moneyByName[money.name] + money.quantity.value; - } - - const trappingsHeader = new Texts( - 0, - 0, - [ - `${i18nLocalize('Trappings')} : ${i18nLocalize( - 'Money' - )} : ${moneyNames - .map((m) => { - return `${m} : ${moneyByName[m]}`; - }) - .join(', ')}`, - ], - 1, - true - ); - - const trappings = new Texts( - 0, - 0, - Util.getAllActorItems(actor, ['container', 'trapping']) - .map((t) => { - const location = t.location.value; - let prefix = ''; - if (location != null && location !== 0) { - prefix = `${actor.getEmbeddedDocument('Item', location).name} : `; - } - const qteLabel = t.quantity.value > 1 ? `${t.quantity.value} ` : ''; - return `${prefix}${qteLabel}${t.name}`; - }) - .sort((a, b) => a.localeCompare(b)), - 4, - true - ); - - const critical = new Texts( - 0, - 0, - actor.itemCategories.critical.map((i) => { - return i.name; - }), - 3 - ); - - const disease = new Texts( - 0, - 0, - actor.itemCategories.disease.map((i) => { - return i.name; - }), - 3 - ); - - const injury = new Texts( - 0, - 0, - actor.itemCategories.injury.map((i) => { - return i.name; - }), - 3 - ); - - const mutationP = new Texts( - 0, - 0, - actor.itemCategories.mutation - .filter((i) => i.mutationType.value === 'physical') - .map((i) => { - return i.name; - }), - 3 - ); - - const mutationM = new Texts( - 0, - 0, - actor.itemCategories.mutation - .filter((i) => i.mutationType.value === 'mental') - .map((i) => { - return i.name; - }), - 3 - ); - - const psychology = new Texts( - 0, - 0, - actor.itemCategories.psychology.map((i) => { - return i.name; - }), - 3 - ); - - const imageWidth = 25; - const imageY = labelledRowHeight + MARGINS.top + 2; - const actorImageElement = - actorImageData != null - ? new Image(0, imageY, imageWidth, imageWidth, actorImageData) - : new Box(0, imageY, imageWidth, imageWidth); - - docBuilder.build([ - actorImageElement, - new Column(0, 0, [ - new Row(0, 0, [ - new LabelledText(0, 0, 'Name', `${actor.name}`), - new LabelledText( - 0, - 0, - 'Species', - `${actorDetails?.species?.value}` - ), - new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`), - ]), - new Row(imageWidth + MARGINS.left + 1, 0, [ - new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`), - new LabelledText( - 0, - 0, - 'Career Group', - `${careerDetail?.careergroup?.value}` - ), - new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), - ]), - new Row(imageWidth + MARGINS.left + 1, 0, [ - new LabelledText(0, 0, 'Status', `${actorDetails?.status?.value}`), - new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`), - new LabelledText(0, 0, 'Height', `${actorDetails?.height?.value}`), - new LabelledText(0, 0, 'Weight', `${actorDetails?.weight?.value}`), - new LabelledText( - 0, - 0, - 'Hair Colour', - `${actorDetails?.haircolour?.value}` - ), - ]), - new Row(imageWidth + MARGINS.left + 1, 0, [ - new LabelledText( - 0, - 0, - 'Eye Colour', - `${actorDetails?.eyecolour?.value}` - ), - new LabelledText( - 0, - 0, - 'Distinguishing Mark', - `${actorDetails?.distinguishingmark?.value}` - ), - new LabelledText( - 0, - 0, - 'Star Sign', - `${actorDetails?.starsign?.value}` - ), - ]), - Blank.heightBlank(2), - new Row(0, 0, [ - new LabelledText( - 0, - 0, - 'CHARAbbrev.WS', - `${actorCharacs?.ws?.value}` - ), - new LabelledText( - 0, - 0, - 'CHARAbbrev.BS', - `${actorCharacs?.bs?.value}` - ), - new LabelledText(0, 0, 'CHARAbbrev.S', `${actorCharacs?.s?.value}`), - new LabelledText(0, 0, 'CHARAbbrev.T', `${actorCharacs?.t?.value}`), - new LabelledText(0, 0, 'CHARAbbrev.I', `${actorCharacs?.i?.value}`), - new LabelledText( - 0, - 0, - 'CHARAbbrev.Ag', - `${actorCharacs?.ag?.value}` - ), - new LabelledText( - 0, - 0, - 'CHARAbbrev.Dex', - `${actorCharacs?.dex?.value}` - ), - new LabelledText( - 0, - 0, - 'CHARAbbrev.Int', - `${actorCharacs?.int?.value}` - ), - new LabelledText( - 0, - 0, - 'CHARAbbrev.WP', - `${actorCharacs?.wp?.value}` - ), - new LabelledText( - 0, - 0, - 'CHARAbbrev.Fel', - `${actorCharacs?.fel?.value}` - ), - ]), - new Row(0, 0, [ - new LabelledText(0, 0, 'Move', `${actorDetails?.move?.value}`), - new LabelledText(0, 0, 'Walk', `${actorDetails?.move?.walk}`), - new LabelledText(0, 0, 'Run', `${actorDetails?.move?.run}`), - new LabelledText(0, 0, 'Fortune', `${actorStatus?.fortune?.value}`), - new LabelledText(0, 0, 'Fate', `${actorStatus?.fate?.value}`), - new LabelledText(0, 0, 'Resolve', `${actorStatus?.resolve?.value}`), - new LabelledText( - 0, - 0, - 'Resilience', - `${actorStatus?.resilience?.value}` - ), - new LabelledText( - 0, - 0, - 'Wounds', - `${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}` - ), - ]), - new Separator(0, 0), - new Text(0, 0, 'Skills'), - skills, - new Separator(0, 0), - new Text( - 0, - 0, - `${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}` - ), - talents, - traits.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - traits.elements.length > 0 - ? new Text(0, 0, 'Traits') - : Blank.heightBlank(0), - traits, - weaponsMelee.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - weaponsMelee.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize( - 'Weapon Group' - )}, ${i18nLocalize('Reach')}, ${i18nLocalize( - 'Damage' - )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` - ) - : Blank.heightBlank(0), - weaponsMelee, - weaponsRanged.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - weaponsRanged.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize( - 'Weapon Group' - )}, ${i18nLocalize('Range')}, ${i18nLocalize( - 'Damage' - )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` - ) - : Blank.heightBlank(0), - weaponsRanged, - ammunitions.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - ammunitions.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('Ammunition')} : ${i18nLocalize( - 'Range' - )}, ${i18nLocalize('Damage')}, ${i18nLocalize( - 'Qualities' - )}, ${i18nLocalize('Flaws')}` - ) - : Blank.heightBlank(0), - ammunitions, - armours.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - armours.elements.length > 0 - ? new Text(0, 0, 'Armour') - : Blank.heightBlank(0), - armours, - petty.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - petty.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize( - 'Casting Number' - )}, ${i18nLocalize('Range')}, ${i18nLocalize( - 'Target' - )}, ${i18nLocalize('Duration')}` - ) - : Blank.heightBlank(0), - petty, - spell.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - spell.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize( - 'Casting Number' - )}, ${i18nLocalize('Range')}, ${i18nLocalize( - 'Target' - )}, ${i18nLocalize('Duration')}, ${i18nLocalize( - 'WFRP4E.TrappingType.Ingredients' - )}` - ) - : Blank.heightBlank(0), - spell, - blessing.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - blessing.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('Blessing')} : ${i18nLocalize( - 'Range' - )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` - ) - : Blank.heightBlank(0), - blessing, - miracle.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - miracle.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('Miracle')} : ${i18nLocalize( - 'Range' - )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` - ) - : Blank.heightBlank(0), - miracle, - new Separator(0, 0), - trappingsHeader, - trappings, - psychology.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - psychology.elements.length > 0 - ? new Text(0, 0, 'Psychology') - : Blank.heightBlank(0), - psychology, - critical.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - critical.elements.length > 0 - ? new Text(0, 0, 'Criticals') - : Blank.heightBlank(0), - critical, - disease.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - disease.elements.length > 0 - ? new Text(0, 0, 'Diseases') - : Blank.heightBlank(0), - disease, - injury.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - injury.elements.length > 0 - ? new Text(0, 0, 'Injuries') - : Blank.heightBlank(0), - injury, - mutationP.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - mutationP.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})` - ) - : Blank.heightBlank(0), - mutationP, - mutationM.elements.length > 0 - ? new Separator(0, 0) - : Blank.heightBlank(0), - mutationM.elements.length > 0 - ? new Text( - 0, - 0, - `${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})` - ) - : Blank.heightBlank(0), - mutationM, - ]), - ]); - docBuilder.doc.save(`${app.actor.name}.pdf`); + addActorSheetActionButton(html, 'print', async () => { + await generatePdf(actor); }); } ); @@ -659,3 +59,555 @@ function addActorSheetActionButton( const title = header.find('.window-title'); title.after(button); } + +async function generatePdf(actor: Actor & any) { + const actorData = actor.data; + // @ts-ignore + const actorDetails = actorData.data.details; + const actorStatus = actorData.data.status; + const actorCharacs = actor.characteristics; + const actorImage = actor.img; + let actorImageData: string | null = null; + if (actorImage != null) { + const texture = await loadTexture(actorImage); + actorImageData = ImageHelper.textureToImage(texture); + } + const currentCareer: Item & any = actor.currentCareer; + const careerData: ItemData = currentCareer?.data; + const careerDetail: any = careerData?.data; + + const docBuilder = new PdfBuilder({ + orientation: 'p', + unit: 'mm', + }); + + const labelledRowHeight = + Util.getHeightFromPx(docBuilder.doc, TEXT_SIZE + LABEL_SIZE) + 1; + + const skills = new LabelledValues( + 0, + 0, + actor.itemCategories.skill + .map((item) => { + return { + label: `${item.name} (${i18nLocalize(item.characteristic.abrev)})`, + value: item.data.data.total.value, + }; + }) + .sort((a, b) => a.label.localeCompare(b.label)) + ); + + const talents = new LabelledValues( + 0, + 0, + actor.itemCategories.talent + .map((item) => { + return { + label: + item.data.data.tests.value.length > 0 + ? `${item.name} : ${item.data.data.tests.value}` + : item.name, + value: item.data.data.advances.value, + }; + }) + .sort((a, b) => a.label.localeCompare(b.label)), + 1, + true + ); + + const traits = new Texts( + 0, + 0, + actor.itemCategories.trait + .map((item) => { + return item.name; + }) + .sort((a, b) => a.localeCompare(b)), + 4 + ); + + const weaponsMelee = new Texts( + 0, + 0, + Util.getActorItems(actor, 'weapon') + .filter((w) => w.isMelee) + .map((item) => { + return `${item.name} : ${item.WeaponGroup}, ${item.Reach}, ${ + item.data.data.damage.meleeValue + } (${item.mountDamage}), ${item.OriginalQualities.concat( + item.OriginalFlaws + ).join(', ')}`; + }) + .sort((a, b) => a.localeCompare(b)), + 1, + true + ); + + const weaponsRanged = new Texts( + 0, + 0, + Util.getActorItems(actor, 'weapon') + .filter((w) => w.isRanged) + .map((item) => { + return `${item.name} : ${item.WeaponGroup}, ${ + item.data.data.range.value + } (${item.Range}), ${item.data.data.damage.rangedValue} (${ + item.Damage + }), ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`; + }) + .sort((a, b) => a.localeCompare(b)), + 1, + true + ); + + const ammunitions = new Texts( + 0, + 0, + Util.getActorItems(actor, 'ammunition') + .map((item) => { + return `${item.data.data.quantity.value} ${item.name} : ${ + item.data.data.range.value.length > 0 + ? item.data.data.range.value + : 'As Weapon' + }, ${ + item.data.data.damage.value.length > 0 + ? item.data.data.damage.value + : '+0' + }, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`; + }) + .sort((a, b) => a.localeCompare(b)), + 2, + true + ); + + const armourLocation: string[] = []; + const armourLabels: { [key: string]: string[] } = {}; + for (const armour of Util.getActorItems(actor, 'armour')) { + const maxAp = armour.data.data.maxAP; + for (const key of Object.keys(maxAp)) { + if (maxAp[key] > 0) { + if (!armourLocation.includes(key)) { + armourLocation.push(key); + } + if (armourLabels[key] == null) { + armourLabels[key] = []; + } + armourLabels[key].push( + `${armour.name} ${maxAp[key]} ${armour.OriginalQualities.concat( + armour.OriginalFlaws + ).join(' ')}` + ); + } + } + } + + const armours = new Texts( + 0, + 0, + armourLocation.map((al) => { + return `${actorStatus?.armour[al]?.label} : ${armourLabels[al]?.join( + ', ' + )}`; + }), + 1, + true + ); + + const petty = new Texts( + 0, + 0, + actor.itemCategories.spell + .filter((s) => s.lore.value === 'petty') + .map((s) => { + return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}`; + }), + 2, + true + ); + + const spell = new Texts( + 0, + 0, + actor.itemCategories.spell + .filter((s) => s.lore.value !== 'petty') + .map((s) => { + return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}, ${s.ingredientList.length}`; + }), + 2, + true + ); + + const blessing = new Texts( + 0, + 0, + actor.itemCategories.prayer + .filter((s) => s.prayerType.value === 'blessing') + .map((s) => { + return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; + }), + 2, + true + ); + + const miracle = new Texts( + 0, + 0, + actor.itemCategories.prayer + .filter((s) => s.prayerType.value !== 'blessing') + .map((s) => { + return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`; + }), + 2, + true + ); + + const allMoney = Util.getActorItems(actor, 'money'); + const moneyNames: string[] = []; + const moneyByName: { [name: string]: number } = {}; + for (const money of allMoney) { + if (!moneyNames.includes(money.name)) { + moneyNames.push(money.name); + } + if (moneyByName[money.name] == null) { + moneyByName[money.name] = 0; + } + moneyByName[money.name] = moneyByName[money.name] + money.quantity.value; + } + + const trappingsHeader = new Texts( + 0, + 0, + [ + `${i18nLocalize('Trappings')} : ${i18nLocalize('Money')} : ${moneyNames + .map((m) => { + return `${m} : ${moneyByName[m]}`; + }) + .join(', ')}`, + ], + 1, + true + ); + + const trappings = new Texts( + 0, + 0, + Util.getAllActorItems(actor, ['container', 'trapping']) + .map((t) => { + const location = t.location.value; + let prefix = ''; + if (location != null && location !== 0) { + prefix = `${actor.getEmbeddedDocument('Item', location).name} : `; + } + const qteLabel = t.quantity.value > 1 ? `${t.quantity.value} ` : ''; + return `${prefix}${qteLabel}${t.name}`; + }) + .sort((a, b) => a.localeCompare(b)), + 4, + true + ); + + const critical = new Texts( + 0, + 0, + actor.itemCategories.critical.map((i) => { + return i.name; + }), + 3 + ); + + const disease = new Texts( + 0, + 0, + actor.itemCategories.disease.map((i) => { + return i.name; + }), + 3 + ); + + const injury = new Texts( + 0, + 0, + actor.itemCategories.injury.map((i) => { + return i.name; + }), + 3 + ); + + const mutationP = new Texts( + 0, + 0, + actor.itemCategories.mutation + .filter((i) => i.mutationType.value === 'physical') + .map((i) => { + return i.name; + }), + 3 + ); + + const mutationM = new Texts( + 0, + 0, + actor.itemCategories.mutation + .filter((i) => i.mutationType.value === 'mental') + .map((i) => { + return i.name; + }), + 3 + ); + + const psychology = new Texts( + 0, + 0, + actor.itemCategories.psychology.map((i) => { + return i.name; + }), + 3 + ); + + const imageWidth = 25; + const imageY = labelledRowHeight + MARGINS.top + 2; + const actorImageElement = + actorImageData != null + ? new Image(0, imageY, imageWidth, imageWidth, actorImageData) + : new Box(0, imageY, imageWidth, imageWidth); + + docBuilder.build([ + actorImageElement, + new Column(0, 0, [ + new Row(0, 0, [ + new LabelledText(0, 0, 'Name', `${actor.name}`), + new LabelledText(0, 0, 'Species', `${actorDetails?.species?.value}`), + new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`), + ]), + new Row(imageWidth + MARGINS.left + 1, 0, [ + new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`), + new LabelledText( + 0, + 0, + 'Career Group', + `${careerDetail?.careergroup?.value}` + ), + new LabelledText(0, 0, 'Career', `${currentCareer?.name}`), + ]), + new Row(imageWidth + MARGINS.left + 1, 0, [ + new LabelledText(0, 0, 'Status', `${actorDetails?.status?.value}`), + new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`), + new LabelledText(0, 0, 'Height', `${actorDetails?.height?.value}`), + new LabelledText(0, 0, 'Weight', `${actorDetails?.weight?.value}`), + new LabelledText( + 0, + 0, + 'Hair Colour', + `${actorDetails?.haircolour?.value}` + ), + ]), + new Row(imageWidth + MARGINS.left + 1, 0, [ + new LabelledText( + 0, + 0, + 'Eye Colour', + `${actorDetails?.eyecolour?.value}` + ), + new LabelledText( + 0, + 0, + 'Distinguishing Mark', + `${actorDetails?.distinguishingmark?.value}` + ), + new LabelledText(0, 0, 'Star Sign', `${actorDetails?.starsign?.value}`), + ]), + Blank.heightBlank(2), + new Row(0, 0, [ + new LabelledText(0, 0, 'CHARAbbrev.WS', `${actorCharacs?.ws?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.BS', `${actorCharacs?.bs?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.S', `${actorCharacs?.s?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.T', `${actorCharacs?.t?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.I', `${actorCharacs?.i?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.Ag', `${actorCharacs?.ag?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.Dex', `${actorCharacs?.dex?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.Int', `${actorCharacs?.int?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.WP', `${actorCharacs?.wp?.value}`), + new LabelledText(0, 0, 'CHARAbbrev.Fel', `${actorCharacs?.fel?.value}`), + ]), + new Row(0, 0, [ + new LabelledText(0, 0, 'Move', `${actorDetails?.move?.value}`), + new LabelledText(0, 0, 'Walk', `${actorDetails?.move?.walk}`), + new LabelledText(0, 0, 'Run', `${actorDetails?.move?.run}`), + new LabelledText(0, 0, 'Fortune', `${actorStatus?.fortune?.value}`), + new LabelledText(0, 0, 'Fate', `${actorStatus?.fate?.value}`), + new LabelledText(0, 0, 'Resolve', `${actorStatus?.resolve?.value}`), + new LabelledText( + 0, + 0, + 'Resilience', + `${actorStatus?.resilience?.value}` + ), + new LabelledText( + 0, + 0, + 'Wounds', + `${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}` + ), + ]), + new Separator(0, 0), + new Text(0, 0, 'Skills'), + skills, + new Separator(0, 0), + new Text(0, 0, `${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}`), + talents, + traits.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + traits.elements.length > 0 + ? new Text(0, 0, 'Traits') + : Blank.heightBlank(0), + traits, + weaponsMelee.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + weaponsMelee.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize( + 'Weapon Group' + )}, ${i18nLocalize('Reach')}, ${i18nLocalize( + 'Damage' + )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` + ) + : Blank.heightBlank(0), + weaponsMelee, + weaponsRanged.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + weaponsRanged.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize( + 'Weapon Group' + )}, ${i18nLocalize('Range')}, ${i18nLocalize( + 'Damage' + )}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}` + ) + : Blank.heightBlank(0), + weaponsRanged, + ammunitions.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + ammunitions.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('Ammunition')} : ${i18nLocalize( + 'Range' + )}, ${i18nLocalize('Damage')}, ${i18nLocalize( + 'Qualities' + )}, ${i18nLocalize('Flaws')}` + ) + : Blank.heightBlank(0), + ammunitions, + armours.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + armours.elements.length > 0 + ? new Text(0, 0, 'Armour') + : Blank.heightBlank(0), + armours, + petty.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + petty.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize( + 'Casting Number' + )}, ${i18nLocalize('Range')}, ${i18nLocalize( + 'Target' + )}, ${i18nLocalize('Duration')}` + ) + : Blank.heightBlank(0), + petty, + spell.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + spell.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize( + 'Casting Number' + )}, ${i18nLocalize('Range')}, ${i18nLocalize( + 'Target' + )}, ${i18nLocalize('Duration')}, ${i18nLocalize( + 'WFRP4E.TrappingType.Ingredients' + )}` + ) + : Blank.heightBlank(0), + spell, + blessing.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + blessing.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('Blessing')} : ${i18nLocalize( + 'Range' + )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` + ) + : Blank.heightBlank(0), + blessing, + miracle.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + miracle.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('Miracle')} : ${i18nLocalize( + 'Range' + )}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}` + ) + : Blank.heightBlank(0), + miracle, + new Separator(0, 0), + trappingsHeader, + trappings, + psychology.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + psychology.elements.length > 0 + ? new Text(0, 0, 'Psychology') + : Blank.heightBlank(0), + psychology, + critical.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + critical.elements.length > 0 + ? new Text(0, 0, 'Criticals') + : Blank.heightBlank(0), + critical, + disease.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + disease.elements.length > 0 + ? new Text(0, 0, 'Diseases') + : Blank.heightBlank(0), + disease, + injury.elements.length > 0 ? new Separator(0, 0) : Blank.heightBlank(0), + injury.elements.length > 0 + ? new Text(0, 0, 'Injuries') + : Blank.heightBlank(0), + injury, + mutationP.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + mutationP.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})` + ) + : Blank.heightBlank(0), + mutationP, + mutationM.elements.length > 0 + ? new Separator(0, 0) + : Blank.heightBlank(0), + mutationM.elements.length > 0 + ? new Text( + 0, + 0, + `${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})` + ) + : Blank.heightBlank(0), + mutationM, + ]), + ]); + docBuilder.doc.save(`${actor.name}.pdf`); +}